ug4
ug::IProjGaussSeidel< TDomain, TAlgebra > Class Template Referenceabstract

Interface for Projected GaussSeidel Preconditioner. More...

#include <proj_gauss_seidel_interface.h>

+ Inheritance diagram for ug::IProjGaussSeidel< TDomain, TAlgebra >:

Public Types

typedef TAlgebra algebra_type
 Algebra type. More...
 
typedef GaussSeidelBase< TAlgebra > base_type
 Base class type. More...
 
typedef GridFunction< TDomain, TAlgebra > GF
 Grid Function type. More...
 
typedef algebra_type::matrix_type matrix_type
 Matrix type. More...
 
typedef vector_type::value_type value_type
 Value type. More...
 
typedef algebra_type::vector_type vector_type
 Vector type. More...
 
- Public Types inherited from ug::GaussSeidelBase< TAlgebra >
typedef TAlgebra algebra_type
 
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
 
typedef IOrderingAlgorithm< TAlgebra, ordering_container_typeordering_algo_type
 
typedef std::vector< size_t > ordering_container_type
 Ordering type. More...
 
typedef TAlgebra::vector_type vector_type
 
- 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

void add_obstacle_constraint (SmartPtr< IObstacleConstraint< TDomain, TAlgebra > > spObsCons)
 adds the obstacle constraint function c(u) More...
 
virtual bool apply (vector_type &c, const vector_type &d)
 Compute new correction c = B*d. More...
 
virtual bool apply_update_defect (vector_type &c, vector_type &d)
 Compute new correction c = B*d and return new defect d := d - A*c. More...
 
virtual bool init (SmartPtr< ILinearOperator< vector_type > > J, const vector_type &u)
 Prepare for Operator J(u) and linearization point u (current solution) More...
 
 IProjGaussSeidel ()
 constructor More...
 
 IProjGaussSeidel (const IProjGaussSeidel< TDomain, TAlgebra > &parent)
 clone constructor More...
 
virtual const char * name () const =0
 name More...
 
void project_correction (value_type &c_i, const size_t i)
 projects the correction on the underlying constraints set by the obstacleConstraints More...
 
virtual void step (const matrix_type &mat, vector_type &c, const vector_type &d, const number relax)=0
 computes a new correction c = B*d and projects on the underlying constraint More...
 
 ~IProjGaussSeidel ()
 Destructor. More...
 
- Public Member Functions inherited from ug::GaussSeidelBase< TAlgebra >
void enable_consistent_interfaces (bool enable)
 activates the new parallelization approach (disabled by default) More...
 
void enable_overlap (bool enable)
 
 GaussSeidelBase ()
 
 GaussSeidelBase (const GaussSeidelBase< TAlgebra > &parent)
 clone constructor More...
 
void set_ordering_algorithm (SmartPtr< ordering_algo_type > ordering_algo)
 sets an ordering algorithm More...
 
void set_sor_relax (number relaxFactor)
 set relaxation parameter to define a SOR-method More...
 
- Public Member Functions inherited from ug::IPreconditioner< TAlgebra >
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...
 
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 SmartPtr< ILinearIterator< TAlgebra::vector_type, TAlgebra::vector_type > > clone ()=0
 clone More...
 
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 Attributes

vector< SmartPtr< IObstacleConstraint< TDomain, TAlgebra > > > m_spvObsConstraint
 obstacle constraint More...
 
- Protected Attributes inherited from ug::GaussSeidelBase< TAlgebra >
matrix_type m_A
 
bool m_bConsistentInterfaces
 
vector_type m_oC
 
vector_type m_oD
 for overlaps only More...
 
number m_relax
 relaxation parameter More...
 
SmartPtr< ordering_algo_typem_spOrderingAlgo
 for ordering algorithms More...
 
bool m_useOverlap
 
- 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...
 

Private Member Functions

void truncateMat (matrix_type &mat, vector< DoFIndex > &vInd)
 
