Feel++ 0.91.0
|
! More...
#include <backend.hpp>
Public Types | |
Typedefs | |
typedef T | value_type |
typedef type_traits< T >::real_type | real_type |
typedef Vector< value_type > | vector_type |
typedef boost::shared_ptr < vector_type > | vector_ptrtype |
typedef MatrixSparse< value_type > | sparse_matrix_type |
typedef boost::shared_ptr < sparse_matrix_type > | sparse_matrix_ptrtype |
typedef Backend< value_type > | backend_type |
typedef boost::shared_ptr < backend_type > | backend_ptrtype |
typedef SolverNonLinear < value_type > | solvernonlinear_type |
typedef boost::shared_ptr < solvernonlinear_type > | solvernonlinear_ptrtype |
typedef boost::tuple< bool, size_type, value_type > | solve_return_type |
typedef boost::tuple< bool, size_type, value_type > | nl_solve_return_type |
Public Member Functions | |
Accessors | |
std::string | kspType () |
std::string | pcType () |
PreconditionerType | pcEnumType () |
SolverType | kspEnumType () |
MatrixStructure | precMatrixStructure () const |
value_type | rTolerance () const |
value_type | dTolerance () const |
value_type | aTolerance () const |
size_type | maxIterations () const |
bool | converged () const |
size_type | nIterations () const |
bool | transpose () const |
mpi::communicator const & | comm () const |
Mutators | |
BOOST_PARAMETER_MEMBER_FUNCTION ((void), setTolerances, tag,(required(rtolerance,(double)))(optional(maxit,(size_type), 1000)(atolerance,(double), 1e-50)(dtolerance,(double), 1e5))) | |
BOOST_PARAMETER_MEMBER_FUNCTION ((void), setSolverType, tag,(required(ksp,(std::string)))(optional(pc,(std::string),"lu"))) | |
void | setPrecMatrixStructure (MatrixStructure mstruct) |
solvernonlinear_ptrtype | nlSolver () |
void | setTranspose (bool transpose) |
Methods | |
virtual real_type | dot (vector_type const &x, vector_type const &y) const |
real_type | dot (vector_ptrtype const &x, vector_ptrtype const &y) const |
virtual void | prod (sparse_matrix_type const &A, vector_type const &x, vector_type &y) const =0 |
void | prod (sparse_matrix_ptrtype const &A, vector_ptrtype const &x, vector_ptrtype &y) const |
BOOST_PARAMETER_MEMBER_FUNCTION ((solve_return_type), solve, tag,(required(matrix,(sparse_matrix_ptrtype))(in_out(solution),*(mpl::or_< boost::is_convertible< mpl::_, vector_type & >, boost::is_convertible< mpl::_, vector_ptrtype > >))(rhs,(vector_ptrtype)))(optional(prec,(sparse_matrix_ptrtype), matrix)(maxit,(size_type), M_maxit)(rtolerance,(double), M_rtolerance)(atolerance,(double), M_atolerance)(dtolerance,(double), M_dtolerance)(reuse_prec,(bool), false)(transpose,(bool), false)(pc,(std::string), M_pc)(ksp,(std::string), M_ksp))) | |
virtual solve_return_type | solve (sparse_matrix_ptrtype const &A, sparse_matrix_ptrtype const &P, vector_ptrtype &x, vector_ptrtype const &b)=0 |
solve_return_type | solve (sparse_matrix_ptrtype const &A, sparse_matrix_ptrtype const &P, vector_ptrtype &x, vector_ptrtype const &b, bool reuse_prec) |
virtual nl_solve_return_type | nlSolve (sparse_matrix_ptrtype &A, vector_ptrtype &x, vector_ptrtype &b, const double, const int) |
virtual nl_solve_return_type | nlSolve (sparse_matrix_ptrtype &A, vector_ptrtype &x, vector_ptrtype &b, const double, const int, bool reusePC) |
Constructors, destructor | |
Backend () | |
Backend (po::variables_map const &vm, std::string const &prefix="") | |
Backend (Backend const &) | |
virtual | ~Backend () |
virtual sparse_matrix_ptrtype | newMatrix (const size_type m, const size_type n, const size_type m_l, const size_type n_l, const size_type nnz=30, const size_type noz=10)=0 |
virtual sparse_matrix_ptrtype | newMatrix (DataMap const &dm1, DataMap const &dm2)=0 |
template<typename DomainSpace , typename ImageSpace > | |
sparse_matrix_ptrtype | newMatrix (DomainSpace const &dm, ImageSpace const &im) |
template<int NR, int NC> | |
sparse_matrix_ptrtype | newBlockMatrix (Blocks< NR, NC, T > const &b) |
virtual vector_ptrtype | newVector (DataMap const &dm)=0 |
template<typename DomainSpace > | |
vector_ptrtype | newVector (DomainSpace const &dm) |
static backend_ptrtype | build (BackendType=BACKEND_PETSC) |
static backend_ptrtype | build (po::variables_map const &vm, std::string const &prefix="") |
!
base class for all linear algebra backends
value_type Feel::Backend< T >::aTolerance | ( | ) | const [inline] |
Feel::Backend< T >::BOOST_PARAMETER_MEMBER_FUNCTION | ( | (void) | , |
setTolerances | , | ||
tag | , | ||
(required(rtolerance,(double)))(optional(maxit,(size_type), 1000)(atolerance,(double),1e-50)(dtolerance,(double),1e5)) | |||
) | [inline] |
set tolerances: relative tolerance rtol
, divergence tolerance dtol
and absolute tolerance atol
Feel::Backend< T >::BOOST_PARAMETER_MEMBER_FUNCTION | ( | (void) | , |
setSolverType | , | ||
tag | , | ||
(required(ksp,(std::string)))(optional(pc,(std::string),"lu")) | |||
) | [inline] |
set solver: krylov subspace method and preconditioners
Feel::Backend< T >::BOOST_PARAMETER_MEMBER_FUNCTION | ( | (solve_return_type) | , |
solve | , | ||
tag | , | ||
(required(matrix,(sparse_matrix_ptrtype))(in_out(solution),*(mpl::or_< boost::is_convertible< mpl::_, vector_type & >,boost::is_convertible< mpl::_, vector_ptrtype > >))(rhs,(vector_ptrtype)))(optional(prec,(sparse_matrix_ptrtype), matrix)(maxit,(size_type), M_maxit)(rtolerance,(double), M_rtolerance)(atolerance,(double), M_atolerance)(dtolerance,(double), M_dtolerance)(reuse_prec,(bool), false)(transpose,(bool), false)(pc,(std::string), M_pc)(ksp,(std::string), M_ksp)) | |||
) | [inline] |
solve for where
is an approximation of the inverse of
. this interface uses the boost.parameter library to ease the function usage
A | matrix to inverse |
rhs | right hand side vector |
solution | solution of the system |
P | preconditioner |
maxit | maximum number of iterations |
tolerance | tolerance on the residual |
reuse_prec | if true use adaptive preconditioning strategy |
transpose | if true solve the transpose problem |
References Feel::Backend< T >::newVector(), and Feel::Backend< T >::solve().
Backend< T >::backend_ptrtype Feel::Backend< T >::build | ( | po::variables_map const & | vm, |
std::string const & | prefix = "" |
||
) | [static] |
Builds a Backend
Backend< T >::backend_ptrtype Feel::Backend< T >::build | ( | BackendType | bt = BACKEND_PETSC | ) | [static] |
Builds a Backend
, if Petsc is available, use Petsc by default, otherwise use GMM which is distributed with feel
mpi::communicator const& Feel::Backend< T >::comm | ( | ) | const [inline] |
Backend< T >::real_type Feel::Backend< T >::dot | ( | vector_type const & | x, |
vector_type const & | y | ||
) | const [virtual] |
clean up
References Feel::Vector< T >::localSize().
Referenced by Feel::Backend< T >::dot().
real_type Feel::Backend< T >::dot | ( | vector_ptrtype const & | x, |
vector_ptrtype const & | y | ||
) | const [inline] |
References Feel::Backend< T >::dot().
value_type Feel::Backend< T >::dTolerance | ( | ) | const [inline] |
SolverType Feel::Backend< T >::kspEnumType | ( | ) |
return enum solver type from options
std::string Feel::Backend< T >::kspType | ( | ) | [inline] |
size_type Feel::Backend< T >::maxIterations | ( | ) | const [inline] |
sparse_matrix_ptrtype Feel::Backend< T >::newBlockMatrix | ( | Blocks< NR, NC, T > const & | b | ) | [inline] |
instantiate a new block matrix sparse
virtual sparse_matrix_ptrtype Feel::Backend< T >::newMatrix | ( | DataMap const & | dm1, |
DataMap const & | dm2 | ||
) | [pure virtual] |
instantiate a new sparse vector
Implemented in Feel::BackendGmm< T >, and Feel::BackendPetsc< T >.
sparse_matrix_ptrtype Feel::Backend< T >::newMatrix | ( | DomainSpace const & | dm, |
ImageSpace const & | im | ||
) | [inline] |
helper function
References Feel::Backend< T >::newMatrix().
virtual sparse_matrix_ptrtype Feel::Backend< T >::newMatrix | ( | const size_type | m, |
const size_type | n, | ||
const size_type | m_l, | ||
const size_type | n_l, | ||
const size_type | nnz = 30 , |
||
const size_type | noz = 10 |
||
) | [pure virtual] |
instantiate a new sparse vector
Implemented in Feel::BackendGmm< T >, and Feel::BackendPetsc< T >.
Referenced by Feel::Backend< T >::newMatrix().
vector_ptrtype Feel::Backend< T >::newVector | ( | DomainSpace const & | dm | ) | [inline] |
helper function
References Feel::Backend< T >::newVector().
virtual vector_ptrtype Feel::Backend< T >::newVector | ( | DataMap const & | dm | ) | [pure virtual] |
instantiate a new vector
Implemented in Feel::BackendGmm< T >, and Feel::BackendPetsc< T >.
Referenced by Feel::Backend< T >::BOOST_PARAMETER_MEMBER_FUNCTION(), and Feel::Backend< T >::newVector().
Backend< T >::nl_solve_return_type Feel::Backend< T >::nlSolve | ( | sparse_matrix_ptrtype & | A, |
vector_ptrtype & | x, | ||
vector_ptrtype & | b, | ||
const double | tol, | ||
const int | its | ||
) | [virtual] |
solve for the nonlinear problem
Backend< T >::nl_solve_return_type Feel::Backend< T >::nlSolve | ( | sparse_matrix_ptrtype & | A, |
vector_ptrtype & | x, | ||
vector_ptrtype & | b, | ||
const double | tol, | ||
const int | its, | ||
bool | reusePC | ||
) | [virtual] |
solve for the nonlinear problem with an adaptive strategy to reuse the preconditioner
solvernonlinear_ptrtype Feel::Backend< T >::nlSolver | ( | ) | [inline] |
PreconditionerType Feel::Backend< T >::pcEnumType | ( | ) |
return enum pc type from options
std::string Feel::Backend< T >::pcType | ( | ) | [inline] |
MatrixStructure Feel::Backend< T >::precMatrixStructure | ( | ) | const [inline] |
virtual void Feel::Backend< T >::prod | ( | sparse_matrix_type const & | A, |
vector_type const & | x, | ||
vector_type & | y | ||
) | const [pure virtual] |
Implemented in Feel::BackendGmm< T >, and Feel::BackendPetsc< T >.
Referenced by Feel::Backend< T >::prod().
void Feel::Backend< T >::prod | ( | sparse_matrix_ptrtype const & | A, |
vector_ptrtype const & | x, | ||
vector_ptrtype & | y | ||
) | const [inline] |
References Feel::Backend< T >::prod().
value_type Feel::Backend< T >::rTolerance | ( | ) | const [inline] |
void Feel::Backend< T >::setPrecMatrixStructure | ( | MatrixStructure | mstruct | ) | [inline] |
set the type of preconditioner associated to the matrix
Referenced by Feel::BackendPetsc< T >::solve().
Backend< T >::solve_return_type Feel::Backend< T >::solve | ( | sparse_matrix_ptrtype const & | A, |
sparse_matrix_ptrtype const & | P, | ||
vector_ptrtype & | x, | ||
vector_ptrtype const & | b, | ||
bool | reuse_prec | ||
) |
solve for where
is an approximation of the inverse of
using an adaptive preconditioning strategy.
A | matrix to inverse |
rhs | right hand side vector |
solution | solution of the system |
P | preconditioner |
maxit | maximum number of iterations |
tolerance | tolerance on the residual |
transpose | if true solve the transpose problem |
virtual solve_return_type Feel::Backend< T >::solve | ( | sparse_matrix_ptrtype const & | A, |
sparse_matrix_ptrtype const & | P, | ||
vector_ptrtype & | x, | ||
vector_ptrtype const & | b | ||
) | [pure virtual] |
solve for where
is an approximation of the inverse of
.
A | matrix to inverse |
rhs | right hand side vector |
solution | solution of the system |
P | preconditioner |
maxit | maximum number of iterations |
tolerance | tolerance on the residual |
transpose | if true solve the transpose problem |
Implemented in Feel::BackendGmm< T >, and Feel::BackendPetsc< T >.
Referenced by Feel::Backend< T >::BOOST_PARAMETER_MEMBER_FUNCTION().