39 #ifndef MAT_LANCZOSLARGESTMAGNITUDEEIG 40 #define MAT_LANCZOSLARGESTMAGNITUDEEIG 45 template<
typename Treal,
typename Tmatrix,
typename Tvector>
47 :
public Lanczos<Treal, Tmatrix, Tvector> {
50 int maxIter = 100,
int cap = 100)
77 if(this->
A.get_nrows() == 5) {
90 Tvector newResidual(
eVec);
93 newResidual += -sP *
eVec;
105 Treal machine_epsilon = mat::getMachineEpsilon<Treal>();
133 template<
typename Treal,
typename Tmatrix,
typename Tvector>
144 template<
typename Treal,
typename Tmatrix,
typename Tvector>
148 Treal* eigVectorMax =
new Treal[this->
j];
149 Treal* eigVectorMin =
new Treal[this->
j];
152 int const lMax = this->
j - 1;
155 this->
Tri.getEigsByIndex(&eValMax, eigVectorMax, &accMax,
161 this->
Tri.getEigsByIndex(&eValMin, eigVectorMin, &accMin,
166 delete[] eigVectorMax;
172 delete[] eigVectorMin;
178 template<
typename Treal,
typename Tmatrix,
typename Tvector>
187 template<
typename Treal,
typename Tmatrix,
typename Tvector>
202 template<
typename Treal,
typename Tmatrix,
typename Tvector>
207 (Tmatrix
const & AA, Tvector
const & startVec,
208 Treal
const maxAbsVal,
209 int maxIter = 100,
int cap = 100)
211 (AA, startVec,
maxIter, cap), maxAbsValue(maxAbsVal) {
235 template<
typename Treal,
typename Tmatrix,
typename Tvector>
240 return convAccuracy || (!eigIsSmall);
259 template<
typename Tmatrix,
typename Treal>
261 Treal
const requestedAbsAccuracy,
262 Treal
const requestedRelAccuracy,
263 Treal
const maxAbsVal,
266 assert(requestedAbsAccuracy >= 0);
269 Treal euclLowerBound;
270 Treal euclUpperBound;
271 M.quickEuclBounds(euclLowerBound, euclUpperBound);
272 if ( euclUpperBound < requestedAbsAccuracy )
275 if ( euclLowerBound > maxAbsVal )
283 guess.resetSizesAndBlocks(cols);
286 lan(M, guess, maxAbsVal,
maxIter);
299 eValMin = eVal -
acc;
300 eValMin = eValMin >= 0 ? eValMin : (Treal)0;
304 eValMin = euclLowerBound;
305 eValMin = eValMin >= maxAbsVal ? eValMin : maxAbsVal;
static Treal getRelPrecision()
Definition: matInclude.h:152
Treal eValTmp
Definition: LanczosLargestMagnitudeEig.h:128
void getLargestMagnitudeEigPair(Treal &eValue, Tvector &eVector, Treal &accuracy)
Definition: LanczosLargestMagnitudeEig.h:135
void setAbsTol(Treal const newTol)
Definition: LanczosLargestMagnitudeEig.h:56
Treal absTol
Eigenvector to the tridiagonal matrix length: this->j.
Definition: LanczosLargestMagnitudeEig.h:120
virtual void run()
Definition: Lanczos.h:87
Treal * eigVectorTri
Definition: LanczosLargestMagnitudeEig.h:117
int j
Definition: Lanczos.h:113
mat::SizesAndBlocks cols
Definition: test.cc:52
Definition: LanczosLargestMagnitudeEig.h:203
Class for building Krylov subspaces with the Lanczos method.
Definition: LanczosLargestMagnitudeEig.h:46
Tvector eVec
Definition: LanczosLargestMagnitudeEig.h:115
Interval< Treal > euclIfSmall(Tmatrix const &M, Treal const requestedAbsAccuracy, Treal const requestedRelAccuracy, Treal const maxAbsVal, typename Tmatrix::VectorType *const eVecPtr=0, int maxIter=-1)
Returns interval containing the Euclidean norm of the matrix M.
Definition: LanczosLargestMagnitudeEig.h:260
Treal acc
Definition: LanczosLargestMagnitudeEig.h:116
virtual bool converged() const
Definition: LanczosLargestMagnitudeEig.h:237
virtual void update()
Definition: LanczosLargestMagnitudeEig.h:227
bool eigIsSmall
Definition: LanczosLargestMagnitudeEig.h:226
Definition: allocate.cc:39
Describes dimensions of matrix and its blocks on all levels.
Definition: SizesAndBlocks.h:45
void computeEigenPairTri()
Definition: LanczosLargestMagnitudeEig.h:146
generalVector VectorType
Definition: GetDensFromFock.cc:62
Treal template_blas_fabs(Treal x)
Definition: Interval.h:46
void computeEigVec()
Definition: LanczosLargestMagnitudeEig.h:180
MatrixTridiagSymmetric< Treal > Tri
Residual vector.
Definition: Lanczos.h:111
LanczosLargestMagnitudeEig(Tmatrix const &AA, Tvector const &startVec, int maxIter=100, int cap=100)
Definition: LanczosLargestMagnitudeEig.h:49
virtual bool converged() const
Definition: LanczosLargestMagnitudeEig.h:189
void getEigVector(Tvector &eigVec, Treal const *const eVecTri) const
Definition: Lanczos.h:150
void rerun()
Definition: LanczosLargestMagnitudeEig.h:84
Treal eVal
Definition: LanczosLargestMagnitudeEig.h:114
Treal accTmp
Definition: LanczosLargestMagnitudeEig.h:129
int maxIter
Current step.
Definition: Lanczos.h:114
bool largestMagEigIsSmall()
Definition: LanczosLargestMagnitudeEig.h:213
static Treal template_blas_get_num_limit_max()
Definition: template_blas_num_limits.h:85
virtual void run()
Definition: LanczosLargestMagnitudeEig.h:215
Tmatrix const & A
Definition: Lanczos.h:104
void getLargestMagnitudeEig(Treal &ev, Treal &accuracy)
Definition: LanczosLargestMagnitudeEig.h:58
virtual ~LanczosLargestMagnitudeEig()
Definition: LanczosLargestMagnitudeEig.h:110
void restart(Tvector const &startVec)
Definition: Lanczos.h:74
Treal relTol
Definition: LanczosLargestMagnitudeEig.h:121
Class template for building Krylov subspaces with Lanczos.
Definition: Lanczos.h:59
Treal const maxAbsValue
Definition: LanczosLargestMagnitudeEig.h:225
virtual void run()
Definition: LanczosLargestMagnitudeEig.h:66
Xtrans< TX > transpose(TX const &A)
Transposition.
Definition: matrix_proxy.h:131
void setRelTol(Treal const newTol)
Definition: LanczosLargestMagnitudeEig.h:55
virtual void update()
Definition: LanczosLargestMagnitudeEig.h:124
Treal template_blas_sqrt(Treal x)