Anasazi Version of the Day
Loading...
Searching...
No Matches
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
40class 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