Coverage for /builds/alexhroom/ase/ase/calculators/orca.py: 52.94%
34 statements
« prev ^ index » next coverage.py v7.5.3, created at 2024-08-05 14:37 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2024-08-05 14:37 +0000
1import re
3import ase.io.orca as io
4from ase.calculators.genericfileio import (BaseProfile, CalculatorTemplate,
5 GenericFileIOCalculator)
8def get_version_from_orca_header(orca_header):
9 match = re.search(r'Program Version (\S+)', orca_header, re.M)
10 return match.group(1)
13class OrcaProfile(BaseProfile):
14 def version(self):
15 # XXX Allow MPI in argv; the version call should not be parallel.
16 from ase.calculators.genericfileio import read_stdout
17 stdout = read_stdout([self.command, "does_not_exist"])
18 return get_version_from_orca_header(stdout)
20 def get_calculator_command(self, inputfile):
21 return [inputfile]
24class OrcaTemplate(CalculatorTemplate):
25 _label = 'orca'
27 def __init__(self):
28 super().__init__('orca',
29 implemented_properties=['energy', 'free_energy',
30 'forces', 'dipole'])
32 self.inputname = f'{self._label}.inp'
33 self.outputname = f'{self._label}.out'
34 self.errorname = f'{self._label}.err'
36 def execute(self, directory, profile) -> None:
37 profile.run(directory, self.inputname, self.outputname,
38 errorfile=self.errorname)
40 def write_input(self, profile, directory, atoms, parameters, properties):
41 parameters = dict(parameters)
43 kw = dict(charge=0, mult=1, orcasimpleinput='B3LYP def2-TZVP',
44 orcablocks='%pal nprocs 1 end')
45 kw.update(parameters)
47 io.write_orca(directory / self.inputname, atoms, kw)
49 def read_results(self, directory):
50 return io.read_orca_outputs(directory, directory / self.outputname)
52 def load_profile(self, cfg, **kwargs):
53 return OrcaProfile.from_config(cfg, self.name, **kwargs)
56class ORCA(GenericFileIOCalculator):
57 """Class for doing ORCA calculations.
59 Example:
61 calc = ORCA(charge=0, mult=1, orcasimpleinput='B3LYP def2-TZVP',
62 orcablocks='%pal nprocs 16 end')
63 """
65 def __init__(self, *, profile=None, directory='.', **kwargs):
66 """Construct ORCA-calculator object.
68 Parameters
69 ==========
70 charge: int
72 mult: int
74 orcasimpleinput : str
76 orcablocks: str
79 Examples
80 ========
81 Use default values:
83 >>> from ase.calculators.orca import ORCA
84 >>> h = Atoms(
85 ... 'H',
86 ... calculator=ORCA(
87 ... charge=0,
88 ... mult=1,
89 ... directory='water',
90 ... orcasimpleinput='B3LYP def2-TZVP',
91 ... orcablocks='%pal nprocs 16 end'))
93 """
95 super().__init__(template=OrcaTemplate(),
96 profile=profile, directory=directory,
97 parameters=kwargs)