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