|
ug4
|
operator implementation of the FETI-DP solver More...
#include <feti.h>
Inheritance diagram for ug::FETISolver< TAlgebra >:Public Types | |
| typedef TAlgebra | algebra_type |
| typedef ILinearOperatorInverse< vector_type > | base_type |
| Base type. | |
| typedef TAlgebra::matrix_type | matrix_type |
| typedef TAlgebra::vector_type | vector_type |
Public Types inherited from ug::IMatrixOperatorInverse< TAlgebra::matrix_type, TAlgebra::vector_type > | |
| typedef TAlgebra::vector_type | codomain_function_type |
| Range space. | |
| typedef TAlgebra::vector_type | domain_function_type |
| Domain space. | |
| typedef TAlgebra::matrix_type | matrix_type |
| Matrix type. | |
Public Types inherited from ug::ILinearOperatorInverse< X, Y > | |
| typedef Y | codomain_function_type |
| Range space. | |
| typedef X | domain_function_type |
| Domain space. | |
Public Types inherited from ug::ILinearIterator< X, Y > | |
| typedef Y | codomain_function_type |
| Range space. | |
| typedef X | 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 bool | apply (vector_type &x, const vector_type &b) |
| solves the system | |
| bool | apply_F (vector_type &f, const vector_type &v) |
| function which applies matrix \(F\) of the reduced system ("Delta system") to a vector \(v\) | |
| bool | apply_M_inverse (vector_type &z, const vector_type &r) |
| function which applies matrix \( M^{-1,(i)} \) to a vector \( r \) | |
| virtual bool | apply_return_defect (vector_type &lambda, vector_type &d) |
| bool | apply_scaling_matrix (vector_type &s, const vector_type &v) |
| function which applies diagonal scaling matrix \(D_{\Delta}^{(i)}\) to a vector \(v\) | |
| bool | compute_d (vector_type &d, const vector_type &f) |
| function which computes right hand side vector 'd' of the dual unknowns | |
| FETISolver () | |
| constructor | |
| virtual bool | init (SmartPtr< MatrixOperator< matrix_type, vector_type > > A) |
| initializes the solver for operator A | |
| virtual const char * | name () const |
| name of solver | |
| void | print_statistic_of_inner_solver (bool bPrintOnlyAverages) |
| prints some convergence statistic of inner solvers | |
| void | set_coarse_problem_solver (SmartPtr< ILinearOperatorInverse< vector_type > > coarseProblemSolver) |
| sets the coarse problem solver | |
| void | set_debug (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter) |
| set debug writer | |
| void | set_dirichlet_solver (SmartPtr< ILinearOperatorInverse< vector_type > > dirichletSolver) |
| sets the Dirichlet solver | |
| void | set_domain_decomp_info (pcl::IDomainDecompositionInfo &ddInfo) |
| void | set_neumann_solver (SmartPtr< ILinearOperatorInverse< vector_type > > neumannSolver) |
| sets the Neumann solver | |
| void | set_test_one_to_many_layouts (bool bTest) |
| virtual bool | supports_parallel () const |
| returns if parallel solving is supported | |
| void | test_layouts (bool bPrint) |
| virtual | ~FETISolver () |
Public Member Functions inherited from ug::IMatrixOperatorInverse< TAlgebra::matrix_type, TAlgebra::vector_type > | |
| virtual bool | init (SmartPtr< ILinearOperator< TAlgebra::vector_type, TAlgebra::vector_type > > A) |
| initializes this inverse operator for a linear operator | |
| virtual bool | init (SmartPtr< ILinearOperator< TAlgebra::vector_type, TAlgebra::vector_type > > A, const TAlgebra::vector_type &u) |
| initializes this inverse operator for a linear operator | |
| virtual bool | init (SmartPtr< MatrixOperator< TAlgebra::matrix_type, TAlgebra::vector_type, TAlgebra::vector_type > > A)=0 |
| initializes this inverse operator for a matrix-based operator | |
| virtual | ~IMatrixOperatorInverse () |
| virtual destructor | |
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 | |
| 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 | |
| virtual bool | apply_update_defect (Y &u, X &f) |
| compute new correction c = B*d and update defect d := d - A*c | |
| virtual SmartPtr< ILinearIterator< X, Y > > | clone () |
| clone | |
| virtual std::string | config_string () const |
| returns information about configuration parameters | |
| SmartPtr< IConvergenceCheck< X > > | convergence_check () |
| returns the convergence check | |
| ConstSmartPtr< IConvergenceCheck< X > > | convergence_check () const |
| returns the convergence check | |
| number | defect () const |
| returns the current defect | |
| ILinearOperatorInverse () | |
| constructor setting convergence check to (100, 1e-12, 1e-12, true) | |
| ILinearOperatorInverse (SmartPtr< IConvergenceCheck< X > > spConvCheck) | |
| Default constructor. | |
| virtual bool | init (SmartPtr< ILinearOperator< Y, X > > J, const Y &u) |
| initializes for the inverse for a linearized operator at linearization point u | |
| virtual bool | init (SmartPtr< ILinearOperator< Y, X > > L) |
| initializes for the inverse for a linear operator | |
| SmartPtr< ILinearOperator< Y, X > > | linear_operator () |
| returns the current Operator this Inverse Operator is initialized for | |
| number | reduction () const |
| returns the current relative reduction | |
| void | set_convergence_check (SmartPtr< IConvergenceCheck< X > > spConvCheck) |
| set the convergence check | |
| virtual int | standard_offset () const |
| returns the standard offset for output | |
| int | step () const |
| returns the current number of steps | |
| virtual | ~ILinearOperatorInverse () |
| virtual destructor | |
Public Member Functions inherited from ug::ILinearIterator< X, Y > | |
| SmartPtr< IDamping< X, Y > > | damping () |
| returns the scaling | |
| ILinearIterator () | |
| constructor | |
| ILinearIterator (const ILinearIterator< X, Y > &parent) | |
| copy constructor | |
| void | set_damp (number factor) |
| sets the damping to a constant factor | |
| void | set_damp (SmartPtr< IDamping< X, Y > > 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 | ~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 | |
| void | prepare_conv_check () |
| virtual void | write_debug (const vector_type &vec, const char *filename) |
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) | |
Private Attributes | |
| pcl::IDomainDecompositionInfo * | m_pDDInfo |
operator implementation of the FETI-DP solver
This operator implements a FETI-DP solver, see e.g. "Domain Decomposition Methods -- Algorithms and Theory", A. Toselli, O. Widlund, Springer 2004, sec. 1.3.5, p. 12ff.
| typedef TAlgebra ug::FETISolver< TAlgebra >::algebra_type |
| typedef ILinearOperatorInverse<vector_type> ug::FETISolver< TAlgebra >::base_type |
Base type.
| typedef TAlgebra::matrix_type ug::FETISolver< TAlgebra >::matrix_type |
| typedef TAlgebra::vector_type ug::FETISolver< TAlgebra >::vector_type |
| ug::FETISolver< TAlgebra >::FETISolver | ( | ) |
constructor
|
inlinevirtual |
|
inlinevirtual |
solves the system
Implements ug::IMatrixOperatorInverse< TAlgebra::matrix_type, TAlgebra::vector_type >.
References ug::FETISolver< TAlgebra >::apply_return_defect().
| bool ug::FETISolver< TAlgebra >::apply_F | ( | vector_type & | f, |
| const vector_type & | v | ||
| ) |
function which applies matrix \(F\) of the reduced system ("Delta system") to a vector \(v\)
This function applies matrix \(F := B_{\Delta} \tilde{S}^{-1} B_{\Delta}^T\) to a vector \(v\). \(v\) can be: (a) unknown vector of Lagrange multipliers, lambda, and (b) search direction 'p' in cg method.
| [in] | v | vector \(v\) living on "Dual layout" |
| [out] | f | result of application of \(F\) |
References ug::ComputeDifferenceOnDelta(), ug::ComputeDifferenceOnDeltaTransposed(), FETI_PROFILE_BEGIN, FETI_PROFILE_END, FETI_PROFILE_FUNC, ug::PST_ADDITIVE, and ug::PST_CONSISTENT.
| bool ug::FETISolver< TAlgebra >::apply_M_inverse | ( | vector_type & | z, |
| const vector_type & | r | ||
| ) |
function which applies matrix \( M^{-1,(i)} \) to a vector \( r \)
This function applies matrix \(M^{-1,(i)} := D_{\Delta}^{(i)} B_{\Delta}^{(i)} S_{\Delta}^{(i)} {B_{\Delta}^{(i)}}^T D_{\Delta}^{(i)}\) to a vector \(r\).
| [in] | r | vector \(r\) living on "Dual layout" |
| [out] | z | result of application of \( M^{-1} \) |
References ug::ComputeDifferenceOnDelta(), ug::ComputeDifferenceOnDeltaTransposed(), FETI_PROFILE_BEGIN, FETI_PROFILE_END, FETI_PROFILE_FUNC, ug::PST_ADDITIVE, and ug::PST_CONSISTENT.
|
virtual |
solves the reduced system \(F \lambda = d\) with preconditioned cg method and returns the last defect of iteration in rhs (derived from 'CGSolver::apply_return_defect()')
Implements ug::IMatrixOperatorInverse< TAlgebra::matrix_type, TAlgebra::vector_type >.
References pcl::AllProcsTrue(), ug::ComputeDifferenceOnDeltaTransposed(), FETI_PROFILE_BEGIN, FETI_PROFILE_END, p, ug::PST_ADDITIVE, ug::PST_CONSISTENT, and UG_LOG.
Referenced by ug::FETISolver< TAlgebra >::apply().
|
inline |
function which applies diagonal scaling matrix \(D_{\Delta}^{(i)}\) to a vector \(v\)
References s.
| bool ug::FETISolver< TAlgebra >::compute_d | ( | vector_type & | d, |
| const vector_type & | f | ||
| ) |
function which computes right hand side vector 'd' of the dual unknowns
This function computes \(d := B_{\Delta} \tilde{S}_{\Delta \Delta}^{-1} \tilde{f}_{\Delta}\) to a vector \(v\). \(v\) can be: (a) unknown vector of Lagrange multipliers, lambda, and (b) search direction 'p' in cg method.
| [in] | f | vector \(\tilde{f}_{\Delta}\) |
| [out] | d | right hand side vector \(d\) of reduced system |
References ug::ComputeDifferenceOnDelta(), FETI_PROFILE_BEGIN, FETI_PROFILE_END, FETI_PROFILE_FUNC, ug::PST_CONSISTENT, and UG_LOG.
|
virtual |
initializes the solver for operator A
References pcl::AllProcsTrue(), FETI_PROFILE_BEGIN, FETI_PROFILE_END, SPNULL, and UG_LOG.
|
inlinevirtual |
name of solver
Implements ug::ILinearOperatorInverse< X, Y >.
Referenced by ug::FETISolver< TAlgebra >::prepare_conv_check(), and ug::FETISolver< TAlgebra >::write_debug().
|
inlineprotected |
|
inline |
prints some convergence statistic of inner solvers
References ug::LocalSchurComplement< TAlgebra >::clear_total_itercnt_of_inner_solvers(), ug::PrimalSubassembledMatrixInverse< TAlgebra >::clear_total_itercnt_of_inner_solvers(), pcl::IDomainDecompositionInfo::get_num_subdomains(), ug::LocalSchurComplement< TAlgebra >::get_total_itercnt_of_inner_solvers(), ug::PrimalSubassembledMatrixInverse< TAlgebra >::get_total_itercnt_of_inner_solvers(), ug::FETISolver< TAlgebra >::m_iterCnt, ug::FETISolver< TAlgebra >::m_LocalSchurComplement, ug::FETISolver< TAlgebra >::m_pDDInfo, ug::FETISolver< TAlgebra >::m_PrimalSubassembledMatrixInverse, ug::LocalSchurComplement< TAlgebra >::print_statistic_of_inner_solver(), ug::PrimalSubassembledMatrixInverse< TAlgebra >::print_statistic_of_inner_solver(), and UG_LOG.
|
inline |
sets the coarse problem solver
References ug::FETISolver< TAlgebra >::m_spCoarseProblemSolver.
|
inlinevirtual |
set debug writer
Reimplemented from ug::DebugWritingObject< TAlgebra >.
References ug::FETISolver< TAlgebra >::m_LocalSchurComplement, ug::FETISolver< TAlgebra >::m_PrimalSubassembledMatrixInverse, ug::DebugWritingObject< TAlgebra >::set_debug(), and ug::VectorDebugWritingObject< TVector >::set_debug().
|
inline |
sets the Dirichlet solver
References ug::FETISolver< TAlgebra >::m_spDirichletSolver.
|
inline |
References ug::FETISolver< TAlgebra >::m_pDDInfo.
|
inline |
sets the Neumann solver
References ug::FETISolver< TAlgebra >::m_spNeumannSolver.
|
inline |
|
inlinevirtual |
returns if parallel solving is supported
Implements ug::ILinearOperatorInverse< X, Y >.
References ug::FETISolver< TAlgebra >::m_spCoarseProblemSolver, ug::FETISolver< TAlgebra >::m_spDirichletSolver, ug::FETISolver< TAlgebra >::m_spNeumannSolver, ug::ILinearOperatorInverse< X, Y >::supports_parallel(), and SmartPtr< T, FreePolicy >::valid().
| void ug::FETISolver< TAlgebra >::test_layouts | ( | bool | bPrint | ) |
|
inlineprotectedvirtual |
|
protected |
|
protected |
|
protected |
|
private |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |