Feel++ 0.91.0
|
Non linear solver base interface. More...
#include <solvernonlinear.hpp>
Public Types | |
Typedefs | |
typedef SolverNonLinear< T > | self_type |
typedef boost::shared_ptr < SolverNonLinear< T > > | self_ptrtype |
typedef self_type | solvernonlinear_type |
typedef boost::shared_ptr < self_type > | solvernonlinear_ptrtype |
typedef T | value_type |
typedef type_traits< T >::real_type | real_type |
typedef boost::shared_ptr < Vector< value_type > > | vector_ptrtype |
typedef boost::shared_ptr < MatrixSparse< value_type > > | sparse_matrix_ptrtype |
typedef ublas::matrix< value_type > | dense_matrix_type |
typedef ublas::vector< value_type > | dense_vector_type |
typedef boost::function< void(const vector_ptrtype &X, vector_ptrtype &R)> | residual_function_type |
typedef boost::function< void(const vector_ptrtype &X, sparse_matrix_ptrtype &J)> | jacobian_function_type |
typedef boost::function< void(const vector_ptrtype &X, vector_ptrtype &R, sparse_matrix_ptrtype &J)> | matvec_function_type |
typedef boost::function< void(dense_vector_type const &X, dense_vector_type &R)> | dense_residual_function_type |
typedef boost::function< void(dense_vector_type const &X, dense_matrix_type &J)> | dense_jacobian_function_type |
typedef boost::function< void(dense_vector_type const &X, dense_vector_type &R, dense_matrix_type &J)> | dense_matvec_function_type |
Public Member Functions | |
Accessors | |
bool | initialized () const |
virtual void | clear () |
virtual MatrixStructure | precMatrixStructure () const |
SolverNonLinearType | getType () const |
double | getAbsoluteResidualTol () const |
double | getRelativeResidualTol () const |
double | getAbsoluteSolutionTol () const |
uint | getNbItMax () const |
Mutators | |
virtual void | setPrecMatrixStructure (MatrixStructure mstruct) |
void | setType (SolverNonLinearType snl_type) |
void | setRelativeResidualTol (double tol) |
void | setAbsoluteResidualTol (double tol) |
void | setAbsoluteSolutionTol (double tol) |
void | setNbItMax (uint n) |
Protected Attributes | |
bool | M_is_initialized |
MatrixStructure | M_prec_matrix_structure |
SolverNonLinearType | M_snl_type |
double | M_relativeResidualTol |
double | M_absoluteResidualTol |
double | M_absoluteSolutionTol |
uint | M_nbItMax |
Constructors, destructor | |
SolverNonLinear () | |
SolverNonLinear (SolverNonLinear const &) | |
virtual | ~SolverNonLinear () |
virtual void | init ()=0 |
static solvernonlinear_ptrtype | build (po::variables_map const &vm, std::string const &prefix="") |
static solvernonlinear_ptrtype | build (SolverPackage solver_package) |
Methods | |
residual_function_type | residual |
jacobian_function_type | jacobian |
matvec_function_type | matvec |
dense_residual_function_type | dense_residual |
dense_jacobian_function_type | dense_jacobian |
dense_matvec_function_type | dense_matvec |
virtual std::pair< unsigned int, real_type > | solve (sparse_matrix_ptrtype &, vector_ptrtype &, vector_ptrtype &, const double, const unsigned int)=0 |
virtual std::pair< unsigned int, real_type > | solve (dense_matrix_type &, dense_vector_type &, dense_vector_type &, const double, const unsigned int)=0 |
Non linear solver base interface.
This class provides a uniform interface for nonlinear solvers. This base class is overloaded to provide nonlinear solvers from different packages like PETSC.
Feel::SolverNonLinear< T >::SolverNonLinear | ( | ) | [inline] |
Constructor. Initializes Solver data structures
Feel::SolverNonLinear< T >::SolverNonLinear | ( | SolverNonLinear< T > const & | snl | ) | [inline] |
copy constructor
Feel::SolverNonLinear< T >::~SolverNonLinear | ( | ) | [inline, virtual] |
Destructor.
boost::shared_ptr< SolverNonLinear< T > > Feel::SolverNonLinear< T >::build | ( | po::variables_map const & | vm, |
std::string const & | prefix = "" |
||
) | [static] |
Builds a NonlinearSolver
using the nonlinear solver package specified by the variables_map
vm
and prefix
boost::shared_ptr< SolverNonLinear< T > > Feel::SolverNonLinear< T >::build | ( | SolverPackage | solver_package | ) | [static] |
Builds a NonlinearSolver
using the nonlinear solver package specified by solver_package
virtual void Feel::SolverNonLinear< T >::clear | ( | ) | [inline, virtual] |
Release all memory and clear data structures.
Reimplemented in Feel::SolverNonLinearPetsc< T >, and Feel::SolverNonLinearPetsc< double >.
virtual void Feel::SolverNonLinear< T >::init | ( | ) | [pure virtual] |
Initialize data structures if not done so already.
Implemented in Feel::SolverNonLinearPetsc< T >, and Feel::SolverNonLinearPetsc< double >.
bool Feel::SolverNonLinear< T >::initialized | ( | ) | const [inline] |
virtual MatrixStructure Feel::SolverNonLinear< T >::precMatrixStructure | ( | ) | const [inline, virtual] |
void Feel::SolverNonLinear< T >::setNbItMax | ( | uint | n | ) | [inline] |
Define the number max of iteration
virtual void Feel::SolverNonLinear< T >::setPrecMatrixStructure | ( | MatrixStructure | mstruct | ) | [inline, virtual] |
void Feel::SolverNonLinear< T >::setRelativeResidualTol | ( | double | tol | ) | [inline] |
Define values of tolerance for the non linear solver
void Feel::SolverNonLinear< T >::setType | ( | SolverNonLinearType | snl_type | ) | [inline] |
Select type of non linear solver : LINEAR_SEARCH, TRUST_REGION, ...
virtual std::pair<unsigned int, real_type> Feel::SolverNonLinear< T >::solve | ( | dense_matrix_type & | , |
dense_vector_type & | , | ||
dense_vector_type & | , | ||
const double | , | ||
const unsigned | int | ||
) | [pure virtual] |
Solves a sparse nonlinear system.
Implemented in Feel::SolverNonLinearPetsc< T >, and Feel::SolverNonLinearPetsc< double >.
virtual std::pair<unsigned int, real_type> Feel::SolverNonLinear< T >::solve | ( | sparse_matrix_ptrtype & | , |
vector_ptrtype & | , | ||
vector_ptrtype & | , | ||
const double | , | ||
const unsigned | int | ||
) | [pure virtual] |
Solves a sparse nonlinear system.
Implemented in Feel::SolverNonLinearPetsc< T >, and Feel::SolverNonLinearPetsc< double >.
dense_jacobian_function_type Feel::SolverNonLinear< T >::dense_jacobian |
Function that computes the Jacobian J(X)
of the nonlinear system at the input iterate X
.
Referenced by __feel_petsc_snes_dense_jacobian().
dense_matvec_function_type Feel::SolverNonLinear< T >::dense_matvec |
Function that computes either the residual or the Jacobian
of the nonlinear system at the input iterate
. Note that either
R
or J
could be XSNULL
.
dense_residual_function_type Feel::SolverNonLinear< T >::dense_residual |
Function that computes the residual R(X)
of the nonlinear system at the input iterate X
.
jacobian_function_type Feel::SolverNonLinear< T >::jacobian |
Function that computes the Jacobian J(X)
of the nonlinear system at the input iterate X
.
Referenced by __feel_petsc_snes_jacobian().
double Feel::SolverNonLinear< T >::M_absoluteSolutionTol [protected] |
Absolute tolerances between successive iteration
bool Feel::SolverNonLinear< T >::M_is_initialized [protected] |
Flag indicating if the data structures have been initialized.
Referenced by Feel::SolverNonLinear< double >::initialized().
uint Feel::SolverNonLinear< T >::M_nbItMax [protected] |
The maximum numbers of allowable nonlinear iterations
Referenced by Feel::SolverNonLinear< double >::setNbItMax().
double Feel::SolverNonLinear< T >::M_relativeResidualTol [protected] |
Two differents tolerances on the residual for the resolution of non linear system
Referenced by Feel::SolverNonLinear< double >::setRelativeResidualTol().
SolverNonLinearType Feel::SolverNonLinear< T >::M_snl_type [protected] |
Define the type of non linear solver
Referenced by Feel::SolverNonLinear< double >::setType().
matvec_function_type Feel::SolverNonLinear< T >::matvec |
Function that computes either the residual or the Jacobian
of the nonlinear system at the input iterate
. Note that either
R
or J
could be XSNULL
.
residual_function_type Feel::SolverNonLinear< T >::residual |
Function that computes the residual R(X)
of the nonlinear system at the input iterate X
.