void truncateVec (vector_type &vec, vector< DoFIndex > &vInd)
 

Private Attributes

bool m_bInit
 init flag indicating if init has been called More...
 
bool m_bObsCons
 flag indicating if obstacle constraint has been set More...
 
SmartPtr< vector_typem_spSol
 pointer to solution More...
 

Additional Inherited Members

- Protected Member Functions inherited from ug::GaussSeidelBase< TAlgebra >
virtual bool postprocess ()
 cleans the operator More...
 
virtual bool preprocess (SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp)
 initializes the preconditioner 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...
 
virtual bool supports_parallel () const
 returns if parallel solving is supported 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...
 

Detailed Description

template<typename TDomain, typename TAlgebra>
class ug::IProjGaussSeidel< TDomain, TAlgebra >

Interface for Projected GaussSeidel Preconditioner.

This class provides an interface to define a preconditioner which can be applied to solve problems of the form

A * u >= b (I) c(u) >= 0 (II) c(u)^T * [A*u - b] = 0, (III)

where u, b are vectors and A is a matrix. '*' denotes componentwise multiplication. c(u) denotes an obstacle-function, which depends on the solution vector u. One possible example for such an obstacle-function could be the scalar obstacle function

u >= 0.

The obstacle function c(u) is defined by creating an instance of IObstacleConstraint, which is passed to the projected preconditioner by the method 'set_obstacle_constraint'.

Similar problems, which e.g. only differ in the sign in (I) and/or (II) can be equivalently treated by these preconditioners.

Note: Due to (II) the old solution needs to be stored within this method. This is a difference to the classical smoothers/preconditioners, which usually work on the correction and the defect only.

Since the problem formulation (I)-(III) consists of inequalities, the projected preconditioner performs a projection on a constraint c(u) in every preconditioner-step.

Template Parameters
TAlgebraAlgebra type

Member Typedef Documentation

◆ algebra_type

template<typename TDomain , typename TAlgebra >
typedef TAlgebra ug::IProjGaussSeidel< TDomain, TAlgebra >::algebra_type

Algebra type.

◆ base_type

template<typename TDomain , typename TAlgebra >
typedef GaussSeidelBase<TAlgebra> ug::IProjGaussSeidel< TDomain, TAlgebra >::base_type

Base class type.

◆ GF

template<typename TDomain , typename TAlgebra >
typedef GridFunction<TDomain, TAlgebra> ug::IProjGaussSeidel< TDomain, TAlgebra >::GF

Grid Function type.

◆ matrix_type

template<typename TDomain , typename TAlgebra >
typedef algebra_type::matrix_type ug::IProjGaussSeidel< TDomain, TAlgebra >::matrix_type

Matrix type.

◆ value_type

template<typename TDomain , typename TAlgebra >
typedef vector_type::value_type ug::IProjGaussSeidel< TDomain, TAlgebra >::value_type

Value type.

◆ vector_type

template<typename TDomain , typename TAlgebra >
typedef algebra_type::vector_type ug::IProjGaussSeidel< TDomain, TAlgebra >::vector_type

Vector type.

Constructor & Destructor Documentation

◆ IProjGaussSeidel() [1/2]

template<typename TDomain , typename TAlgebra >
ug::IProjGaussSeidel< TDomain, TAlgebra >::IProjGaussSeidel ( )
inline

◆ IProjGaussSeidel() [2/2]

template<typename TDomain , typename TAlgebra >
ug::IProjGaussSeidel< TDomain, TAlgebra >::IProjGaussSeidel ( const IProjGaussSeidel< TDomain, TAlgebra > &  parent)
inline

◆ ~IProjGaussSeidel()

template<typename TDomain , typename TAlgebra >
ug::IProjGaussSeidel< TDomain, TAlgebra >::~IProjGaussSeidel ( )
inline

Destructor.

Member Function Documentation

◆ add_obstacle_constraint()

