Coverage for /builds/debichem-team/python-ase/ase/calculators/orca.py: 52.94%
34 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-03-06 04:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-03-06 04:00 +0000
1import re
3import ase.io.orca as io
4from ase.calculators.genericfileio import (
5 BaseProfile,
6 CalculatorTemplate,
7 GenericFileIOCalculator,
8)
11def get_version_from_orca_header(orca_header):
12 match = re.search(r'Program Version (\S+)', orca_header, re.M)
13 return match.group(1)
16class OrcaProfile(BaseProfile):
17 def version(self):
18 # XXX Allow MPI in argv; the version call should not be parallel.
19 from ase.calculators.genericfileio import read_stdout
20 stdout = read_stdout([self.command, "does_not_exist"])
21 return get_version_from_orca_header(stdout)
23 def get_calculator_command(self, inputfile):
24 return [inputfile]
27class OrcaTemplate(CalculatorTemplate):
28 _label = 'orca'
30 def __init__(self):
31 super().__init__('orca',
32 implemented_properties=['energy', 'free_energy',
33 'forces', 'dipole'])
35 self.inputname = f'{self._label}.inp'
36 self.outputname = f'{self._label}.out'
37 self.errorname = f'{self._label}.err'
39 def execute(self, directory, profile) -> None:
40 profile.run(directory, self.inputname, self.outputname,
41 errorfile=self.errorname)
43 def write_input(self, profile, directory, atoms, parameters, properties):
44 parameters = dict(parameters)
46 kw = dict(charge=0, mult=1, orcasimpleinput='B3LYP def2-TZVP',
47 orcablocks='%pal nprocs 1 end')
48 kw.update(parameters)
50 io.write_orca(directory / self.inputname, atoms, kw)
52 def read_results(self, directory):
53 return io.read_orca_outputs(directory, directory / self.outputname)
55 def load_profile(self, cfg, **kwargs):
56 return OrcaProfile.from_config(cfg, self.name, **kwargs)
59class ORCA(GenericFileIOCalculator):
60 """Class for doing ORCA calculations.
62 Example:
64 calc = ORCA(charge=0, mult=1, orcasimpleinput='B3LYP def2-TZVP',
65 orcablocks='%pal nprocs 16 end')
66 """
68 def __init__(self, *, profile=None, directory='.', **kwargs):
69 """Construct ORCA-calculator object.
71 Parameters
72 ==========
73 charge: int
75 mult: int
77 orcasimpleinput : str
79 orcablocks: str
82 Examples
83 ========
84 Use default values:
86 >>> from ase.calculators.orca import ORCA
87 >>> h = Atoms(
88 ... 'H',
89 ... calculator=ORCA(
90 ... charge=0,
91 ... mult=1,
92 ... directory='water',
93 ... orcasimpleinput='B3LYP def2-TZVP',
94 ... orcablocks='%pal nprocs 16 end'))
96 """
98 super().__init__(template=OrcaTemplate(),
99 profile=profile, directory=directory,
100 parameters=kwargs)