7 #ifndef __Teko_ModALStrategy_hpp__
8 #define __Teko_ModALStrategy_hpp__
10 #include "Teuchos_RCP.hpp"
12 #include "Thyra_LinearOpBase.hpp"
15 #include "Teko_InverseFactory.hpp"
16 #include "Teko_BlockPreconditionerFactory.hpp"
22 class ModALPrecondState;
24 class InvModALStrategy {
29 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& factory);
31 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& factory, LinearOp& pressureMassMatrix);
33 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& invFactA,
34 const Teuchos::RCP<InverseFactory>& invFactS);
36 InvModALStrategy(
const Teuchos::RCP<InverseFactory>& invFactA,
37 const Teuchos::RCP<InverseFactory>& invFactS, LinearOp& pressureMassMatrix);
40 virtual ~InvModALStrategy() {}
49 virtual LinearOp getInvA11p(BlockPreconditionerState& state)
const;
58 virtual LinearOp getInvA22p(BlockPreconditionerState& state)
const;
67 virtual LinearOp getInvA33p(BlockPreconditionerState& state)
const;
76 virtual LinearOp getInvS(BlockPreconditionerState& state)
const;
85 virtual void buildState(
const BlockedLinearOp& A, BlockPreconditionerState& state)
const;
90 virtual void initializeState(
const BlockedLinearOp& A, ModALPrecondState* state)
const;
98 virtual void computeInverses(
const BlockedLinearOp& A, ModALPrecondState* state)
const;
105 void setPressureMassMatrix(
const LinearOp& pressureMassMatrix);
112 void setGamma(
double gamma);
118 virtual void setSymmetric(
bool isSymmetric) { isSymmetric_ = isSymmetric; }
124 Teuchos::RCP<InverseFactory> invFactoryA_;
125 Teuchos::RCP<InverseFactory> invFactoryS_;
126 LinearOp pressureMassMatrix_;
129 DiagonalType scaleType_;