ug4
|
Interface for Projected GaussSeidel Preconditioner. More...
#include <proj_gauss_seidel_interface.h>
Public Types | |
typedef TAlgebra | algebra_type |
Algebra type. | |
typedef GaussSeidelBase< TAlgebra > | base_type |
Base class type. | |
typedef GridFunction< TDomain, TAlgebra > | GF |
Grid Function type. | |
typedef algebra_type::matrix_type | matrix_type |
Matrix type. | |
typedef vector_type::value_type | value_type |
Value type. | |
typedef algebra_type::vector_type | vector_type |
Vector type. | |
![]() | |
typedef TAlgebra | algebra_type |
typedef IPreconditioner< TAlgebra > | base_type |
Base type. | |
typedef IPreconditioner< TAlgebra >::matrix_operator_type | matrix_operator_type |
Matrix Operator type. | |
typedef TAlgebra::matrix_type | matrix_type |
typedef IOrderingAlgorithm< TAlgebra, ordering_container_type > | ordering_algo_type |
typedef std::vector< size_t > | ordering_container_type |
Ordering type. | |
typedef TAlgebra::vector_type | vector_type |
![]() | |
typedef TAlgebra | algebra_type |
Algebra type. | |
typedef MatrixOperator< matrix_type, vector_type > | matrix_operator_type |
Matrix Operator type. | |
typedef TAlgebra::matrix_type | matrix_type |
Matrix type. | |
typedef TAlgebra::vector_type | vector_type |
Vector type. | |
![]() | |
typedef TAlgebra::vector_type | codomain_function_type |
Range space. | |
typedef TAlgebra::vector_type | domain_function_type |
Domain space. | |
![]() | |
typedef TAlgebra | algebra_type |
type of algebra | |
typedef TAlgebra::matrix_type | matrix_type |
type of matrix | |
typedef TAlgebra::vector_type | vector_type |
type of vector | |
![]() | |
typedef TAlgebra::vector_type | vector_type |
type of vector | |
Public Member Functions | |
void | add_obstacle_constraint (SmartPtr< IObstacleConstraint< TDomain, TAlgebra > > spObsCons) |
adds the obstacle constraint function c(u) | |
virtual bool | apply (vector_type &c, const vector_type &d) |
Compute new correction c = B*d. | |
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. | |
virtual bool | init (SmartPtr< ILinearOperator< vector_type > > J, const vector_type &u) |
Prepare for Operator J(u) and linearization point u (current solution) | |
IProjGaussSeidel () | |
constructor | |
IProjGaussSeidel (const IProjGaussSeidel< TDomain, TAlgebra > &parent) | |
clone constructor | |
virtual const char * | name () const =0 |
name | |
void | project_correction (value_type &c_i, const size_t i) |
projects the correction on the underlying constraints set by the obstacleConstraints | |
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 | |
~IProjGaussSeidel () | |
Destructor. | |
![]() | |
void | enable_consistent_interfaces (bool enable) |
activates the new parallelization approach (disabled by default) | |
void | enable_overlap (bool enable) |
GaussSeidelBase () | |
GaussSeidelBase (const GaussSeidelBase< TAlgebra > &parent) | |
clone constructor | |
void | set_ordering_algorithm (SmartPtr< ordering_algo_type > ordering_algo) |
sets an ordering algorithm | |
void | set_sor_relax (number relaxFactor) |
set relaxation parameter to define a SOR-method | |
![]() | |
virtual bool | apply (vector_type &c, const vector_type &d) |
compute new correction c = B*d | |
virtual bool | apply_update_defect (vector_type &c, vector_type &d) |
compute new correction c = B*d and update defect d:= d - L*c | |
SmartPtr< MatrixOperator< matrix_type, vector_type > > | approx_operator () |
underlying matrix based operator used for the preconditioner | |
SmartPtr< MatrixOperator< matrix_type, vector_type > > | defect_operator () |
underlying matrix based operator for calculation of defect | |
virtual bool | init (SmartPtr< ILinearOperator< vector_type > > J, const vector_type &u) |
implements the ILinearIterator-interface for matrix based preconditioner | |
bool | init (SmartPtr< ILinearOperator< vector_type > > L) |
implements the ILinearIterator-interface for matrix based preconditioner | |
bool | init (SmartPtr< MatrixOperator< matrix_type, vector_type > > Op) |
initializes the preconditioner for a matrix based operator | |
IPreconditioner () | |
default constructor | |
IPreconditioner (const IPreconditioner< TAlgebra > &parent) | |
clone constructor | |
IPreconditioner (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter) | |
constructor setting debug writer | |
virtual void | set_approximation (SmartPtr< MatrixOperator< matrix_type, vector_type > > approx) |
virtual | ~IPreconditioner () |
virtual destructor | |
![]() | |
virtual SmartPtr< ILinearIterator< TAlgebra::vector_type, TAlgebra::vector_type > > | clone ()=0 |
clone | |
virtual std::string | config_string () const |
SmartPtr< IDamping< TAlgebra::vector_type, TAlgebra::vector_type > > | damping () |
returns the scaling | |
ILinearIterator () | |
constructor | |
ILinearIterator (const ILinearIterator< TAlgebra::vector_type, TAlgebra::vector_type > &parent) | |
copy constructor | |
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 | |
virtual bool | init (SmartPtr< ILinearOperator< TAlgebra::vector_type, TAlgebra::vector_type > > L)=0 |
initialize for linear operator L | |
void | set_damp (number factor) |
sets the damping to a constant factor | |
void | set_damp (SmartPtr< IDamping< TAlgebra::vector_type, TAlgebra::vector_type > > spScaling) |
sets a scaling for the correction | |
virtual | ~ILinearIterator () |
virtual destructor | |
![]() | |
SmartPtr< IDebugWriter< algebra_type > > | debug_writer () |
returns the debug writer | |
ConstSmartPtr< IDebugWriter< algebra_type > > | debug_writer () const |
bool | debug_writer_valid () const |
returns true if the debug writer is set | |
DebugWritingObject () | |
DebugWritingObject (const DebugWritingObject< algebra_type > &parent) | |
clone constructor | |
DebugWritingObject (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter) | |
virtual void | set_debug (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter) |
set debug writer | |
virtual | ~DebugWritingObject () |
virtual destructor | |
![]() | |
virtual void | set_debug (SmartPtr< IVectorDebugWriter< vector_type > > spDebugWriter) |
set debug writer | |
SmartPtr< IVectorDebugWriter< vector_type > > | vector_debug_writer () |
returns the debug writer | |
ConstSmartPtr< IVectorDebugWriter< vector_type > > | vector_debug_writer () const |
bool | vector_debug_writer_valid () const |
returns true if the debug writer is set | |
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) | |
virtual | ~VectorDebugWritingObject () |
virtual destructor | |
Protected Attributes | |
vector< SmartPtr< IObstacleConstraint< TDomain, TAlgebra > > > | m_spvObsConstraint |
obstacle constraint | |
![]() | |
matrix_type | m_A |
bool | m_bConsistentInterfaces |
vector_type | m_oC |
vector_type | m_oD |
for overlaps only | |
number | m_relax |
relaxation parameter | |
SmartPtr< ordering_algo_type > | m_spOrderingAlgo |
for ordering algorithms | |
bool | m_useOverlap |
![]() | |
bool | m_bInit |
init flag indicating if init has been called | |
bool | m_bOtherApproxOperator |
SmartPtr< MatrixOperator< matrix_type, vector_type > > | m_spApproxOperator |
underlying matrix based operator used for the preconditioner | |
SmartPtr< ILinearOperator< vector_type > > | m_spDefectOperator |
underlying matrix based operator for calculation of defect | |
![]() | |
SmartPtr< IDamping< TAlgebra::vector_type, TAlgebra::vector_type > > | m_spDamping |
the scaling | |
![]() | |
SmartPtr< IDebugWriter< algebra_type > > | m_spDebugWriter |
Debug Writer. | |
![]() | |
SmartPtr< IVectorDebugWriter< vector_type > > | m_spVectorDebugWriter |
Debug Writer. | |
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 | |
bool | m_bObsCons |
flag indicating if obstacle constraint has been set | |
SmartPtr< vector_type > | m_spSol |
pointer to solution | |
Additional Inherited Members | |
![]() | |
virtual bool | postprocess () |
cleans the operator | |
virtual bool | preprocess (SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp) |
initializes the preconditioner | |
virtual void | step (const matrix_type &A, vector_type &c, const vector_type &d, const number relax)=0 |
virtual bool | step (SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp, vector_type &c, const vector_type &d) |
computes a new correction c = B*d | |
virtual bool | supports_parallel () const |
returns if parallel solving is supported | |
![]() | |
void | enter_debug_writer_section (const char *secDir) |
enters a debugging section | |
void | enter_debug_writer_section (std::string secDir) |
enters a debugging section | |
void | leave_debug_writer_section () |
leaves a debugging section | |
void | write_debug (const matrix_type &mat, const char *filename) |
write debug output for a matrix (if debug writer set) | |
void | write_debug (const matrix_type &mat, std::string name) |
write debug output for a matrix (if debug writer set) | |
![]() | |
void | enter_vector_debug_writer_section (const char *secDir) |
enters a debugging section | |
void | enter_vector_debug_writer_section (std::string secDir) |
enters a debugging section | |
void | leave_vector_debug_writer_section () |
leaves a debugging section | |
void | print_debugger_message (const char *msg) |
prints a debugger message (listing all the sections) | |
void | print_debugger_message (std::string msg) |
prints a debugger message (listing all the sections) | |
virtual void | write_debug (const vector_type &vec, std::string name) |
writing debug output for a vector (if debug writer set) | |
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.
TAlgebra | Algebra type |
typedef TAlgebra ug::IProjGaussSeidel< TDomain, TAlgebra >::algebra_type |
Algebra type.
typedef GaussSeidelBase<TAlgebra> ug::IProjGaussSeidel< TDomain, TAlgebra >::base_type |
Base class type.
typedef GridFunction<TDomain, TAlgebra> ug::IProjGaussSeidel< TDomain, TAlgebra >::GF |
Grid Function type.
typedef algebra_type::matrix_type ug::IProjGaussSeidel< TDomain, TAlgebra >::matrix_type |
Matrix type.
typedef vector_type::value_type ug::IProjGaussSeidel< TDomain, TAlgebra >::value_type |
Value type.
typedef algebra_type::vector_type ug::IProjGaussSeidel< TDomain, TAlgebra >::vector_type |
Vector type.
|
inline |
constructor
References ug::IProjGaussSeidel< TDomain, TAlgebra >::m_bObsCons, and ug::IProjGaussSeidel< TDomain, TAlgebra >::m_spvObsConstraint.
|
inline |
clone constructor
References ug::IProjGaussSeidel< TDomain, TAlgebra >::m_bObsCons, and ug::IProjGaussSeidel< TDomain, TAlgebra >::m_spvObsConstraint.
|
inline |
Destructor.
|
inline |
adds the obstacle constraint function c(u)
References ug::IProjGaussSeidel< TDomain, TAlgebra >::m_bObsCons, and ug::IProjGaussSeidel< TDomain, TAlgebra >::m_spvObsConstraint.
|
virtual |
Compute new correction c = B*d.
References PROFILE_FUNC_GROUP, UG_LOG, and ConstSmartPtr< T, FreePolicy >::valid().
|
virtual |
Compute new correction c = B*d and return new defect d := d - A*c.
References PROFILE_FUNC_GROUP.
|
virtual |
Prepare for Operator J(u) and linearization point u (current solution)
References PROFILE_FUNC_GROUP, and UG_LOG.
|
pure virtual |
name
Implements ug::GaussSeidelBase< TAlgebra >.
Implemented in ug::ProjGaussSeidel< TDomain, TAlgebra >, ug::ProjBackwardGaussSeidel< TDomain, TAlgebra >, and ug::ProjSymmetricGaussSeidel< TDomain, 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().
|
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.
[in] | mat | underlying matrix (i.e. A in A*u = b) |
[out] | c | correction |
[in] | d | defect |
[in] | relax | relaxation parameter |
Implemented in ug::ProjGaussSeidel< TDomain, TAlgebra >, ug::ProjBackwardGaussSeidel< TDomain, TAlgebra >, and ug::ProjSymmetricGaussSeidel< TDomain, TAlgebra >.
|
private |
for all indices stored in vInd: all rows and columns of mat are set to zero
References ug::SetRow(), and UG_LOG.
|
private |
for all indices stored in vInd: the entry of vec is set to zero
References ug::DoFRef(), UG_LOG, and UG_THROW.
|
private |
init flag indicating if init has been called
|
private |
flag indicating if obstacle constraint has been set
Referenced by ug::IProjGaussSeidel< TDomain, TAlgebra >::add_obstacle_constraint(), ug::IProjGaussSeidel< TDomain, TAlgebra >::IProjGaussSeidel(), and ug::IProjGaussSeidel< TDomain, TAlgebra >::IProjGaussSeidel().
|
private |
pointer to solution
|
protected |