Loading...
Searching...
No Matches
effective_potential_non_local.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * EffectiveNonlocalPotential — abstract interface for the effective
5 * D-matrix computation (QE's "newd").
6 *
7 * Combines the bare D_ij^ion matrix with the G-space integral of
8 * V_eff(G) × Q_ij(G) × e^{-iG·τ} to produce the effective D-matrix
9 * used in the non-local Hamiltonian.
10 *
11 * Implements Eq. (13) of K. Laasonen, A. Pasquarello, R. Car, C. Lee &
12 * D. Vanderbilt, Phys. Rev. B 47, 10142 (1993), with V_eff their Eq. (12).
13 * For a PAW dataset the same integral is D̂_ij, Eq. (44) of G. Kresse &
14 * D. Joubert, Phys. Rev. B 59, 1758 (1999).
15 */
16
17#include <complex>
18#include <vector>
19
21
22namespace q3 {
23
24// Forward declarations
25class Crystal;
26class PlanewaveBasis;
27
29 public:
30 virtual ~EffectiveNonlocalPotential() = default;
31
32 /**
33 * Compute the effective D-matrix for all atoms.
34 *
35 * @param crystal_structure Crystal structure with atom positions.
36 * @param planewave_basis Plane-wave basis set.
37 * @param total_potential_g Total effective potential V_eff(G).
38 * @return effective_d_matrix[atom_index][projector_i * nproj + projector_j]
39 */
40 [[nodiscard]] virtual std::vector<std::vector<Real>>
41 compute(const Crystal& crystal_structure,
42 const PlanewaveBasis& planewave_basis,
43 const std::vector<Complex>& total_potential_g) const = 0;
44};
45
46} // namespace q3
virtual std::vector< std::vector< Real > > compute(const Crystal &crystal_structure, const PlanewaveBasis &planewave_basis, const std::vector< Complex > &total_potential_g) const =0
virtual ~EffectiveNonlocalPotential()=default