ug4
|
linear solver using abstract preconditioner interface More...
#include <auto_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 | |
virtual bool | apply (vector_type &x, const vector_type &b) |
compute new correction c = B*d More... | |
virtual bool | apply_return_defect (vector_type &x, vector_type &b) |
solves the system and returns the last defect More... | |
AutoLinearSolver () | |
AutoLinearSolver (double desiredDefect, double desiredReduction) | |
bool | compute_correction (vector_type &c, vector_type &d) |
virtual bool | init (SmartPtr< ILinearOperator< vector_type, vector_type > > J) |
initializes the solver for an operator More... | |
virtual bool | init (SmartPtr< ILinearOperator< vector_type, vector_type > > J, const vector_type &u) |
initializes the solver for an operator More... | |
bool | init_op (SmartPtr< ILinearOperator< vector_type, vector_type > > J) |
virtual const char * | name () const |
returns the name of the solver More... | |
void | print_information () |
bool | reinit () |
void | set_reduction_always_accept (double d) |
void | set_reinit_when_worse_then_average (double d) |
virtual bool | supports_parallel () const |
returns if parallel solving is supported More... | |
Public Member Functions inherited from ug::IPreconditionedLinearOperatorInverse< TVector > | |
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... | |
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 | |
SmartPtr< ILinearIterator< X, X > > | preconditioner () |
ConstSmartPtr< ILinearIterator< X, X > > | preconditioner () const |
void | prepare_conv_check () |
prepares the convergence check output 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... | |
Private Attributes | |
double | m_avgReduction |
int | m_bInited |
double | m_desiredDefect |
double | m_desiredReduction |
size_t | m_initCalled |
size_t | m_initsDone |
double | m_lastCallReduction |
double | m_lastCallTime |
double | m_lastInitTime |
double | m_reductionAlwaysAccept |
double | m_reductionPerTime |
double | m_savedTime |
vector_type | m_u |
double | m_worseThenAverage |
SmartPtr< ILinearOperator< vector_type, vector_type > > | pJ |
Additional Inherited Members | |
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::AutoLinearSolver< TVector >::base_type |
Base type.
typedef TVector ug::AutoLinearSolver< TVector >::vector_type |
Vector type.
|
inline |
References ug::AutoLinearSolver< TVector >::m_bInited, ug::AutoLinearSolver< TVector >::m_desiredDefect, ug::AutoLinearSolver< TVector >::m_desiredReduction, ug::AutoLinearSolver< TVector >::m_initCalled, ug::AutoLinearSolver< TVector >::m_initsDone, and ug::AutoLinearSolver< TVector >::m_savedTime.
|
inline |
References ug::AutoLinearSolver< TVector >::m_bInited, ug::AutoLinearSolver< TVector >::m_initCalled, ug::AutoLinearSolver< TVector >::m_initsDone, ug::AutoLinearSolver< TVector >::m_reductionAlwaysAccept, ug::AutoLinearSolver< TVector >::m_savedTime, and ug::AutoLinearSolver< TVector >::m_worseThenAverage.
|
inlinevirtual |
compute new correction c = B*d
This method applies the iterator operator, i.e. c = B*d. The domain function d remains unchanged. Note, that this method can always be implemented by creating a copy of d and calling apply_update_defect with this copy.
[in] | d | defect |
[out] | c | correction |
Reimplemented from ug::IPreconditionedLinearOperatorInverse< TVector >.
References ug::AutoLinearSolver< TVector >::apply_return_defect().
Referenced by ug::AutoLinearSolver< TVector >::compute_correction().
|
inlinevirtual |
solves the system and returns the last defect
References ug::AutoLinearSolver< TVector >::compute_correction(), ug::ILinearOperatorInverse< X, Y >::convergence_check(), ug::ILinearOperatorInverse< X, Y >::defect(), ug::get_clock_s(), ug::ILinearOperatorInverse< X, Y >::linear_operator(), LS_PROFILE_BEGIN, LS_PROFILE_END, ug::AutoLinearSolver< TVector >::m_avgReduction, ug::AutoLinearSolver< TVector >::m_bInited, ug::AutoLinearSolver< TVector >::m_desiredDefect, ug::AutoLinearSolver< TVector >::m_desiredReduction, ug::AutoLinearSolver< TVector >::m_initCalled, ug::AutoLinearSolver< TVector >::m_initsDone, ug::AutoLinearSolver< TVector >::m_lastCallReduction, ug::AutoLinearSolver< TVector >::m_lastCallTime, ug::AutoLinearSolver< TVector >::m_lastInitTime, ug::AutoLinearSolver< TVector >::m_reductionPerTime, ug::AutoLinearSolver< TVector >::m_savedTime, ug::AutoLinearSolver< TVector >::name(), ug::AutoLinearSolver< TVector >::prepare_conv_check(), ug::PST_ADDITIVE, ug::PST_CONSISTENT, ug::ILinearOperatorInverse< X, Y >::reduction(), ug::AutoLinearSolver< TVector >::reinit(), ug::reset_floats(), UG_LOG, UG_THROW, and ug::VectorDebugWritingObject< TVector >::write_debug().
Referenced by ug::AutoLinearSolver< TVector >::apply().
|
inline |
|
inlinevirtual |
initializes the solver for an operator
Reimplemented from ug::IPreconditionedLinearOperatorInverse< TVector >.
References ug::AutoLinearSolver< TVector >::init_op(), and ug::AutoLinearSolver< TVector >::m_u.
|
inlinevirtual |
initializes the solver for an operator
Reimplemented from ug::IPreconditionedLinearOperatorInverse< TVector >.
References ug::AutoLinearSolver< TVector >::init_op(), and ug::AutoLinearSolver< TVector >::m_u.
|
inline |
|
inlinevirtual |
returns the name of the solver
Implements ug::ILinearOperatorInverse< X, Y >.
Referenced by ug::AutoLinearSolver< TVector >::apply_return_defect(), and ug::AutoLinearSolver< TVector >::prepare_conv_check().
|
inlineprotected |
returns the preconditioner
Referenced by ug::AutoLinearSolver< TVector >::compute_correction(), ug::AutoLinearSolver< TVector >::prepare_conv_check(), and ug::AutoLinearSolver< TVector >::supports_parallel().
|
inlineprotected |
|
inlineprotected |
prepares the convergence check output
References ug::ILinearOperatorInverse< X, Y >::convergence_check(), ug::AutoLinearSolver< TVector >::name(), ug::AutoLinearSolver< TVector >::preconditioner(), and s.
Referenced by ug::AutoLinearSolver< TVector >::apply_return_defect().
|
inline |
References ug::AutoLinearSolver< TVector >::m_avgReduction, ug::AutoLinearSolver< TVector >::m_initCalled, ug::AutoLinearSolver< TVector >::m_initsDone, ug::AutoLinearSolver< TVector >::m_lastInitTime, ug::AutoLinearSolver< TVector >::m_reductionPerTime, ug::AutoLinearSolver< TVector >::m_savedTime, ug::reset_floats(), and UG_LOG.
|
inline |
References ug::get_clock_s(), ug::IPreconditionedLinearOperatorInverse< X >::init(), ug::AutoLinearSolver< TVector >::m_bInited, ug::AutoLinearSolver< TVector >::m_initsDone, ug::AutoLinearSolver< TVector >::m_lastInitTime, ug::AutoLinearSolver< TVector >::m_u, ug::AutoLinearSolver< TVector >::pJ, and SmartPtr< T, FreePolicy >::valid().
Referenced by ug::AutoLinearSolver< TVector >::apply_return_defect(), and ug::AutoLinearSolver< TVector >::init_op().
|
inline |
|
inline |
|
inlinevirtual |
returns if parallel solving is supported
Implements ug::ILinearOperatorInverse< X, Y >.
References ug::AutoLinearSolver< TVector >::preconditioner().
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Referenced by ug::AutoLinearSolver< TVector >::apply_return_defect().
|
private |
Referenced by ug::AutoLinearSolver< TVector >::apply_return_defect().
|
private |
|
private |
|
private |
|
private |
|
private |
Referenced by ug::AutoLinearSolver< TVector >::init(), and ug::AutoLinearSolver< TVector >::reinit().
|
private |
|
private |
Referenced by ug::AutoLinearSolver< TVector >::init_op(), and ug::AutoLinearSolver< TVector >::reinit().