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.
Separable representation of the reference C6 coefficients
| 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 |
| 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 |
Setup of the separable representation of the reference C6 coefficients
| 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 |
Decompose the reference C6 coefficients into a separable expansion.
| Type | Intent | Optional | 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 |