53 int number_of_candidates,
54 int number_of_plane_waves,
58 Complex* overlap_basis_vectors) = 0;
67 int maximum_basis_size,
68 int number_of_plane_waves,
71 const Complex* hamiltonian_basis_vectors,
72 const Complex* overlap_basis_vectors,
83 int maximum_basis_size,
85 const Complex* subspace_hamiltonian,
86 const Complex* subspace_overlap,
88 Complex* eigenvector_matrix) = 0;
116 int number_of_plane_waves,
118 int maximum_basis_size,
120 bool is_identity_overlap,
122 const Complex* subspace_hamiltonian,
123 const Complex* subspace_overlap,
125 Complex* hamiltonian_basis_vectors,
126 Complex* overlap_basis_vectors,
127 Complex* rotation_scratch) = 0;
134 int number_of_plane_waves,
136 int kpoint_index_state,
138 const Complex* eigenvector_matrix,
140 const Real* eigenvalues,
162 int number_of_plane_waves,
164 int maximum_candidates,
166 const Complex* eigenvector_matrix,
167 int eigenvector_leading_dimension,
168 const Real* eigenvalues,
169 const std::vector<bool>& band_converged,
170 const Real* kinetic_energy_squared,
171 const Complex* hamiltonian_basis_vectors,
172 const Complex* overlap_basis_vectors,
173 Complex* correction_columns) = 0;
179 int number_of_plane_waves,
180 const Real* kinetic_energy_squared,
181 const Real* eigenvalues,
182 const std::vector<bool>& band_converged,
183 Complex* residual_wavefunctions) = 0;
virtual void set_gamma_origin_is_local(bool origin_is_local)=0
virtual void apply_preconditioner(int number_of_bands, int number_of_plane_waves, const Real *kinetic_energy_squared, const Real *eigenvalues, const std::vector< bool > &band_converged, Complex *residual_wavefunctions)=0
virtual int build_correction_vectors(int basis_size, int number_of_plane_waves, int number_of_bands, int maximum_candidates, bool is_gamma_only, const Complex *eigenvector_matrix, int eigenvector_leading_dimension, const Real *eigenvalues, const std::vector< bool > &band_converged, const Real *kinetic_energy_squared, const Complex *hamiltonian_basis_vectors, const Complex *overlap_basis_vectors, Complex *correction_columns)=0
virtual void extract_eigenvectors(int basis_size, int number_of_plane_waves, int number_of_bands, int kpoint_index_state, bool is_gamma_only, const Complex *eigenvector_matrix, const Complex *basis_vectors, const Real *eigenvalues, Complex *rotated_scratch, PlanewaveKohnShamQuantumSystem &quantum_system)=0
virtual int diagonalize_subspace(int basis_size, int maximum_basis_size, bool is_gamma_only, const Complex *subspace_hamiltonian, const Complex *subspace_overlap, Real *eigenvalues, Complex *eigenvector_matrix)=0
virtual void update_subspace_matrices(int start_column, int new_columns, int total_basis_size, int maximum_basis_size, int number_of_plane_waves, bool is_gamma_only, const Complex *basis_vectors, const Complex *hamiltonian_basis_vectors, const Complex *overlap_basis_vectors, Complex *subspace_hamiltonian, Complex *subspace_overlap)=0
virtual ~PlanewaveSubspaceManager()=default
virtual int collapse_subspace(int basis_size, int number_of_plane_waves, int number_of_bands, int maximum_basis_size, bool is_gamma_only, bool is_identity_overlap, const OverlapOperator *overlap_operator, const Complex *subspace_hamiltonian, const Complex *subspace_overlap, Complex *basis_vectors, Complex *hamiltonian_basis_vectors, Complex *overlap_basis_vectors, Complex *rotation_scratch)=0
virtual int orthogonalize_batch(int starting_vector_index, int number_of_candidates, int number_of_plane_waves, bool is_gamma_only, const OverlapOperator *overlap_operator, Complex *basis_vectors, Complex *overlap_basis_vectors)=0
std::complex< double > Complex