30 public FFTransformable<SpinResolvedRealSpaceGrid, ReciprocalSpaceCoefficients> {
51 for (
int grid_point_index = 0; grid_point_index < grid_points; grid_point_index++) {
55 return charge * cell_volume_ / grid_points;
80 std::vector<Real> total_density(grid_points, 0.0);
82 for (
int grid_point_index = 0; grid_point_index < grid_points; grid_point_index++) {
83 total_density[grid_point_index] +=
real_space_data_[spin_index][grid_point_index];
97 Real weight_times_occupation,
99 int real_space_grid_size,
100 Real inverse_cell_volume) {
101 for (
int grid_point_index = 0; grid_point_index < real_space_grid_size;
102 grid_point_index++) {
104 weight_times_occupation * std::norm(psi_real_space[grid_point_index]) *
114 return smooth_real_space_data_;
117 return smooth_real_space_data_;
133 cell_volume_ = volume;
138 Real cell_volume_ = 0.0;
Abstract charge density — a scalar field property of a quantum system.
virtual int total_grid_points() const =0
int number_of_g_vectors() const
void rho_g_to_r(const std::vector< Complex > &charge_density_g_space, std::vector< Real > &charge_density_real_space) const
void rho_r_to_g(const std::vector< Real > &charge_density_real_space, std::vector< Complex > &charge_density_g_space) const
Planewave charge density — stores ρ(r) on FFT grid.
SpinResolvedRealSpaceGrid & smooth_real_space_data()
void add_band_contribution(int spin_index, Real weight_times_occupation, const Complex *psi_real_space, int real_space_grid_size, Real inverse_cell_volume)
const std::vector< Real > & real_space_by_spin_index(int spin_index) const
PlanewaveChargeDensity(const PlanewaveBasis &basis, int number_of_spin_components)
void set_cell_volume(Real volume)
const PlanewaveBasis & basis() const
std::vector< Real > & real_space_by_spin_index(int spin_index)
void to_reciprocal_space() override
PlanewaveChargeDensity()=default
Real get_total_charge() const override
void to_real_space() override
const SpinResolvedRealSpaceGrid & smooth_real_space_data() const
int number_of_spin_components() const
int number_of_spin_components_
constexpr double cell_volume_threshold
std::vector< std::vector< Real > > SpinResolvedRealSpaceGrid
Type aliases for charge density storage.
std::vector< Complex > ReciprocalSpaceCoefficients
std::complex< double > Complex