44 #ifndef NOX_EPETRA_LINEARSYSTEMMPBD_H 45 #define NOX_EPETRA_LINEARSYSTEMMPBD_H 49 #ifdef HAVE_STOKHOS_NOX 51 #include "NOX_Common.H" 53 #include "NOX_Epetra_LinearSystem.H" 54 #include "NOX_Utils.H" 59 #include "EpetraExt_BlockVector.h" 79 class LinearSystemMPBD :
public virtual NOX::Epetra::LinearSystem {
84 Teuchos::ParameterList& printingParams,
85 Teuchos::ParameterList& linearSolverParams,
86 const Teuchos::RCP<NOX::Epetra::LinearSystem>& block_solver,
87 const Teuchos::RCP<NOX::Epetra::Interface::Required>& iReq,
88 const Teuchos::RCP<NOX::Epetra::Interface::Jacobian>& iJac,
89 const Teuchos::RCP<Epetra_Operator>& J,
90 const Teuchos::RCP<const Epetra_Map>& base_map,
91 const Teuchos::RCP<NOX::Epetra::Scaling> scalingObject =
95 virtual ~LinearSystemMPBD();
101 virtual bool applyJacobian(
const NOX::Epetra::Vector& input,
102 NOX::Epetra::Vector& result)
const;
108 virtual bool applyJacobianTranspose(
const NOX::Epetra::Vector& input,
109 NOX::Epetra::Vector& result)
const;
115 virtual bool applyJacobianInverse(Teuchos::ParameterList ¶ms,
116 const NOX::Epetra::Vector &input,
117 NOX::Epetra::Vector &result);
120 virtual bool applyRightPreconditioning(
bool useTranspose,
121 Teuchos::ParameterList& params,
122 const NOX::Epetra::Vector& input,
123 NOX::Epetra::Vector& result)
const;
126 virtual Teuchos::RCP<NOX::Epetra::Scaling> getScaling();
129 virtual void resetScaling(
const Teuchos::RCP<NOX::Epetra::Scaling>& s);
132 virtual bool computeJacobian(
const NOX::Epetra::Vector&
x);
135 virtual bool createPreconditioner(
const NOX::Epetra::Vector&
x,
136 Teuchos::ParameterList& p,
137 bool recomputeGraph)
const;
140 virtual bool destroyPreconditioner()
const;
143 virtual bool recomputePreconditioner(
const NOX::Epetra::Vector&
x,
144 Teuchos::ParameterList& linearSolverParams)
const;
147 virtual PreconditionerReusePolicyType
148 getPreconditionerPolicy(
bool advanceReuseCounter=
true);
151 virtual bool isPreconditionerConstructed()
const;
154 virtual bool hasPreconditioner()
const;
157 virtual Teuchos::RCP<const Epetra_Operator>
158 getJacobianOperator()
const;
161 virtual Teuchos::RCP<Epetra_Operator> getJacobianOperator();
164 virtual Teuchos::RCP<const Epetra_Operator>
165 getGeneratedPrecOperator()
const;
168 virtual Teuchos::RCP<Epetra_Operator> getGeneratedPrecOperator();
171 virtual void setJacobianOperatorForSolve(
const Teuchos::RCP<const Epetra_Operator>& solveJacOp);
174 virtual void setPrecOperatorForSolve(
const Teuchos::RCP<const Epetra_Operator>& solvePrecOp);
185 Teuchos::RCP<NOX::Epetra::LinearSystem> block_solver;
188 Teuchos::RCP<NOX::Epetra::Interface::Jacobian> jacInterfacePtr;
194 mutable Teuchos::RCP<Stokhos::BlockDiagonalOperator> mp_op;
197 mutable Teuchos::RCP<const Stokhos::ProductContainer<Epetra_Operator> > block_ops;
200 Teuchos::RCP<const Epetra_Map> base_map;
203 Teuchos::RCP<NOX::Epetra::Scaling> scaling;
208 PREC_STRATEGY precStrategy;
211 mutable Teuchos::Array< Teuchos::RCP<const Epetra_Operator> > precs;
214 mutable Teuchos::RCP<EpetraExt::BlockVector> prec_x;
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType * x