dxtb.components.coulomb.ES2#
- class dxtb.components.coulomb.ES2(hubbard, lhubbard=None, average=<function harmonic_average>, gexp=tensor(2.), shell_resolved=True, device=None, dtype=None)[source]#
Bases:
InteractionIsotropic second-order electrostatic energy (ES2).
Initialize the interaction.
Methods
Disable the cache.
Enable the cache.
Invalidate the cache to require renewed setup.
Check if the driver is set up and updated.
Returns a copy of the
TensorLikeinstance on the CPU.Calculate the atom-resolved Coulomb matrix.
Calculates nuclear gradient of an second order electrostatic energy contribution via PyTorch's autograd engine.
Obtain the cache object containing the Coulomb matrix.
Compute the energy from the atomic dipole moments, all quantities are atom-resolved.
Compute the dipole potential.
Compute the energy from the charges, all quantities are orbital-resolved.
Compute the nuclear gradient using orbital-resolved charges.
Compute the energy from the charges, all quantities are atom-resolved.
Calculate atom-resolved potential.
Compute the energy from the charges, all quantities are shell-resolved.
Calculate shell-resolved potential.
Compute the potential from the charges, all quantities are orbital-resolved.
Compute the energy from the atomic quadrupole moments, all quantities are atom-resolved.
Compute the quadrupole potential.
Calculate the Coulomb matrix.
Calculates nuclear gradient of an second order electrostatic energy contribution via PyTorch's autograd engine.
Override the device of the class object.
Override the dtype of the class object.
Reset the tensor attributes of the
dxtb.components.base.Componentinstance to their original states or to specified values.Returns a copy of the
TensorLikeinstance on the specified device.Returns a copy of the
TensorLikeinstance with specified floating point type.Update the attributes of the
Componentinstance.Attributes
Hubbard parameters of all elements.
Shell-resolved scaling factors for Hubbard parameters.
Function to use for averaging the Hubbard parameters.
Exponent of the second-order Coulomb interaction.
Whether electrostatics is shell-resolved.
Specification of dtypes that the
TensorLikeobject can take.Cache for the interaction.
Whether the cache has been set up.
Shortcut for device and dtype.
The device on which the class object resides.
Floating point dtype used by class object.
Label for the interaction.
- Parameters:
hubbard (Tensor)
lhubbard (Tensor | None)
gexp (Tensor)
shell_resolved (bool)
device (torch.device | None)
dtype (torch.dtype | None)
- cache_is_latest(cvars, tol=None)#
Check if the driver is set up and updated.
- cpu()#
Returns a copy of the
TensorLikeinstance on the CPU.This method creates and returns a new copy of the
TensorLikeinstance on the CPU.- Return type:
Self- Returns:
A copy of the
TensorLikeinstance placed on the CPU.- Return type:
- get_atom_coulomb_matrix(numbers, positions, ihelp)[source]#
Calculate the atom-resolved Coulomb matrix.
- Return type:
- Parameters:
numbers (Tensor) – Atomic numbers for all atoms in the system (shape:
(..., nat)).positions (Tensor) – Cartesian coordinates of all atoms (shape:
(..., nat, 3)).ihelp (IndexHelper) – Index mapping for the basis set.
- Returns:
Coulomb matrix.
- Return type:
Tensor
- Parameters:
numbers (Tensor)
positions (Tensor)
ihelp (IndexHelper)
- get_atom_gradient(charges, positions, cache, grad_outputs=None, retain_graph=True, create_graph=None)[source]#
Calculates nuclear gradient of an second order electrostatic energy contribution via PyTorch’s autograd engine.
- Return type:
- Parameters:
charges (Tensor) – Atom-resolved partial charges (shape:
(..., nat)).positions (Tensor) – Nuclear positions. Needs
requires_grad=True.cache (ES2Cache) – Cache object for second order electrostatics.
grad_out (Tensor | None) – Gradient of previous computation, i.e., “vector” in VJP of this gradient computation. Defaults to
None.
- Returns:
Nuclear gradient of energy.
- Return type:
Tensor
- Raises:
RuntimeError –
positionstensor does not haverequires_grad=True.- Parameters:
- get_cache(*, numbers=None, positions=None, ihelp=None)[source]#
Obtain the cache object containing the Coulomb matrix.
- Return type:
ES2Cache- Parameters:
numbers (Tensor) – Atomic numbers for all atoms in the system (shape:
(..., nat)).positions (Tensor) – Cartesian coordinates of all atoms (shape:
(..., nat, 3)).ihelp (IndexHelper) – Index mapping for the basis set.
- Returns:
Cache object for second order electrostatics.
- Return type:
ES2Cache
- Parameters:
numbers (Tensor | None)
positions (Tensor | None)
ihelp (IndexHelper | None)
Note
The cache of an interaction requires
positionsas they do not change during the self-consistent charge iterations.
- get_dipole_atom_energy(cache, qat, qdp=None, qqp=None)#
Compute the energy from the atomic dipole moments, all quantities are atom-resolved.
This method should be implemented by the subclass. Here, it serves only to create an empty Interaction by returning zeros.
- Return type:
- Parameters:
cache (InteractionCache) – Restart data for the interaction.
qat (Tensor) – Atom-resolved partial charges (shape:
(..., nat)).qdp (Tensor) – Atom-resolved dipole moments (shape:
(..., nat, 3)).qqp (Tensor) – Atom-resolved quadrupole moments (shape:
(..., nat, 6)).
- Returns:
Energy vector for each atomic dipole moment.
- Return type:
Tensor
- Parameters:
cache (InteractionCache)
qat (Tensor)
qdp (Tensor | None)
qqp (Tensor | None)
- get_dipole_atom_potential(cache, qat, qdp=None, qqp=None)#
Compute the dipole potential. All quantities are atom-resolved.
This method should be implemented by the subclass. Here, it serves only to create an empty Interaction by returning None.
- Return type:
- Parameters:
cache (InteractionCache) – Restart data for the interaction.
qat (Tensor) – Atom-resolved partial charges (shape:
(..., nat)).qdp (Tensor) – Atom-resolved dipole moments (shape:
(..., nat, 3)).qqp (Tensor) – Atom-resolved quadrupole moments (shape:
(..., nat, 6)).
- Returns:
Atom-resolved potential vector for each atom or None if not needed.
- Return type:
Tensor | None
- Parameters:
cache (InteractionCache)
qat (Tensor)
qdp (Tensor | None)
qqp (Tensor | None)
- get_energy(cache, charges, ihelp)#
Compute the energy from the charges, all quantities are orbital-resolved.
- Return type:
- Parameters:
cache (InteractionCache) – Restart data for the interaction.
charges (Charges) – Collection of charges. Monopolar partial charges are orbital-resolved.
ihelp (IndexHelper) – Index mapping for the basis set.
- Returns:
Atom-resolved energy vector.
- Return type:
Tensor
- Parameters:
cache (InteractionCache)
charges (Charges)
ihelp (IndexHelper)
Note
The subclasses of
dxtb.components.base.Interactionshould implement the get_<type>_energy methods. If they are not implemented in the subclass, they will evaluate to zero.
- get_gradient(charges, positions, cache, ihelp, grad_outputs=None, retain_graph=True, create_graph=None)#
Compute the nuclear gradient using orbital-resolved charges.
- Return type:
- Parameters:
charges (Charges)
positions (Tensor)
cache (InteractionCache)
ihelp (IndexHelper)
grad_outputs (list[Tensor] | tuple[Tensor, ...] | Tensor | None)
retain_graph (bool | None)
create_graph (bool | None)
Note
This method calls both
get_atom_gradient()andget_shell_gradient()and adds up both gradients. Hence, one of the contributions must be zero.- Parameters:
charges (Tensor) – Orbital-resolved partial charges.
positions (Tensor) – Cartesian coordinates of all atoms (shape:
(..., nat, 3)).cache (InteractionCache) – Restart data for the interaction.
ihelp (IndexHelper) – Index mapping for the basis set.
- Returns:
Nuclear gradient for each atom.
- Return type:
Tensor
- Parameters:
charges (Charges)
positions (Tensor)
cache (InteractionCache)
ihelp (IndexHelper)
grad_outputs (list[Tensor] | tuple[Tensor, ...] | Tensor | None)
retain_graph (bool | None)
create_graph (bool | None)
- get_monopole_atom_energy(cache, qat, **_)[source]#
Compute the energy from the charges, all quantities are atom-resolved.
This method should be implemented by the subclass. Here, it serves only to create an empty Interaction by returning zeros.
- get_monopole_atom_potential(cache, qat, qdp=None, qqp=None)[source]#
Calculate atom-resolved potential. Zero if this interaction is shell-resolved.
- get_monopole_shell_energy(cache, qat, **_)[source]#
Compute the energy from the charges, all quantities are shell-resolved.
This method should be implemented by the subclass. Here, it serves only to create an empty Interaction by returning zeros.
- get_monopole_shell_potential(cache, qsh, qdp=None, qqp=None)[source]#
Calculate shell-resolved potential. Zero if this interaction is only atom-resolved.
- get_potential(cache, charges, ihelp)#
Compute the potential from the charges, all quantities are orbital-resolved.
- Return type:
Potential- Parameters:
cache (InteractionCache) – Restart data for the interaction.
charges (Charges) – Orbital-resolved partial charges.
ihelp (IndexHelper) – Index mapping for the basis set.
- Returns:
Potential vector for each orbital partial charge.
- Return type:
Tensor
- Parameters:
cache (InteractionCache)
charges (Charges)
ihelp (IndexHelper)
- get_quadrupole_atom_energy(cache, qat, qdp=None, qqp=None)#
Compute the energy from the atomic quadrupole moments, all quantities are atom-resolved.
This method should be implemented by the subclass. Here, it serves only to create an empty Interaction by returning zeros.
- Return type:
- Parameters:
cache (InteractionCache) – Restart data for the interaction.
qat (Tensor) – Atom-resolved partial charges (shape:
(..., nat)).qdp (Tensor) – Atom-resolved dipole moments (shape:
(..., nat, 3)).qqp (Tensor) – Atom-resolved quadrupole moments (shape:
(..., nat, 6)).
- Returns:
Energy vector for each atomic quadrupole moment.
- Return type:
Tensor
- Parameters:
cache (InteractionCache)
qat (Tensor)
qdp (Tensor | None)
qqp (Tensor | None)
- get_quadrupole_atom_potential(cache, qat, qdp=None, qqp=None)#
Compute the quadrupole potential. All quantities are atom-resolved.
This method should be implemented by the subclass. Here, it serves only to create an empty Interaction by returning None.
- Return type:
- Parameters:
cache (InteractionCache) – Restart data for the interaction.
qat (Tensor) – Atom-resolved partial charges (shape:
(..., nat)).qdp (Tensor) – Atom-resolved dipole moments (shape:
(..., nat, 3)).qqp (Tensor) – Atom-resolved quadrupole moments (shape:
(..., nat, 6)).
- Returns:
Atom-resolved potential vector for each atom or None if not needed.
- Return type:
Tensor | Nene
- Parameters:
cache (InteractionCache)
qat (Tensor)
qdp (Tensor | None)
qqp (Tensor | None)
- get_shell_coulomb_matrix(numbers, positions, ihelp)[source]#
Calculate the Coulomb matrix.
- Return type:
- Parameters:
numbers (Tensor) – Atomic numbers for all atoms in the system (shape:
(..., nat)).positions (Tensor) – Cartesian coordinates of all atoms (shape:
(..., nat, 3)).ihelp (IndexHelper) – Index mapping for the basis set.
- Returns:
Coulomb matrix.
- Return type:
Tensor
- Parameters:
numbers (Tensor)
positions (Tensor)
ihelp (IndexHelper)
- get_shell_gradient(charges, positions, cache, grad_outputs=None, retain_graph=True, create_graph=None)[source]#
Calculates nuclear gradient of an second order electrostatic energy contribution via PyTorch’s autograd engine.
- Return type:
- Parameters:
charges (Tensor) – Shell-resolved partial charges.
positions (Tensor) – Nuclear positions. Needs
requires_grad=True.cache (ES2Cache) – Cache object for second order electrostatics.
grad_out (Tensor | None) – Gradient of previous computation, i.e., “vector” in VJP of this gradient computation.
- Returns:
Nuclear gradient of energy.
- Return type:
Tensor
- Raises:
RuntimeError –
positionstensor does not haverequires_grad=True.- Parameters:
- override_device(device)#
Override the device of the class object. :rtype:
NoneWarning
This does not change the device of the underlying tensors. It only changes the device of the class object. Use with caution.
- Parameters:
device (
torch.device) – Device to override the current device.- Parameters:
device (device)
- Return type:
None
- override_dtype(dtype)#
Override the dtype of the class object. :rtype:
NoneWarning
This does not change the dtype of the underlying tensors. It only changes the dtype of the class object. Use with caution.
- Parameters:
dtype (
torch.dtype) – Floating point dtype to override the current dtype.- Parameters:
dtype (dtype)
- Return type:
None
- reset()#
Reset the tensor attributes of the
dxtb.components.base.Componentinstance to their original states or to specified values.This method iterates through the attributes defined in
__slots__and resets any tensor attributes to a detached clone of their original state. The requires_grad status of each tensor is preserved.- Return type:
Examples
import torch from dxtb.components.base.field import ElectricField ef = ElectricField(field=torch.tensor([0.0, 0.0, 0.0])) ef.reset()
Notes
Only tensor attributes defined in
__slots__are reset. Non-tensor attributes are ignored. Attempting to reset an attribute not defined in__slots__or providing a non-tensor value in kwargs will not raise an error; the method will simply ignore these cases and proceed with the reset operation for valid tensor attributes.
- to(device=None, dtype=None)#
Returns a copy of the
TensorLikeinstance on the specified device.This method creates and returns a new copy of the
TensorLikeinstance on the specified device “device”.- Return type:
Self- Parameters:
device (
torch.device) – Device to which all associated tensors should be moved.- Returns:
A copy of the
TensorLikeinstance placed on the specified device.- Return type:
- Parameters:
Notes
If the
TensorLikeinstance is already on the desired deviceselfwill be returned.
- type(dtype)#
Returns a copy of the
TensorLikeinstance with specified floating point type. This method creates and returns a new copy of theTensorLikeinstance with the specified dtype.- Return type:
Self- Parameters:
dtype (
torch.dtype) – Floating point type.- Returns:
A copy of the
TensorLikeinstance with the specified dtype.- Return type:
- Parameters:
dtype (dtype)
Notes
If the
TensorLikeinstance has already the desired dtypeSelfwill be returned.
- update(**kwargs)#
Update the attributes of the
Componentinstance.This method updates the attributes of the
Componentinstance based on the provided keyword arguments. Only the attributes defined in__slots__can be updated.- Return type:
- Parameters:
kwargs (dict[str, Any]) – Keyword arguments where keys are attribute names and values are the new values for those attributes. Valid keys are those defined in
__slots__of this class.- Raises:
AttributeError – If any key in kwargs is not an attribute defined in
__slots__.- Parameters:
kwargs (Any)
Examples
import torch from dxtb.components.field import ElectricField ef = ElectricField(field=torch.tensor([0.0, 0.0, 0.0])) ef.update(field=torch.tensor([1.0, 0.0, 0.0]))
- property allowed_dtypes: tuple[dtype, ...]#
Specification of dtypes that the
TensorLikeobject can take. Defaults to float types and must be overridden by subclass if float are not allowed. The IndexHelper is an example that should only allow integers.- Returns:
Collection of allowed dtypes the
TensorLikeobject can take.- Return type:
tuple[torch.dtype, …]
- average: AveragingFunction#
Function to use for averaging the Hubbard parameters.
- Default:
dxtb._src.components.interactions.average.harmonic_average()
- property cache: ComponentCache | None#
Cache for the interaction.
- gexp: Tensor#
Exponent of the second-order Coulomb interaction.
- Default:
2.0
- hubbard: Tensor#
Hubbard parameters of all elements.
- label: str#
Label for the interaction.
- lhubbard: Tensor | None#
Shell-resolved scaling factors for Hubbard parameters.
- Default:
None(i.e., no shell resolution).
- shell_resolved: bool#
Whether electrostatics is shell-resolved.
- Default:
True