43 const std::vector<std::vector<Real>>& charge_density_real,
44 int number_of_spin_components,
45 std::vector<std::vector<Real>>& exchange_correlation_density,
46 std::vector<std::vector<Complex>>& exchange_correlation_density_g)
const override {
50 exchange_correlation_density.assign(number_of_spin_components,
51 std::vector<Real>(local_grid_points));
52 exchange_correlation_density_g.assign(number_of_spin_components,
53 std::vector<Complex>(number_of_g_vectors));
56 if (!core_charge_density_g_.empty() && cached_core_charge_density_real_.empty()) {
60 for (
int spin_index = 0; spin_index < number_of_spin_components; ++spin_index) {
61 for (
int grid_index = 0; grid_index < local_grid_points; ++grid_index) {
62 exchange_correlation_density[spin_index][grid_index] =
63 charge_density_real[spin_index][grid_index];
65 if (!cached_core_charge_density_real_.empty()) {
66 for (
int grid_index = 0; grid_index < local_grid_points; ++grid_index) {
67 exchange_correlation_density[spin_index][grid_index] +=
68 cached_core_charge_density_real_[grid_index] / number_of_spin_components;
73 exchange_correlation_density_g[spin_index]);
74 for (
int g_vector_index = 0;
75 g_vector_index < static_cast<int>(core_charge_density_g_.size());
77 exchange_correlation_density_g[spin_index][g_vector_index] +=
78 core_charge_density_g_[g_vector_index] /
79 static_cast<Real>(number_of_spin_components);