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