dftd3_fourier_decomposition Module

Separable low-rank representation of the environment dependent C6 coefficients.

The reference C6 coefficients are indexed by a species and a reference system and form a symmetric matrix, which is eigendecomposed once for a given system as

C6ref(Zi, p, Zj, q) = sum_l lambda_l v_l(Zi, p) v_l(Zj, q)

Contracting the eigenvectors with the Gaussian weights of the reference systems yields atom centered factors

C6(l, i) = sum_p v_l(Zi, p) w(i, p)

such that the pair coefficients become separable

C6(i, j) = sum_l lambda_l C6(l, i) C6(l, j)

This separability is what allows a reciprocal space evaluation of the dispersion energy, since the atomic factors can be accumulated into structure factors.



Derived Types

type, public ::  d3_lowrank_c6

Separable representation of the reference C6 coefficients

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: error = 0.0_wp

Maximum relative error of the reconstructed reference C6 coefficients

real(kind=wp), public :: kcut = 0.0_wp

Reciprocal space cutoff, zero selects the cutoff from the damping radii

real(kind=wp), public, allocatable :: lambda(:)

Eigenvalues of the reference C6 matrix

integer, public :: mesh = 0

Number of mesh points for the particle mesh evaluation

integer, public :: rank = 0

Number of terms in the separable expansion

real(kind=wp), public, allocatable :: vec(:,:,:)

Eigenvectors resolved by reference system and species

Type-Bound Procedures

procedure, public :: get_atomic_c6

Assemble the pair C6 coefficients from the separable factors

procedure, public :: get_weights

Contract the eigenvectors with the reference system weights

type, public ::  d3_lowrank_config

Setup of the separable representation of the reference C6 coefficients

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: kcut = 0.0_wp

Reciprocal space cutoff, zero selects the cutoff from the damping radii

integer, public :: mesh = 0

Number of mesh points for the particle mesh evaluation, zero derives the mesh from the reciprocal space cutoff and a negative value sums over the reciprocal lattice directly

integer, public :: rank = 0

Requested rank of the expansion, zero selects the rank from the tolerance

real(kind=wp), public :: tolerance = 1.0e-4_wp

Requested maximum relative error of the reference C6 coefficients


Subroutines

public subroutine new_lowrank_c6(self, ref, c6ref, config)

Decompose the reference C6 coefficients into a separable expansion.

Read more…

Arguments

Type IntentOptional Attributes Name
type(d3_lowrank_c6), intent(out) :: self

Instance of the separable representation

integer, intent(in) :: ref(:)

Number of reference systems for each species

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

Reference C6 coefficients

type(d3_lowrank_config), intent(in) :: config

Setup of the separable representation