try:
import daltonproject as dp
except ModuleNotFoundError:
print("daltonproject is not installed!")
from pysisyphus.calculators.Calculator import Calculator
from pysisyphus.constants import BOHR2ANG
[docs]
class Dalton(Calculator):
conf_key = "dalton"
def __init__(self, basis, method="hf", **kwargs):
super().__init__(**kwargs)
self._basis = basis
self._method = method
self.basis = dp.Basis(basis=self._basis)
self.method = dp.QCMethod(self._method)
self.compute_settings = dp.ComputeSettings(mpi_num_procs=1)
[docs]
def compute(self, mol, prop):
return dp.dalton.compute(
mol, self.basis, self.method, prop, compute_settings=self.compute_settings
)
[docs]
def get_energy(self, atoms, coords, **prepare_kwargs):
mol = self.prepare_input(atoms, coords)
prop = dp.Property(energy=True)
res = self.compute(mol, prop)
results = {
"energy": res.energy,
}
return results
[docs]
def get_forces(self, atoms, coords, **prepare_kwargs):
mol = self.prepare_input(atoms, coords)
prop = dp.Property(energy=True, gradients=True)
res = self.compute(mol, prop)
results = {
"energy": res.energy,
"forces": -res.gradients.flatten(),
}
return results
def __str__(self):
return f"Dalton({self.name})"