Teko Version of the Day
Loading...
Searching...
No Matches
Teko_InvModALStrategy.hpp
1/*
2 * Author: Zhen Wang
3 * Email: wangz@ornl.gov
4 * zhen.wang@alum.emory.edu
5 */
6
7#ifndef __Teko_ModALStrategy_hpp__
8#define __Teko_ModALStrategy_hpp__
9
10#include "Teuchos_RCP.hpp"
11
12#include "Thyra_LinearOpBase.hpp"
13
14#include "Teko_Utilities.hpp"
15#include "Teko_InverseFactory.hpp"
16#include "Teko_BlockPreconditionerFactory.hpp"
17
18namespace Teko
19{
20
21namespace NS
22{
23
24class ModALPrecondState;
25
26class InvModALStrategy
27{
28public:
29
31 InvModALStrategy();
32
33 InvModALStrategy(const Teuchos::RCP<InverseFactory> & factory);
34
35 InvModALStrategy(const Teuchos::RCP<InverseFactory> & factory,
36 LinearOp & pressureMassMatrix);
37
38 InvModALStrategy(const Teuchos::RCP<InverseFactory> & invFactA,
39 const Teuchos::RCP<InverseFactory> & invFactS);
40
41 InvModALStrategy(const Teuchos::RCP<InverseFactory> & invFactA,
42 const Teuchos::RCP<InverseFactory> & invFactS,
43 LinearOp & pressureMassMatrix);
44
46 virtual
47 ~InvModALStrategy()
48 {
49 }
50
58 virtual LinearOp
59 getInvA11p(BlockPreconditionerState & state) const;
60
68 virtual LinearOp
69 getInvA22p(BlockPreconditionerState & state) const;
70
78 virtual LinearOp
79 getInvA33p(BlockPreconditionerState & state) const;
80
88 virtual LinearOp
89 getInvS(BlockPreconditionerState & state) const;
90
98 virtual void
99 buildState(const BlockedLinearOp & A, BlockPreconditionerState & state) const;
100
104 virtual void
105 initializeState(const BlockedLinearOp & A, ModALPrecondState * state) const;
106
113 virtual void
114 computeInverses(const BlockedLinearOp & A, ModALPrecondState * state) const;
115
121 void
122 setPressureMassMatrix(const LinearOp & pressureMassMatrix);
123
129 void
130 setGamma(double gamma);
131
136 virtual void
137 setSymmetric(bool isSymmetric)
138 {
139 isSymmetric_ = isSymmetric;
140 }
141
142protected:
143
144 // In the modified AL preconditioner, we need to two methods,
145 // one for solving \f$ A_{ii}, i = 1, 2(, 3) \f$,
146 // the other for solving \f$ S \f$.
147 Teuchos::RCP<InverseFactory> invFactoryA_;
148 Teuchos::RCP<InverseFactory> invFactoryS_;
149 LinearOp pressureMassMatrix_;
150 double gamma_;
151
152 DiagonalType scaleType_;
153 bool isSymmetric_;
154 int dim_;
155};
156
157} // end namespace NS
158
159} // end namespace Teko
160
161#endif /* __Teko_ModALStrategy_hpp__ */
DiagonalType
Type describing the type of diagonal to construct.