Teko Version of the Day
Loading...
Searching...
No Matches
Teko_InvModALStrategy.hpp
1// @HEADER
2// *****************************************************************************
3// Teko: A package for block and physics based preconditioning
4//
5// Copyright 2010 NTESS and the Teko contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10/*
11 * Author: Zhen Wang
12 * Email: wangz@ornl.gov
13 * zhen.wang@alum.emory.edu
14 */
15
16#ifndef __Teko_ModALStrategy_hpp__
17#define __Teko_ModALStrategy_hpp__
18
19#include "Teuchos_RCP.hpp"
20
21#include "Thyra_LinearOpBase.hpp"
22
23#include "Teko_Utilities.hpp"
24#include "Teko_InverseFactory.hpp"
25#include "Teko_BlockPreconditionerFactory.hpp"
26
27namespace Teko {
28
29namespace NS {
30
32
33class InvModALStrategy {
34 public:
36 InvModALStrategy();
37
38 InvModALStrategy(const Teuchos::RCP<InverseFactory>& factory);
39
40 InvModALStrategy(const Teuchos::RCP<InverseFactory>& factory, LinearOp& pressureMassMatrix);
41
42 InvModALStrategy(const Teuchos::RCP<InverseFactory>& invFactA,
43 const Teuchos::RCP<InverseFactory>& invFactS);
44
45 InvModALStrategy(const Teuchos::RCP<InverseFactory>& invFactA,
46 const Teuchos::RCP<InverseFactory>& invFactS, LinearOp& pressureMassMatrix);
47
49 virtual ~InvModALStrategy() {}
50
58 virtual LinearOp getInvA11p(BlockPreconditionerState& state) const;
59
67 virtual LinearOp getInvA22p(BlockPreconditionerState& state) const;
68
76 virtual LinearOp getInvA33p(BlockPreconditionerState& state) const;
77
85 virtual LinearOp getInvS(BlockPreconditionerState& state) const;
86
94 virtual void buildState(const BlockedLinearOp& A, BlockPreconditionerState& state) const;
95
99 virtual void initializeState(const BlockedLinearOp& A, ModALPrecondState* state) const;
100
107 virtual void computeInverses(const BlockedLinearOp& A, ModALPrecondState* state) const;
108
114 void setPressureMassMatrix(const LinearOp& pressureMassMatrix);
115
121 void setGamma(double gamma);
122
127 virtual void setSymmetric(bool isSymmetric) { isSymmetric_ = isSymmetric; }
128
129 protected:
130 // In the modified AL preconditioner, we need to two methods,
131 // one for solving \f$ A_{ii}, i = 1, 2(, 3) \f$,
132 // the other for solving \f$ S \f$.
133 Teuchos::RCP<InverseFactory> invFactoryA_;
134 Teuchos::RCP<InverseFactory> invFactoryS_;
135 LinearOp pressureMassMatrix_;
136 double gamma_;
137
138 DiagonalType scaleType_;
139 bool isSymmetric_;
140 int dim_;
141};
142
143} // end namespace NS
144
145} // end namespace Teko
146
147#endif /* __Teko_ModALStrategy_hpp__ */
Class for saving state variables for ModALPreconditionerFactory.