16 #ifndef __Teko_ModALStrategy_hpp__
17 #define __Teko_ModALStrategy_hpp__
19 #include "Teuchos_RCP.hpp"
21 #include "Thyra_LinearOpBase.hpp"
24 #include "Teko_InverseFactory.hpp"
25 #include "Teko_BlockPreconditionerFactory.hpp"
31 class ModALPrecondState;
33 class InvModALStrategy {
38 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& factory);
40 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& factory, LinearOp& pressureMassMatrix);
42 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& invFactA,
43 const Teuchos::RCP<InverseFactory>& invFactS);
45 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& invFactA,
46 const Teuchos::RCP<InverseFactory>& invFactS, LinearOp& pressureMassMatrix);
49 virtual ~InvModALStrategy() {}
58 virtual LinearOp getInvA11p(BlockPreconditionerState& state)
const;
67 virtual LinearOp getInvA22p(BlockPreconditionerState& state)
const;
76 virtual LinearOp getInvA33p(BlockPreconditionerState& state)
const;
85 virtual LinearOp getInvS(BlockPreconditionerState& state)
const;
94 virtual void buildState(
const BlockedLinearOp& A, BlockPreconditionerState& state)
const;
99 virtual void initializeState(
const BlockedLinearOp& A, ModALPrecondState* state)
const;
107 virtual void computeInverses(
const BlockedLinearOp& A, ModALPrecondState* state)
const;
114 void setPressureMassMatrix(
const LinearOp& pressureMassMatrix);
121 void setGamma(
double gamma);
127 virtual void setSymmetric(
bool isSymmetric) { isSymmetric_ = isSymmetric; }
133 Teuchos::RCP<InverseFactory> invFactoryA_;
134 Teuchos::RCP<InverseFactory> invFactoryS_;
135 LinearOp pressureMassMatrix_;
138 DiagonalType scaleType_;