torchani.ase#
Calculator subclass, used for interfacing with the ASE library
The ASE library can be used to perform molecular dynamics. For more information consult the user guide.
Classes
TorchANI calculator for ASE |
- class torchani.ase.Calculator(model, overwrite=False, stress_kind='scaling')[source]#
TorchANI calculator for ASE
ANI models can be converted to their ASE Calculator form by calling the
ANI.ase
method.import torchani model = torchani.models.ANI1x() calc = model.ase() # Convert model into its ASE Calculator form
- Parameters:
model (
torchani.arch.ANI
) – neural network potential model that convert coordinates into energies.overwrite (bool) – After wrapping atoms into central box, whether to replace the original positions stored in
ase.Atoms
object with the wrapped positions.stress_kind (str) – Strategy to calculate stress, valid options are fdotr, scaling, and numerical. The fdotr approach does not need the cell’s box information and can be used for multiple domians when running parallel on multi-GPUs.
- implemented_properties: List[str] = ['energy', 'free_energy', 'forces', 'stress']#
Properties calculator can handle (energy, forces, …)
- calculate(atoms=None, properties=['energy'], system_changes=['positions', 'numbers', 'cell', 'pbc', 'initial_charges', 'initial_magmoms'])[source]#
Do the calculation.
- properties: list of str
List of what needs to be calculated. Can be any combination of ‘energy’, ‘forces’, ‘stress’, ‘dipole’, ‘charges’, ‘magmom’ and ‘magmoms’.
- system_changes: list of str
List of what has changed since last calculation. Can be any combination of these six: ‘positions’, ‘numbers’, ‘cell’, ‘pbc’, ‘initial_charges’ and ‘initial_magmoms’.
Subclasses need to implement this, but can ignore properties and system_changes if they want. Calculated properties should be inserted into results dictionary like shown in this dummy example:
self.results = {'energy': 0.0, 'forces': np.zeros((len(atoms), 3)), 'stress': np.zeros(6), 'dipole': np.zeros(3), 'charges': np.zeros(len(atoms)), 'magmom': 0.0, 'magmoms': np.zeros(len(atoms))}
The subclass implementation should first call this implementation to set the atoms attribute and create any missing directories.