1 #ifndef newton_solver_h
2 #define newton_solver_h
9 #include "Epetra_ConfigDefs.h"
12 # include "Epetra_MpiComm.h"
14 # include "Epetra_SerialComm.h"
19 #include "Epetra_Map.h"
20 #include "Epetra_Vector.h"
21 #include "Epetra_RowMatrix.h"
22 #include "Epetra_CrsMatrix.h"
25 #include "NOX_Epetra_Interface_Required.H"
26 #include "NOX_Epetra_Interface_Jacobian.H"
27 #include "NOX_Epetra_Interface_Preconditioner.H"
28 #include "NOX_Epetra_LinearSystem_AztecOO.H"
29 #include "NOX_Epetra_Group.H"
45 public Epetra_Operator
54 const Epetra_Map &Map,
55 const Epetra_Comm &
Comm) :
67 int Apply(
const Epetra_MultiVector &X, Epetra_MultiVector &Y)
const
99 int ApplyInverse(
const Epetra_MultiVector &X, Epetra_MultiVector &Y)
const
114 UseTranspose =
false;
120 return (
"jacobian_operator");
133 const Epetra_Comm &
Comm()
const
165 public Epetra_Operator
174 const Epetra_Map &Map,
175 const Epetra_Comm &
Comm) :
187 int Apply(
const Epetra_MultiVector &X, Epetra_MultiVector &Y)
const
203 int ApplyInverse(
const Epetra_MultiVector &X, Epetra_MultiVector &Y)
const
251 UseTranspose =
false;
257 return (
"preconditioner_operator");
270 const Epetra_Comm &
Comm()
const
304 public NOX::Epetra::Interface::Required,
305 public NOX::Epetra::Interface::Jacobian,
306 public NOX::Epetra::Interface::Preconditioner
334 NOX::Epetra::Interface::Required::FillType F)
373 throw std::runtime_error (
"*** ProblemInterface does not implement "
374 "computing an explicit preconditioner from an "
375 "Epetra_RowMatrix ***");
379 Epetra_Operator &Prec,
380 Teuchos::ParameterList * =0)
425 const unsigned int max_steps);
static::ExceptionBase & ExcPureFunctionCalled()
virtual int jacobian_prec(Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src)
Inverse Jacobian preconditioner vector product.
bool computePrecMatrix(const Epetra_Vector &x, Epetra_RowMatrix &M)
const char * Label() const
void parse_parameters(ParameterHandler &prm)
Parse a parameter handler.
virtual ~ProblemInterface()
const Epetra_Map & OperatorRangeMap() const
void vmult(Vector< double > &dst, const Vector< double > &src) const
const Epetra_Map & OperatorDomainMap() const
virtual unsigned int n_dofs() const =0
Returns the number of degrees of freedom.
PreconditionerOperator & preconditioner_operator
const Epetra_Map & OperatorRangeMap() const
const Vector< double > & y
int SetUseTranspose(bool UseTranspose)
virtual int jacobian(Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src)
Jacobian vector product.
NewtonArgument & solver
The bubble membrane poperties.
virtual int setup_jacobian_prec(const Vector< double > &src_yy)
Setup Jacobian preconditioner (builds the Jacobian preconditioner matrix).
void vmult(Vector< double > &dst, const Vector< double > &src) const
PreconditionerOperator(NewtonArgument &Solver, const Vector< double > ¤t_solution, const Epetra_Map &Map, const Epetra_Comm &Comm)
NewtonSolver(NewtonArgument &solver)
Constructor for the NewtonSolver class.
std::string linear_solver_name
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
bool computePreconditioner(const Epetra_Vector &x, Epetra_Operator &Prec, Teuchos::ParameterList *=0)
const Vector< double > & y
#define Assert(cond, exc)
int SetUseTranspose(bool UseTranspose)
virtual int jacobian_prec_prod(Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src)
Jacobian preconditioner vector product.
static::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
SolverControl solver_control
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
bool computeF(const Epetra_Vector &x, Epetra_Vector &f, NOX::Epetra::Interface::Required::FillType F)
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
const Epetra_Comm & Comm() const
virtual int residual(Vector< double > &dst, const Vector< double > &src_yy)=0
For dae problems, we need a residual function.
JacobianOperator(NewtonArgument &Solver, const Vector< double > ¤t_solution, const Epetra_Map &Map, const Epetra_Comm &Comm)
const Epetra_Comm & Comm() const
const char * Label() const
Base class that needs to be inherited by any function that wants to use the newton solver class...
unsigned int solve(Vector< double > &solution, const unsigned int max_steps)
Solve.
PreconditionerOperator * preconditioner_operator
JacobianOperator & jacobian_operator
bool UseTranspose() const
static void declare_parameters(ParameterHandler &prm)
Declare parameters for this class to function properly.
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual ~JacobianOperator()
~NewtonSolver()
House cleaning.
const Epetra_Map & OperatorDomainMap() const
virtual ~PreconditionerOperator()
JacobianOperator * jacobian_operator
ProblemInterface(NewtonArgument &Solver, Vector< double > ¤t_sol, PreconditionerOperator &prec_oper, JacobianOperator &jac_oper)
bool computeJacobian(const Epetra_Vector &x, Epetra_Operator &Jac)
bool UseTranspose() const