ug4
|
operator implementation of the FETI-DP solver More...
#include <feti.h>
Public Member Functions | |
virtual bool | apply (vector_type &x, const vector_type &b) |
solves the system More... | |
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\) More... | |
bool | apply_M_inverse (vector_type &z, const vector_type &r) |
function which applies matrix \( M^{-1,(i)} \) to a vector \( r \) More... | |
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\) More... | |
bool | compute_d (vector_type &d, const vector_type &f) |
function which computes right hand side vector 'd' of the dual unknowns More... | |
FETISolver () | |
constructor More... | |
virtual bool | init (SmartPtr< MatrixOperator< matrix_type, vector_type > > A) |
initializes the solver for operator A More... | |
virtual const char * | name () const |
name of solver More... | |
void | print_statistic_of_inner_solver (bool bPrintOnlyAverages) |
prints some convergence statistic of inner solvers More... | |
void | set_coarse_problem_solver (SmartPtr< ILinearOperatorInverse< vector_type > > coarseProblemSolver) |
sets the coarse problem solver More... | |
void | set_debug (SmartPtr< IDebugWriter< algebra_type > > spDebugWriter) |
set debug writer More... | |
void | set_dirichlet_solver (SmartPtr< ILinearOperatorInverse< vector_type > > dirichletSolver) |
sets the Dirichlet solver More... | |
void | set_domain_decomp_info (pcl::IDomainDecompositionInfo &ddInfo) |
void | set_neumann_solver (SmartPtr< ILinearOperatorInverse< vector_type > > neumannSolver) |
sets the Neumann solver More... | |
void | set_test_one_to_many_layouts (bool bTest) |
virtual bool | supports_parallel () const |
returns if parallel solving is supported More... | |
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 More... | |
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 More... | |
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 More... | |
virtual | ~IMatrixOperatorInverse () |
virtual destructor More... | |
Public Member Functions inherited from ug::ILinearOperatorInverse< TAlgebra::vector_type, TAlgebra::vector_type > | |
virtual bool | apply_update_defect (TAlgebra::vector_type &u, TAlgebra::vector_type &f) |
virtual SmartPtr< ILinearIterator< TAlgebra::vector_type, TAlgebra::vector_type > > | clone () |
clone More... | |
virtual std::string | config_string () const |
returns information about configuration parameters More... | |
SmartPtr< IConvergenceCheck< TAlgebra::vector_type > > | convergence_check () |
returns the convergence check More... | |
ConstSmartPtr< IConvergenceCheck< TAlgebra::vector_type > > | convergence_check () const |
returns the convergence check More... | |
number | defect () const |
returns the current defect More... | |
ILinearOperatorInverse () | |
constructor setting convergence check to (100, 1e-12, 1e-12, true) More... | |
ILinearOperatorInverse (SmartPtr< IConvergenceCheck< TAlgebra::vector_type > > spConvCheck) | |
Default constructor. More... | |
SmartPtr< ILinearOperator< TAlgebra::vector_type, TAlgebra::vector_type > > | linear_operator () |
returns the current Operator this Inverse Operator is initialized for More... | |
number | reduction () const |
returns the current relative reduction More... | |
void | set_convergence_check (SmartPtr< IConvergenceCheck< TAlgebra::vector_type > > spConvCheck) |
set the convergence check More... | |
virtual int | standard_offset () const |
returns the standard offset for output More... | |
int | step () const |
returns the current number of steps More... | |
virtual | ~ILinearOperatorInverse () |
virtual destructor More... | |
Public Member Functions inherited from ug::ILinearIterator< X, Y > | |
virtual bool | apply (Y &c, const X &d)=0 |
compute new correction c = B*d More... | |
virtual bool | apply_update_defect (Y &c, X &d)=0 |
compute new correction c = B*d and update defect d := d - A*c More... | |
SmartPtr< IDamping< X, Y > > | damping () |
returns the scaling More... | |
ILinearIterator () | |
constructor More... | |
ILinearIterator (const ILinearIterator< X, Y > &parent) | |
copy constructor More... | |
virtual bool | init (SmartPtr< ILinearOperator< Y, X > > J, const Y &u)=0 |
initialize for operator J(u) and linearization point u More... | |
virtual bool | init (SmartPtr< ILinearOperator< Y, X > > 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< X, Y > > 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 | ~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 Member Functions | |
SmartPtr< IConvergenceCheck< X > > | convergence_check () |
returns the convergence check More... | |
ConstSmartPtr< IConvergenceCheck< X > > | convergence_check () const |
returns the convergence check More... | |
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 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... | |
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(), alpha, 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.
|
inlineprotected |
returns the convergence check
|
inlineprotected |
returns the convergence check
Referenced by ug::FETISolver< TAlgebra >::prepare_conv_check().
|
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< TAlgebra::vector_type, TAlgebra::vector_type >.
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< TAlgebra::vector_type, TAlgebra::vector_type >.
References ug::FETISolver< TAlgebra >::m_spCoarseProblemSolver, ug::FETISolver< TAlgebra >::m_spDirichletSolver, and ug::FETISolver< TAlgebra >::m_spNeumannSolver.
void ug::FETISolver< TAlgebra >::test_layouts | ( | bool | bPrint | ) |
|
inlineprotectedvirtual |
|
protected |
|
protected |
|
protected |
|
private |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |