Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NOX_Epetra_LinearSystem_MPBD.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Stokhos Package
4 //
5 // Copyright 2009 NTESS and the Stokhos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef NOX_EPETRA_LINEARSYSTEMMPBD_H
11 #define NOX_EPETRA_LINEARSYSTEMMPBD_H
12 
13 #include "Stokhos_ConfigDefs.h"
14 
15 #ifdef HAVE_STOKHOS_NOX
16 
17 #include "NOX_Common.H"
18 
19 #include "NOX_Epetra_LinearSystem.H" // base class
20 #include "NOX_Utils.H" // class data element
21 
25 #include "EpetraExt_BlockVector.h"
26 
27 namespace NOX {
28  namespace Epetra {
29  namespace Interface {
30  class Required;
31  class Jacobian;
32  class Preconditioner;
33  }
34  }
35 }
36 
37 namespace NOX {
38 
39  namespace Epetra {
40 
45  class LinearSystemMPBD : public virtual NOX::Epetra::LinearSystem {
46  public:
47 
49  LinearSystemMPBD(
50  Teuchos::ParameterList& printingParams,
51  Teuchos::ParameterList& linearSolverParams,
52  const Teuchos::RCP<NOX::Epetra::LinearSystem>& block_solver,
56  const Teuchos::RCP<const Epetra_Map>& base_map,
57  const Teuchos::RCP<NOX::Epetra::Scaling> scalingObject =
59 
61  virtual ~LinearSystemMPBD();
62 
67  virtual bool applyJacobian(const NOX::Epetra::Vector& input,
68  NOX::Epetra::Vector& result) const;
69 
74  virtual bool applyJacobianTranspose(const NOX::Epetra::Vector& input,
75  NOX::Epetra::Vector& result) const;
76 
81  virtual bool applyJacobianInverse(Teuchos::ParameterList &params,
82  const NOX::Epetra::Vector &input,
83  NOX::Epetra::Vector &result);
84 
86  virtual bool applyRightPreconditioning(bool useTranspose,
87  Teuchos::ParameterList& params,
88  const NOX::Epetra::Vector& input,
89  NOX::Epetra::Vector& result) const;
90 
92  virtual Teuchos::RCP<NOX::Epetra::Scaling> getScaling();
93 
95  virtual void resetScaling(const Teuchos::RCP<NOX::Epetra::Scaling>& s);
96 
98  virtual bool computeJacobian(const NOX::Epetra::Vector& x);
99 
101  virtual bool createPreconditioner(const NOX::Epetra::Vector& x,
103  bool recomputeGraph) const;
104 
106  virtual bool destroyPreconditioner() const;
107 
109  virtual bool recomputePreconditioner(const NOX::Epetra::Vector& x,
110  Teuchos::ParameterList& linearSolverParams) const;
111 
113  virtual PreconditionerReusePolicyType
114  getPreconditionerPolicy(bool advanceReuseCounter=true);
115 
117  virtual bool isPreconditionerConstructed() const;
118 
120  virtual bool hasPreconditioner() const;
121 
124  getJacobianOperator() const;
125 
127  virtual Teuchos::RCP<Epetra_Operator> getJacobianOperator();
128 
131  getGeneratedPrecOperator() const;
132 
134  virtual Teuchos::RCP<Epetra_Operator> getGeneratedPrecOperator();
135 
137  virtual void setJacobianOperatorForSolve(const Teuchos::RCP<const Epetra_Operator>& solveJacOp);
138 
140  virtual void setPrecOperatorForSolve(const Teuchos::RCP<const Epetra_Operator>& solvePrecOp);
141 
142  protected:
143 
144  enum PREC_STRATEGY {
145  STANDARD,
146  MEAN,
147  ON_THE_FLY
148  };
149 
152 
155 
157  int num_mp_blocks;
158 
161 
164 
167 
170 
172  NOX::Utils utils;
173 
174  PREC_STRATEGY precStrategy;
175 
178 
181 
182  };
183 
184  } // namespace Epetra
185 } // namespace NOX
186 
187 #endif
188 
189 #endif