45 int number_of_species_types) {
46 static constexpr Real q_range_padding_factor = 1.1;
47 Real maximum_q_value =
52 tabulate_all(pseudopotential_set, number_of_species_types);
60 int number_of_species_types) {
62 tabulate_all(pseudopotential_set, number_of_species_types);
66 return table_[species_type_index][beta_index].interpolate(q_value);
71 return table_[species_type_index][beta_index].interpolate_derivative(q_value);
97 const std::vector<Real>& q_point_values,
98 std::vector<Real>& destination)
const {
99 const auto& projector = pseudopotential.
projectors[projector_index];
102 projector.radial_values,
103 projector.angular_momentum,
104 projector.number_of_radial_cutoff_points,
110 void tabulate_all(
const PseudopotentialSet& pseudopotential_set,
int number_of_species_types) {
113 table_.resize(number_of_species_types);
114 for (
int type_index = 0; type_index < number_of_species_types; type_index++) {
115 const auto& pseudopotential = pseudopotential_set[type_index];
116 table_[type_index].resize(pseudopotential.number_of_projectors);
117 for (
int projector_index = 0; projector_index < pseudopotential.number_of_projectors;
119 table_[type_index][projector_index].resize(q_grid_);
123 table_[type_index][projector_index].values());
128 UniformQGrid q_grid_;
129 std::vector<std::vector<UniformQGridTable>> table_;
virtual ~BetaFunctionTable()=default
virtual void tabulate_projector(const Pseudopotential &pseudopotential, int projector_index, const std::vector< Real > &q_point_values, std::vector< Real > &destination) const
void initialize(const PlanewaveBasis &planewave_basis, const PseudopotentialSet &pseudopotential_set, int number_of_species_types)
const UniformQGrid & q_grid() const
void initialize(const UniformQGrid &q_grid, const PseudopotentialSet &pseudopotential_set, int number_of_species_types)
Real interpolate(int species_type_index, int beta_index, Real q_value) const
int number_of_q_points() const
BetaFunctionTable()=default
Real interpolate_derivative(int species_type_index, int beta_index, Real q_value) const
Real charge_density_energy_cutoff() const
Base class for all pseudopotential types.
std::vector< Real > radial_grid_derivative
std::vector< Projector > projectors
std::vector< Real > radial_grid
constexpr double default_q_grid_spacing
void transform_spherical_bessel(const std::vector< Real > &grid, const std::vector< Real > &integration_factors, const std::vector< Real > &function, int degree, int mesh_size, const std::vector< Real > &q_points, std::vector< Real > &fourier_transform)