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 LOBPCG_light :
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;
75 double timeLocalSolve;
76 double timeLocalUpdate;
88 void accuracyCheck(
const Epetra_MultiVector *X,
const Epetra_MultiVector *MX,
89 const Epetra_MultiVector *R,
const Epetra_MultiVector *Q,
90 const Epetra_MultiVector *H,
const Epetra_MultiVector *P)
const;
93 LOBPCG_light(
const LOBPCG_light &ref);
94 LOBPCG_light& operator=(
const LOBPCG_light &ref);
98 LOBPCG_light(
const Epetra_Comm &_Comm,
const Epetra_Operator *KK,
99 const Epetra_Operator *PP,
int _blk,
100 double _tol = 1.0e-08,
int _maxIter = 100,
int _verb = 0);
102 LOBPCG_light(
const Epetra_Comm &_Comm,
const Epetra_Operator *KK,
103 const Epetra_Operator *MM,
const Epetra_Operator *PP,
int _blk,
104 double _tol = 1.0e-08,
int _maxIter = 100,
int _verb = 0,
double *_weight = 0);
108 int solve(
int numEigen, Epetra_MultiVector &Q,
double *lambda)
109 {
return LOBPCG_light::reSolve(numEigen, Q, lambda); }
111 int reSolve(
int numEigen, Epetra_MultiVector &Q,
double *lambda,
int startingEV = 0);
113 int minimumSpaceDimension(
int nev)
const {
return nev+blockSize; }
115 void initializeCounters();
117 void algorithmInfo()
const;
118 void historyInfo()
const;
119 void memoryInfo()
const;
120 void operationInfo()
const;
121 void timeInfo()
const;