92 int number_of_plane_waves,
93 const std::vector<int>& g_vector_indices,
94 const Crystal& crystal_structure,
97 std::vector<std::vector<Complex>>&
orbitals)
const override {
98 const Real two_pi_over_lattice_parameter =
100 const Vector3D kpoint_crystal = kpoint_grid[kpoint_index].coordinates;
104 for (
int dimension = 0; dimension < 3; dimension++) {
105 kpoint_cartesian[dimension] = kpoint_crystal.
x * reciprocal_lattice[0][dimension] +
106 kpoint_crystal.
y * reciprocal_lattice[1][dimension] +
107 kpoint_crystal.
z * reciprocal_lattice[2][dimension];
111 std::vector<Complex>(number_of_plane_waves,
Complex(0.0, 0.0)));
113 for (std::size_t orbital_index = 0; orbital_index < orbitals_.size(); orbital_index++) {
123 for (
int dimension = 0; dimension < 3; dimension++) {
124 center_cartesian[dimension] =
130 const Real kpoint_phase_argument =
132 (kpoint_cartesian.
x * center_cartesian.
x + kpoint_cartesian.
y * center_cartesian.
y +
133 kpoint_cartesian.
z * center_cartesian.
z);
147 for (
int g_index = 0; g_index < number_of_plane_waves; g_index++) {
148 const GVector& g_vector = planewave_basis.
g_vectors()[g_vector_indices[g_index]];
149 const Real component_x = kpoint_cartesian.
x + g_vector.
g_cart.
x;
150 const Real component_y = kpoint_cartesian.
y + g_vector.
g_cart.
y;
151 const Real component_z = kpoint_cartesian.
z + g_vector.
g_cart.
z;
152 const Real magnitude =
153 std::sqrt(component_x * component_x + component_y * component_y +
154 component_z * component_z) *
155 two_pi_over_lattice_parameter;
157 const Real denominator = 1.0 + magnitude * magnitude * decay * decay;
158 const Real radial = normalisation / (denominator * denominator);
160 const Real structure_phase_argument =
162 g_vector.
g_cart.
y * center_cartesian.
y +
163 g_vector.
g_cart.
z * center_cartesian.
z);