template<typename TDomain , typename TAlgebra >
void ug::IProjGaussSeidel< TDomain, TAlgebra >::add_obstacle_constraint ( SmartPtr< IObstacleConstraint< TDomain, TAlgebra > >  spObsCons)
inline

◆ apply()

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

◆ apply_update_defect()

template<typename TDomain , typename TAlgebra >
bool ug::IProjGaussSeidel< TDomain, TAlgebra >::apply_update_defect ( vector_type c,
vector_type d 
)
virtual

Compute new correction c = B*d and return new defect d := d - A*c.

Reimplemented from ug::IPreconditioner< TAlgebra >.

References PROFILE_FUNC_GROUP.

◆ init()

template<typename TDomain , typename TAlgebra >
bool ug::IProjGaussSeidel< TDomain, TAlgebra >::init ( SmartPtr< ILinearOperator< vector_type > >  J,
const vector_type u 
)
virtual

Prepare for Operator J(u) and linearization point u (current solution)

Reimplemented from ug::IPreconditioner< TAlgebra >.

References init(), PROFILE_FUNC_GROUP, and UG_LOG.

◆ name()

template<typename TDomain , typename TAlgebra >
virtual const char* ug::IProjGaussSeidel< TDomain, TAlgebra >::name ( ) const
pure virtual

◆ project_correction()

template<typename TDomain , typename TAlgebra >
void ug::IProjGaussSeidel< TDomain, TAlgebra >::project_correction ( value_type c_i,
const size_t  i 
)

projects the correction on the underlying constraints set by the obstacleConstraints

References ug::BlockRef(), and ug::GetSize().

◆ step()

template<typename TDomain , typename TAlgebra >
virtual void ug::IProjGaussSeidel< TDomain, TAlgebra >::step ( const matrix_type mat,
vector_type c,
const vector_type d,
const number  relax 
)
pure virtual

computes a new correction c = B*d and projects on the underlying constraint

This method computes a new correction c = B*d. B is here the underlying matrix operator.

Parameters
[in]matunderlying matrix (i.e. A in A*u = b)
[out]ccorrection
[in]ddefect
[in]relaxrelaxation parameter

Implements ug::GaussSeidelBase< TAlgebra >.

Implemented in ug::ProjSymmetricGaussSeidel< TDomain, TAlgebra >, ug::ProjBackwardGaussSeidel< TDomain, TAlgebra >, and ug::ProjGaussSeidel< TDomain, TAlgebra >.

◆ truncateMat()

template<typename TDomain , typename TAlgebra >
void ug::IProjGaussSeidel< TDomain, TAlgebra >::truncateMat ( matrix_type mat,
vector< DoFIndex > &  vInd 
)
private

for all indices stored in vInd: all rows and columns of mat are set to zero

References ug::SetRow(), and UG_LOG.

◆ truncateVec()

template<typename TDomain , typename TAlgebra >
void ug::IProjGaussSeidel< TDomain, TAlgebra >::truncateVec ( vector_type vec,
vector< DoFIndex > &  vInd 
)
private

for all indices stored in vInd: the entry of vec is set to zero

References ug::DoFRef(), UG_LOG, and UG_THROW.

Member Data Documentation

◆ m_bInit

template<typename TDomain , typename TAlgebra >
bool ug::IProjGaussSeidel< TDomain, TAlgebra >::m_bInit
private

init flag indicating if init has been called

◆ m_bObsCons

template<typename TDomain , typename TAlgebra >
bool ug::IProjGaussSeidel< TDomain, TAlgebra >::m_bObsCons
private

◆ m_spSol

template<typename TDomain , typename TAlgebra >
SmartPtr<vector_type> ug::IProjGaussSeidel< TDomain, TAlgebra >::m_spSol
private

pointer to solution

◆ m_spvObsConstraint

template<typename TDomain , typename TAlgebra >
vector<SmartPtr<IObstacleConstraint<TDomain,TAlgebra> > > ug::IProjGaussSeidel< TDomain, TAlgebra >::m_spvObsConstraint
protected

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