ug4
ug::Jacobi< TAlgebra > Class Template Reference

Jacobi-Iteration. More...

#include <jacobi.h>

+ Inheritance diagram for ug::Jacobi< TAlgebra >:

Public Types

typedef TAlgebra algebra_type
 Algebra type. More...
 
typedef IPreconditioner< TAlgebra > base_type
 Base type. More...
 
typedef IPreconditioner< TAlgebra >::matrix_operator_type matrix_operator_type
 Matrix Operator type. More...
 
typedef TAlgebra::matrix_type matrix_type
 Matrix type. More...
 
typedef TAlgebra::vector_type vector_type
 Vector type. More...
 
- Public Types inherited from ug::IPreconditioner< TAlgebra >
typedef TAlgebra algebra_type
 Algebra type. More...
 
typedef MatrixOperator< matrix_type, vector_typematrix_operator_type
 Matrix Operator type. More...
 
typedef TAlgebra::matrix_type matrix_type
 Matrix type. More...
 
typedef TAlgebra::vector_type vector_type
 Vector type. More...
 
- Public Types inherited from ug::ILinearIterator< TAlgebra::vector_type >
typedef TAlgebra::vector_type codomain_function_type
 Range space. More...
 
typedef TAlgebra::vector_type domain_function_type
 Domain space. More...
 
- Public Types inherited from ug::DebugWritingObject< TAlgebra >
typedef TAlgebra algebra_type
 type of algebra More...
 
typedef TAlgebra::matrix_type matrix_type
 type of matrix More...
 
typedef TAlgebra::vector_type vector_type
 type of vector More...
 
- Public Types inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type >
typedef TAlgebra::vector_type vector_type
 type of vector More...
 

Public Member Functions

virtual SmartPtr< ILinearIterator< vector_type > > clone ()
 Clone. More...
 
 Jacobi ()
 default constructor More...
 
 Jacobi (const Jacobi< TAlgebra > &parent)
 clone constructor More...
 
 Jacobi (number damp)
 constructor setting the damping parameter More...
 
void set_block (bool b)
 sets if blocked jacobi is used (inverting block-diagonal), or plain (scalar) diagonal if false More...
 
virtual bool supports_parallel () const
 returns if parallel solving is supported More...
 
virtual ~Jacobi ()
 Destructor. More...
 
- Public Member Functions inherited from ug::IPreconditioner< TAlgebra >
virtual bool apply_update_defect (vector_type &c, vector_type &d)
 compute new correction c = B*d and update defect d:= d - L*c More...
 
SmartPtr< MatrixOperator< matrix_type, vector_type > > approx_operator ()
 underlying matrix based operator used for the preconditioner More...
 
SmartPtr< MatrixOperator< matrix_type, vector_type > > defect_operator ()
 underlying matrix based operator for calculation of defect More...
 
virtual bool init (SmartPtr< ILinearOperator< vector_type > > J, const vector_type &u)
 implements the ILinearIterator-interface for matrix based preconditioner More...
 
bool init (SmartPtr< ILinearOperator< vector_type > > L)
 implements the ILinearIterator-interface for matrix based preconditioner More...
 
bool init (SmartPtr< MatrixOperator< matrix_type, vector_type > > Op)
 initializes the preconditioner for a matrix based operator More...
 
 IPreconditioner ()
 default constructor More...
 
 IPreconditioner (const IPreconditioner< TAlgebra > &parent)
 clone constructor More...
 
 IPreconditioner (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter)
 constructor setting debug writer More...
 
virtual void set_approximation (SmartPtr< MatrixOperator< matrix_type, vector_type > > approx)
 
virtual ~IPreconditioner ()
 virtual destructor More...
 
- Public Member Functions inherited from ug::ILinearIterator< TAlgebra::vector_type >
virtual std::string config_string () const
 
SmartPtr< IDamping< TAlgebra::vector_type, TAlgebra::vector_type > > damping ()
 returns the scaling More...
 
 ILinearIterator ()
 constructor More...
 
 ILinearIterator (const ILinearIterator< TAlgebra::vector_type, TAlgebra::vector_type > &parent)
 copy constructor More...
 
virtual bool init (SmartPtr< ILinearOperator< TAlgebra::vector_type, TAlgebra::vector_type > > J, const TAlgebra::vector_type &u)=0
 initialize for operator J(u) and linearization point u More...
 
virtual bool init (SmartPtr< ILinearOperator< TAlgebra::vector_type, TAlgebra::vector_type > > 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< TAlgebra::vector_type, TAlgebra::vector_type > > spScaling)
 sets a scaling for the correction More...
 
virtual ~ILinearIterator ()
 virtual destructor More...
 
- Public Member Functions inherited from ug::DebugWritingObject< TAlgebra >
SmartPtr< IDebugWriter< algebra_type > > debug_writer ()
 returns the debug writer More...
 
ConstSmartPtr< IDebugWriter< algebra_type > > debug_writer () const
 
bool debug_writer_valid () const
 returns true if the debug writer is set More...
 
 DebugWritingObject ()
 
 DebugWritingObject (const DebugWritingObject< algebra_type > &parent)
 clone constructor More...
 
 DebugWritingObject (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter)
 
