1717
1818@uusing ("s-dftd3" )
1919def test_dftd3_task_b97m_m01 (schema_versions , request ):
20+ import dftd3
21+
2022 models , retver , _ = schema_versions
2123
2224 thr = 1.0e-8
2325
2426 return_result = - 0.05879001214961249
2527
28+ if qcel .util .parse_version (dftd3 .__version__ ) >= qcel .util .parse_version ("1.3.0" ):
29+ atm_correction = 6.48732559e-05
30+ return_result -= atm_correction
31+
2632 if from_v2 (request .node .name ):
2733 atomic_input = models .AtomicInput (
2834 molecule = models .Molecule (** qcng .get_molecule ("mindless-01" , return_dict = True )),
@@ -45,6 +51,7 @@ def test_dftd3_task_b97m_m01(schema_versions, request):
4551
4652
4753@uusing ("s-dftd3" )
54+ @pytest .mark .parametrize ("atm" , ["nil" , True , False ])
4855@pytest .mark .parametrize (
4956 "inp" ,
5057 [
@@ -56,29 +63,44 @@ def test_dftd3_task_b97m_m01(schema_versions, request):
5663 ],
5764 ids = ["d3bj" , "d3zero" , "d3mbj" , "d3mzero" , "d3op" ],
5865)
59- def test_dftd3_task_pbe_m02 (inp , schema_versions , request ):
66+ def test_dftd3_task_pbe_m02 (inp , schema_versions , request , atm ):
6067 models , retver , _ = schema_versions
6168
6269 # return to 1.0e-8 after https://github.com/MolSSI/QCEngine/issues/370
6370 thr = 1.0e-7
6471
6572 return_result = inp ["return_result" ]
6673
74+ # s-dftd3 v1.3 changed the 3-body default to False to match the executable interface.
75+ # Toggle is keywords["params_tweaks"]["atm"] which isn't handled by the harness.
76+ # Here, demonstrating pass-through to s-dftd3 1st-class QCSchema interface. Requires repeating method from model.
77+ atm_correction = 8.94882569e-05
78+ if atm == "nil" :
79+ import dftd3
80+
81+ xtra_kw = {}
82+ if qcel .util .parse_version (dftd3 .__version__ ) >= qcel .util .parse_version ("1.3.0" ):
83+ return_result -= atm_correction
84+ else :
85+ xtra_kw = {"params_tweaks" : {"method" : "pbe" , "atm" : atm }}
86+ if atm is False :
87+ return_result -= atm_correction
88+
89+ spec = {
90+ "model" : {"method" : "pbe" },
91+ "keywords" : {"level_hint" : inp ["level_hint" ], ** xtra_kw },
92+ "driver" : "energy" ,
93+ }
94+
6795 if from_v2 (request .node .name ):
6896 atomic_input = models .AtomicInput (
6997 molecule = models .Molecule (** qcng .get_molecule ("mindless-02" , return_dict = True )),
70- specification = {
71- "model" : {"method" : "pbe" },
72- "keywords" : {"level_hint" : inp ["level_hint" ]},
73- "driver" : "energy" ,
74- },
98+ specification = spec ,
7599 )
76100 else :
77101 atomic_input = models .AtomicInput (
78102 molecule = models .Molecule (** qcng .get_molecule ("mindless-02" , return_dict = True )),
79- model = {"method" : "pbe" },
80- keywords = {"level_hint" : inp ["level_hint" ]},
81- driver = "energy" ,
103+ ** spec ,
82104 )
83105
84106 atomic_input = checkver_and_convert (atomic_input , request .node .name , "pre" )
@@ -156,47 +178,81 @@ def test_dftd3_task_tpss_m02(schema_versions, request):
156178
157179
158180@uusing ("s-dftd3" )
159- def test_dftd3_task_r2scan_m03 (schema_versions , request ):
181+ @pytest .mark .parametrize ("atm" , ["nil" , True , False ])
182+ def test_dftd3_task_r2scan_m03 (schema_versions , request , atm ):
160183 models , retver , _ = schema_versions
161184
162185 thr = 1.0e-8
163186
164- return_result = np .array (
165- [
166- [- 9.15721221e-06 , - 8.18139252e-06 , - 6.04628002e-05 ],
167- [+ 2.63353857e-05 , - 5.74347326e-05 , + 6.43925910e-05 ],
168- [- 2.99422439e-05 , + 1.88531187e-05 , + 3.80203831e-05 ],
169- [- 1.05590494e-05 , - 6.00459729e-05 , + 3.93481945e-05 ],
170- [+ 1.59600548e-05 , + 3.66166973e-05 , - 2.69939628e-05 ],
171- [- 7.21060928e-05 , + 1.35991320e-05 , - 3.71000739e-05 ],
172- [- 9.01933781e-06 , - 3.41989101e-05 , - 4.92317946e-05 ],
173- [- 2.38625512e-06 , - 4.42678339e-05 , - 1.95513968e-05 ],
174- [- 3.09663159e-05 , + 3.41418638e-05 , + 2.51926884e-05 ],
175- [+ 5.60572318e-06 , - 1.06356845e-05 , - 3.91159008e-05 ],
176- [+ 7.73090102e-05 , + 2.75681060e-05 , + 2.02933984e-05 ],
177- [- 3.23109274e-05 , + 5.39319105e-05 , - 1.44309772e-04 ],
178- [- 4.05785623e-05 , + 5.03251549e-05 , + 3.92193348e-05 ],
179- [+ 8.46365844e-06 , - 3.35282588e-05 , + 3.76937643e-05 ],
180- [+ 1.04861677e-04 , - 2.99444252e-05 , + 8.20822571e-05 ],
181- [- 1.50951292e-06 , + 4.32012272e-05 , + 3.05230899e-05 ],
182- ]
183- )
187+ return_result = {
188+ # s9 = 0.0
189+ False : np .array (
190+ [
191+ [- 9.35558196e-06 , - 7.34067064e-06 , - 5.91238608e-05 ],
192+ [2.53304403e-05 , - 5.73248858e-05 , 6.46059022e-05 ],
193+ [- 2.85980097e-05 , 1.93908141e-05 , 3.67399397e-05 ],
194+ [- 7.30494324e-06 , - 5.48095855e-05 , 3.76154049e-05 ],
195+ [1.07471133e-05 , 3.03306726e-05 , - 2.46209798e-05 ],
196+ [- 6.64928435e-05 , 1.44200457e-05 , - 3.64523447e-05 ],
197+ [- 7.88327389e-06 , - 3.03833956e-05 , - 4.75808422e-05 ],
198+ [- 1.90420772e-06 , - 4.31459317e-05 , - 2.02338533e-05 ],
199+ [- 3.27860042e-05 , 3.68088235e-05 , 2.55372601e-05 ],
200+ [4.41178314e-06 , - 1.11489999e-05 , - 4.32651442e-05 ],
201+ [7.61947667e-05 , 2.64655830e-05 , 2.10390818e-05 ],
202+ [- 3.38080082e-05 , 5.29154102e-05 , - 1.44995850e-04 ],
203+ [- 3.85124417e-05 , 4.82248838e-05 , 3.75602755e-05 ],
204+ [1.01670679e-05 , - 3.64563841e-05 , 4.13102437e-05 ],
205+ [1.02281493e-04 , - 2.98543913e-05 , 8.22232550e-05 ],
206+ [- 2.48735050e-06 , 4.19080117e-05 , 2.96415119e-05 ],
207+ ]
208+ ),
209+ # s9 = 1.0
210+ True : np .array (
211+ [
212+ [- 9.15721221e-06 , - 8.18139252e-06 , - 6.04628002e-05 ],
213+ [+ 2.63353857e-05 , - 5.74347326e-05 , + 6.43925910e-05 ],
214+ [- 2.99422439e-05 , + 1.88531187e-05 , + 3.80203831e-05 ],
215+ [- 1.05590494e-05 , - 6.00459729e-05 , + 3.93481945e-05 ],
216+ [+ 1.59600548e-05 , + 3.66166973e-05 , - 2.69939628e-05 ],
217+ [- 7.21060928e-05 , + 1.35991320e-05 , - 3.71000739e-05 ],
218+ [- 9.01933781e-06 , - 3.41989101e-05 , - 4.92317946e-05 ],
219+ [- 2.38625512e-06 , - 4.42678339e-05 , - 1.95513968e-05 ],
220+ [- 3.09663159e-05 , + 3.41418638e-05 , + 2.51926884e-05 ],
221+ [+ 5.60572318e-06 , - 1.06356845e-05 , - 3.91159008e-05 ],
222+ [+ 7.73090102e-05 , + 2.75681060e-05 , + 2.02933984e-05 ],
223+ [- 3.23109274e-05 , + 5.39319105e-05 , - 1.44309772e-04 ],
224+ [- 4.05785623e-05 , + 5.03251549e-05 , + 3.92193348e-05 ],
225+ [+ 8.46365844e-06 , - 3.35282588e-05 , + 3.76937643e-05 ],
226+ [+ 1.04861677e-04 , - 2.99444252e-05 , + 8.20822571e-05 ],
227+ [- 1.50951292e-06 , + 4.32012272e-05 , + 3.05230899e-05 ],
228+ ]
229+ ),
230+ }
231+
232+ if atm == "nil" :
233+ import dftd3
234+
235+ xtra_kw = {}
236+ return_result = return_result [qcel .util .parse_version (dftd3 .__version__ ) < qcel .util .parse_version ("1.3.0" )]
237+ else :
238+ xtra_kw = {"params_tweaks" : {"method" : "r2scan" , "atm" : atm }}
239+ return_result = return_result [atm ]
240+
241+ spec = {
242+ "keywords" : {"level_hint" : "d3bj" , ** xtra_kw },
243+ "driver" : "gradient" ,
244+ "model" : {"method" : "r2scan" },
245+ }
184246
185247 if from_v2 (request .node .name ):
186248 atomic_input = models .AtomicInput (
187249 molecule = models .Molecule (** qcng .get_molecule ("mindless-03" , return_dict = True )),
188- specification = {
189- "keywords" : {"level_hint" : "d3bj" },
190- "driver" : "gradient" ,
191- "model" : {"method" : "r2scan" },
192- },
250+ specification = spec ,
193251 )
194252 else :
195253 atomic_input = models .AtomicInput (
196254 molecule = models .Molecule (** qcng .get_molecule ("mindless-03" , return_dict = True )),
197- keywords = {"level_hint" : "d3bj" },
198- driver = "gradient" ,
199- model = {"method" : "r2scan" },
255+ ** spec ,
200256 )
201257
202258 atomic_input = checkver_and_convert (atomic_input , request .node .name , "pre" )
0 commit comments