MADNESS
version 0.9
|
#include <eigsolver.h>
Public Types | |
typedef Function< T, NDIM > | funcT |
typedef Vector< double, NDIM > | kvecT |
typedef SeparatedConvolution < double, NDIM > | operatorT |
typedef std::shared_ptr < operatorT > | poperatorT |
Public Member Functions | |
EigSolver (World &world, std::vector< funcT > phis, std::vector< double > eigs, std::vector< EigSolverOp< T, NDIM > * > ops, std::vector< kvecT > kpoints, ElectronicStructureParams params) | |
Constructor for periodic system. More... | |
EigSolver (World &world, std::vector< funcT > phis, std::vector< double > eigs, std::vector< EigSolverOp< T, NDIM > * > ops, ElectronicStructureParams params) | |
Constructor for non-periodic system. More... | |
virtual | ~EigSolver () |
Destructor. More... | |
void | solve (int maxits) |
void | multi_solve (int maxits) |
double | get_eig (int indx) |
funcT | get_phi (int indx) |
const std::vector< funcT > & | phis () |
const std::vector< double > & | eigs () |
void | addObserver (IEigSolverObserver< T, NDIM > *obs) |
T | matrix_element (const funcT &phii, const funcT &phij) |
Computes a matrix element given the left and right functions. More... | |
void | print_matrix_elements (const funcT &phii, const funcT &phij) |
Prints a matrix element given the left and right functions. More... | |
void | prepare_ops () |
Preprocesses the operators for doing an iteration of "eigensolving". More... | |
void | make_bsh_operators () |
Makes the BSH Green's functions for the parallel solver (multi_solve()). More... | |
void | update_occupation () |
Static Public Member Functions | |
static funcT | compute_rho (std::vector< funcT > phis, std::vector< double > occs, const World &world) |
Computes the electronic density. More... | |
The EigSolver class is the class that is the workhorse of both the Hartree Fock and the DFT algorithms. This class relies on the wrapper class to give it a list of operators to implement as its potential. This should allow for much more reuse.
typedef Function<T,NDIM> madness::EigSolver< T, NDIM >::funcT |
typedef Vector<double,NDIM> madness::EigSolver< T, NDIM >::kvecT |
typedef SeparatedConvolution<double,NDIM> madness::EigSolver< T, NDIM >::operatorT |
typedef std::shared_ptr<operatorT> madness::EigSolver< T, NDIM >::poperatorT |
madness::EigSolver< T, NDIM >::EigSolver | ( | World & | world, |
std::vector< funcT > | phis, | ||
std::vector< double > | eigs, | ||
std::vector< EigSolverOp< T, NDIM > * > | ops, | ||
std::vector< kvecT > | kpoints, | ||
ElectronicStructureParams | params | ||
) |
Constructor for periodic system.
References madness::EigSolver< T, NDIM >::compute_rho().
madness::EigSolver< T, NDIM >::EigSolver | ( | World & | world, |
std::vector< funcT > | phis, | ||
std::vector< double > | eigs, | ||
std::vector< EigSolverOp< T, NDIM > * > | ops, | ||
ElectronicStructureParams | params | ||
) |
Constructor for non-periodic system.
References madness::EigSolver< T, NDIM >::compute_rho(), and madness::ElectronicStructureParams::periodic.
|
virtual |
Destructor.
|
inline |
|
static |
Computes the electronic density.
References madness::square(), and madness::Function< T, NDIM >::truncate().
Referenced by madness::EigSolver< T, NDIM >::EigSolver(), madness::EigSolver< T, NDIM >::multi_solve(), and madness::EigSolver< T, NDIM >::solve().
|
inline |
|
inline |
|
inline |
void madness::EigSolver< T, NDIM >::make_bsh_operators | ( | ) |
Makes the BSH Green's functions for the parallel solver (multi_solve()).
References DEBUG_STREAM, madness::FunctionDefaults< NDIM >::get_k(), madness::FunctionDefaults< NDIM >::get_thresh(), k, and sqrt().
T madness::EigSolver< T, NDIM >::matrix_element | ( | const funcT & | phii, |
const funcT & | phij | ||
) |
Computes a matrix element given the left and right functions.
References madness::EigSolverOp< T, NDIM >::coeff(), madness::inner(), madness::EigSolverOp< T, NDIM >::is_od(), madness::EigSolverOp< T, NDIM >::is_rd(), NDIM, op(), madness::EigSolverOp< T, NDIM >::op_o(), and madness::EigSolverOp< T, NDIM >::op_r().
void madness::EigSolver< T, NDIM >::multi_solve | ( | int | maxits | ) |
This solver has been optimized for usage in parallel. This solver processes each eigenfunction in a parallel fashion.
References madness::apply(), madness::EigSolverOp< T, NDIM >::coeff(), madness::EigSolver< T, NDIM >::compute_rho(), madness::gaxpy(), madness::inner(), madness::EigSolverOp< T, NDIM >::is_od(), madness::EigSolverOp< T, NDIM >::is_rd(), make_bsh_operators(), madness::EigSolverOp< T, NDIM >::multi_op_o(), madness::EigSolverOp< T, NDIM >::multi_op_r(), madness::norm2(), madness::Function< T, NDIM >::norm2(), op(), pi, madness::scale(), and madness::truncate().
|
inline |
void madness::EigSolver< T, NDIM >::prepare_ops | ( | ) |
Preprocesses the operators for doing an iteration of "eigensolving".
References madness::EigSolverOp< T, NDIM >::is_rd(), op(), and madness::EigSolverOp< T, NDIM >::prepare_op().
void madness::EigSolver< T, NDIM >::print_matrix_elements | ( | const funcT & | phii, |
const funcT & | phij | ||
) |
Prints a matrix element given the left and right functions.
References madness::EigSolverOp< T, NDIM >::coeff(), DEBUG_STREAM, madness::inner(), madness::EigSolverOp< T, NDIM >::is_od(), madness::EigSolverOp< T, NDIM >::is_rd(), madness::EigSolverOp< T, NDIM >::messsageME(), op(), madness::EigSolverOp< T, NDIM >::op_o(), madness::EigSolverOp< T, NDIM >::op_r(), and std::tr1::T().
void madness::EigSolver< T, NDIM >::solve | ( | int | maxits | ) |
This solver has not been optimized for usage in parallel. This solver processes each eigenfunction in a serial fashion.
References madness::apply(), madness::EigSolverOp< T, NDIM >::coeff(), madness::EigSolver< T, NDIM >::compute_rho(), DEBUG_STREAM, EIGV_STREAM, madness::FunctionDefaults< NDIM >::get_cell_width(), madness::FunctionDefaults< NDIM >::get_k(), madness::FunctionDefaults< NDIM >::get_thresh(), madness::inner(), madness::EigSolverOp< T, NDIM >::is_od(), madness::EigSolverOp< T, NDIM >::is_rd(), k, L, LOG_STREAM, madness::Function< T, NDIM >::norm2(), op(), madness::EigSolverOp< T, NDIM >::op_o(), madness::EigSolverOp< T, NDIM >::op_r(), pi, psi(), madness::Function< T, NDIM >::scale(), sqrt(), thresh, and madness::Function< T, NDIM >::truncate().
void madness::EigSolver< T, NDIM >::update_occupation | ( | ) |