Skip to content

Commit b02fd91

Browse files
wanghan-iapcmHan Wang
andauthored
test(pt_expt): add .pt2 (AOTInductor) unit tests and bug fixes (#5334)
## Summary Comprehensive .pt2 test coverage for the pt_expt backend, plus bug fixes discovered during testing. ### Bug fixes - **Default fparam segfault**: When fparam is omitted on a model with `dim_fparam > 0`, the C++ and Python inference paths now substitute default values from metadata instead of passing a shape-mismatched tensor (which caused a segfault in AOTInductor) - **NoPBC negative coordinates**: Shift coordinates so minimum is at rcut before building the fake box, ensuring atoms with negative coordinates are properly handled by `copy_coord`/`build_nlist` - **CodeQL integer overflow**: Use `ptrdiff_t` for all operands in `fold_back` iterator arithmetic - **Custom op fallback**: Add missing `tabulate_fusion_se_t_tebd` Python fallback stub (all other tabulate ops had one) ### New Python tests - **Freeze**: `.pt2` freeze, `.pte` vs `.pt2` eval consistency, NoPBC with negative coords - **Default fparam**: Eval without fparam matches eval with explicit default value - **Compress**: Freeze → compress → `.pt2` output → DeepPot eval, `min_nbor_dist` roundtrip - **Finetune**: Train → freeze to `.pt2` → finetune from `.pt2`, with `--use-pretrain-script` - **Change-bias**: Change-bias on `.pt2` with data, user-defined values, `.pte`/`.pt2` consistency ### New C++ tests - **NoPBC atomic**: Verify atomic energy/virial for NoPBC path - **Multi-frame**: 2-frame PBC and NoPBC via `compute_mixed_type` - **Default fparam**: Internal nlist + external nlist (LAMMPS path) — eval without fparam matches eval with explicit default - **Parser/metadata**: Invalid ZIP/file errors, metadata accessors (type_map, cutoff, ntypes, dim_fparam/aparam, has_default_fparam), JSON type coverage across 3 models ### Refactoring - Extract common gen script helpers into `gen_common.py` (eliminates duplication across 5 scripts) - Use `CXX` env var instead of hardcoded compiler fallback list - Simplify custom op `.so` install in `test_cc_local.sh` ## Test plan - [x] All Python tests pass locally (CPU) - [x] All C++ tests pass locally (CPU) - [x] Python tests pass on GPU (freeze, finetune, change-bias) - [x] Compression tests skip gracefully when custom ops unavailable <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Models can include a default frame parameter used automatically during inference when none is provided. * Exported metadata now records default-frame-parameter data for frozen PT2 artifacts. * **Bug Fixes** * Inference now raises a clear error if a PT2 model requires a default frame parameter but none is available. * **Tests** * Expanded coverage for default-frame-parameter behavior, multi-frame/PT2 inference, per-atom outputs, freeze/load/eval, change-bias, finetune-from-PT2, and compression round-trips. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Han Wang <wang_han@iapcm.ac.cn>
1 parent d0cf8df commit b02fd91

31 files changed

+2935
-326
lines changed

deepmd/pt/cxx_op.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ def load_library(module_name: str) -> bool:
4242
module_file = (SHARED_LIB_DIR / (prefix + module_name)).with_suffix(ext).resolve()
4343

4444
if module_file.is_file():
45+
# Skip if this library was already loaded by torch.ops.load_library.
46+
if str(module_file) in torch.ops.loaded_libraries:
47+
return True
48+
# Skip if ops were already registered via C++ shared-library linkage
49+
# (e.g. LAMMPS plugin links libdeepmd_op_pt.so at the C++ level).
50+
# TORCH_LIBRARY(deepmd, m) in print_summary.cc registers "enable_mpi"
51+
# as the first op; if it's accessible, the library is already loaded.
52+
# Calling torch.ops.load_library again would abort() the process.
53+
if hasattr(torch.ops, "deepmd") and hasattr(torch.ops.deepmd, "enable_mpi"):
54+
return True
4555
try:
4656
torch.ops.load_library(module_file)
4757
except OSError as e:

deepmd/pt_expt/infer/deep_eval.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,18 @@ def _init_from_model_json(self, model_json_str: str) -> None:
131131

132132
def _load_pte(self, model_file: str) -> None:
133133
"""Load a .pte (torch.export) model file."""
134-
extra_files = {"model.json": "", "model_def_script.json": ""}
134+
extra_files = {
135+
"model.json": "",
136+
"model_def_script.json": "",
137+
"metadata.json": "",
138+
}
135139
exported = torch.export.load(model_file, extra_files=extra_files)
136140
self.exported_module = exported.module()
137141
self._init_from_model_json(extra_files["model.json"])
138142
mds = extra_files["model_def_script.json"]
139143
self._model_def_script = json.loads(mds) if mds else {}
144+
md = extra_files["metadata.json"]
145+
self.metadata = json.loads(md) if md else {}
140146

141147
def _load_pt2(self, model_file: str) -> None:
142148
"""Load a .pt2 (AOTInductor) model file."""
@@ -157,9 +163,13 @@ def _load_pt2(self, model_file: str) -> None:
157163
mds = ""
158164
if "extra/model_def_script.json" in names:
159165
mds = zf.read("extra/model_def_script.json").decode("utf-8")
166+
md = ""
167+
if "extra/metadata.json" in names:
168+
md = zf.read("extra/metadata.json").decode("utf-8")
160169

161170
self._init_from_model_json(model_json_str)
162171
self._model_def_script = json.loads(mds) if mds else {}
172+
self.metadata = json.loads(md) if md else {}
163173

164174
# Load the AOTInductor model package (.pt2 ZIP archive).
165175
# Uses torch._inductor.aoti_load_package (private API, stable since PyTorch 2.6).
@@ -612,6 +622,22 @@ def _eval_model(
612622
dtype=torch.float64,
613623
device=DEVICE,
614624
)
625+
elif self._is_pt2 and self.get_dim_fparam() > 0:
626+
# .pt2 models are compiled with fparam as a required input.
627+
# When the user omits fparam, fill with default values from metadata.
628+
default_fp = self.metadata.get("default_fparam")
629+
if default_fp is not None:
630+
fparam_t = (
631+
torch.tensor(default_fp, dtype=torch.float64, device=DEVICE)
632+
.unsqueeze(0)
633+
.expand(nframes, -1)
634+
.contiguous()
635+
)
636+
else:
637+
raise ValueError(
638+
f"fparam is required for this model (dim_fparam={self.get_dim_fparam()}) "
639+
"but was not provided, and no default_fparam is stored in the model."
640+
)
615641
else:
616642
fparam_t = None
617643

source/api_c/tests/test_deeppot_a_fparam_aparam_ptexpt.cc

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,48 +23,49 @@ class TestInferDeepPotAFParamAParamPtExptC : public ::testing::Test {
2323
float aparamf[6] = {0.25852028, 0.25852028, 0.25852028,
2424
0.25852028, 0.25852028, 0.25852028};
2525
// Same reference values as test_deeppot_a_fparam_aparam_ptexpt.cc (C++ API)
26+
// Generated from pre-committed fparam_aparam_default.pth
2627
std::vector<double> expected_e = {
27-
1.596836265688982293e-01, 1.596933624175455035e-01,
28-
1.596859462832928844e-01, 1.596779837732069107e-01,
29-
1.596776702807257142e-01, 1.596869048501883825e-01};
28+
-1.038271223729636539e-01, -7.285433579124989123e-02,
29+
-9.467600492266425860e-02, -1.467050207422957442e-01,
30+
-7.660561676973243195e-02, -7.277296000253175023e-02};
3031
std::vector<double> expected_f = {
31-
1.112134318320094352e-05, 1.085230789880272100e-04,
32-
9.298442641358874074e-07, 1.491517597320257530e-04,
33-
-1.250419527572717225e-05, -9.768265174690741028e-05,
34-
-5.021052645725073397e-05, -9.741678916887848341e-05,
35-
9.375317764392495572e-05, 8.664103999852425394e-05,
36-
-4.538513400016661465e-05, 8.561605116672722879e-05,
37-
-2.454811055475981441e-05, 1.079491454988312104e-04,
38-
-1.656974003674590440e-04, -1.721555059017403750e-04,
39-
-6.116610604208616705e-05, 8.308097903957835525e-05};
32+
6.622266941151369601e-02, 5.278739714221529489e-02,
33+
2.265728009692277028e-02, -2.606048291367509331e-02,
34+
-4.538812303131847109e-02, 1.058247419681241676e-02,
35+
1.679392617013223121e-01, -2.257826240741929533e-03,
36+
-4.490146347357203138e-02, -1.148364179422036724e-01,
37+
-1.169790528013799069e-02, 6.140403441496700837e-02,
38+
-8.078778123309421355e-02, -5.838879041789352825e-02,
39+
6.773641084621376263e-02, -1.247724902386305318e-02,
40+
6.494524782787665373e-02, -1.174787360813439457e-01};
4041
std::vector<double> expected_v = {
41-
-1.264062189119726106e-04, -1.636544077308309524e-05,
42-
4.453224130911556590e-05, -7.947403699519458518e-06,
43-
-4.603504987332719071e-05, 9.491045850088816000e-06,
44-
4.131028921467394082e-05, 9.691472468201876704e-06,
45-
-3.323572704427471520e-05, -1.024556912293147473e-04,
46-
5.530809120954559223e-06, 5.211030391191971272e-05,
47-
-3.851138686809524851e-06, 2.101414374153427902e-07,
48-
3.247573516972862344e-06, 4.561253716254950400e-05,
49-
-3.865680092083280590e-06, -3.262252150841829144e-05,
50-
-1.166788692566841262e-04, -1.814499890570940753e-05,
51-
2.155064011880968559e-05, -1.629918981392229854e-05,
52-
-3.245631268444005592e-05, 2.968538417601228937e-05,
53-
2.463149007223104176e-05, 3.660689861518736949e-05,
54-
-3.586518711234946879e-05, -1.424206401855391917e-04,
55-
-1.017840928263488617e-05, 1.421307534994552908e-05,
56-
-8.618294024757048886e-06, -2.192409332705383732e-05,
57-
3.461715847634955364e-05, 1.277625693457703254e-05,
58-
3.486479415793123331e-05, -5.604161168847292539e-05,
59-
-8.612844407008925294e-05, 2.508361660152536905e-06,
60-
-1.633895954532816838e-07, 1.903591783622687189e-06,
61-
-3.028341203071209831e-05, 4.685511271783763848e-05,
62-
2.876824509984768127e-06, 4.576515617130315025e-05,
63-
-7.108738780331672730e-05, -1.062354815105974551e-04,
64-
-2.954644717832223544e-05, 4.075640001084848793e-05,
65-
-3.138369091725678469e-05, -1.316088004849699161e-05,
66-
1.786389692843508954e-05, 4.579187321116929540e-05,
67-
1.869753034515593833e-05, -2.550749273395911822e-05};
42+
-1.589185601903579381e-01, 2.586167090689088510e-03,
43+
-1.575150812458056548e-04, -1.855360549216640564e-02,
44+
1.949822308966445150e-02, -1.006552178977542650e-02,
45+
3.177030388421490936e-02, 1.714350280402104215e-03,
46+
-1.290389705296313833e-03, -8.553511587973079699e-02,
47+
-5.654638208496251539e-03, -1.286955066237439882e-02,
48+
2.464156699303176462e-02, -2.398203243424212178e-02,
49+
-1.957110698882909630e-02, 2.233493653505165544e-02,
50+
6.107843889444162372e-03, 1.707076397717688723e-03,
51+
-1.653994136896924094e-01, 3.894358809712639147e-02,
52+
-2.169596032233910010e-02, 6.819702786556020371e-03,
53+
-5.018240707559744503e-03, 2.640663592968431426e-03,
54+
-1.985295554050418160e-03, -3.638422207618969423e-02,
55+
2.342932709960221863e-02, -8.501331666888653493e-02,
56+
-2.181253119706856591e-03, 4.311299629418858387e-03,
57+
-1.910329576491436726e-03, -1.808810428459609043e-03,
58+
-1.540075460017477360e-03, -1.173703527688202929e-02,
59+
-2.596307050960845741e-03, 6.705026635782097323e-03,
60+
-9.038454847872562370e-02, 3.011717694088476838e-02,
61+
-5.083053967307901710e-02, -2.951212926932282599e-03,
62+
2.342446057919112673e-02, -4.091208178777860222e-02,
63+
-1.648470670751139844e-02, -2.872262362355524484e-02,
64+
4.763925761561256522e-02, -8.300037376164930147e-02,
65+
1.020429200603871836e-03, -1.026734257188876599e-03,
66+
5.678534821710372327e-02, 1.273635858276599142e-02,
67+
-1.530143401888291177e-02, -1.061672032476311256e-01,
68+
-2.486859787145567074e-02, 2.875323543588798395e-02};
6869
int natoms;
6970
double expected_tot_e;
7071
std::vector<double> expected_tot_v;

