|
ug4
|
Projected GaussSeidel (SOR) -method. More...
#include <proj_gauss_seidel.h>
Inheritance diagram for ug::ProjGaussSeidel< TDomain, TAlgebra >:Public Types | |
| typedef TAlgebra | algebra_type |
| Algebra type. | |
| typedef IProjGaussSeidel< TDomain, TAlgebra > | base_type |
| Base class type. | |
| typedef algebra_type::matrix_type | matrix_type |
| Matrix type. | |
| typedef algebra_type::vector_type | vector_type |
| Vector type. | |
Public Types inherited from ug::IProjGaussSeidel< TDomain, TAlgebra > | |
| 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. | |
Public Types inherited from ug::GaussSeidelBase< TAlgebra > | |
| 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 |
Public Types inherited from ug::IPreconditioner< TAlgebra > | |
| 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. | |
Public Types inherited from ug::ILinearIterator< TAlgebra::vector_type > | |
| typedef TAlgebra::vector_type | codomain_function_type |
| Range space. | |
| typedef TAlgebra::vector_type | domain_function_type |
| Domain space. | |
Public Types inherited from ug::DebugWritingObject< TAlgebra > | |
| 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 | |
Public Types inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type > | |
| typedef TAlgebra::vector_type | vector_type |
| type of vector | |
Public Member Functions | |
| virtual SmartPtr< ILinearIterator< vector_type > > | clone () |
| Clone. | |
| ProjGaussSeidel () | |
| ProjGaussSeidel (const ProjGaussSeidel< TDomain, TAlgebra > &parent) | |
| copy constructor | |
| virtual void | step (const matrix_type &mat, vector_type &c, const vector_type &d, const number relax) |
| computes a new correction c = B*d and projects on the underlying constraint | |
Public Member Functions inherited from ug::IProjGaussSeidel< TDomain, TAlgebra > | |
| 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 | |
| void | project_correction (value_type &c_i, const size_t i) |
| projects the correction on the underlying constraints set by the obstacleConstraints | |
| ~IProjGaussSeidel () | |
| Destructor. | |
Public Member Functions inherited from ug::GaussSeidelBase< TAlgebra > | |
| 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 | |
Public Member Functions inherited from ug::IPreconditioner< TAlgebra > | |
| 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 | |
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 | |
| 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 | |
Public Member Functions inherited from ug::DebugWritingObject< TAlgebra > | |
| 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 | |
Public Member Functions inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type > | |
| 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 Member Functions | |
| virtual const char * | name () const |
| name | |
Protected Member Functions inherited from ug::GaussSeidelBase< TAlgebra > | |
| 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 | |
Protected Member Functions inherited from ug::DebugWritingObject< TAlgebra > | |
| 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) | |
Protected Member Functions inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type > | |
| 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) | |
Additional Inherited Members | |
Protected Attributes inherited from ug::IProjGaussSeidel< TDomain, TAlgebra > | |
| vector< SmartPtr< IObstacleConstraint< TDomain, TAlgebra > > > | m_spvObsConstraint |
| obstacle constraint | |
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 | |
| number | m_relax |
| relaxation parameter | |
| SmartPtr< ordering_algo_type > | m_spOrderingAlgo |
| for ordering algorithms | |
| bool | m_useOverlap |
Protected Attributes inherited from ug::IPreconditioner< TAlgebra > | |
| 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 | |
Protected Attributes inherited from ug::ILinearIterator< TAlgebra::vector_type > | |
| SmartPtr< IDamping< TAlgebra::vector_type, TAlgebra::vector_type > > | m_spDamping |
| the scaling | |
Protected Attributes inherited from ug::DebugWritingObject< TAlgebra > | |
| SmartPtr< IDebugWriter< algebra_type > > | m_spDebugWriter |
| Debug Writer. | |
Protected Attributes inherited from ug::VectorDebugWritingObject< TAlgebra::vector_type > | |
| SmartPtr< IVectorDebugWriter< vector_type > > | m_spVectorDebugWriter |
| Debug Writer. | |
Projected GaussSeidel (SOR) -method.
The projected GaussSeidel method can be applied to 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 'IProjPreconditioner::set_obstacle_constraint'.
Similar problems, which e.g. only differ in the sign in (I) and/or (II) can be equivalently treated by the method.
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.
By calling 'set_sor_damp(number)' one gets the successive overrelaxation-version of the projected preconditioners of GaussSeidel type.
References:
| TAlgebra | Algebra type |
| typedef TAlgebra ug::ProjGaussSeidel< TDomain, TAlgebra >::algebra_type |
Algebra type.
| typedef IProjGaussSeidel<TDomain,TAlgebra> ug::ProjGaussSeidel< TDomain, TAlgebra >::base_type |
Base class type.
| typedef algebra_type::matrix_type ug::ProjGaussSeidel< TDomain, TAlgebra >::matrix_type |
Matrix type.
| typedef algebra_type::vector_type ug::ProjGaussSeidel< TDomain, TAlgebra >::vector_type |
Vector type.
|
inline |
|
inline |
copy constructor
|
inlinevirtual |
|
inlineprotectedvirtual |
name
Implements ug::IProjGaussSeidel< TDomain, TAlgebra >.
|
virtual |
computes a new correction c = B*d and projects on the underlying constraint
Implements ug::IProjGaussSeidel< TDomain, TAlgebra >.
References ug::forward_gs_step().