Anasazi  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ModifiedARPACKm3.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 MODIFIED_ARPACK_MODE3_H
20 #define MODIFIED_ARPACK_MODE3_H
21 
22 #include "Epetra_ConfigDefs.h"
23 
24 #include "Epetra_BLAS.h"
25 #include "Epetra_Comm.h"
26 #include "Epetra_Operator.h"
27 #include "Epetra_Time.h"
28 
29 #ifdef EPETRA_MPI
30 #include "Epetra_MpiComm.h"
31 #endif
32 
33 #include "CheckingTools.h"
34 #include "FortranRoutines.h"
35 #include "ModalAnalysisSolver.h"
36 #include "MyMemory.h"
37 #include "ModalTools.h"
38 #include "SortingTools.h"
39 
40 class ModifiedARPACKm3 : public ModalAnalysisSolver {
41 
42  private:
43 
44  const CheckingTools myVerify;
45  const Epetra_BLAS callBLAS;
46  const FortranRoutines callFortran;
47  ModalTools modalTool;
48  const SortingTools mySort;
49 
50  const Epetra_Comm &MyComm;
51  const Epetra_Operator *K;
52  const Epetra_Operator *M;
53  const Epetra_Time MyWatch;
54 
55  double tolEigenSolve;
56  int maxIterEigenSolve;
57 
58  double *normWeight;
59 
60  int verbose;
61 
62  int historyCount;
63  double *resHistory;
64 
65  double memRequested;
66  double highMem;
67 
68  int massOp;
69  int numResidual;
70  int orthoOp;
71  int outerIter;
72  int stifOp;
73 
74  double timeMassOp;
75  double timeOuterLoop;
76  double timePostProce;
77  double timeResidual;
78  double timeStifOp;
79 
80  // Don't define these functions
81  ModifiedARPACKm3(const ModifiedARPACKm3 &ref);
82  ModifiedARPACKm3& operator=(const ModifiedARPACKm3 &ref);
83 
84  public:
85 
86  ModifiedARPACKm3(const Epetra_Comm &_Comm, const Epetra_Operator *KK,
87  double _tol = 1.0e-08, int _maxIter = 100, int _verb = 0);
88 
89  ModifiedARPACKm3(const Epetra_Comm &_Comm, const Epetra_Operator *KK,
90  const Epetra_Operator *MM,
91  double _tol = 1.0e-08, int _maxIter = 100, int _verb = 0,
92  double *_weight = 0);
93 
94  ~ModifiedARPACKm3();
95 
96  int solve(int numEigen, Epetra_MultiVector &Q, double *lambda);
97 
98  int reSolve(int numEigen, Epetra_MultiVector &Q, double *lambda, int startingEV = 0);
99 
100  int reSolve(int numEigen, Epetra_MultiVector &Q, double *lambda, int startingEV,
101  const Epetra_MultiVector *orthoVec);
102 
103  int minimumSpaceDimension(int nev) const { return nev+1; }
104 
105  void initializeCounters();
106 
107  void algorithmInfo() const;
108  void historyInfo() const;
109  void memoryInfo() const;
110  void operationInfo() const;
111  void timeInfo() const;
112 
113 };
114 
115 #endif