source/api_cc/src/DeepPotPTExpt.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,15 @@ void DeepPotPTExpt::compute(ENERGYVTYPE& ener,
10081008
min_z = std::min(min_z, coord_d[ii * 3 + 2]);
10091009
max_z = std::max(max_z, coord_d[ii * 3 + 2]);
10101010
}
1011+
// Shift coords so minimum is at rcut (ensures all atoms are in [0, L))
1012+
double shift_x = rcut - min_x;
1013+
double shift_y = rcut - min_y;
1014+
double shift_z = rcut - min_z;
1015+
for (int ii = 0; ii < natoms; ++ii) {
1016+
coord_d[ii * 3 + 0] += shift_x;
1017+
coord_d[ii * 3 + 1] += shift_y;
1018+
coord_d[ii * 3 + 2] += shift_z;
1019+
}
10111020
box_d.resize(9, 0.0);
10121021
box_d[0] = (max_x - min_x) + 2.0 * rcut;
10131022
box_d[4] = (max_y - min_y) + 2.0 * rcut;

source/api_cc/tests/test_deeppot_a_fparam_aparam_nframes_ptexpt.cc

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -28,86 +28,86 @@ class TestInferDeepPotAFparamAparamNFramesPtExpt : public ::testing::Test {
2828
0.25852028, 0.25852028, 0.25852028, 0.25852028, 0.25852028, 0.25852028};
2929
// Same reference values as single-frame, duplicated for 2 frames
3030
std::vector<VALUETYPE> expected_e = {
31-
1.596836265688982293e-01, 1.596933624175455035e-01,
32-
1.596859462832928844e-01, 1.596779837732069107e-01,
33-
1.596776702807257142e-01, 1.596869048501883825e-01,
34-
1.596836265688982293e-01, 1.596933624175455035e-01,
35-
1.596859462832928844e-01, 1.596779837732069107e-01,
36-
1.596776702807257142e-01, 1.596869048501883825e-01};
31+
-1.038271223729636539e-01, -7.285433579124989123e-02,
32+
-9.467600492266425860e-02, -1.467050207422957442e-01,
33+
-7.660561676973243195e-02, -7.277296000253175023e-02,
34+
-1.038271223729636539e-01, -7.285433579124989123e-02,
35+
-9.467600492266425860e-02, -1.467050207422957442e-01,
36+
-7.660561676973243195e-02, -7.277296000253175023e-02};
3737
std::vector<VALUETYPE> expected_f = {
38-
1.112134318320094352e-05, 1.085230789880272100e-04,
39-
9.298442641358874074e-07, 1.491517597320257530e-04,
40-
-1.250419527572717225e-05, -9.768265174690741028e-05,
41-
-5.021052645725073397e-05, -9.741678916887848341e-05,
42-
9.375317764392495572e-05, 8.664103999852425394e-05,
43-
-4.538513400016661465e-05, 8.561605116672722879e-05,
44-
-2.454811055475981441e-05, 1.079491454988312104e-04,
45-
-1.656974003674590440e-04, -1.721555059017403750e-04,
46-
-6.116610604208616705e-05, 8.308097903957835525e-05,
47-
1.112134318320094352e-05, 1.085230789880272100e-04,
48-
9.298442641358874074e-07, 1.491517597320257530e-04,
49-
-1.250419527572717225e-05, -9.768265174690741028e-05,
50-
-5.021052645725073397e-05, -9.741678916887848341e-05,
51-
9.375317764392495572e-05, 8.664103999852425394e-05,
52-
-4.538513400016661465e-05, 8.561605116672722879e-05,
53-
-2.454811055475981441e-05, 1.079491454988312104e-04,
54-
-1.656974003674590440e-04, -1.721555059017403750e-04,
55-
-6.116610604208616705e-05, 8.308097903957835525e-05};
38+
6.622266941151369601e-02, 5.278739714221529489e-02,
39+
2.265728009692277028e-02, -2.606048291367509331e-02,
40+
-4.538812303131847109e-02, 1.058247419681241676e-02,
41+
1.679392617013223121e-01, -2.257826240741929533e-03,
42+
-4.490146347357203138e-02, -1.148364179422036724e-01,
43+
-1.169790528013799069e-02, 6.140403441496700837e-02,
44+
-8.078778123309421355e-02, -5.838879041789352825e-02,
45+
6.773641084621376263e-02, -1.247724902386305318e-02,
46+
6.494524782787665373e-02, -1.174787360813439457e-01,
47+
6.622266941151369601e-02, 5.278739714221529489e-02,
48+
2.265728009692277028e-02, -2.606048291367509331e-02,
49+
-4.538812303131847109e-02, 1.058247419681241676e-02,
50+
1.679392617013223121e-01, -2.257826240741929533e-03,
51+
-4.490146347357203138e-02, -1.148364179422036724e-01,
52+
-1.169790528013799069e-02, 6.140403441496700837e-02,
53+
-8.078778123309421355e-02, -5.838879041789352825e-02,
54+
6.773641084621376263e-02, -1.247724902386305318e-02,
55+
6.494524782787665373e-02, -1.174787360813439457e-01};
5656
std::vector<VALUETYPE> expected_v = {
57-
-1.264062189119726106e-04, -1.636544077308309524e-05,
58-
4.453224130911556590e-05, -7.947403699519458518e-06,
59-
-4.603504987332719071e-05, 9.491045850088816000e-06,
60-
4.131028921467394082e-05, 9.691472468201876704e-06,
61-
-3.323572704427471520e-05, -1.024556912293147473e-04,
62-
5.530809120954559223e-06, 5.211030391191971272e-05,
63-
-3.851138686809524851e-06, 2.101414374153427902e-07,
64-
3.247573516972862344e-06, 4.561253716254950400e-05,
65-
-3.865680092083280590e-06, -3.262252150841829144e-05,
66-
-1.166788692566841262e-04, -1.814499890570940753e-05,
67-
2.155064011880968559e-05, -1.629918981392229854e-05,
68-
-3.245631268444005592e-05, 2.968538417601228937e-05,
69-
2.463149007223104176e-05, 3.660689861518736949e-05,
70-
-3.586518711234946879e-05, -1.424206401855391917e-04,
71-
-1.017840928263488617e-05, 1.421307534994552908e-05,
72-
-8.618294024757048886e-06, -2.192409332705383732e-05,
73-
3.461715847634955364e-05, 1.277625693457703254e-05,
74-
3.486479415793123331e-05, -5.604161168847292539e-05,
75-
-8.612844407008925294e-05, 2.508361660152536905e-06,
76-
-1.633895954532816838e-07, 1.903591783622687189e-06,
77-
-3.028341203071209831e-05, 4.685511271783763848e-05,
78-
2.876824509984768127e-06, 4.576515617130315025e-05,
79-
-7.108738780331672730e-05, -1.062354815105974551e-04,
80-
-2.954644717832223544e-05, 4.075640001084848793e-05,
81-
-3.138369091725678469e-05, -1.316088004849699161e-05,
82-
1.786389692843508954e-05, 4.579187321116929540e-05,
83-
1.869753034515593833e-05, -2.550749273395911822e-05,
84-
-1.264062189119726106e-04, -1.636544077308309524e-05,
85-
4.453224130911556590e-05, -7.947403699519458518e-06,
86-
-4.603504987332719071e-05, 9.491045850088816000e-06,
87-
4.131028921467394082e-05, 9.691472468201876704e-06,
88-
-3.323572704427471520e-05, -1.024556912293147473e-04,
89-
5.530809120954559223e-06, 5.211030391191971272e-05,
90-
-3.851138686809524851e-06, 2.101414374153427902e-07,
91-
3.247573516972862344e-06, 4.561253716254950400e-05,
92-
-3.865680092083280590e-06, -3.262252150841829144e-05,
93-
-1.166788692566841262e-04, -1.814499890570940753e-05,
94-
2.155064011880968559e-05, -1.629918981392229854e-05,
95-
-3.245631268444005592e-05, 2.968538417601228937e-05,
96-
2.463149007223104176e-05, 3.660689861518736949e-05,
97-
-3.586518711234946879e-05, -1.424206401855391917e-04,
98-
-1.017840928263488617e-05, 1.421307534994552908e-05,
99-
-8.618294024757048886e-06, -2.192409332705383732e-05,
100-
3.461715847634955364e-05, 1.277625693457703254e-05,
101-
3.486479415793123331e-05, -5.604161168847292539e-05,
102-
-8.612844407008925294e-05, 2.508361660152536905e-06,
103-
-1.633895954532816838e-07, 1.903591783622687189e-06,
104-
-3.028341203071209831e-05, 4.685511271783763848e-05,
105-
2.876824509984768127e-06, 4.576515617130315025e-05,
106-
-7.108738780331672730e-05, -1.062354815105974551e-04,
107-
-2.954644717832223544e-05, 4.075640001084848793e-05,
108-
-3.138369091725678469e-05, -1.316088004849699161e-05,
109-
1.786389692843508954e-05, 4.579187321116929540e-05,
110-
1.869753034515593833e-05, -2.550749273395911822e-05};
57+
-1.589185601903579381e-01, 2.586167090689088510e-03,
58+
-1.575150812458056548e-04, -1.855360549216640564e-02,
59+
1.949822308966445150e-02, -1.006552178977542650e-02,
60+
3.177030388421490936e-02, 1.714350280402104215e-03,
61+
-1.290389705296313833e-03, -8.553511587973079699e-02,
62+
-5.654638208496251539e-03, -1.286955066237439882e-02,
63+
2.464156699303176462e-02, -2.398203243424212178e-02,
64+
-1.957110698882909630e-02, 2.233493653505165544e-02,
65+
6.107843889444162372e-03, 1.707076397717688723e-03,
66+
-1.653994136896924094e-01, 3.894358809712639147e-02,
67+
-2.169596032233910010e-02, 6.819702786556020371e-03,
68+
-5.018240707559744503e-03, 2.640663592968431426e-03,
69+
-1.985295554050418160e-03, -3.638422207618969423e-02,
70+
2.342932709960221863e-02, -8.501331666888653493e-02,
71+
-2.181253119706856591e-03, 4.311299629418858387e-03,
72+
-1.910329576491436726e-03, -1.808810428459609043e-03,
73+
-1.540075460017477360e-03, -1.173703527688202929e-02,
74+
-2.596307050960845741e-03, 6.705026635782097323e-03,
75+
-9.038454847872562370e-02, 3.011717694088476838e-02,
76+
-5.083053967307901710e-02, -2.951212926932282599e-03,
77+
2.342446057919112673e-02, -4.091208178777860222e-02,
78+
-1.648470670751139844e-02, -2.872262362355524484e-02,
79+
4.763925761561256522e-02, -8.300037376164930147e-02,
80+
1.020429200603871836e-03, -1.026734257188876599e-03,
81+
5.678534821710372327e-02, 1.273635858276599142e-02,
82+
-1.530143401888291177e-02, -1.061672032476311256e-01,
83+
-2.486859787145567074e-02, 2.875323543588798395e-02,
84+
-1.589185601903579381e-01, 2.586167090689088510e-03,
85+
-1.575150812458056548e-04, -1.855360549216640564e-02,
86+
1.949822308966445150e-02, -1.006552178977542650e-02,
87+
3.177030388421490936e-02, 1.714350280402104215e-03,
88+
-1.290389705296313833e-03, -8.553511587973079699e-02,
89+
-5.654638208496251539e-03, -1.286955066237439882e-02,
90+
2.464156699303176462e-02, -2.398203243424212178e-02,
91+
-1.957110698882909630e-02, 2.233493653505165544e-02,
92+
6.107843889444162372e-03, 1.707076397717688723e-03,
93+
-1.653994136896924094e-01, 3.894358809712639147e-02,
94+
-2.169596032233910010e-02, 6.819702786556020371e-03,
95+
-5.018240707559744503e-03, 2.640663592968431426e-03,
96+
-1.985295554050418160e-03, -3.638422207618969423e-02,
97+
2.342932709960221863e-02, -8.501331666888653493e-02,
98+
-2.181253119706856591e-03, 4.311299629418858387e-03,
99+
-1.910329576491436726e-03, -1.808810428459609043e-03,
100+
-1.540075460017477360e-03, -1.173703527688202929e-02,
101+
-2.596307050960845741e-03, 6.705026635782097323e-03,
102+
-9.038454847872562370e-02, 3.011717694088476838e-02,
103+
-5.083053967307901710e-02, -2.951212926932282599e-03,
104+
2.342446057919112673e-02, -4.091208178777860222e-02,
105+
-1.648470670751139844e-02, -2.872262362355524484e-02,
106+
4.763925761561256522e-02, -8.300037376164930147e-02,
107+
1.020429200603871836e-03, -1.026734257188876599e-03,
108+
5.678534821710372327e-02, 1.273635858276599142e-02,
109+
-1.530143401888291177e-02, -1.061672032476311256e-01,
110+
-2.486859787145567074e-02, 2.875323543588798395e-02};
111111
int natoms;
112112
int nframes = 2;
113113
std::vector<double> expected_tot_e;

0 commit comments

Comments
 (0)