ug4
ug::LinearSolver< TVector > Class Template Reference

linear solver using abstract preconditioner interface More...

#include <linear_solver.h>

+ Inheritance diagram for ug::LinearSolver< TVector >:

Public Types

typedef IPreconditionedLinearOperatorInverse< vector_typebase_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_typem_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...
 

Detailed Description

template<typename TVector>
class ug::LinearSolver< TVector >

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.

Template Parameters
TAlgebraalgebra type

Member Typedef Documentation

◆ base_type

template<typename TVector >
typedef IPreconditionedLinearOperatorInverse<vector_type> ug::LinearSolver< TVector >::base_type

Base type.

◆ vector_type

template<typename TVector >
typedef TVector ug::LinearSolver< TVector >::vector_type

Vector type.

Constructor & Destructor Documentation

◆ LinearSolver() [1/3]

template<typename TVector >
ug::LinearSolver< TVector >::LinearSolver ( )
inline

constructors

◆ LinearSolver() [2/3]

template<typename TVector >
ug::LinearSolver< TVector >::LinearSolver ( SmartPtr< ILinearIterator< vector_type, vector_type > >  spPrecond)
inline

◆ LinearSolver() [3/3]

template<typename TVector >
ug::LinearSolver< TVector >::LinearSolver ( SmartPtr< ILinearIterator< vector_type, vector_type > >  spPrecond,
SmartPtr< IConvergenceCheck< vector_type > >  spConvCheck 
)
inline

Member Function Documentation

◆ add_postprocess_corr()

template<typename TVector >
void ug::LinearSolver< TVector >::add_postprocess_corr ( SmartPtr< IPProcessVector< vector_type > >  p)
inline

adds a post-process for the iterates

References ug::PProcessChain< TVector >::add(), ug::LinearSolver< TVector >::m_corr_post_process, and p.

◆ apply_return_defect()

◆ compute_correction()

template<typename TVector >
bool ug::LinearSolver< TVector >::compute_correction ( vector_type c,
vector_type d 
)
inline

Compute a correction c := B*d using one iterative step Internally the defect is updated d := d - A*c = b - A*(x+c)

Parameters
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().

◆ enter_precond_debug_section()

template<typename TVector >
void ug::LinearSolver< TVector >::enter_precond_debug_section ( int  loopCnt)
inlineprotected

◆ name()

template<typename TVector >
virtual const char* ug::LinearSolver< TVector >::name ( ) const
inlinevirtual

returns the name of the solver

Implements ug::ILinearOperatorInverse< X, Y >.

Referenced by ug::LinearSolver< TVector >::prepare_conv_check().

◆ preconditioner() [1/2]

◆ preconditioner() [2/2]

template<typename TVector >
ConstSmartPtr<ILinearIterator<X, X> > ug::IPreconditionedLinearOperatorInverse< X >::preconditioner
inlineprotected

◆ prepare_conv_check()

template<typename TVector >
void ug::LinearSolver< TVector >::prepare_conv_check ( )
inlineprotected

◆ remove_postprocess_corr()

template<typename TVector >
void ug::LinearSolver< TVector >::remove_postprocess_corr ( SmartPtr< IPProcessVector< vector_type > >  p)
inline

removes a post-process for the iterates

References ug::LinearSolver< TVector >::m_corr_post_process, p, and ug::PProcessChain< TVector >::remove().

◆ supports_parallel()

template<typename TVector >
virtual bool ug::LinearSolver< TVector >::supports_parallel ( ) const
inlinevirtual

returns if parallel solving is supported

Implements ug::ILinearOperatorInverse< X, Y >.

References ug::LinearSolver< TVector >::preconditioner().

◆ write_debugXCD()

template<typename TVector >
void ug::LinearSolver< TVector >::write_debugXCD ( vector_type x,
vector_type c,
vector_type d,
int  loopCnt,
bool  bWriteC 
)
inlineprotected

Member Data Documentation

◆ m_corr_post_process

template<typename TVector >
PProcessChain<vector_type> ug::LinearSolver< TVector >::m_corr_post_process
protected

The documentation for this class was generated from the following file: