22 #ifndef __H2D_NEWTON_SOLVER_NOX_H_
23 #define __H2D_NEWTON_SOLVER_NOX_H_
25 #include "solvers/linear_matrix_solver.h"
26 #include "solvers/interfaces/epetra.h"
27 #if(defined HAVE_NOX && defined HAVE_EPETRA && defined HAVE_TEUCHOS)
29 #ifdef _POSIX_C_SOURCE
30 # undef _POSIX_C_SOURCE // pyconfig.h included by NOX_Epetra defines it
33 # undef _XOPEN_SOURCE // pyconfig.h included by NOX_Epetra defines it
36 #include <NOX_Epetra.H>
37 #include "exceptions.h"
38 #include "discrete_problem.h"
44 template <
typename Scalar>
class NewtonSolverNOX;
48 template <
typename Scalar>
49 class HERMES_API DiscreteProblemNOX :
51 public NOX::Epetra::Interface::Required,
52 public NOX::Epetra::Interface::Jacobian,
53 public NOX::Epetra::Interface::Preconditioner
57 DiscreteProblemNOX(WeakFormSharedPtr<Scalar> wf, std::vector<SpaceSharedPtr<Scalar> > spaces);
59 DiscreteProblemNOX(WeakFormSharedPtr<Scalar> wf, SpaceSharedPtr<Scalar> space);
62 ~DiscreteProblemNOX();
65 void set_precond(Teuchos::RCP<Hermes::Preconditioners::EpetraPrecond<Scalar> > &pc);
68 Teuchos::RCP<Hermes::Preconditioners::EpetraPrecond<Scalar> > get_precond();
71 EpetraMatrix<Scalar> *get_jacobian();
74 virtual bool computeF(
const Epetra_Vector &x, Epetra_Vector &f, FillType flag = Residual);
77 virtual bool computeJacobian(
const Epetra_Vector &x, Epetra_Operator &op);
81 virtual bool computePreconditioner(
const Epetra_Vector &x, Epetra_Operator &m,
82 Teuchos::ParameterList *precParams = 0);
86 EpetraMatrix<Scalar>* jacobian;
88 Teuchos::RCP<Hermes::Preconditioners::EpetraPrecond<Scalar> > precond;
90 friend class NewtonSolverNOX < Scalar > ;
95 template <
typename Scalar>
96 class HERMES_API NewtonSolverNOX :
public Hermes::Mixins::Loggable
99 Teuchos::RCP<Teuchos::ParameterList> nl_pars;
102 NewtonSolverNOX(DiscreteProblemNOX<Scalar> *problem);
104 NewtonSolverNOX(WeakFormSharedPtr<Scalar> wf, std::vector<SpaceSharedPtr<Scalar> > spaces);
106 NewtonSolverNOX(WeakFormSharedPtr<Scalar> wf, SpaceSharedPtr<Scalar> space);
111 virtual ~NewtonSolverNOX();
114 virtual void set_time(
double time);
115 virtual void set_time_step(
double time_step);
117 virtual void solve(Scalar* coeff_vec =
nullptr);
118 virtual void solve(std::vector<MeshFunctionSharedPtr<Scalar> > initial_guess);
119 virtual void solve(MeshFunctionSharedPtr<Scalar> initial_guess);
121 Scalar* get_sln_vector();
123 virtual int get_num_iters();
124 virtual double get_residual();
125 int get_num_lin_iters();
126 double get_achieved_tol();
135 void set_output_flags(
int flags);
146 void set_ls_type(
const char *
type);
148 void set_ls_max_iters(
int iters);
150 void set_ls_tolerance(
double tolerance);
152 void set_ls_sizeof_krylov_subspace(
int size);
165 void set_scale_type(NOX::StatusTest::NormF::ScaleType
type);
167 void set_conv_iters(
int iters);
169 void set_conv_abs_resid(
double resid);
171 void set_conv_rel_resid(
double resid);
173 void disable_abs_resid();
175 void disable_rel_resid();
177 void set_conv_update(
double update);
181 void set_conv_wrms(
double rtol,
double atol);
196 void set_precond_reuse(
const char * pc_reuse);
200 void set_precond_max_age(
int max_age);
203 virtual void set_precond(Hermes::Preconditioners::EpetraPrecond<Scalar> &pc);
210 virtual void set_precond(
const char *pc);
213 DiscreteProblemNOX<Scalar> *dp;
231 NOX::StatusTest::NormF::ScaleType stype;
239 unsigned absresid : 1;
240 unsigned relresid : 1;
::xsd::cxx::tree::flags flags
Parsing and serialization flags.
::xsd::cxx::tree::time< char, simple_type > time
C++ type corresponding to the time XML Schema built-in type.
::xsd::cxx::tree::type type
C++ type corresponding to the anyType XML Schema built-in type.