33 #ifndef __H__UG__LIB_DISC__OPERATOR__LINEAR_OPERATOR__SCHUR_PRECOND__
34 #define __H__UG__LIB_DISC__OPERATOR__LINEAR_OPERATOR__SCHUR_PRECOND__
62 #define SCHUR_PROFILE_FUNC() PROFILE_FUNC_GROUP("algebra schur")
63 #define SCHUR_PROFILE_BEGIN(name) PROFILE_BEGIN_GROUP(name, "algebra schur")
64 #define SCHUR_PROFILE_END_(name) PROFILE_END_(name)
66 #define SCHUR_PROFILE_FUNC()
67 #define SCHUR_PROFILE_BEGIN(name)
68 #define SCHUR_PROFILE_END_(name)
84 template <
typename TAlgebra>
123 virtual const char*
name()
const {
return "Schur complement";}
171 std::stringstream ss; ss <<
name() <<
"\n";
172 ss <<
" Dirichlet Solver: ";
174 else ss <<
" NOT SET!\n";
175 ss <<
" Skeleton Solver: ";
177 else ss <<
" NOT SET!\n";
202 std::vector<schur_slice_desc_type> &skeletonMark);
207 std::vector<schur_slice_desc_type> &skeletonMark);
Definition: smart_pointer.h:296
Definition: smart_pointer.h:108
virtual void set_debug(SmartPtr< IDebugWriter< algebra_type > > spDebugWriter)
set debug writer
Definition: debug_writer.h:384
void write_debug(const matrix_type &mat, const char *filename)
write debug output for a matrix (if debug writer set)
Definition: debug_writer.h:399
SmartPtr< IDebugWriter< algebra_type > > debug_writer()
returns the debug writer
Definition: debug_writer.h:391
TAlgebra::matrix_type matrix_type
type of matrix
Definition: debug_writer.h:363
base class for all debug writer
Definition: debug_writer.h:244
describes an inverse linear mapping X->Y
Definition: linear_operator_inverse.h:80
describes a linear iterator that is based on a matrix operator
Definition: preconditioner.h:103
Definition: schur_complement_inverse_interface.h:46
Definition: matrix_operator.h:49
Definition: schur_complement_operator.h:69
operator implementation of the DD Schur complement solver
Definition: schur_precond.h:86
SmartPtr< SchurComplementOperator< algebra_type > > m_spSchurComplementOp
Local Schur complement for each subdomain.
Definition: schur_precond.h:226
SchurPrecond(const SchurPrecond< TAlgebra > &parent)
Definition: schur_precond.h:109
SmartPtr< vector_type > m_aux_rhs[2]
Definition: schur_precond.h:229
size_t m_myTotalSkeleton
Definition: schur_precond.h:232
size_t num_local_skeleton()
Definition: schur_precond.h:194
void set_schur_complement_operator(SmartPtr< SchurComplementOperator< algebra_type > > scop)
Definition: schur_precond.h:158
void create_aux_vectors(const vector_type &d)
Definition: schur_precond.cpp:238
IPreconditioner< TAlgebra > base_type
Base type.
Definition: schur_precond.h:98
TAlgebra algebra_type
Definition: schur_precond.h:89
SmartPtr< ILinearOperatorInverse< vector_type > > m_spDirichletSolver
Solver Dirichlet problems (also used in Schur complement)
Definition: schur_precond.h:220
void schur_solve_skeleton(vector_type &u_skeleton, const vector_type &f_skeleton)
Definition: schur_precond.cpp:303
void set_skeleton_solver(SmartPtr< ISchurComplementInverse< algebra_type > > skeletonSolver)
sets the coarse problem solver
Definition: schur_precond.h:155
virtual bool supports_parallel() const
returns if parallel solving is supported
Definition: schur_precond.h:135
SmartPtr< MatrixOperator< matrix_type, vector_type > > m_pA
Definition: schur_precond.h:233
void schur_solver_backward(vector_type &u_inner, vector_type &f_inner, vector_type &u_skeleton)
Definition: schur_precond.cpp:324
virtual const char * name() const
name of solver
Definition: schur_precond.h:123
void schur_solver_forward(vector_type &u_inner, vector_type &f_inner)
Definition: schur_precond.cpp:283
virtual bool preprocess(SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp)
initializes the preconditioner
Definition: schur_precond.cpp:203
bool create_and_init_local_schur_complement(SmartPtr< MatrixOperator< matrix_type, vector_type > > A, std::vector< schur_slice_desc_type > &skeletonMark)
Definition: schur_precond.cpp:97
virtual std::string config_string() const
Definition: schur_precond.h:169
virtual SmartPtr< ILinearIterator< vector_type > > clone()
clone
Definition: schur_precond.h:116
virtual bool step(SmartPtr< MatrixOperator< matrix_type, vector_type > > pOp, vector_type &c, const vector_type &d)
computes a new correction c = B*d
Definition: schur_precond.cpp:336
bool check_requirements()
Definition: schur_precond.cpp:162
SmartPtr< vector_type > m_aux_sol[2]
Definition: schur_precond.h:230
SmartPtr< ISchurComplementInverse< TAlgebra > > m_spSkeletonSolver
Solver for coarse (skeleton) problem.
Definition: schur_precond.h:223
void get_skeleton_slicing(SmartPtr< MatrixOperator< matrix_type, vector_type > > A, std::vector< schur_slice_desc_type > &skeletonMark)
Definition: schur_precond.cpp:182
size_t m_myMasterSkeleton
Definition: schur_precond.h:232
TAlgebra::matrix_type matrix_type
Definition: schur_precond.h:95
void init_skeleton_solver()
Definition: schur_precond.cpp:139
SchurPrecond()
constructor
Definition: schur_precond.cpp:72
void set_dirichlet_solver(SmartPtr< ILinearOperatorInverse< vector_type > > dirichletSolver)
sets the Dirichlet solver (forward to Schur complement)
Definition: schur_precond.h:151
void set_debug(SmartPtr< IDebugWriter< algebra_type > > spDebugWriter)
set debug writer
Definition: schur_precond.h:163
virtual bool postprocess()
cleans the operator
Definition: schur_precond.cpp:86
TAlgebra::vector_type vector_type
Definition: schur_precond.h:92
size_t num_global_skeleton()
Definition: schur_precond.h:185
#define PCL_RO_SUM
Definition: pcl_methods.h:63
CPUAlgebra::vector_type vector_type
string ConfigShift(string s)
Definition: string_util.cpp:457
DebugID SchurDebug
todo: replace DebugID
Definition: schur.h:55
SmartPtr< T, FreePolicy > make_sp(T *inst)
returns a SmartPtr for the passed raw pointer
Definition: smart_pointer.h:836