rational_damping_param Derived Type

type, public, extends(damping_param) :: rational_damping_param

Rational (Becke-Johnson) damping model


Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: a1
real(kind=wp), public :: a2
real(kind=wp), public :: alp
real(kind=wp), public :: s6
real(kind=wp), public :: s8
real(kind=wp), public :: s9

Type-Bound Procedures

procedure, public :: get_damping_kernel

Evaluate pair kernel and its derivatives

  • private pure subroutine get_damping_kernel(self, izp, jzp, rvdw, r4r2, r2, c6, e, er, ec, err, erc, ecc)

    Pair dispersion kernel and its derivatives w.r.t. squared distance and C6

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    integer, intent(in) :: izp

    Species indices of the pair

    integer, intent(in) :: jzp

    Species indices of the pair

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    Squared distance of the pair

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

    C6 coefficient of the pair

    real(kind=wp), intent(out) :: e

    Pair energy and its derivatives

    real(kind=wp), intent(out) :: er

    Pair energy and its derivatives

    real(kind=wp), intent(out) :: ec

    Pair energy and its derivatives

    real(kind=wp), intent(out) :: err

    Pair energy and its derivatives

    real(kind=wp), intent(out) :: erc

    Pair energy and its derivatives

    real(kind=wp), intent(out) :: ecc

    Pair energy and its derivatives

generic, public :: get_dispersion2 => get_dispersion2_impl, get_dispersion2_compat

  • private subroutine get_dispersion2(self, mol, trans, cutoff, width, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma, partition)

    Evaluation of the dispersion energy expression

    Arguments

    Type IntentOptional Attributes Name
    class(zero_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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 atom pairs, defaults to the complete work

  • private subroutine get_dispersion2_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma)

    Evaluation of the dispersion energy expression

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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

procedure, public :: get_dispersion2_compat

  • private subroutine get_dispersion2_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma)

    Evaluation of the dispersion energy expression

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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

procedure, public :: get_dispersion2_ewald

Evaluate the two-body dispersion energy by Ewald summation

  • private subroutine get_dispersion2_ewald(self, mol, disp, gwvec, gwdcn, energies, dEdcn, gradient, sigma, error, partition)

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

    Requires a separable representation of the C6 coefficients in the dispersion model and a damping function supporting the Ewald summation.

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

    class(d3_model), intent(in) :: disp

    Dispersion model

    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(error_type), intent(out), allocatable :: error

    Error handling

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

    Work partition of the reciprocal space summation

procedure, public :: get_dispersion2_impl => get_dispersion2

Evaluate pairwise dispersion energy expression

  • private subroutine get_dispersion2(self, mol, trans, cutoff, width, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma, partition)

    Evaluation of the dispersion energy expression

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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 atom pairs, defaults to the complete work

generic, public :: get_dispersion3 => get_dispersion3_impl, get_dispersion3_compat

  • private subroutine get_dispersion3(self, mol, trans, cutoff, width, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma, partition)

    Evaluation of the dispersion energy expression

    Arguments

    Type IntentOptional Attributes Name
    class(zero_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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 atom pairs, defaults to the complete work

  • private subroutine get_dispersion3_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma)

    Evaluation of the dispersion energy expression

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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

procedure, public :: get_dispersion3_compat

  • private subroutine get_dispersion3_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma)

    Evaluation of the dispersion energy expression

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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

procedure, public :: get_dispersion3_hessian

Evaluate ATM three-body contribution to the hessian

  • private subroutine get_dispersion3_hessian(self, mol, trans, cutoff, width, rvdw, r4r2, c6, dc6dcn, d2c6dcn2, d2c6dcnij, hessian, dEdcn, dEdcndr, dEdcndcn, partition)

    Evaluation of the three-body contribution to the hessian

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

    Derivatives of the C6 w.r.t. the coordination number

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

    Derivatives of the C6 w.r.t. the coordination number

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

    Derivatives of the C6 w.r.t. the coordination number

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

    Second derivative of the energy w.r.t. the Cartesian coordinates

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

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

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

    Mixed derivative w.r.t. coordination number and Cartesian coordinates

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

    Second derivative w.r.t. the coordination numbers

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

    Work partition of the atom pairs, defaults to the complete work

procedure, public :: get_dispersion3_impl => get_dispersion3

Evaluate ATM three-body dispersion energy expression

  • private subroutine get_dispersion3(self, mol, trans, cutoff, width, rvdw, r4r2, c6, dc6dcn, energy, dEdcn, gradient, sigma, partition)

    Evaluation of the dispersion energy expression

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    C6 coefficients for all atom pairs.

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

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

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

    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 atom pairs, defaults to the complete work

procedure, public :: get_fourier_terms

