44 #ifndef NOX_EPETRA_LINEARSYSTEMSGGS_H 45 #define NOX_EPETRA_LINEARSYSTEMSGGS_H 49 #ifdef HAVE_STOKHOS_NOX 51 #include "NOX_Common.H" 53 #include "NOX_Epetra_LinearSystem.H" 54 #include "NOX_Utils.H" 63 #include "Epetra_Export.h" 83 class LinearSystemSGGS :
public virtual NOX::Epetra::LinearSystem {
88 Teuchos::ParameterList& printingParams,
89 Teuchos::ParameterList& linearSolverParams,
90 const Teuchos::RCP<NOX::Epetra::LinearSystem>& detsolve,
91 const Teuchos::RCP<NOX::Epetra::Interface::Required>& iReq,
92 const Teuchos::RCP<NOX::Epetra::Interface::Jacobian>& iJac,
94 const Teuchos::RCP<const Stokhos::ParallelData>& sg_parallel_data,
95 const Teuchos::RCP<Epetra_Operator>& J,
96 const Teuchos::RCP<const Epetra_Map>& base_map,
97 const Teuchos::RCP<const Epetra_Map>& sg_map,
98 const Teuchos::RCP<NOX::Epetra::Scaling> scalingObject =
102 virtual ~LinearSystemSGGS();
108 virtual bool applyJacobian(
const NOX::Epetra::Vector& input,
109 NOX::Epetra::Vector& result)
const;
115 virtual bool applyJacobianTranspose(
const NOX::Epetra::Vector& input,
116 NOX::Epetra::Vector& result)
const;
122 virtual bool applyJacobianInverse(Teuchos::ParameterList ¶ms,
123 const NOX::Epetra::Vector &input,
124 NOX::Epetra::Vector &result);
127 virtual bool applyRightPreconditioning(
bool useTranspose,
128 Teuchos::ParameterList& params,
129 const NOX::Epetra::Vector& input,
130 NOX::Epetra::Vector& result)
const;
133 virtual Teuchos::RCP<NOX::Epetra::Scaling> getScaling();
136 virtual void resetScaling(
const Teuchos::RCP<NOX::Epetra::Scaling>& s);
139 virtual bool computeJacobian(
const NOX::Epetra::Vector&
x);
142 virtual bool createPreconditioner(
const NOX::Epetra::Vector&
x,
143 Teuchos::ParameterList& p,
144 bool recomputeGraph)
const;
147 virtual bool destroyPreconditioner()
const;
150 virtual bool recomputePreconditioner(
const NOX::Epetra::Vector&
x,
151 Teuchos::ParameterList& linearSolverParams)
const;
154 virtual PreconditionerReusePolicyType
155 getPreconditionerPolicy(
bool advanceReuseCounter=
true);
158 virtual bool isPreconditionerConstructed()
const;
161 virtual bool hasPreconditioner()
const;
164 virtual Teuchos::RCP<const Epetra_Operator>
165 getJacobianOperator()
const;
168 virtual Teuchos::RCP<Epetra_Operator> getJacobianOperator();
171 virtual Teuchos::RCP<const Epetra_Operator>
172 getGeneratedPrecOperator()
const;
175 virtual Teuchos::RCP<Epetra_Operator> getGeneratedPrecOperator();
178 virtual void setJacobianOperatorForSolve(
const Teuchos::RCP<const Epetra_Operator>& solveJacOp);
181 virtual void setPrecOperatorForSolve(
const Teuchos::RCP<const Epetra_Operator>& solvePrecOp);
186 Teuchos::RCP<NOX::Epetra::LinearSystem> det_solver;
189 Teuchos::RCP<const Stokhos::OrthogPolyBasis<int,double> > sg_basis;
192 Teuchos::RCP<const Stokhos::EpetraSparse3Tensor> epetraCijk;
195 bool is_stoch_parallel;
198 Teuchos::RCP<const Epetra_BlockMap> stoch_row_map;
204 Teuchos::RCP<const Cijk_type > Cijk;
207 Teuchos::RCP<NOX::Epetra::Interface::Jacobian> jacInterfacePtr;
210 mutable Teuchos::RCP<Stokhos::SGOperator> sg_op;
213 mutable Teuchos::RCP<const Stokhos::EpetraOperatorOrthogPoly > sg_poly;
216 Teuchos::RCP<const Epetra_Map> base_map;
219 Teuchos::RCP<const Epetra_Map> sg_map;
222 Teuchos::RCP<NOX::Epetra::Scaling> scaling;
228 mutable Teuchos::RCP<EpetraExt::BlockVector> sg_df_block;
231 mutable Teuchos::RCP<EpetraExt::BlockVector> sg_y_block;
234 mutable Teuchos::RCP<Epetra_Vector> kx;
240 Teuchos::RCP<const Epetra_BlockMap> sg_col_map;
243 Teuchos::RCP<Epetra_Export> col_exporter;
246 Teuchos::RCP<EpetraExt::BlockVector> sg_df_col;
249 Teuchos::RCP<EpetraExt::BlockVector> sg_df_tmp;
252 bool only_use_linear;
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType * x
Stokhos::Sparse3Tensor< int, double > Cijk_type