14 #ifndef _ISTL_SUPPORT_H_
15 #define _ISTL_SUPPORT_H_
20 #include <dune/common/version.hh>
21 #include <dune/istl/bcrsmatrix.hh>
22 #include <dune/istl/overlappingschwarz.hh>
23 #include <dune/istl/preconditioners.hh>
24 #include <dune/istl/solvers.hh>
25 #include <dune/istl/schwarz.hh>
26 #include <dune/istl/owneroverlapcopy.hh>
28 #include <dune/istl/superlu.hh>
31 #include <dune/istl/umfpack.hh>
36 using Mat = Dune::BCRSMatrix<Dune::FieldMatrix<double,1,1>>;
37 using Vec = Dune::BlockVector<Dune::FieldVector<double,1>>;
38 using Operator = Dune::MatrixAdapter<Mat,Vec,Vec>;
39 using InverseOperator = Dune::InverseOperator<Vec, Vec>;
40 using Preconditioner = Dune::Preconditioner<Vec,Vec>;
43 template<
template<
class M>
class Pre>
44 class IOp2Pre :
public Dune::InverseOperator2Preconditioner<Pre<ISTL::Mat>,
45 Dune::SolverCategory::sequential>
47 using SolverType = Dune::InverseOperator2Preconditioner<Pre<ISTL::Mat>,
48 Dune::SolverCategory::sequential>;
51 explicit IOp2Pre(Pre<ISTL::Mat>* iop) : SolverType(*iop)
57 std::unique_ptr<Pre<ISTL::Mat>> m_op;
60 #if defined(HAVE_UMFPACK)
61 using LUType = Dune::UMFPack<ISTL::Mat>;
62 using LU = IOp2Pre<Dune::UMFPack>;
63 #elif defined(HAVE_SUPERLU)
64 using LUType = Dune::SuperLU<ISTL::Mat>;
65 using LU = IOp2Pre<Dune::SuperLU>;
69 using ILU = Dune::SeqILU<Mat, Vec, Vec>;
70 using SOR = Dune::SeqSOR<Mat, Vec, Vec>;
71 using SSOR = Dune::SeqSSOR<Mat, Vec,Vec>;
72 using GJ = Dune::SeqJac<Mat, Vec, Vec>;
73 using GS = Dune::SeqGS<Mat, Vec, Vec>;
74 using ASMLU = Dune::SeqOverlappingSchwarz<Mat, Vec,
75 Dune::AdditiveSchwarzMode,
77 using ASM = Dune::SeqOverlappingSchwarz<Mat, Vec>;
Assembly scope.
Definition: SIMdummy.h:24
@ ISTL
Sparse matrices / Dune solver.
Definition: LinAlgenums.h:28