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