Skip to content

Commit

Permalink
Don't run freq for IRC species (#749)
Browse files Browse the repository at this point in the history
An IRC job is supposed to give us the minimal energy path that connects
a TS to its adjacent wells (reactants and products).
ARC optimizes the two resulting IRC output to get the wells. However, it
also unnecessarily spawns a freq job for the IRC species. This is a bit
of an overkill, since we just want to see that the connectivity is
correct, we don't use the IRC results per se in the calculations, so we
don't care about their frequency (or whether there's an imaginary
frequency). Plus, this computation is relatively expensive. sp and scan
jobs are also not needed.
Here we tell ARC not to spawn freq jobs for species defined from IRC
jobs
  • Loading branch information
alongd authored Jul 2, 2024
2 parents 3dbdbe0 + 99f141e commit c043eed
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions arc/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,8 @@ def __init__(self,
self.run_sp_job(label=species.label)
if self.job_types['onedmin']:
self.run_onedmin_job(species.label)
elif species.get_xyz(generate=False) and not self.job_types['conformers'] and not self.job_types['opt']:
elif species.get_xyz(generate=False) and not self.job_types['conformers'] and not self.job_types['opt'] \
and species.irc_label is None:
if self.job_types['freq']:
self.run_freq_job(species.label)
if self.job_types['sp']:
Expand Down Expand Up @@ -483,11 +484,12 @@ def __init__(self,
# opt/fine hasn't finished (and isn't running), so run it
self.run_opt_job(species.label, fine=self.fine_only)
if self.output[species.label]['paths']['geo'] and 'sp' not in self.job_dict[species.label].keys() \
and not self.output[species.label]['paths']['sp'] and self.job_types['sp']:
and not self.output[species.label]['paths']['sp'] and self.job_types['sp'] \
and species.irc_label is None:
self.run_sp_job(species.label)
if self.output[species.label]['paths']['geo'] and 'freq' not in self.job_dict[species.label].keys() \
and not self.output[species.label]['paths']['freq'] and self.job_types['freq']\
and (species.is_ts or species.number_of_atoms > 1):
and not self.output[species.label]['paths']['freq'] and self.job_types['freq'] \
and (species.is_ts or species.number_of_atoms > 1) and species.irc_label is None:
self.run_freq_job(species.label)
if self.output[species.label]['paths']['geo'] and self.job_types['rotors'] and \
any(spc.rotors_dict is not None and
Expand Down Expand Up @@ -1503,7 +1505,8 @@ def spawn_post_opt_jobs(self,
self.run_irc_job(label=label, irc_direction='reverse')

# Spawn freq (or check it if this is a composite job) for polyatomic molecules.
if label in self.output.keys() and self.species_dict[label].number_of_atoms > 1:
if label in self.output.keys() and self.species_dict[label].number_of_atoms > 1 \
and self.species_dict[label].irc_label is None:
if 'freq' not in job_name and self.job_types['freq']:
# This is either an opt or a composite job (not an optfreq job), spawn freq.
self.run_freq_job(label)
Expand All @@ -1512,7 +1515,7 @@ def spawn_post_opt_jobs(self,
self.check_freq_job(label=label, job=self.job_dict[label]['optfreq'][job_name])

# Spawn sp after an opt (non-composite) job.
if not composite and self.job_types['sp']:
if not composite and self.job_types['sp'] and self.species_dict[label].irc_label is None:
self.run_sp_job(label)

# Perceive the Molecule from xyz.
Expand All @@ -1521,7 +1524,7 @@ def spawn_post_opt_jobs(self,
self.species_dict[label].mol_from_xyz()

# Spawn scan jobs.
if self.job_types['rotors']:
if self.job_types['rotors'] and self.species_dict[label].irc_label is None:
if not self.species_dict[label].rotors_dict:
self.species_dict[label].determine_rotors()
self.run_scan_jobs(label)
Expand Down

0 comments on commit c043eed

Please sign in to comment.