Skip to content

Commit

Permalink
Change conformer_level to conformer_opt_level
Browse files Browse the repository at this point in the history
  • Loading branch information
JintaoWu98 committed Sep 15, 2024
1 parent fb16f4a commit 0e64c33
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 35 deletions.
22 changes: 12 additions & 10 deletions arc/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class ARC(object):
instead (e.g., ``opt_level``).
composite_method (str, dict, Level, optional): Composite method.
conformer_level (str, dict, Level, optional): Level of theory for conformer searches.
conformer_opt_level (str, dict, Level, optional): Level of theory for conformer searches, interchangable with `conformer_level`.
opt_level (str, dict, Level, optional): Level of theory for geometry optimization.
freq_level (str, dict, Level, optional): Level of theory for frequency calculations.
sp_level (str, dict, Level, optional): Level of theory for single point calculations.
Expand Down Expand Up @@ -167,7 +168,7 @@ class ARC(object):
reactions (list): A list of :ref:`ARCReaction <reaction>` objects.
level_of_theory (str): A shortcut representing either sp//geometry levels or a composite method.
composite_method (Level): Composite method.
conformer_level (Level): Level of theory for conformer searches.
conformer_opt_level (Level): Level of theory for conformer searches.
opt_level (Level): Level of theory for geometry optimization.
freq_level (Level): Level of theory for frequency calculations.
sp_level (Level): Level of theory for single point calculations.
Expand Down Expand Up @@ -245,6 +246,7 @@ def __init__(self,
compute_thermo: bool = True,
compute_transport: bool = False,
conformer_level: Optional[Union[str, dict, Level]] = None,
conformer_opt_level: Optional[Union[str, dict, Level]] = None,
dont_gen_confs: List[str] = None,
e_confs: float = 5.0,
ess_settings: Dict[str, Union[str, List[str]]] = None,
Expand Down Expand Up @@ -346,7 +348,7 @@ def __init__(self,
# attributes related to level of theory specifications
self.level_of_theory = level_of_theory
self.composite_method = composite_method or None
self.conformer_level = conformer_level or None
self.conformer_opt_level = conformer_level or conformer_opt_level or None
self.opt_level = opt_level or None
self.freq_level = freq_level or None
self.sp_level = sp_level or None
Expand Down Expand Up @@ -489,8 +491,8 @@ def as_dict(self) -> dict:
restart_dict['compute_thermo'] = self.compute_thermo
if self.compute_transport:
restart_dict['compute_transport'] = self.compute_transport
if self.conformer_level is not None and str(self.conformer_level).split()[0] != default_levels_of_theory['conformer']:
restart_dict['conformer_level'] = self.conformer_level.as_dict()
if self.conformer_opt_level is not None:
restart_dict['conformer_opt_level'] = self.conformer_opt_level.as_dict()
if self.dont_gen_confs:
restart_dict['dont_gen_confs'] = self.dont_gen_confs
if self.ts_adapters is not None:
Expand Down Expand Up @@ -608,7 +610,7 @@ def execute(self) -> dict:
species_list=self.species,
rxn_list=self.reactions,
composite_method=self.composite_method,
conformer_level=self.conformer_level,
conformer_opt_level=self.conformer_opt_level,
opt_level=self.opt_level,
freq_level=self.freq_level,
sp_level=self.sp_level,
Expand Down Expand Up @@ -689,7 +691,7 @@ def save_project_info_file(self):
txt = ''
txt += f'ARC v{self.__version__}\n'
txt += f'ARC project {self.project}\n\nLevels of theory used:\n\n'
txt += f'Conformers: {self.conformer_level}\n'
txt += f'Conformers: {self.conformer_opt_level}\n'
txt += f'TS guesses: {self.ts_guess_level}\n'
if self.composite_method is not None:
txt += f'Composite method: {self.composite_method} {fine_txt}\n'
Expand Down Expand Up @@ -975,13 +977,13 @@ def set_levels_of_theory(self):

logger.info('\n\nUsing the following levels of theory:\n')

if self.conformer_level is None:
self.conformer_level = default_levels_of_theory['conformer']
if self.conformer_opt_level is None:
self.conformer_opt_level = default_levels_of_theory['conformer']
default_flag = ' (default)'
else:
default_flag = ''
self.conformer_level = Level(repr=self.conformer_level)
logger.info(f'Conformers:{default_flag} {self.conformer_level}')
self.conformer_opt_level = Level(repr=self.conformer_opt_level)
logger.info(f'Conformers opt:{default_flag} {self.conformer_opt_level}')

if self.reactions or any([spc.is_ts for spc in self.species]):
if not self.ts_guess_level:
Expand Down
4 changes: 2 additions & 2 deletions arc/main_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def test_as_dict(self):
'method': 'ccsd(t)-f12',
'method_type': 'wavefunction',
'software': 'molpro'},
'conformer_level': {'basis': 'def2svp',
'conformer_opt_level': {'basis': 'def2svp',
'compatible_ess': ['gaussian', 'terachem'],
'method': 'wb97xd',
'method_type': 'dft',
Expand Down Expand Up @@ -152,7 +152,7 @@ def test_as_dict(self):
def test_from_dict(self):
"""Test the from_dict() method of ARC"""
restart_dict = {'composite_method': '',
'conformer_level': 'b97-d3/6-311+g(d,p)',
'conformer_opt_level': 'b97-d3/6-311+g(d,p)',
'freq_level': 'wb97x-d3/6-311+g(d,p)',
'freq_scale_factor': 0.96,
'opt_level': 'wb97x-d3/6-311+g(d,p)',
Expand Down
4 changes: 2 additions & 2 deletions arc/reaction_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1928,7 +1928,7 @@ def test_load_ts_xyz_user_guess_from_files(self):
Scheduler(project=arc_object.project,
species_list=arc_object.species,
rxn_list=arc_object.reactions,
conformer_level=arc_object.conformer_level,
conformer_opt_level=arc_object.conformer_opt_level,
opt_level=arc_object.opt_level,
freq_level=arc_object.freq_level,
sp_level=arc_object.sp_level,
Expand All @@ -1950,7 +1950,7 @@ def test_load_ts_xyz_user_guess_from_files(self):
Scheduler(project=arc_object.project,
species_list=arc_object.species,
rxn_list=arc_object.reactions,
conformer_level=arc_object.conformer_level,
conformer_opt_level=arc_object.conformer_opt_level,
opt_level=arc_object.opt_level,
freq_level=arc_object.freq_level,
sp_level=arc_object.sp_level,
Expand Down
26 changes: 13 additions & 13 deletions arc/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ class Scheduler(object):
rxn_list (list): Contains input :ref:`ARCReaction <reaction>` objects.
project_directory (str): Folder path for the project: the input file path or ARC/Projects/project-name.
composite_method (str, optional): A composite method to use.
conformer_level (Union[str, dict], optional): The level of theory to use for conformer comparisons.
conformer_opt_level (Union[str, dict], optional): The level of theory to use for conformer comparisons.
opt_level (Union[str, dict], optional): The level of theory to use for geometry optimizations.
freq_level (Union[str, dict], optional): The level of theory to use for frequency calculations.
sp_level (Union[str, dict], optional): The level of theory to use for single point energy calculations.
Expand Down Expand Up @@ -202,7 +202,7 @@ class Scheduler(object):
bath_gas (str): A bath gas. Currently used in OneDMin to calc L-J parameters.
Allowed values are He, Ne, Ar, Kr, H2, N2, O2.
composite_method (str): A composite method to use.
conformer_level (dict): The level of theory to use for conformer comparisons.
conformer_opt_level (dict): The level of theory to use for conformer comparisons.
opt_level (dict): The level of theory to use for geometry optimizations.
freq_level (dict): The level of theory to use for frequency calculations.
sp_level (dict): The level of theory to use for single point energy calculations.
Expand Down Expand Up @@ -230,7 +230,7 @@ def __init__(self,
species_list: list,
project_directory: str,
composite_method: Optional[Level] = None,
conformer_level: Optional[Level] = None,
conformer_opt_level: Optional[Level] = None,
opt_level: Optional[Level] = None,
freq_level: Optional[Level] = None,
sp_level: Optional[Level] = None,
Expand Down Expand Up @@ -310,7 +310,7 @@ def __init__(self,
self.report_time = time.time() # init time for reporting status every 1 hr
self.servers = list()
self.composite_method = composite_method
self.conformer_level = conformer_level
self.conformer_opt_level = conformer_opt_level
self.ts_guess_level = ts_guess_level
self.opt_level = opt_level
self.freq_level = freq_level
Expand Down Expand Up @@ -1840,16 +1840,16 @@ def process_directed_scans(self, label: str, pivots: Union[List[int], List[List[

def process_conformers(self, label):
"""
Process the generated conformers and spawn DFT jobs at the conformer_level.
If more than one conformer is available, they will be optimized at the DFT conformer_level.
Process the generated conformers and spawn DFT jobs at the conformer_opt_level.
If more than one conformer is available, they will be optimized at the DFT conformer_opt_level.
Args:
label (str): The species label.
"""
plotter.save_conformers_file(project_directory=self.project_directory,
label=label,
xyzs=self.species_dict[label].conformers,
level_of_theory=self.conformer_level,
level_of_theory=self.conformer_opt_level,
multiplicity=self.species_dict[label].multiplicity,
charge=self.species_dict[label].charge,
is_ts=False,
Expand All @@ -1864,7 +1864,7 @@ def process_conformers(self, label):
for i, xyz in enumerate(self.species_dict[label].conformers):
self.run_job(label=label,
xyz=xyz,
level_of_theory=self.conformer_level,
level_of_theory=self.conformer_opt_level,
job_type='conformers',
conformer=i,
)
Expand Down Expand Up @@ -2027,7 +2027,7 @@ def determine_most_stable_conformer(self, label):
plotter.save_conformers_file(project_directory=self.project_directory,
label=label,
xyzs=self.species_dict[label].conformers,
level_of_theory=self.conformer_level,
level_of_theory=self.conformer_opt_level,
multiplicity=self.species_dict[label].multiplicity,
charge=self.species_dict[label].charge,
is_ts=False,
Expand Down Expand Up @@ -2088,7 +2088,7 @@ def determine_most_stable_conformer(self, label):
conformer_xyz = xyz
if 'Conformers optimized and compared' not in self.output[label]['conformers']:
self.output[label]['conformers'] += \
f'Conformers optimized and compared at {self.conformer_level.simple()}; '
f'Conformers optimized and compared at {self.conformer_opt_level.simple()}; '
break
else:
if i == 0:
Expand Down Expand Up @@ -2127,11 +2127,11 @@ def determine_most_stable_conformer(self, label):
else:
# troubleshoot when all conformers of a species failed isomorphic test
logger.warning(f'Isomorphism check for all conformers of species {label} failed at '
f'{self.conformer_level.simple()}. '
f'{self.conformer_opt_level.simple()}. '
f'Attempting to troubleshoot using a different level.')
self.output[label]['conformers'] += \
f'Error: No conformer was found to be isomorphic with the 2D graph representation at ' \
f'{self.conformer_level.simple()}; '
f'{self.conformer_opt_level.simple()}; '
self.troubleshoot_conformer_isomorphism(label=label)
else:
logger.warning(f'Could not run isomorphism check for species {label} due to missing 2D graph '
Expand Down Expand Up @@ -3171,7 +3171,7 @@ def troubleshoot_negative_freq(self,
for i, xyz in enumerate(self.species_dict[label].conformers):
self.run_job(label=label,
xyz=xyz,
level_of_theory=self.conformer_level,
level_of_theory=self.conformer_opt_level,
job_type='conformers',
conformer=i,
)
Expand Down
8 changes: 4 additions & 4 deletions arc/scheduler_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def setUpClass(cls):
cls.sched1 = Scheduler(project='project_test_1', ess_settings=cls.ess_settings,
species_list=[cls.spc1, cls.spc2, cls.spc3],
composite_method=None,
conformer_level=Level(repr=default_levels_of_theory['conformer']),
conformer_opt_level=Level(repr=default_levels_of_theory['conformer']),
opt_level=Level(repr=default_levels_of_theory['opt']),
freq_level=Level(repr=default_levels_of_theory['freq']),
sp_level=Level(repr=default_levels_of_theory['sp']),
Expand All @@ -105,7 +105,7 @@ def setUpClass(cls):
cls.sched2 = Scheduler(project='project_test_2', ess_settings=cls.ess_settings,
species_list=[cls.spc1, cls.spc2, cls.spc3],
composite_method=None,
conformer_level=Level(repr=default_levels_of_theory['conformer']),
conformer_opt_level=Level(repr=default_levels_of_theory['conformer']),
opt_level=Level(repr=default_levels_of_theory['opt']),
freq_level=Level(repr=default_levels_of_theory['freq']),
sp_level=Level(repr=default_levels_of_theory['sp']),
Expand All @@ -121,7 +121,7 @@ def setUpClass(cls):
cls.sched3 = Scheduler(project='project_test_4', ess_settings=cls.ess_settings,
species_list=[cls.spc1],
composite_method=Level(repr='CBS-QB3'),
conformer_level=Level(repr=default_levels_of_theory['conformer']),
conformer_opt_level=Level(repr=default_levels_of_theory['conformer']),
opt_level=Level(repr=default_levels_of_theory['freq_for_composite']),
freq_level=Level(repr=default_levels_of_theory['freq_for_composite']),
scan_level=Level(repr=default_levels_of_theory['scan_for_composite']),
Expand Down Expand Up @@ -221,7 +221,7 @@ def test_determine_adaptive_level(self):
ess_settings=self.ess_settings,
species_list=[self.spc1, self.spc2],
composite_method=None,
conformer_level=default_levels_of_theory['conformer'],
conformer_opt_level=default_levels_of_theory['conformer'],
opt_level=default_levels_of_theory['opt'],
freq_level=default_levels_of_theory['freq'],
sp_level=default_levels_of_theory['sp'],
Expand Down
2 changes: 1 addition & 1 deletion arc/testing/restart/1_restart_thermo/restart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ arkane_level_of_theory:
software: gaussian
calc_freq_factor: true
compute_transport: false
conformer_level:
conformer_opt_level:
basis: 6-31g(d,p)
dispersion: empiricaldispersion=gd3bj
method: b3lyp
Expand Down
2 changes: 1 addition & 1 deletion arc/testing/restart/2_restart_rate/restart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ calc_freq_factor: false
compare_to_rmg: false
composite_method: ''
bac_type: null
conformer_level:
conformer_opt_level:
auxiliary_basis: ''
basis: def2svp
dispersion: ''
Expand Down
2 changes: 1 addition & 1 deletion arc/testing/restart/3_restart_bde/restart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ arkane_level_of_theory:
software: gaussian
compare_to_rmg: false
compute_transport: false
conformer_level:
conformer_opt_level:
basis: def2svp
compatible_ess:
- gaussian
Expand Down
2 changes: 1 addition & 1 deletion arc/testing/restart/5_TS1/restart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ arkane_level_of_theory:
method: ccsd(t)-f12
method_type: wavefunction
software: molpro
conformer_level:
conformer_opt_level:
basis: def2tzvp
compatible_ess:
- gaussian
Expand Down

0 comments on commit 0e64c33

Please sign in to comment.