22#include "Epetra_ConfigDefs.h"
24#include "Epetra_BLAS.h"
25#include "Epetra_Comm.h"
26#include "Epetra_Operator.h"
27#include "Epetra_Time.h"
29#include "CheckingTools.h"
30#include "FortranRoutines.h"
31#include "ModalAnalysisSolver.h"
33#include "ModalTools.h"
34#include "SortingTools.h"
36class Davidson :
public ModalAnalysisSolver {
40 const CheckingTools myVerify;
41 const Epetra_BLAS callBLAS;
42 const FortranRoutines callFortran;
44 const SortingTools mySort;
46 const Epetra_Comm &MyComm;
47 const Epetra_Operator *K;
48 const Epetra_Operator *M;
49 const Epetra_Operator *Prec;
50 const Epetra_Time MyWatch;
53 int maxIterEigenSolve;
67 int *spaceSizeHistory;
80 double timeLocalSolve;
81 double timeLocalUpdate;
93 void accuracyCheck(
const Epetra_MultiVector *X,
const Epetra_MultiVector *MX,
94 const Epetra_MultiVector *Q)
const;
97 Davidson(
const Davidson &ref);
98 Davidson& operator=(
const Davidson &ref);
102 Davidson(
const Epetra_Comm &_Comm,
const Epetra_Operator *KK,
103 const Epetra_Operator *PP,
int _blk,
int _numBlk,
104 double _tol = 1.0e-08,
int _maxIter = 100,
int _verb = 0);
106 Davidson(
const Epetra_Comm &_Comm,
const Epetra_Operator *KK,
107 const Epetra_Operator *MM,
const Epetra_Operator *PP,
int _blk,
int _numBlk,
108 double _tol = 1.0e-08,
int _maxIter = 100,
int _verb = 0,
double *_weight = 0);
112 int solve(
int numEigen, Epetra_MultiVector &Q,
double *lambda);
114 int reSolve(
int numEigen, Epetra_MultiVector &Q,
double *lambda,
int startingEV = 0);
116 int minimumSpaceDimension(
int nev)
const;
118 void initializeCounters();
120 void algorithmInfo()
const;
121 void historyInfo()
const;
122 void memoryInfo()
const;
123 void operationInfo()
const;
124 void timeInfo()
const;