Dispersion energy#

This module provides the dispersion energy evaluation for the pairwise interactions.

Example

>>> import torch
>>> import tad_dftd3 as d3
>>> numbers = torch.tensor([  # define fragments by setting atomic numbers to zero
...     [8, 1, 1, 8, 1, 6, 1, 1, 1],
...     [0, 0, 0, 8, 1, 6, 1, 1, 1],
...     [8, 1, 1, 0, 0, 0, 0, 0, 0],
... ])
>>> positions = torch.tensor([  # define coordinates once
...     [-4.224363834, +0.270465696, +0.527578960],
...     [-5.011768887, +1.780116228, +1.143194385],
...     [-2.468758653, +0.479766200, +0.982905589],
...     [+1.146167671, +0.452771215, +1.257722311],
...     [+1.841554378, -0.628298322, +2.538065200],
...     [+2.024899840, -0.438480095, -1.127412563],
...     [+1.210773578, +0.791908575, -2.550591723],
...     [+4.077073644, -0.342495506, -1.267841745],
...     [+1.404422261, -2.365753991, -1.503620411],
... ]).repeat(numbers.shape[0], 1, 1)
>>> ref = d3.reference.Reference()
>>> param = dict(a1=0.49484001, s8=0.78981345, a2=5.73083694)  # r²SCAN-D3(BJ)
>>> cn = d3.ncoord.coordination_number(numbers, positions)
>>> weights = d3.model.weight_references(numbers, cn, ref)
>>> c6 = d3.model.atomic_c6(numbers, weights, ref)
>>> energy = d3.disp.dispersion(numbers, positions, c6, **param)
>>> torch.set_printoptions(precision=7)
>>> print(torch.sum(energy[0] - energy[1] - energy[2]))  # energy in Hartree
tensor(-0.0003964)
tad_dftd3.disp.dispersion(numbers, positions, c6, rvdw=None, r4r2=None, damping_function=<function rational_damping>, cutoff=None, s6=1.0, s8=1.0, **kwargs)[source]#

Calculate dispersion energy between pairs of atoms.

Parameters
  • numbers (Tensor) – Atomic numbers of the atoms in the system.

  • positions (Tensor) – Cartesian coordinates of the atoms in the system.

  • c6 (Tensor) – Atomic C6 dispersion coefficients.

  • rvdw (Tensor) – Van der Waals radii of the atoms in the system.

  • r4r2 (Tensor) – r⁴ over r² expectation values of the atoms in the system.

  • damping_function (Callable) – Damping function evaluate distance dependent contributions. Additional arguments are passed through to the function.

  • s6 (float) – Scaling factor for the C6 interaction.

  • s8 (float) – Scaling factor for the C8 interaction.

tad_dftd3.disp.rational_damping(order, distances, rvdw, qq, a1=0.4, a2=5.0)[source]#

Rational damped dispersion interaction between pairs

Parameters
  • order (int) – Order of the dispersion interaction, e.g. 6 for dipole-dipole, 8 for dipole-quadrupole and so on.

  • distances (Tensor) – Pairwise distances between atoms in the system.

  • rvdw (Tensor) – Van der Waals radii of the atoms in the system.

  • qq (Tensor) – Quotient of C8 and C6 dispersion coefficients.

  • a1 (float) – Scaling for the C8 / C6 ratio in the critical radius.

  • a2 (float) – Offset parameter for the critical radius.