Reciprocal space representation of the damped pair potential

  • private pure subroutine get_fourier_terms(self, izp, jzp, rvdw, r4r2, terms, nterm)

    Reciprocal space representation of the damped pair potential

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    integer, intent(in) :: izp

    Species indices of the pair

    integer, intent(in) :: jzp

    Species indices of the pair

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

    Van-der-Waals radii for damping function

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

    Expectation values for C8 extrapolation

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

    Terms of the damped pair potential

    integer, intent(out) :: nterm

    Number of terms of the damped pair potential

generic, public :: get_pairwise_dispersion2 => get_pairwise_dispersion2_impl, get_pairwise_dispersion2_compat

  • private subroutine get_pairwise_dispersion2(self, mol, trans, cutoff, width, rvdw, r4r2, c6, energy)

    Evaluation of the dispersion energy expression projected on atomic pairs

    Arguments

    Type IntentOptional Attributes Name
    class(zero_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Dispersion energy

  • private subroutine get_pairwise_dispersion2_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, energy)

    Evaluation of the pairwise representation of the dispersion energy

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Pairwise representation of the dispersion energy

procedure, public :: get_pairwise_dispersion2_compat

  • private subroutine get_pairwise_dispersion2_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, energy)

    Evaluation of the pairwise representation of the dispersion energy

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Pairwise representation of the dispersion energy

procedure, public :: get_pairwise_dispersion2_impl => get_pairwise_dispersion2

Evaluate pairwise representation of additive dispersion energy

  • private subroutine get_pairwise_dispersion2(self, mol, trans, cutoff, width, rvdw, r4r2, c6, energy)

    Evaluation of the dispersion energy expression projected on atomic pairs

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Dispersion energy

generic, public :: get_pairwise_dispersion3 => get_pairwise_dispersion3_impl, get_pairwise_dispersion3_compat

  • private subroutine get_pairwise_dispersion3(self, mol, trans, cutoff, width, rvdw, r4r2, c6, energy)

    Evaluation of the dispersion energy expression

    Arguments

    Type IntentOptional Attributes Name
    class(zero_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Dispersion energy

  • private subroutine get_pairwise_dispersion3_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, energy)

    Evaluation of the pairwise representation of the dispersion energy

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Pairwise representation of the dispersion energy

procedure, public :: get_pairwise_dispersion3_compat

  • private subroutine get_pairwise_dispersion3_compat(self, mol, trans, cutoff, rvdw, r4r2, c6, energy)

    Evaluation of the pairwise representation of the dispersion energy

    deprecated: removed with the v2 API, use the interface with an explicit width

    Arguments

    Type IntentOptional Attributes Name
    class(damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Pairwise representation of the dispersion energy

procedure, public :: get_pairwise_dispersion3_impl => get_pairwise_dispersion3

Evaluate pairwise representation of non-additive dispersion energy

  • private subroutine get_pairwise_dispersion3(self, mol, trans, cutoff, width, rvdw, r4r2, c6, energy)

    Evaluation of the dispersion energy expression

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    class(structure_type), intent(in) :: mol

    Molecular structure data

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

    Lattice points

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

    Real space cutoff

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

    Width of smooth cutoff

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

    Van-der-Waals radii for damping function

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

    Expectation values for r4 over r2 operator

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

    C6 coefficients for all atom pairs.

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

    Dispersion energy

procedure, public :: has_threebody

Whether the three-body term contributes to the energy

  • private pure function has_threebody(self) result(has)

    Whether the three-body term contributes to the energy

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    Return Value logical

    Whether the three-body term contributes

procedure, public :: supports_ewald

Rational damping has a closed form Fourier transform

  • private pure function supports_ewald(self) result(supported)

    Rational damping has a closed form Fourier transform

    Arguments

    Type IntentOptional Attributes Name
    class(rational_damping_param), intent(in) :: self

    Damping parameters

    Return Value logical

    Whether the damping function can be evaluated in reciprocal space

Source Code

   type, extends(damping_param) :: rational_damping_param
      real(wp) :: s6
      real(wp) :: s8
      real(wp) :: s9
      real(wp) :: a1
      real(wp) :: a2
      real(wp) :: alp
   contains

      !> Evaluate pairwise dispersion energy expression
      procedure :: get_dispersion2_impl => get_dispersion2

      !> Evaluate ATM three-body dispersion energy expression
      procedure :: get_dispersion3_impl => get_dispersion3

      !> Whether the three-body term contributes to the energy
      procedure :: has_threebody

      !> Evaluate pairwise representation of additive dispersion energy
      procedure :: get_pairwise_dispersion2_impl => get_pairwise_dispersion2

      !> Evaluate pairwise representation of non-additive dispersion energy
      procedure :: get_pairwise_dispersion3_impl => get_pairwise_dispersion3

      !> Evaluate pair kernel and its derivatives
      procedure :: get_damping_kernel

      !> Rational damping has a closed form Fourier transform
      procedure :: supports_ewald

      !> Reciprocal space representation of the damped pair potential
      procedure :: get_fourier_terms

      !> Evaluate ATM three-body contribution to the hessian
      procedure :: get_dispersion3_hessian

   end type rational_damping_param