82 number_of_species_types);
88 number_of_species_types);
93 for (
int type_index = 0; type_index < number_of_species_types; type_index++) {
95 for (
int g_vector_index = 0; g_vector_index < number_of_g_vectors; g_vector_index++) {
98 g_vector_magnitudes[g_vector_index]);
103 for (
int g_vector_index = 0; g_vector_index < number_of_g_vectors; g_vector_index++) {
104 for (
int type_index = 0; type_index < number_of_species_types; type_index++) {
105 Complex structure_factor(0.0, 0.0);
106 for (
int atom_index = 0; atom_index < crystal_structure.
number_of_atoms();
245 int projector_index)
const {
309 species_type_index, beta_index, q_value);
324 Real q_value)
const {
340 Real q_value)
const {
400 std::vector<int> mesh_truncation_sizes(number_of_species_types);
401 for (
int type_index = 0; type_index < number_of_species_types; type_index++) {
404 mesh_truncation_sizes[type_index] = pseudopotential.mesh_size;
405 for (
int radial_index = 0; radial_index < pseudopotential.mesh_size;
407 if (pseudopotential.radial_grid[radial_index] >
409 mesh_truncation_sizes[type_index] = radial_index + 1;
413 mesh_truncation_sizes[type_index] =
414 2 * ((mesh_truncation_sizes[type_index] + 1) / 2) - 1;
415 if (mesh_truncation_sizes[type_index] > pseudopotential.mesh_size) {
416 mesh_truncation_sizes[type_index] = pseudopotential.mesh_size;
417 if (mesh_truncation_sizes[type_index] % 2 == 0) {
418 mesh_truncation_sizes[type_index]--;
422 mesh_truncation_sizes[type_index] = pseudopotential.mesh_size;
423 if (mesh_truncation_sizes[type_index] % 2 == 0) {
424 mesh_truncation_sizes[type_index]--;
bool has_nonlinear_core_correction() const
const std::vector< Complex > & core_charge_density_reciprocal() const
void initialize(const Crystal &crystal_structure, const PlanewaveBasis &planewave_basis, const PseudopotentialSet &pseudopotential_set, const std::vector< Real > &g_vector_magnitudes, Real cell_volume, const CoreChargeDensityTable &core_charge_density_table)
Real interpolate(int species_type_index, Real q_value) const
Real interpolate_derivative(int species_type_index, Real q_value) const
void initialize(const UniformQGrid &q_grid, const PseudopotentialSet &pseudopotential_set, const std::vector< int > &mesh_sizes, int number_of_species_types)
Vector3D convert_from_crystal_to_cartesian(int atom_index) const
int species_type_index(int atom_index) const
int number_of_atoms() const
Real interpolate(int species_type_index, Real q_value) const
Real interpolate_derivative(int species_type_index, Real q_value) const
void initialize(const UniformQGrid &q_grid, const PseudopotentialSet &pseudopotential_set, const std::vector< int > &mesh_sizes, Real cell_volume, int number_of_species_types)
const std::vector< Complex > & core_charge_density_reciprocal() const
int projector_magnetic_quantum_number(int species_type, int projector_index) const
Real interpolate_local_potential(int element_type, Real q_value) const
int projector_angular_momentum(int species_type, int projector_index) const
std::unique_ptr< BetaFunctionTable > beta_function_table_
virtual ~NormConservingPlanewaveBasis()=default
std::vector< int > mesh_sizes_
Real interpolate_rho_core(int element_type, Real q_value) const
std::vector< std::vector< Real > > local_potential_g_per_species_
CoreChargeDensityTable core_charge_density_table_
void compute_mesh_truncation_sizes(int number_of_species_types)
const std::vector< Real > & atomic_charge_density_g(int species_type) const
const BetaFunctionTable & beta_function_table() const
bool has_nonlinear_core_correction() const
int total_number_of_projectors() const
ProjectorMappingTable projector_mapping_table_
Real bare_d_matrix_element(int species_type, int projector_a, int projector_b) const
int number_of_projectors(int species_type) const
int beta_angular_momentum(int species_type, int projector_index) const
Real interpolate_core_charge_density(int element_type, Real q_value) const
const std::vector< Complex > & total_local_potential_g() const
Real interpolate_core_charge_density_derivative(int element_type, Real q_value) const
const std::vector< Real > & local_potential_g(int species_type_index) const
Real interpolate_dbeta(int species_type_index, int beta_index, Real q_value) const
PseudopotentialSet pseudopotential_set_
NormConservingPlanewaveBasis()=default
const CoreChargeDensityTable & core_charge_density_table() const
const LocalPotentialTable & local_potential_table() const
std::vector< std::vector< Real > > atomic_charge_density_g_
int projector_combined_lm_index(int species_type, int projector_index) const
Real interpolate_local_potential_derivative(int element_type, Real q_value) const
const PlanewaveBasis & planewave_basis() const
CoreChargeData core_charge_data_
const PseudopotentialSet & pseudopotential_set() const
Real interpolate_beta(int species_type_index, int beta_index, Real q_value) const
int projector_to_beta_index(int species_type, int projector_index) const
LocalPotentialTable local_potential_table_
virtual bool is_ultrasoft() const
int number_of_projector_channels(int species_type) const
virtual void init(const Crystal &crystal_structure, const PlanewaveBasis &planewave_basis, const PseudopotentialSet &pseudopotential_set)
const PlanewaveBasis * planewave_basis_ptr_
const ProjectorMappingTable & projector_mapping_table() const
std::vector< Complex > total_local_potential_g_
int number_of_g_vectors() const
const std::vector< GVector > & g_vectors() const
const std::vector< Real > & g_vector_magnitudes() const
int number_of_channels(int species_type) const
int to_beta_index(int species_type, int channel_index) const
int magnetic_quantum_number(int species_type, int channel_index) const
int total_number_of_projectors() const
void build(const Crystal &crystal_structure, const PseudopotentialSet &pseudopotential_set, int number_of_species_types)
int angular_momentum(int species_type, int channel_index) const
int combined_lm_index(int species_type, int channel_index) const
PseudopotentialSet clone() const
Deep-clone the entire set (preserves derived types).
constexpr bool use_radial_integration_truncation
constexpr double radial_integration_truncation_radius
std::vector< std::vector< Real > > tabulate_atomic_charge_density_in_g_space(const PseudopotentialSet &pseudopotential_set, const std::vector< int > &mesh_sizes, const std::vector< Real > &g_vector_magnitudes, Real q_spacing, int number_of_q_points)
std::unique_ptr< BetaFunctionTable > create_beta_function_table(const PseudopotentialSet &pseudopotential_set)
Complex compute_phase_factor(Real phase)
Compute e^{-iφ} = cos(φ) - i·sin(φ) (standard structure factor phase).
std::complex< double > Complex