LR::EigenSolver Class Reference

Iterative Eigenvalue solver, extending the generic LRSolver. More...

#include <slr.h>

Inheritance diagram for LR::EigenSolver:
LR::LRSolver

List of all members.

Public Member Functions

 EigenSolver (int nbast, int nocc, const ergo_real *fock_matrix, const ergo_real *overlap, int n)
virtual ~EigenSolver ()
virtual ergo_real getPreconditionerShift (int i) const
 returns the preconditioning shift.
virtual int getInitialGuess (VarVectorCollection &vecs)
 generate the starting guess for the HOMO-LUMO excitation by placing one in th the right position.
virtual bool getResidual (VarVectorCollection &residualv)
 get residual of the eigenvalue problem.
virtual void increaseSubspaceLimit (int newSize)
 expands above the default limit
ergo_real getFreq (int i) const
void computeMoments (OneElOperator &dipx, OneElOperator &dipy, OneElOperator &dipz)
ergo_real getTransitionMoment2 (int i) const

Private Attributes

ergo_realritzVals
 recent ritz values in the subspace.
ergo_realtransMoms2
 most recent SQUARED transition moments.
int nStates
 number of excited states to compute
int nConverged
 number of already converged eigenvalues
ergo_reallast_ev
 most recent eigenvectors in the reduced space

Detailed Description

Iterative Eigenvalue solver, extending the generic LRSolver.


Constructor & Destructor Documentation

LR::EigenSolver::EigenSolver ( int  nbast,
int  nocc,
const ergo_real fock_matrix,
const ergo_real overlap,
int  n 
) [inline]
virtual LR::EigenSolver::~EigenSolver (  )  [inline, virtual]

References last_ev, ritzVals, and transMoms2.


Member Function Documentation

void LR::EigenSolver::computeMoments ( OneElOperator dipx,
OneElOperator dipy,
OneElOperator dipz 
)
ergo_real LR::EigenSolver::getFreq ( int  i  )  const [inline]

References ritzVals.

Referenced by es_getexc().

int LR::EigenSolver::getInitialGuess ( VarVectorCollection v  )  [virtual]

generate the starting guess for the HOMO-LUMO excitation by placing one in th the right position.

Do it the lazy way: creating VarVector directly risks inconsistiency when the internal representation of VarVector changes.

Implements LR::LRSolver.

References LR::LRSolver::e2diag, LR::LRSolver::nbast, LR::LRSolver::nocc, nStates, LR::VarVector::nvar, and LR::VarVectorCollection::setSize().

virtual ergo_real LR::EigenSolver::getPreconditionerShift ( int  i  )  const [inline, virtual]

returns the preconditioning shift.

Proper preconditioning is vital for the quick convergence.

Implements LR::LRSolver.

References nConverged, and ritzVals.

bool LR::EigenSolver::getResidual ( VarVectorCollection residualv  )  [virtual]

get residual of the eigenvalue problem.

This is done in following steps: Solution in the subspace: [ Xsub, lambda ] = eig(eSub, Ssub); Pick first positive eigenvalue l1 = lambda(step+1); Pick corresponding eigenvector: Xsub = Xsub(:,step+1); Residual Vector: residualv = (Av-l1*Sv)*Xsub;

Implements LR::LRSolver.

References LR::LRSolver::convThreshold, do_output(), LR::dot(), LR::LRSolver::eSub, LR::LRSolver::getAvMinusFreqSv(), mat::ggev(), last_ev, LOG_AREA_LR, LOG_CAT_ERROR, LOG_CAT_INFO, nConverged, nStates, ritzVals, LR::VarVectorCollection::setSize(), LR::LRSolver::sSub, and LR::LRSolver::subspaceSize.

ergo_real LR::EigenSolver::getTransitionMoment2 ( int  i  )  const [inline]

References transMoms2.

Referenced by es_getexc().

void LR::EigenSolver::increaseSubspaceLimit ( int  newSize  )  [virtual]

expands above the default limit

Reimplemented from LR::LRSolver.

References LR::LRSolver::maxSubspaceSize, ritzVals, and transMoms2.

Referenced by es_getexc().


Member Data Documentation

most recent eigenvectors in the reduced space

Referenced by computeMoments(), getResidual(), and ~EigenSolver().

number of already converged eigenvalues

Referenced by getPreconditionerShift(), and getResidual().

int LR::EigenSolver::nStates [private]

number of excited states to compute

Referenced by computeMoments(), getInitialGuess(), and getResidual().

most recent SQUARED transition moments.

Referenced by computeMoments(), getTransitionMoment2(), increaseSubspaceLimit(), and ~EigenSolver().


The documentation for this class was generated from the following files:

Generated on 21 Nov 2012 for ergo by  doxygen 1.6.1