dftd3_fourier_ewald Module

Reciprocal space evaluation of the two-body dispersion energy.

With a separable representation of the C6 coefficients the lattice sum

E = -1/2 sum_l lambda_l sum_T sum_ij C_li C_lj phi(|r_ij + T|)

becomes a product of structure factors in reciprocal space. The damped pair potential is bounded at the origin, so no real space complement is required and the reciprocal sum alone converges exponentially. The self interaction of the unrestricted double sum is removed by the value of the potential at the origin.



Subroutines

public subroutine get_dispersion_ewald(mol, lowrank, ghost, terms, nterm, kcut, gwvec, gwdcn, energies, dEdcn, gradient, sigma, partition)

Evaluate the two-body dispersion energy by summation over the reciprocal lattice

Arguments

Type IntentOptional Attributes Name
class(structure_type), intent(in) :: mol

Molecular structure data

class(d3_lowrank_c6), intent(in) :: lowrank

Separable representation of the C6 coefficients

logical, intent(in) :: ghost(:)

Atoms excluded from the dispersion calculation

type(fourier_term), intent(in) :: terms(:,:,:)

Terms of the damped pair potential for each pair of species

integer, intent(in) :: nterm(:,:)

Number of terms for each pair of species

real(kind=wp), intent(in) :: kcut

Reciprocal space cutoff

real(kind=wp), intent(in) :: gwvec(:,:)

Weighting function for the atomic reference systems

real(kind=wp), intent(in), optional :: gwdcn(:,:)

Derivative of the weighting function w.r.t. the coordination number

real(kind=wp), intent(inout) :: energies(:)

Dispersion energy

real(kind=wp), intent(inout), optional :: dEdcn(:)

Derivative of the energy w.r.t. the coordination number

real(kind=wp), intent(inout), optional :: gradient(:,:)

Dispersion gradient

real(kind=wp), intent(inout), optional :: sigma(:,:)

Dispersion virial

type(work_partition), intent(in), optional :: partition

Work partition of the reciprocal space summation