Anasazi  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
BRQMIN.h
1 // @HEADER
2 // *****************************************************************************
3 // Anasazi: Block Eigensolvers Package
4 //
5 // Copyright 2004 NTESS and the Anasazi contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 // This software is a result of the research described in the report
11 //
12 // "A comparison of algorithms for modal analysis in the absence
13 // of a sparse direct method", P. Arbenz, R. Lehoucq, and U. Hetmaniuk,
14 // Sandia National Laboratories, Technical report SAND2003-1028J.
15 //
16 // It is based on the Epetra, AztecOO, and ML packages defined in the Trilinos
17 // framework ( http://trilinos.org/ ).
18 
19 #ifndef BRQMIN_H
20 #define BRQMIN_H
21 
22 #include "Epetra_ConfigDefs.h"
23 
24 #include "Epetra_BLAS.h"
25 #include "Epetra_Comm.h"
26 #include "Epetra_LAPACK.h"
27 #include "Epetra_Operator.h"
28 #include "Epetra_Time.h"
29 
30 #include "CheckingTools.h"
31 #include "FortranRoutines.h"
32 #include "ModalAnalysisSolver.h"
33 #include "MyMemory.h"
34 #include "ModalTools.h"
35 #include "SortingTools.h"
36 
37 class BRQMIN : public ModalAnalysisSolver {
38 
39  private:
40 
41  const CheckingTools myVerify;
42  const Epetra_BLAS callBLAS;
43  const FortranRoutines callFortran;
44  const Epetra_LAPACK callLAPACK;
45  ModalTools modalTool;
46  const SortingTools mySort;
47 
48  const Epetra_Comm &MyComm;
49  const Epetra_Operator *K;
50  const Epetra_Operator *M;
51  const Epetra_Operator *Prec;
52  const Epetra_Time MyWatch;
53 
54  double tolEigenSolve;
55  int maxIterEigenSolve;
56 
57  int blockSize;
58 
59  double *normWeight;
60 
61  int verbose;
62 
63  int historyCount;
64  double *resHistory;
65 
66  double memRequested;
67  double highMem;
68 
69  int massOp;
70  int numRestart;
71  int outerIter;
72  int precOp;
73  int residual;
74  int stifOp;
75 
76  double timeLocalProj;
77  double timeLocalSolve;
78  double timeLocalUpdate;
79  double timeMassOp;
80  double timeNorm;
81  double timeOrtho;
82  double timeOuterLoop;
83  double timePostProce;
84  double timePrecOp;
85  double timeResidual;
86  double timeRestart;
87  double timeSearchP;
88  double timeStifOp;
89 
90  // Private functions
91  void accuracyCheck(const Epetra_MultiVector *X, const Epetra_MultiVector *MX,
92  const Epetra_MultiVector *R, const Epetra_MultiVector *Q,
93  const Epetra_MultiVector *P) const;
94 
95  // Don't define these functions
96  BRQMIN(const BRQMIN &ref);
97  BRQMIN& operator=(const BRQMIN &ref);
98 
99  public:
100 
101  BRQMIN(const Epetra_Comm &_Comm, const Epetra_Operator *KK,
102  const Epetra_Operator *PP, int _blk,
103  double _tol = 1.0e-08, int _maxIter = 100, int _verb = 0);
104 
105  BRQMIN(const Epetra_Comm &_Comm, const Epetra_Operator *KK,
106  const Epetra_Operator *MM, const Epetra_Operator *PP, int _blk,
107  double _tol = 1.0e-08, int _maxIter = 100, int _verb = 0, double *_weight = 0);
108 
109  ~BRQMIN();
110 
111  int solve(int numEigen, Epetra_MultiVector &Q, double *lambda);
112 
113  int reSolve(int numEigen, Epetra_MultiVector &Q, double *lambda, int startingEV = 0);
114 
115  int minimumSpaceDimension(int nev) const { return nev+blockSize; }
116 
117  void initializeCounters();
118 
119  void algorithmInfo() const;
120  void historyInfo() const;
121  void memoryInfo() const;
122  void operationInfo() const;
123  void timeInfo() const;
124 
125 };
126 
127 #endif