Belos
Version of the Day
|
Factory for all solvers which Belos supports. More...
#include <BelosSolverFactory.hpp>
Public Types | |
typedef parent_type::solver_base_type | solver_base_type |
The type of the solver returned by create(). More... | |
typedef parent_type::custom_solver_factory_type | custom_solver_factory_type |
The type of a solver factory that users may give to addFactory() (which see). More... | |
![]() | |
typedef ::Belos::SolverManager < Scalar, MV, OP > | solver_base_type |
The type of the solver returned by create(). More... | |
typedef CustomSolverFactory < Scalar, MV, OP > | custom_solver_factory_type |
The type of a solver factory that users may give to addFactory() (which see below) More... | |
Additional Inherited Members | |
![]() | |
virtual Teuchos::RCP < solver_base_type > | create (const std::string &solverName, const Teuchos::RCP< Teuchos::ParameterList > &solverParams) |
Create, configure, and return the specified solver. More... | |
virtual int | numSupportedSolvers () const |
Number of supported solvers. More... | |
virtual Teuchos::Array < std::string > | supportedSolverNames () const |
List of supported solver names. More... | |
virtual bool | isSupported (const std::string &solverName) const |
Whether the given solver name names a supported solver. More... | |
void | addFactory (const Teuchos::RCP< custom_solver_factory_type > &factory) |
Add a custom solver factory. More... | |
virtual std::string | description () const |
A string description of this object. More... | |
virtual void | describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const |
Describe this object. More... | |
![]() | |
void | describe (std::ostream &out, const EVerbosityLevel verbLevel=verbLevel_default) const |
virtual | ~Describable () |
LabeledObject () | |
virtual | ~LabeledObject () |
virtual void | setObjectLabel (const std::string &objectLabel) |
virtual std::string | getObjectLabel () const |
DescribableStreamManipulatorState | describe (const Describable &describable, const EVerbosityLevel verbLevel=Describable::verbLevel_default) |
std::ostream & | operator<< (std::ostream &os, const DescribableStreamManipulatorState &d) |
![]() | |
static const EVerbosityLevel | verbLevel_default |
![]() | |
virtual Teuchos::RCP < solver_base_type > | getSolver (const std::string &solverName, const Teuchos::RCP< Teuchos::ParameterList > &solverParams) |
Return an instance of the specified solver, or Teuchos::null if this factory does not provide the requested solver. More... | |
Factory for all solvers which Belos supports.
New Belos users should start by creating an instance of this class, and using it to create the solver they want.
Belos implements several different iterative solvers. The usual way in which users interact with these solvers is through appropriately named subclasses of SolverManager
. This factory class tells users which solvers are supported. It can initialize and return any supported subclass of SolverManager
, given a short name of the subclass (such as "GMRES" or "CG").
Users ask for the solver they want by a string name, and supply an optional (but recommended) list of parameters (Teuchos::ParameterList) for the solver. The solver may fill in the parameter list with all the valid parameters and their default values, which users may later inspect and modify. Valid solver names include both "canonical names" (each maps one-to-one to a specific SolverManager subclass) and "aliases." Some aliases are short nicknames for canonical names, like "GMRES" for "Pseudoblock GMRES". Other aliases refer to a canonical solver name, but also modify the user's parameter list. For example, "Flexible GMRES" is an alias for "Block GMRES", and also sets the "Flexible Gmres" parameter to true in the input parameter list.
Solver name | Aliases | SolverManager subclass |
---|---|---|
Pseudoblock GMRES | GMRES, Pseudo Block GMRES, PseudoBlockGMRES, PseudoBlockGmres | PseudoBlockGmresSolMgr |
Block GMRES | Flexible GMRES | BlockGmresSolMgr |
Block CG | Block CG | BlockCGSolMgr |
Pseudoblock CG | PseudoBlockCG, Pseudo Block CG | PseudoBlockCGSolMgr |
Pseudoblock Stochastic CG | Stochastic CG | PseudoBlockStochasticCGSolMgr |
GCRODR | Recycling GMRES | GCRODRSolMgr |
RCG | Recycling CG | RCGSolMgr |
MINRES | MINRES | MinresSolMgr |
LSQR | LSQR | LSQRSolMgr |
TFQMR | TFQMR, Transpose-Free QMR | TFQMRSolMgr |
Pseudoblock TFQMR | Pseudoblock TFQMR, Pseudo Block Transpose-Free QMR | PseudoBlockTFQMRSolMgr |
Hybrid Block GMRES | GmresPoly, Seed GMRES | GmresPolySolMgr |
PCPG | CGPoly, Seed CG | PCPGSolMgr |
This class' template parameters are the same as those of Belos::SolverManager. Scalar is the scalar type (of entries in the multivector), MV is the multivector type, and OP is the operator type. For example: Scalar=double, MV=Epetra_MultiVector, and OP=Epetra_Operator will access the Epetra specialization of the Belos solvers.
Here is a simple example of how to use SolverFactory to create a GMRES solver for your linear system. Your code needs to include BelosSolverFactory.hpp and whatever linear algebra library header files you would normally use. Suppose that Scalar, MV, and OP have been previously typedef'd to the scalar resp. multivector resp. operator type in your application.
Belos developers who have implemented a new solver (i.e., a new subclass of SolverManager) and who want to make the solver available through the factory should do the following:
Definition at line 373 of file BelosSolverFactory.hpp.
typedef parent_type::solver_base_type Belos::SolverFactory< Scalar, MV, OP >::solver_base_type |
The type of the solver returned by create().
This is a specialization of SolverManager for the same scalar, multivector, and operator types as the template parameters of this factory.
Definition at line 384 of file BelosSolverFactory.hpp.
typedef parent_type::custom_solver_factory_type Belos::SolverFactory< Scalar, MV, OP >::custom_solver_factory_type |
The type of a solver factory that users may give to addFactory() (which see).
Definition at line 389 of file BelosSolverFactory.hpp.