Go to the documentation of this file.
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>
147 delete[] eigVectorTri;
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;
167 eigVectorTri = eigVectorMin;
172 delete[] eigVectorMin;
173 eigVectorTri = eigVectorMax;
178 template<
typename Treal,
typename Tmatrix,
typename Tvector>
182 assert(eigVectorTri);
183 this->getEigVector(eVec, eigVectorTri);
187 template<
typename Treal,
typename Tmatrix,
typename Tvector>
190 bool conv = accTmp < absTol;
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)
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 )
279 maxIter = M.get_nrows() * 100;
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;
Treal template_blas_sqrt(Treal x)
Treal absTol
Eigenvector to the tridiagonal matrix length: this->j.
Definition: LanczosLargestMagnitudeEig.h:120
Treal relTol
Definition: LanczosLargestMagnitudeEig.h:121
void getLargestMagnitudeEigPair(Treal &eValue, Tvector &eVector, Treal &accuracy)
Definition: LanczosLargestMagnitudeEig.h:135
void setRelTol(Treal const newTol)
Definition: LanczosLargestMagnitudeEig.h:55
Treal const maxAbsValue
Definition: LanczosLargestMagnitudeEig.h:225
virtual void run()
Definition: Lanczos.h:87
Treal acc
Definition: LanczosLargestMagnitudeEig.h:116
Definition: LanczosLargestMagnitudeEig.h:204
Tvector eVec
Definition: LanczosLargestMagnitudeEig.h:115
generalVector VectorType
Definition: GetDensFromFock.cc:62
void computeEigenPairTri()
Definition: LanczosLargestMagnitudeEig.h:146
bool largestMagEigIsSmall()
Definition: LanczosLargestMagnitudeEig.h:213
LanczosLargestMagnitudeEig(Tmatrix const &AA, Tvector const &startVec, int maxIter=100, int cap=100)
Definition: LanczosLargestMagnitudeEig.h:49
static Treal getRelPrecision()
Definition: matInclude.h:152
Treal template_blas_fabs(Treal x)
void computeEigVec()
Definition: LanczosLargestMagnitudeEig.h:180
static Treal template_blas_get_num_limit_max()
Definition: template_blas_num_limits.h:85
void restart(Tvector const &startVec)
Definition: Lanczos.h:74
Tmatrix const & A
Definition: Lanczos.h:104
Definition: LanczosLargestMagnitudeEig.h:47
LanczosLargestMagnitudeEigIfSmall(Tmatrix const &AA, Tvector const &startVec, Treal const maxAbsVal, int maxIter=100, int cap=100)
Definition: LanczosLargestMagnitudeEig.h:207
void getLargestMagnitudeEig(Treal &ev, Treal &accuracy)
Definition: LanczosLargestMagnitudeEig.h:58
Treal accTmp
Definition: LanczosLargestMagnitudeEig.h:129
bool eigIsSmall
Definition: LanczosLargestMagnitudeEig.h:226
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
Xtrans< TX > transpose(TX const &A)
Transposition.
Definition: matrix_proxy.h:131
virtual ~LanczosLargestMagnitudeEig()
Definition: LanczosLargestMagnitudeEig.h:110
mat::SizesAndBlocks cols
Definition: test.cc:52
Definition: allocate.cc:39
Class template for building Krylov subspaces with Lanczos.
Definition: Lanczos.h:59
virtual bool converged() const
Definition: LanczosLargestMagnitudeEig.h:237
void rerun()
Definition: LanczosLargestMagnitudeEig.h:84
virtual bool converged() const
Definition: LanczosLargestMagnitudeEig.h:189
Definition: Interval.h:46
Treal eVal
Definition: LanczosLargestMagnitudeEig.h:114
int maxIter
Current step.
Definition: Lanczos.h:114
Treal eValTmp
Definition: LanczosLargestMagnitudeEig.h:128
virtual void run()
Definition: LanczosLargestMagnitudeEig.h:66
Describes dimensions of matrix and its blocks on all levels.
Definition: SizesAndBlocks.h:45
void setAbsTol(Treal const newTol)
Definition: LanczosLargestMagnitudeEig.h:56
virtual void update()
Definition: LanczosLargestMagnitudeEig.h:124
virtual void run()
Definition: LanczosLargestMagnitudeEig.h:215
Treal * eigVectorTri
Definition: LanczosLargestMagnitudeEig.h:117
virtual void update()
Definition: LanczosLargestMagnitudeEig.h:227