ug4
|
the GMREs method as a solver for linear operators More...
#include <gmres.h>
Public Types | |
typedef IPreconditionedLinearOperatorInverse< vector_type > | base_type |
Base type. | |
typedef TVector | vector_type |
Vector type. | |
![]() | |
typedef ILinearOperatorInverse< TVector, TVector > | base_type |
Base class. | |
typedef TVector | codomain_function_type |
Range space. | |
typedef TVector | domain_function_type |
Domain space. | |
![]() | |
typedef Y | codomain_function_type |
Range space. | |
typedef X | domain_function_type |
Domain space. | |
![]() | |
typedef Y | codomain_function_type |
Range space. | |
typedef X | domain_function_type |
Domain space. | |
![]() | |
typedef TVector | vector_type |
type of vector | |
Public Member Functions | |
void | add_postprocess_corr (SmartPtr< IPProcessVector< vector_type > > p) |
adds a post-process for the iterates | |
virtual bool | apply_return_defect (vector_type &x, vector_type &b) |
virtual std::string | config_string () const |
returns information about configuration parameters | |
GMRES (size_t restart) | |
default constructor | |
GMRES (size_t restart, SmartPtr< ILinearIterator< vector_type > > spPrecond, SmartPtr< IConvergenceCheck< vector_type > > spConvCheck) | |
constructor setting the preconditioner and the convergence check | |
virtual const char * | name () const |
name of solver | |
void | remove_postprocess_corr (SmartPtr< IPProcessVector< vector_type > > p) |
removes a post-process for the iterates | |
virtual bool | supports_parallel () const |
returns if parallel solving is supported | |
![]() | |
virtual bool | apply (TVector &x, const TVector &b) |
std::string | config_string_preconditioner_convergence_check () const |
returns config information of convergence check and preconditioner | |
virtual bool | init (SmartPtr< ILinearOperator< TVector, TVector > > J, const TVector &u) |
initializes the solver for an operator | |
virtual bool | init (SmartPtr< ILinearOperator< TVector, TVector > > L) |
initializes the solver for an operator | |
IPreconditionedLinearOperatorInverse () | |
Empty constructor. | |
IPreconditionedLinearOperatorInverse (SmartPtr< ILinearIterator< TVector, TVector > > spPrecond) | |
constructor setting the preconditioner | |
IPreconditionedLinearOperatorInverse (SmartPtr< ILinearIterator< TVector, TVector > > spPrecond, SmartPtr< IConvergenceCheck< TVector > > spConvCheck) | |
constructor setting the preconditioner | |
void | set_compute_fresh_defect_when_finished (bool bRecompute) |
for debug: computes norm again after whole calculation of apply | |
void | set_preconditioner (SmartPtr< ILinearIterator< TVector, TVector > > spPrecond) |
sets the preconditioner | |
SmartPtr< ILinearIterator< TVector, TVector > > | preconditioner () |
ConstSmartPtr< ILinearIterator< TVector, TVector > > | preconditioner () const |
![]() | |
virtual bool | apply (Y &u, const X &f)=0 |
applies inverse operator, i.e. returns u = A^{-1} f | |
virtual bool | apply_return_defect (Y &u, X &f)=0 |
applies inverse operator, i.e. returns u = A^{-1} f and returns defect d := f - A*u | |
virtual bool | apply_update_defect (Y &u, X &f) |
compute new correction c = B*d and update defect d := d - A*c | |
virtual SmartPtr< ILinearIterator< X, Y > > | clone () |
clone | |
SmartPtr< IConvergenceCheck< X > > | convergence_check () |
returns the convergence check | |
ConstSmartPtr< IConvergenceCheck< X > > | convergence_check () const |
returns the convergence check | |
number | defect () const |
returns the current defect | |
ILinearOperatorInverse () | |
constructor setting convergence check to (100, 1e-12, 1e-12, true) | |
ILinearOperatorInverse (SmartPtr< IConvergenceCheck< X > > spConvCheck) | |
Default constructor. | |
virtual bool | init (SmartPtr< ILinearOperator< Y, X > > J, const Y &u) |
initializes for the inverse for a linearized operator at linearization point u | |
virtual bool | init (SmartPtr< ILinearOperator< Y, X > > L) |
initializes for the inverse for a linear operator | |
SmartPtr< ILinearOperator< Y, X > > | linear_operator () |
returns the current Operator this Inverse Operator is initialized for | |
number | reduction () const |
returns the current relative reduction | |
void | set_convergence_check (SmartPtr< IConvergenceCheck< X > > spConvCheck) |
set the convergence check | |
virtual int | standard_offset () const |
returns the standard offset for output | |
int | step () const |
returns the current number of steps | |
virtual | ~ILinearOperatorInverse () |
virtual destructor | |
![]() | |
SmartPtr< IDamping< X, Y > > | damping () |
returns the scaling | |
ILinearIterator () | |
constructor | |
ILinearIterator (const ILinearIterator< X, Y > &parent) | |
copy constructor | |
void | set_damp (number factor) |
sets the damping to a constant factor | |
void | set_damp (SmartPtr< IDamping< X, Y > > spScaling) |
sets a scaling for the correction | |
virtual | ~ILinearIterator () |
virtual destructor | |
![]() | |
virtual void | set_debug (SmartPtr< IVectorDebugWriter< vector_type > > spDebugWriter) |
set debug writer | |
SmartPtr< IVectorDebugWriter< vector_type > > | vector_debug_writer () |
returns the debug writer | |
ConstSmartPtr< IVectorDebugWriter< vector_type > > | vector_debug_writer () const |
bool | vector_debug_writer_valid () const |
returns true if the debug writer is set | |
VectorDebugWritingObject () | |
VectorDebugWritingObject (SmartPtr< IVectorDebugWriter< vector_type > > spDebugWriter) | |
void | write_debug (const vector_type &vec, const char *filename) |
writing debug output for a vector (if debug writer set) | |
virtual | ~VectorDebugWritingObject () |
virtual destructor | |
Protected Member Functions | |
void | prepare_conv_check () |
prepares the output of the convergence check | |
number | VecProd (vector_type &a, vector_type &b) |
computes the vector product | |
bool | VecScaleAppend (vector_type &a, vector_type &b, number s) |
adds a scaled vector to a second one | |
![]() | |
void | enter_vector_debug_writer_section (const char *secDir) |
enters a debugging section | |
void | enter_vector_debug_writer_section (std::string secDir) |
enters a debugging section | |
void | leave_vector_debug_writer_section () |
leaves a debugging section | |
void | print_debugger_message (const char *msg) |
prints a debugger message (listing all the sections) | |
void | print_debugger_message (std::string msg) |
prints a debugger message (listing all the sections) | |
virtual void | write_debug (const vector_type &vec, std::string name) |
writing debug output for a vector (if debug writer set) | |
Protected Attributes | |
PProcessChain< vector_type > | m_corr_post_process |
postprocessor for the correction in the iterations | |
size_t | m_restart |
restart parameter | |
![]() | |
bool | m_bRecompute |
flag if fresh defect should be computed when finish for debug purpose | |
SmartPtr< ILinearIterator< TVector, TVector > > | m_spPrecond |
Iterator used in the iterative scheme to compute the correction and update the defect. | |
![]() | |
SmartPtr< IConvergenceCheck< X > > | m_spConvCheck |
smart pointer holding the convergence check | |
SmartPtr< ILinearOperator< Y, X > > | m_spLinearOperator |
Operator that is inverted by this Inverse Operator. | |
![]() | |
SmartPtr< IDamping< X, Y > > | m_spDamping |
the scaling | |
![]() | |
SmartPtr< IVectorDebugWriter< vector_type > > | m_spVectorDebugWriter |
Debug Writer. | |
the GMREs method as a solver for linear operators
This class implements the GMRES - method for the solution of linear operator problems like A*x = b, where the solution x = A^{-1} b is computed.
For detailed description of the algorithm, please refer to:
TVector | vector type |
typedef IPreconditionedLinearOperatorInverse<vector_type> ug::GMRES< TVector >::base_type |
Base type.
|
inline |
default constructor
|
inline |
constructor setting the preconditioner and the convergence check
|
inline |
adds a post-process for the iterates
References ug::PProcessChain< TVector >::add(), ug::GMRES< TVector >::m_corr_post_process, and p.
|
inlinevirtual |
References ug::IPreconditionedLinearOperatorInverse< TVector >::apply(), ug::PProcessChain< TVector >::apply(), ug::ILinearOperatorInverse< X, Y >::convergence_check(), ug::ILinearOperatorInverse< X, Y >::linear_operator(), ug::GMRES< TVector >::m_corr_post_process, ug::GMRES< TVector >::m_restart, ug::IPreconditionedLinearOperatorInverse< TVector >::preconditioner(), ug::GMRES< TVector >::prepare_conv_check(), ug::PST_ADDITIVE, ug::PST_CONSISTENT, ug::PST_UNIQUE, resize(), s, UG_LOG, UG_THROW, ug::GMRES< TVector >::VecProd(), and ug::GMRES< TVector >::VecScaleAppend().
|
inlinevirtual |
returns information about configuration parameters
Reimplemented from ug::IPreconditionedLinearOperatorInverse< TVector >.
References ug::IPreconditionedLinearOperatorInverse< vector_type >::config_string_preconditioner_convergence_check(), and ug::GMRES< TVector >::m_restart.
|
inlinevirtual |
name of solver
Implements ug::ILinearOperatorInverse< X, Y >.
Referenced by ug::GMRES< TVector >::prepare_conv_check().
|
inlineprotected |
prepares the output of the convergence check
References ug::ILinearOperatorInverse< X, Y >::convergence_check(), ug::GMRES< TVector >::name(), ug::IPreconditionedLinearOperatorInverse< TVector >::preconditioner(), and s.
Referenced by ug::GMRES< TVector >::apply_return_defect().
|
inline |
removes a post-process for the iterates
References ug::GMRES< TVector >::m_corr_post_process, p, and ug::PProcessChain< TVector >::remove().
|
inlinevirtual |
returns if parallel solving is supported
Implements ug::ILinearOperatorInverse< X, Y >.
References ug::IPreconditionedLinearOperatorInverse< TVector >::preconditioner().
|
inlineprotected |
computes the vector product
Referenced by ug::GMRES< TVector >::apply_return_defect().
|
inlineprotected |
adds a scaled vector to a second one
References ug::PST_ADDITIVE, ug::PST_CONSISTENT, ug::PST_UNIQUE, s, and ug::VecScaleAdd().
Referenced by ug::GMRES< TVector >::apply_return_defect().
|
protected |
postprocessor for the correction in the iterations
These postprocess operations are applied to the preconditioned defect before the orthogonalization. The goal is to prevent the useless kernel parts to prevail in the (floating point) arithmetics.
Referenced by ug::GMRES< TVector >::add_postprocess_corr(), ug::GMRES< TVector >::apply_return_defect(), and ug::GMRES< TVector >::remove_postprocess_corr().
|
protected |
restart parameter
Referenced by ug::GMRES< TVector >::apply_return_defect(), and ug::GMRES< TVector >::config_string().