virtual void set_debug (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter)
 set debug writer More...
 
virtual ~DebugWritingObject ()
 virtual destructor More...
 
- Public Member Functions inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type >
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 Types

typedef block_traits< typename matrix_type::value_type >::inverse_type inverse_type
 type of block-inverse More...
 

Protected Member Functions

virtual bool apply (vector_type &c, const vector_type &d)
 compute new correction c = B*d More...
 
SmartPtr< MatrixOperator< matrix_type, vector_type > > approx_operator ()
 underlying matrix based operator used for the preconditioner More...
 
virtual const char * name () const
 Name of preconditioner. More...
 
virtual bool postprocess ()
 Postprocess routine. More...
 
virtual bool preprocess (SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp)
 Preprocess routine. More...
 
virtual bool step (SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp, vector_type &c, const vector_type &d)
 computes a new correction c = B*d More...
 
- Protected Member Functions inherited from ug::DebugWritingObject< TAlgebra >
void enter_debug_writer_section (const char *secDir)
 enters a debugging section More...
 
void enter_debug_writer_section (std::string secDir)
 enters a debugging section More...
 
void leave_debug_writer_section ()
 leaves a debugging section More...
 
void write_debug (const matrix_type &mat, const char *filename)
 write debug output for a matrix (if debug writer set) More...
 
void write_debug (const matrix_type &mat, std::string name)
 write debug output for a matrix (if debug writer set) More...
 
- Protected Member Functions inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type >
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

bool m_bBlock
 
std::vector< inverse_typem_diagInv
 storage of the inverse diagonal in parallel More...
 
- Protected Attributes inherited from ug::IPreconditioner< TAlgebra >
bool m_bInit
 init flag indicating if init has been called More...
 
bool m_bOtherApproxOperator
 
SmartPtr< MatrixOperator< matrix_type, vector_type > > m_spApproxOperator
 underlying matrix based operator used for the preconditioner More...
 
SmartPtr< ILinearOperator< vector_type > > m_spDefectOperator
 underlying matrix based operator for calculation of defect More...
 
- Protected Attributes inherited from ug::ILinearIterator< TAlgebra::vector_type >
SmartPtr< IDamping< TAlgebra::vector_type, TAlgebra::vector_type > > m_spDamping
 the scaling More...
 
- Protected Attributes inherited from ug::DebugWritingObject< TAlgebra >
SmartPtr< IDebugWriter< algebra_type > > m_spDebugWriter
 Debug Writer. More...
 
- Protected Attributes inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type >
SmartPtr< IVectorDebugWriter< vector_type > > m_spVectorDebugWriter
 Debug Writer. More...
 

Detailed Description

template<typename TAlgebra>
class ug::Jacobi< TAlgebra >

Jacobi-Iteration.

Here, the Jacobi-iteration is described for solving the linear equation

\f$ A * x = b.      A \in R^{nxn}, x \in R^n, b \in R^n \f$.

Most of the common linear iteration-methods base on the decomposition of A into its diagonal (D) and strict-upper(-U) and strict-lower part (-L),

\( A = D - L - U \).

Among others, W. Hackbusch ('Iterative Loesung grosser Gleichungssysteme'), distinguishes three different forms for describing a linear iteration scheme. The general 'first normal-form' of a linear iteration scheme takes the form

\( x^{m+1} = M * x^m + N * b \),

with some Matrices \( M \) and \( N \in R^{nxn} \). m denotes the iteration index. The general 'second normal-form' of a linear iteration scheme takes the form

\( x^{m+1} = x^m - N * (A * x^m - b) \).

Those linear iteration schemes, which can be represented by the second normal-form are the linear, consistent iteration schemes.

Introducing the correction \( c{m+1} := x^{m+1} - x^m \) and the defect \( d^m := b - A * x^m \) the second normal-form can be rewritten as

\( c = N * d \).

The matrix of the second normal-form for the Jacobi-method takes the simple form

\( N = D^{-1} \). .

References:

  • W. Hackbusch. Iterative Loesung grosser Gleichungssysteme

Jacobi Preconditioner

Member Typedef Documentation

◆ algebra_type

template<typename TAlgebra >
typedef TAlgebra ug::Jacobi< TAlgebra >::algebra_type

Algebra type.

◆ base_type

template<typename TAlgebra >
typedef IPreconditioner<TAlgebra> ug::Jacobi< TAlgebra >::base_type

Base type.

◆ inverse_type

template<typename TAlgebra >
typedef block_traits<typename matrix_type::value_type>::inverse_type ug::Jacobi< TAlgebra >::inverse_type
protected

type of block-inverse

◆ matrix_operator_type

template<typename TAlgebra >
typedef IPreconditioner<TAlgebra>::matrix_operator_type ug::Jacobi< TAlgebra >::matrix_operator_type

Matrix Operator type.

◆ matrix_type

template<typename TAlgebra >
typedef TAlgebra::matrix_type ug::Jacobi< TAlgebra >::matrix_type

Matrix type.

