ug4
|
linear solver using abstract preconditioner interface More...
#include <linear_solver.h>
Public Types | |
typedef IPreconditionedLinearOperatorInverse< vector_type > | base_type |
Base type. More... | |
typedef TVector | vector_type |
Vector type. More... | |
Public Types inherited from ug::IPreconditionedLinearOperatorInverse< TVector > | |
typedef ILinearOperatorInverse< TVector, TVector > | base_type |
Base class. More... | |
typedef TVector | codomain_function_type |
Range space. More... | |
typedef TVector | domain_function_type |
Domain space. More... | |
Public Types inherited from ug::ILinearOperatorInverse< X, Y > | |
typedef Y | codomain_function_type |
Range space. More... | |
typedef X | domain_function_type |
Domain space. More... | |
Public Types inherited from ug::ILinearIterator< X, X > | |
typedef X | codomain_function_type |
Range space. More... | |
typedef X | domain_function_type |
Domain space. More... | |
Public Types inherited from ug::VectorDebugWritingObject< TVector > | |
typedef TVector | vector_type |
type of vector More... | |
Public Member Functions | |
void | add_postprocess_corr (SmartPtr< IPProcessVector< vector_type > > p) |
adds a post-process for the iterates More... | |
virtual bool | apply_return_defect (vector_type &x, vector_type &b) |
solves the system and returns the last defect More... | |
bool | compute_correction (vector_type &c, vector_type &d) |
LinearSolver () | |
constructors More... | |
LinearSolver (SmartPtr< ILinearIterator< vector_type, vector_type > > spPrecond) | |
LinearSolver (SmartPtr< ILinearIterator< vector_type, vector_type > > spPrecond, SmartPtr< IConvergenceCheck< vector_type > > spConvCheck) | |
virtual const char * | name () const |
returns the name of the solver More... | |
void | remove_postprocess_corr (SmartPtr< IPProcessVector< vector_type > > p) |
removes a post-process for the iterates More... | |
virtual bool | supports_parallel () const |
returns if parallel solving is supported More... | |
Public Member Functions inherited from ug::IPreconditionedLinearOperatorInverse< TVector > | |
virtual bool | apply (TVector &x, const TVector &b) |
compute new correction c = B*d More... | |
virtual std::string | config_string () const |
returns information about configuration parameters More... | |
std::string | config_string_preconditioner_convergence_check () const |
returns config information of convergence check and preconditioner More... | |
virtual bool | init (SmartPtr< ILinearOperator< TVector, TVector > > J, const TVector &u) |
initializes the solver for an operator More... | |
virtual bool | init (SmartPtr< ILinearOperator< TVector, TVector > > L) |
initializes the solver for an operator More... | |
IPreconditionedLinearOperatorInverse () | |
Empty constructor. More... | |
IPreconditionedLinearOperatorInverse (SmartPtr< ILinearIterator< TVector, TVector > > spPrecond) | |
constructor setting the preconditioner More... | |
IPreconditionedLinearOperatorInverse (SmartPtr< ILinearIterator< TVector, TVector > > spPrecond, SmartPtr< IConvergenceCheck< TVector > > spConvCheck) | |
constructor setting the preconditioner More... | |
void | set_compute_fresh_defect_when_finished (bool bRecompute) |
for debug: computes norm again after whole calculation of apply More... | |
void | set_preconditioner (SmartPtr< ILinearIterator< TVector, TVector > > spPrecond) |
sets the preconditioner More... | |
SmartPtr< ILinearIterator< TVector, TVector > > | preconditioner () |
ConstSmartPtr< ILinearIterator< TVector, TVector > > | preconditioner () const |
Public Member Functions inherited from ug::ILinearOperatorInverse< X, Y > | |
virtual bool | apply (Y &u, const X &f)=0 |
applies inverse operator, i.e. returns u = A^{-1} f More... | |
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 More... | |
virtual bool | apply_update_defect (Y &u, X &f) |
virtual SmartPtr< ILinearIterator< X, Y > > | clone () |
clone More... | |
SmartPtr< IConvergenceCheck< X > > | convergence_check () |
returns the convergence check More... | |
ConstSmartPtr< IConvergenceCheck< X > > | convergence_check () const |
returns the convergence check More... | |
number | defect () const |
returns the current defect More... | |
ILinearOperatorInverse () | |
constructor setting convergence check to (100, 1e-12, 1e-12, true) More... | |
ILinearOperatorInverse (SmartPtr< IConvergenceCheck< X > > spConvCheck) | |
Default constructor. More... | |
virtual bool | init (SmartPtr< ILinearOperator< Y, X > > J, const Y &u) |
initializes for the inverse for a linearized operator at linearization point u More... | |
virtual bool | init (SmartPtr< ILinearOperator< Y, X > > L) |
initializes for the inverse for a linear operator More... | |
SmartPtr< ILinearOperator< Y, X > > | linear_operator () |
returns the current Operator this Inverse Operator is initialized for More... | |
number | reduction () const |
returns the current relative reduction More... | |
void | set_convergence_check (SmartPtr< IConvergenceCheck< X > > spConvCheck) |
set the convergence check More... | |
virtual int | standard_offset () const |
returns the standard offset for output More... | |
int | step () const |
returns the current number of steps More... | |
virtual | ~ILinearOperatorInverse () |
virtual destructor More... | |
Public Member Functions inherited from ug::ILinearIterator< X, X > | |
virtual bool | apply (X &c, const X &d)=0 |
compute new correction c = B*d More... | |
virtual bool | apply_update_defect (X &c, X &d)=0 |
compute new correction c = B*d and update defect d := d - A*c More... | |
SmartPtr< IDamping< X, X > > | damping () |
returns the scaling More... | |
ILinearIterator () | |
constructor More... | |
ILinearIterator (const ILinearIterator< X, X > &parent) | |
copy constructor More... | |
virtual bool | init (SmartPtr< ILinearOperator< X, X > > J, const X &u)=0 |
initialize for operator J(u) and linearization point u More... | |
virtual bool | init (SmartPtr< ILinearOperator< X, X > > L)=0 |
initialize for linear operator L More... | |
void | set_damp (number factor) |
sets the damping to a constant factor More... | |
void | set_damp (SmartPtr< IDamping< X, X > > spScaling) |
sets a scaling for the correction More... | |
virtual | ~ILinearIterator () |
virtual destructor More... | |
Public Member Functions inherited from ug::VectorDebugWritingObject< TVector > | |
virtual void | set_debug (SmartPtr< IVectorDebugWriter< vector_type > > spDebugWriter) |
set debug writer More... | |
SmartPtr< IVectorDebugWriter< vector_type > > | vector_debug_writer () |
returns the debug writer More... | |
ConstSmartPtr< IVectorDebugWriter< vector_type > > | vector_debug_writer () const |
bool | vector_debug_writer_valid () const |
returns true if the debug writer is set More... | |
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) More... | |
virtual | ~VectorDebugWritingObject () |
virtual destructor More... | |
Protected Member Functions | |
void | enter_precond_debug_section (int loopCnt) |
debugger section for the preconditioner More... | |
SmartPtr< ILinearIterator< X, X > > | preconditioner () |
ConstSmartPtr< ILinearIterator< X, X > > | preconditioner () const |
void | prepare_conv_check () |
prepares the convergence check output More... | |
void | write_debugXCD (vector_type &x, vector_type &c, vector_type &d, int loopCnt, bool bWriteC) |
debugger output: solution, correction, defect More... | |
Protected Member Functions inherited from ug::VectorDebugWritingObject< TVector > | |
void | enter_vector_debug_writer_section (const char *secDir) |
enters a debugging section More... | |
void | enter_vector_debug_writer_section (std::string secDir) |
enters a debugging section More... | |
void | leave_vector_debug_writer_section () |
leaves a debugging section More... | |
void | print_debugger_message (const char *msg) |
prints a debugger message (listing all the sections) More... | |
void | print_debugger_message (std::string msg) |
prints a debugger message (listing all the sections) More... | |
virtual void | write_debug (const vector_type &vec, std::string name) |
writing debug output for a vector (if debug writer set) More... | |
Protected Attributes | |
PProcessChain< vector_type > | m_corr_post_process |
postprocessor for the correction in the iterations More... | |
Protected Attributes inherited from ug::IPreconditionedLinearOperatorInverse< TVector > | |
bool | m_bRecompute |
flag if fresh defect should be computed when finish for debug purpose More... | |
SmartPtr< ILinearIterator< TVector, TVector > > | m_spPrecond |
Iterator used in the iterative scheme to compute the correction and update the defect. More... | |
Protected Attributes inherited from ug::ILinearOperatorInverse< X, Y > | |
SmartPtr< IConvergenceCheck< X > > | m_spConvCheck |
smart pointer holding the convergence check More... | |
SmartPtr< ILinearOperator< Y, X > > | m_spLinearOperator |
Operator that is inverted by this Inverse Operator. More... | |
Protected Attributes inherited from ug::ILinearIterator< X, X > | |
SmartPtr< IDamping< X, X > > | m_spDamping |
the scaling More... | |
Protected Attributes inherited from ug::VectorDebugWritingObject< TVector > | |
SmartPtr< IVectorDebugWriter< vector_type > > | m_spVectorDebugWriter |
Debug Writer. More... | |
linear solver using abstract preconditioner interface
This class is a linear iterating scheme, that uses any implementation of the ILinearIterator interface to precondition the iteration.
TAlgebra | algebra type |
typedef IPreconditionedLinearOperatorInverse<vector_type> ug::LinearSolver< TVector >::base_type |
Base type.
typedef TVector ug::LinearSolver< TVector >::vector_type |
Vector type.
|
inline |
constructors
|
inline |
|
inline |
|
inline |
adds a post-process for the iterates
References ug::PProcessChain< TVector >::add(), ug::LinearSolver< TVector >::m_corr_post_process, and p.
|
inlinevirtual |
solves the system and returns the last defect
References ug::PProcessChain< TVector >::apply(), ug::LinearSolver< TVector >::compute_correction(), ug::ILinearOperatorInverse< X, Y >::convergence_check(), ug::LinearSolver< TVector >::enter_precond_debug_section(), ug::VectorDebugWritingObject< TVector >::leave_vector_debug_writer_section(), ug::ILinearOperatorInverse< X, Y >::linear_operator(), LS_PROFILE_BEGIN, LS_PROFILE_END, ug::LinearSolver< TVector >::m_corr_post_process, ug::LinearSolver< TVector >::prepare_conv_check(), ug::PST_ADDITIVE, ug::PST_CONSISTENT, UG_LOG, UG_THROW, ug::VectorDebugWritingObject< TVector >::vector_debug_writer_valid(), ug::VectorDebugWritingObject< TVector >::write_debug(), and ug::LinearSolver< TVector >::write_debugXCD().
|
inline |
Compute a correction c := B*d using one iterative step Internally the defect is updated d := d - A*c = b - A*(x+c)
c | |
d |
References ug::ILinearOperatorInverse< X, Y >::apply_update_defect(), LS_PROFILE_BEGIN, LS_PROFILE_END, ug::LinearSolver< TVector >::preconditioner(), and UG_LOG.
Referenced by ug::LinearSolver< TVector >::apply_return_defect().
|
inlineprotected |
debugger section for the preconditioner
References ug::VectorDebugWritingObject< TVector >::enter_vector_debug_writer_section(), and ug::VectorDebugWritingObject< TVector >::vector_debug_writer_valid().
Referenced by ug::LinearSolver< TVector >::apply_return_defect().
|
inlinevirtual |
returns the name of the solver
Implements ug::ILinearOperatorInverse< X, Y >.
Referenced by ug::LinearSolver< TVector >::prepare_conv_check().
|
inlineprotected |
returns the preconditioner
Referenced by ug::LinearSolver< TVector >::compute_correction(), ug::LinearSolver< TVector >::prepare_conv_check(), and ug::LinearSolver< TVector >::supports_parallel().
|
inlineprotected |
|
inlineprotected |
prepares the convergence check output
References ug::ILinearOperatorInverse< X, Y >::convergence_check(), ug::LinearSolver< TVector >::name(), ug::LinearSolver< TVector >::preconditioner(), and s.
Referenced by ug::LinearSolver< TVector >::apply_return_defect().
|
inline |
removes a post-process for the iterates
References ug::LinearSolver< 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::LinearSolver< TVector >::preconditioner().
|
inlineprotected |
debugger output: solution, correction, defect
References ug::VectorDebugWritingObject< TVector >::vector_debug_writer_valid(), and ug::VectorDebugWritingObject< TVector >::write_debug().
Referenced by ug::LinearSolver< TVector >::apply_return_defect().
|
protected |
postprocessor for the correction in the iterations
Referenced by ug::LinearSolver< TVector >::add_postprocess_corr(), ug::LinearSolver< TVector >::apply_return_defect(), and ug::LinearSolver< TVector >::remove_postprocess_corr().