Go to the documentation of this file.00001
00002
00003
00004 #ifndef solverDomainDecomp_hh
00005 #define solverDomainDecomp_hh
00006
00007 #include "basics/typedefs.hh"
00008 #include "operator/compositions.hh"
00009 #include "operator/solverFabric.hh"
00010 #include "operator/submatrix.hh"
00011 #include "space/domainDecomp.hh"
00012 #include "toolbox/sequence.hh"
00013 #include "toolbox/set.hh"
00014
00015 namespace concepts {
00016
00017
00018
00030 template<class F, class G = typename Realtype<F>::type>
00031 class DDSolver : public Operator<F> {
00032 public:
00043 DDSolver(DDSpace<G>& spc, Sequence<SparseMatrix<F>*>& A, bool explSchur,
00044 SolverFabric<F>& innerSolver,
00045 SolverFabric<F>& schurComplSolver,
00046 SolverFabric<F>* schurComplPrecond = 0);
00047 virtual ~DDSolver();
00051 virtual void operator()(const Function<F>& fncY, Function<F>& fncX);
00052 void operator()(const Vector<F>& fncY, Vector<F>& fncX);
00053 protected:
00054 virtual std::ostream& info(std::ostream& os) const;
00055 private:
00057 DDSpace<G>& spc_;
00059 Set<IndexRange> indicesB_;
00061 uint n_;
00063 Set<uint> domains_;
00065 DummySpace<G>* spc_B_;
00067 Sequence<const SparseMatrix<F>*> A_;
00071 Sequence<SubMatrixN<SparseMatrix<F> >*> A_II_, A_IB_, A_BI_, A_BB_;
00073 Sequence<Operator<F>*> A_II_inv_;
00075 Sequence<Operator<F>*> S_;
00077 Operator<F>* S_0_inv_;
00079 Operator<F>* S_inv_;
00080 };
00081
00082
00083 }
00084
00085 #endif // solverDomainDecomp_hh
00086