Skip to content

Commit c1d65bf

Browse files
committed
Changes to drone (tests still needed)
1 parent 86ab928 commit c1d65bf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+118297
-16
lines changed

atomate/qchem/drones.py

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ def generate_doc(self, dir_name, qcinput_files, qcoutput_files, multirun):
198198
elif "ESP" in d_calc_final:
199199
d["output"]["esp"] = d_calc_final["ESP"][-1]
200200

201-
if d["output"]["job_type"] == "opt" or d["output"]["job_type"] == "optimization":
201+
if d["output"]["job_type"] in ["opt", "optimization", "ts"]:
202202
if "molecule_from_optimized_geometry" in d_calc_final:
203203
d["output"]["optimized_molecule"] = d_calc_final[
204204
"molecule_from_optimized_geometry"]
@@ -210,22 +210,35 @@ def generate_doc(self, dir_name, qcinput_files, qcoutput_files, multirun):
210210
d_calc_final["opt_constraint"][0],
211211
float(d_calc_final["opt_constraint"][6])
212212
]
213-
if d["output"]["job_type"] == "freq" or d["output"]["job_type"] == "frequency":
213+
if d["output"]["job_type"] in ["freq", "frequency"]:
214214
d["output"]["frequencies"] = d_calc_final["frequencies"]
215+
d["output"]["frequency_modes"] = d_calc_final["frequency_mode_vectors"]
215216
d["output"]["enthalpy"] = d_calc_final["total_enthalpy"]
216217
d["output"]["entropy"] = d_calc_final["total_entropy"]
217-
if d["input"]["job_type"] == "opt" or d["input"]["job_type"] == "optimization":
218-
d["output"]["optimized_molecule"] = d_calc_final[
219-
"initial_molecule"]
220-
d["output"]["final_energy"] = d["calcs_reversed"][1][
221-
"final_energy"]
218+
if d["input"]["job_type"] in ["opt", "optimization", "ts"]:
219+
d["output"]["optimized_molecule"] = d_calc_final["initial_molecule"]
220+
d["output"]["final_energy"] = d["calcs_reversed"][1]["final_energy"]
221+
# For frequency-first calcs
222+
else:
223+
if len(d["calcs_reversed"]) > 1:
224+
first_calc = d["calcs_reversed"][-1]["input"]["rem"]["job_type"]
225+
second_calc = d["calcs_reversed"][-2]["input"]["rem"]["job_type"]
226+
if first_calc in ["freq", "frequency"] and second_calc in ["opt", "optimization", "ts"]:
227+
d["output"]["optimized_molecule"] = d_calc_final["initial_molecule"]
228+
d["output"]["final_energy"] = d["calcs_reversed"][1]["final_energy"]
229+
230+
if d["output"]["job_type"] == "pes_scan":
231+
d["output"]["scan_energies"] = d_calc_final.get("scan_energies")
232+
d["input"]["scan_variables"] = d_calc_final.get("scan_variables")
233+
d["output"]["scan_geometries"] = d_calc_final.get("optimized_geometries")
234+
d["output"]["scan_molecules"] = d_calc_final.get("molecules_from_optimized_geometries")
222235

223236
opt_trajectory = []
224237
calcs = copy.deepcopy(d["calcs_reversed"])
225238
calcs.reverse()
226239
for calc in calcs:
227240
job_type = calc["input"]["rem"]["job_type"]
228-
if job_type == "opt" or job_type == "optimization":
241+
if job_type in ["opt", "optimization", "ts"]:
229242
for ii,geom in enumerate(calc["geometries"]):
230243
site_properties = {"Mulliken":calc["Mulliken"][ii]}
231244
if "RESP" in calc:
@@ -282,17 +295,35 @@ def generate_doc(self, dir_name, qcinput_files, qcoutput_files, multirun):
282295

283296
d["state"] = "successful" if d_calc_final["completion"] else "unsuccessful"
284297
if "special_run_type" in d:
285-
if d["special_run_type"] == "frequency_flattener":
298+
if d["special_run_type"] in ["frequency_flattener", "ts_frequency_flattener"]:
286299
if d["state"] == "successful":
287-
orig_num_neg_freq = sum(1 for freq in d["calcs_reversed"][-2]["frequencies"] if freq < 0)
288-
orig_energy = d_calc_init["final_energy"]
300+
orig_num_neg_freq = None
301+
for calc in d["calcs_reversed"][::-1]:
302+
if "frequencies" in calc:
303+
orig_num_neg_freq = sum(1 for freq in calc["frequencies"] if freq < 0)
304+
break
305+
orig_energy = None
306+
for calc in d["calcs_reversed"][::-1]:
307+
if "final_energy" in calc:
308+
orig_energy = calc["final_energy"]
309+
break
289310
final_num_neg_freq = sum(1 for freq in d_calc_final["frequencies"] if freq < 0)
290311
final_energy = d["calcs_reversed"][1]["final_energy"]
291-
d["num_frequencies_flattened"] = orig_num_neg_freq - final_num_neg_freq
292-
if final_num_neg_freq > 0: # If a negative frequency remains,
293-
# and it's too large to ignore,
294-
if final_num_neg_freq > 1 or abs(d["output"]["frequencies"][0]) >= 15.0:
295-
d["state"] = "unsuccessful" # then the flattening was unsuccessful
312+
if orig_num_neg_freq is None:
313+
d["num_frequencies_flattened"] = 0
314+
else:
315+
d["num_frequencies_flattened"] = orig_num_neg_freq - final_num_neg_freq
316+
317+
if d["special_run_type"] == "frequency_flattener":
318+
if final_num_neg_freq > 0: # If a negative frequency remains,
319+
# and it's too large to ignore,
320+
if final_num_neg_freq > 1 or abs(d["output"]["frequencies"][0]) >= 15.0:
321+
d["state"] = "unsuccessful" # then the flattening was unsuccessful
322+
else:
323+
if final_num_neg_freq > 1: # If a negative frequency remains,
324+
# and it's too large to ignore,
325+
if final_num_neg_freq > 2 or abs(d["output"]["frequencies"][1]) >= 15.0:
326+
d["state"] = "unsuccessful" # then the flattening was unsuccessful
296327
if final_energy > orig_energy:
297328
d["warnings"]["energy_increased"] = True
298329

1.61 KB
Binary file not shown.
430 Bytes
Binary file not shown.
472 Bytes
Binary file not shown.
480 Bytes
Binary file not shown.
478 Bytes
Binary file not shown.
473 Bytes
Binary file not shown.
466 Bytes
Binary file not shown.
474 Bytes
Binary file not shown.
472 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)