A derived class of OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc. More...
#include <RayleighRitzEigenSolver.h>

Public Types | |
| using | ValueType = blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand > |
| define ValueType as the superior (bigger set) of the ValueTypeOperator and ValueTypeOperand (e.g., between double and complex<double>, complex<double> is the bigger set) More... | |
| using | RealType = blasLapack::real_type< ValueType > |
| using | OpContext = OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > |
Public Member Functions | |
| RayleighRitzEigenSolver (const size_type eigenVectorBatchSize, const ElpaScalapackManager &elpaScala, std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, std::shared_ptr< LinAlgOpContext< memorySpace > > linAlgOpContext, const bool useScalpack=true) | |
| Constructor. More... | |
| ~RayleighRitzEigenSolver ()=default | |
| Default Destructor. More... | |
| EigenSolverError | solve (const OpContext &A, std::vector< RealType > &eigenValues, MultiVector< ValueType, memorySpace > &eigenVectors, bool computeEigenVectors=false) |
| EigenSolverError | solve (const OpContext &A, const OpContext &B, std::vector< RealType > &eigenValues, MultiVector< ValueType, memorySpace > &eigenVectors, bool computeEigenVectors=false) |
Private Member Functions | |
| void | computeXTransOpX (MultiVector< ValueTypeOperand, memorySpace > &X, utils::MemoryStorage< ValueType, memorySpace > &S, const OpContext &Op, const bool &useBatched=true) |
| void | computeXTransOpX (MultiVector< ValueTypeOperand, memorySpace > &X, const std::shared_ptr< const ProcessGrid > &processGrid, ScaLAPACKMatrix< ValueType > &overlapMatPar, const OpContext &Op) |
Private Attributes | |
| std::shared_ptr< MultiVector< ValueType, memorySpace > > | d_XinBatchSmall |
| std::shared_ptr< MultiVector< ValueType, memorySpace > > | d_XinBatch |
| std::shared_ptr< MultiVector< ValueType, memorySpace > > | d_XoutBatchSmall |
| std::shared_ptr< MultiVector< ValueType, memorySpace > > | d_XoutBatch |
| size_type | d_batchSizeSmall |
| const size_type | d_eigenVecBatchSize |
| const ElpaScalapackManager * | d_elpaScala |
| const bool | d_useELPA |
| const bool | d_useScalapack |
A derived class of OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc.
| ValueTypeOperator | The datatype (float, double, complex<double>, etc.) for the underlying operator |
| ValueTypeOperand | The datatype (float, double, complex<double>, etc.) of the vector, matrices, etc. on which the operator will act |
| memorySpace | The meory sapce (HOST, DEVICE, HOST_PINNED, etc.) in which the data of the operator and its operands reside |
| using dftefe::linearAlgebra::RayleighRitzEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::OpContext = OperatorContext<ValueTypeOperator, ValueTypeOperand, memorySpace> |
| using dftefe::linearAlgebra::RayleighRitzEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::RealType = blasLapack::real_type<ValueType> |
| using dftefe::linearAlgebra::RayleighRitzEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::ValueType = blasLapack::scalar_type<ValueTypeOperator, ValueTypeOperand> |
define ValueType as the superior (bigger set) of the ValueTypeOperator and ValueTypeOperand (e.g., between double and complex<double>, complex<double> is the bigger set)
| dftefe::linearAlgebra::RayleighRitzEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::RayleighRitzEigenSolver | ( | const size_type | eigenVectorBatchSize, |
| const ElpaScalapackManager & | elpaScala, | ||
| std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > | mpiPatternP2P, | ||
| std::shared_ptr< LinAlgOpContext< memorySpace > > | linAlgOpContext, | ||
| const bool | useScalpack = true |
||
| ) |
Constructor.
|
default |
Default Destructor.
|
private |

|
private |

| EigenSolverError dftefe::linearAlgebra::RayleighRitzEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::solve | ( | const OpContext & | A, |
| const OpContext & | B, | ||
| std::vector< RealType > & | eigenValues, | ||
| MultiVector< ValueType, memorySpace > & | eigenVectors, | ||
| bool | computeEigenVectors = false |
||
| ) |
In this case we solve the Kohn Sham GHEP for any general X Performs cholesky factorization for orthogonalization internally. SConj = X^T M X SConj=LConj*L^{T} Lconj^{-1} compute compute HSConjProj= Lconj^{-1}*HConjProj*(Lconj^{-1})^C (C denotes conjugate transpose LAPACK notation) compute standard eigendecomposition HSConjProj: {QConjPrime,D} HSConjProj=QConjPrime*D*QConjPrime^{C} QConj={Lc^{-1}}^{C}*QConjPrime rotate the basis in the subspace X^{T}={QConjPrime}^{C}*LConj^{-1}*X^{T}, stored in the column major format In the above we use Q^{T}={QConjPrime}^{C}*LConj^{-1} In other words, X_O^T H X_O Q = \lambda X_O^T M X_O Q , or, H X = \lambda M X if X = X_O Q where X_O = X((LInv)^C) (C is conj trans)

| EigenSolverError dftefe::linearAlgebra::RayleighRitzEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::solve | ( | const OpContext & | A, |
| std::vector< RealType > & | eigenValues, | ||
| MultiVector< ValueType, memorySpace > & | eigenVectors, | ||
| bool | computeEigenVectors = false |
||
| ) |

|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |