44 int number_of_spin_components_value,
91 int band_index)
const {
101 .wavefunction.values()[g_vector_index];
109 .wavefunction.coefficient_data();
112 int band_index)
const {
114 .wavefunction.coefficient_data();
128 int band_index)
const {
135 return (band_index < occupied) ? 1.0 : 0.0;
144 for (
int state_index = 0; state_index < total_states; state_index++) {
148 .occupation = (band_init_index < occupied) ? 1.0 : 0.0;
174 for (
int kpoint_state_index = 0; kpoint_state_index < total_kpoint_states;
175 kpoint_state_index++) {
177 result(kpoint_state_index, band_index) =
190 for (
int kpoint_state_index = 0; kpoint_state_index < total_kpoint_states;
191 kpoint_state_index++) {
194 .eigenvalue = eigenvalues(kpoint_state_index, band_index);
244 if (saved_grid !=
nullptr) {
249 if (saved_basis !=
nullptr) {
252 basis_ = planewave_source.basis_;
266 for (
int kpoint_state_index = 0; kpoint_state_index < total_kpoint_states;
267 kpoint_state_index++) {
268 int kpoint_index = kpoint_state_index % number_of_kpoints;
269 int number_of_plane_waves = number_of_plane_waves_per_kpoint[kpoint_index];
273 state.wavefunction.resize(number_of_plane_waves);
274 state.eigenvalue = 0.0;
275 state.occupation = 0.0;
285 .wavefunction.number_of_plane_waves();
int number_of_kpoints() const
int number_of_spin_components
void copy_quantum_states_from(const QuantumSystem< PlanewaveKohnShamQuantumState > &source) override
~PlanewaveKohnShamQuantumSystem() override=default
const KPointsGrid & kpoint_grid() const
PlanewaveKohnShamQuantumSystem()=default
void set_number_of_electrons(Real value)
const KPointsGrid * kpoint_grid_
const PlanewaveBasis & basis() const
PlanewaveKohnShamQuantumSystem(const KPointsGrid &kpoint_grid, const PlanewaveBasis &basis, int number_of_bands, int number_of_spin_components_value, Real number_of_electrons)
PlanewaveKohnShamQuantumState & quantum_state(int kpoint_state_index, int band_index)
const PlanewaveBasis * basis_
Real spin_degeneracy() const
Complex wavefunction(int kpoint_index, int band_index, int g_vector_index) const
void set_occupation(int kpoint_state_index, int band_index, Real value)
Matrix< Real > eigenvalues_matrix() const
Real number_of_electrons() const
Occupation occupation_configuration() const
Return a snapshot of the current occupation configuration.
void set_eigenvalue(int kpoint_state_index, int band_index, Real value)
void set_eigenvalues_from_matrix(const Matrix< Real > &eigenvalues)
Real number_of_electrons_
void set_number_of_bands(int value)
Real fermi_energy() const
bool is_fractionally_occupied_
Real occupation_by_kpoint_state_index_and_band_index(int kpoint_state_index, int band_index) const
void set_kpoint_grid(const KPointsGrid *kpoint_grid)
void allocate_electronic_states(const std::vector< int > &number_of_plane_waves_per_kpoint)
int number_of_plane_waves_for_kpoint_state(int kpoint_state_index) const
int number_of_occupied_bands_per_spin() const
int number_of_kpoint_states() const
const PlanewaveKohnShamQuantumState & quantum_state(int kpoint_state_index, int band_index) const
void set_basis(const PlanewaveBasis *basis)
int number_of_bands() const
Real eigenvalue(int kpoint_state_index, int band_index) const
Complex * wavefunction_band_data(int kpoint_state_index, int band_index)
void set_fermi_energy(Real value)
const Complex * wavefunction_band_data(int kpoint_state_index, int band_index) const
std::vector< QuantumStateType > quantum_states_
virtual void copy_quantum_states_from(const QuantumSystem< QuantumStateType > &source)
std::complex< double > Complex
Electronic occupation configuration for a quantum system.
Real spin_degeneracy
Spin degeneracy factor (2.0 for unpolarized, 1.0 for spin-polarized).
bool is_smeared
Whether smearing is active (fractional occupations).
Real number_of_electrons
Total number of electrons.
int occupied_bands_per_spin
Number of occupied bands per spin channel.