HermesCommon  2.0
Hermes::Solvers Namespace Reference

Namespace for linear / nonlinear / iterative solvers. More...

Classes

class  DiscreteProblemInterface
 Minimalistic DiscreteProblem interface required by NoxProblemInterface. More...
 
class  LinearMatrixSolver
 Abstract class for defining solver interface. More...
 
class  DirectSolver
 Base class for defining interface for direct linear solvers. Internal, though utilizable for defining interfaces to other algebraic packages. More...
 
class  IterSolver
 Abstract class for defining interface for iterative solvers. Internal, though utilizable for defining interfaces to other algebraic packages. More...
 
class  NonlinearSolver
 Base class for defining interface for nonlinear solvers. More...
 

Enumerations

enum  FactorizationScheme { HERMES_FACTORIZE_FROM_SCRATCH, HERMES_REUSE_MATRIX_REORDERING, HERMES_REUSE_MATRIX_REORDERING_AND_SCALING, HERMES_REUSE_FACTORIZATION_COMPLETELY }
 

Functions

template<typename Scalar >
HERMES_API LinearMatrixSolver
< Scalar > * 
create_linear_solver (Matrix< Scalar > *matrix, Vector< Scalar > *rhs)
 Function returning a solver according to the users's choice. More...
 
template<typename Scalar >
LinearMatrixSolver< Scalar > * create_linear_solver (Matrix< Scalar > *matrix, Vector< Scalar > *rhs)
 Function returning a solver according to the users's choice. More...
 
template HERMES_API
LinearMatrixSolver< double > * 
create_linear_solver (Matrix< double > *matrix, Vector< double > *rhs)
 
template HERMES_API
LinearMatrixSolver
< std::complex< double > > * 
create_linear_solver (Matrix< std::complex< double > > *matrix, Vector< std::complex< double > > *rhs)
 

Variables

template class HERMES_API DiscreteProblemInterface< double >
 
template class HERMES_API LinearMatrixSolver< double >
 
template class HERMES_API DirectSolver< double >
 
template class HERMES_API IterSolver< double >
 
template class HERMES_API NonlinearSolver< double >
 

Detailed Description

Namespace for linear / nonlinear / iterative solvers.

Enumeration Type Documentation

\ brief Options for matrix factorization reuse.

Reusing the information computed during previous solution of a similar problem significantly improves efficiency of the solver.

Usage: Each solver which allows factorization reuse should perform complete factorization from scratch for the first time it is invoked, keep the precomputed structures according to the current factorization reuse stratregy and use them for next factorization.

Enabled solvers:  -SuperLU - performs reordering, scaling and factorization separately. When the   multithreaded version is used, scaling is performed during the factorization   phase (if neccessary) and thus HERMES_REUSE_MATRIX_REORDERING_AND_SCALING   and HERMES_REUSE_MATRIX_REORDERING have the same effect.  -UMFPack - like the MT version of SuperLU, performs scaling and factorization in one step.   HERMES_REUSE_MATRIX_REORDERING_AND_SCALING has thus the same effect as   HERMES_REUSE_MATRIX_REORDERING (saves the preceding symbolic analysis step).  -MUMPS - If HERMES_REUSE_MATRIX_REORDERING_AND_SCALING is set, scaling is performed   during analysis and only factorization is repeated during each solve.   If HERMES_REUSE_MATRIX_REORDERING is set, scaling is performed during   the factorization phase. This may be less efficient, but more reliable,   especially for highly non-symmetric matrices.  -AMESOS - Behaves like UMFPack.  -PETSc - Factorization reuse applies to the construction of PETSc preconditioner.   Both HERMES_REUSE_MATRIX_REORDERING_AND_SCALING and   HERMES_REUSE_MATRIX_REORDERING allow to reuse the non-zero pattern of the   previously created preconditioner, HERMES_REUSE_FACTORIZATION_COMPLETELY   indicates that the preconditioner may be reused completely for future solves.

Typical scenario: When rhsonly was set to true for the assembly phase, HERMES_REUSE_FACTORIZATION_COMPLETELY should be set for the following solution phase.

Enumerator
HERMES_FACTORIZE_FROM_SCRATCH 

existing factorization data.

Perform new factorization, don't reuse

HERMES_REUSE_MATRIX_REORDERING 

pattern as the one already factorized.

Factorize matrix with the same sparsity

HERMES_REUSE_MATRIX_REORDERING_AND_SCALING 

Factorize matrix with the same sparsity pattern and similar numerical values as the one already factorized.

HERMES_REUSE_FACTORIZATION_COMPLETELY 

factorization.

Completely reuse the already performed

Definition at line 73 of file linear_matrix_solver.h.

Function Documentation

template<typename Scalar >
LinearMatrixSolver<Scalar>* Hermes::Solvers::create_linear_solver ( Matrix< Scalar > *  matrix,
Vector< Scalar > *  rhs 
)

Function returning a solver according to the users's choice.

Parameters
[in]matrixmatrix
[in]rhsright hand side vector
Returns
created linear solver

Definition at line 77 of file linear_matrix_solver.cpp.

Referenced by create_linear_solver().

template<typename Scalar >
HERMES_API LinearMatrixSolver<Scalar>* Hermes::Solvers::create_linear_solver ( Matrix< Scalar > *  matrix,
Vector< Scalar > *  rhs 
)

Function returning a solver according to the users's choice.

Parameters
[in]matrixmatrix
[in]rhsright hand side vector
Returns
created linear solver

Definition at line 77 of file linear_matrix_solver.cpp.

Referenced by create_linear_solver().