◆ vector_type

template<typename TAlgebra >
typedef TAlgebra::vector_type ug::Jacobi< TAlgebra >::vector_type

Vector type.

Constructor & Destructor Documentation

◆ Jacobi() [1/3]

template<typename TAlgebra >
ug::Jacobi< TAlgebra >::Jacobi ( )
inline

◆ Jacobi() [2/3]

template<typename TAlgebra >
ug::Jacobi< TAlgebra >::Jacobi ( number  damp)
inline

constructor setting the damping parameter

References ug::Jacobi< TAlgebra >::m_bBlock, and ug::ILinearIterator< TAlgebra::vector_type >::set_damp().

◆ Jacobi() [3/3]

template<typename TAlgebra >
ug::Jacobi< TAlgebra >::Jacobi ( const Jacobi< TAlgebra > &  parent)
inline

◆ ~Jacobi()

template<typename TAlgebra >
virtual ug::Jacobi< TAlgebra >::~Jacobi ( )
inlinevirtual

Destructor.

Member Function Documentation

◆ apply()

template<typename TAlgebra >
virtual bool ug::Jacobi< TAlgebra >::apply ( vector_type c,
const vector_type d 
)
inlineprotectedvirtual

compute new correction c = B*d

This method implements the virtual method of the ILinearIterator-interface. Basically, besides some common checks the request is forwarded to the (virtual) 'step'-method.

Parameters
[out]ccorrection
[in]ddefect
Returns
bool success flag

Reimplemented from ug::IPreconditioner< TAlgebra >.

References ug::Jacobi< TAlgebra >::approx_operator(), ug::ILinearIterator< TAlgebra::vector_type >::damping(), kappa, ug::IPreconditioner< TAlgebra >::m_bInit, ug::Jacobi< TAlgebra >::name(), num_cols(), num_rows(), PROFILE_BEGIN_GROUP, ug::PST_ADDITIVE, ug::PST_CONSISTENT, ug::Jacobi< TAlgebra >::step(), THROW_IF_NOT_EQUAL_4, UG_LOG, and UG_THROW.

◆ approx_operator()

template<typename TAlgebra >
SmartPtr<MatrixOperator<matrix_type, vector_type> > ug::IPreconditioner< TAlgebra >::approx_operator
inlineprotected

underlying matrix based operator used for the preconditioner

Referenced by ug::Jacobi< TAlgebra >::apply().

◆ clone()

template<typename TAlgebra >
virtual SmartPtr<ILinearIterator<vector_type> > ug::Jacobi< TAlgebra >::clone ( )
inlinevirtual

◆ name()

template<typename TAlgebra >
virtual const char* ug::Jacobi< TAlgebra >::name ( ) const
inlineprotectedvirtual

Name of preconditioner.

Implements ug::IPreconditioner< TAlgebra >.

Referenced by ug::Jacobi< TAlgebra >::apply().

◆ postprocess()

template<typename TAlgebra >
virtual bool ug::Jacobi< TAlgebra >::postprocess ( )
inlineprotectedvirtual

Postprocess routine.

Implements ug::IPreconditioner< TAlgebra >.

◆ preprocess()

◆ set_block()

template<typename TAlgebra >
void ug::Jacobi< TAlgebra >::set_block ( bool  b)
inline

sets if blocked jacobi is used (inverting block-diagonal), or plain (scalar) diagonal if false

References ug::Jacobi< TAlgebra >::m_bBlock.

Referenced by ug::Jacobi< TAlgebra >::Jacobi().

◆ step()

template<typename TAlgebra >
virtual bool ug::Jacobi< TAlgebra >::step ( SmartPtr< MatrixOperator< matrix_type, vector_type > >  pOp,
vector_type c,
const vector_type d 
)
inlineprotectedvirtual

computes a new correction c = B*d

This method computes a new correction c = B*d. It can only be called, when the preprocess has been done.

Parameters
[in]matunderlying matrix (i.e. L in L*u = f)
[out]ccorrection
[in]ddefect
Returns
bool success flag

Implements ug::IPreconditioner< TAlgebra >.

References ug::Jacobi< TAlgebra >::m_diagInv, ug::MatMult(), PROFILE_BEGIN_GROUP, ug::PST_ADDITIVE, ug::PST_CONSISTENT, and UG_LOG.

Referenced by ug::Jacobi< TAlgebra >::apply().

◆ supports_parallel()

template<typename TAlgebra >
virtual bool ug::Jacobi< TAlgebra >::supports_parallel ( ) const
inlinevirtual

returns if parallel solving is supported

Implements ug::ILinearIterator< TAlgebra::vector_type >.

Member Data Documentation

◆ m_bBlock

template<typename TAlgebra >
bool ug::Jacobi< TAlgebra >::m_bBlock
protected

◆ m_diagInv

template<typename TAlgebra >
std::vector<inverse_type> ug::Jacobi< TAlgebra >::m_diagInv
protected

storage of the inverse diagonal in parallel

Referenced by ug::Jacobi< TAlgebra >::preprocess(), and ug::Jacobi< TAlgebra >::step().


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