5 #include <dune/common/classname.hh> 6 #include <dune/common/version.hh> 8 #include <dune/common/ftraits.hh> 10 #include <amdis/CreatorMap.hpp> 11 #include <amdis/Output.hpp> 13 #include <amdis/linearalgebra/istl/ISTLSolverCreator.hpp> 14 #include <amdis/linearalgebra/istl/precompiled/Solvers.hpp> 35 template <
class Traits>
38 using M =
typename Traits::M;
39 using X =
typename Traits::X;
40 using Y =
typename Traits::Y;
42 using FTraits = Dune::FieldTraits<typename M::field_type>;
45 using Creator = ISTLSolverCreator<S,Traits>;
52 auto cg =
new Creator<Dune::CGSolver<X>>;
53 Map::addCreator(
"cg", cg);
56 auto pcg =
new Creator<Dune::GeneralizedPCGSolver<X>>;
57 Map::addCreator(
"pcg", pcg);
59 auto bicgstab =
new Creator<Dune::BiCGSTABSolver<X>>;
60 Map::addCreator(
"bicgstab", bicgstab);
61 Map::addCreator(
"bcgs", bicgstab);
62 Map::addCreator(
"default", bicgstab);
64 auto minres =
new Creator<Dune::MINRESSolver<X>>;
65 Map::addCreator(
"minres", minres);
67 auto gmres =
new Creator<Dune::RestartedGMResSolver<X,Y>>;
68 Map::addCreator(
"gmres", gmres);
70 init_direct(std::is_same<typename FTraits::real_type, double>{});
73 static void init_direct(std::false_type)
75 warning(
"Direct solvers not created for the matrix with real_type = {}.",
76 Dune::className<typename FTraits::real_type>());
79 static void init_direct(std::true_type)
81 #if HAVE_SUITESPARSE_UMFPACK 82 auto umfpack =
new Creator<Dune::UMFPack<M>>;
83 Map::addCreator(
"umfpack", umfpack);
86 #if HAVE_SUITESPARSE_LDL 87 auto ldl =
new Creator<Dune::LDL<M>>;
88 Map::addCreator(
"ldl", ldl);
91 #if HAVE_SUITESPARSE_SPQR 92 auto spqr =
new Creator<Dune::SPQR<M>>;
93 Map::addCreator(
"spqr", spqr);
97 auto superlu =
new Creator<Dune::SuperLU<M>>;
98 Map::addCreator(
"superlu", superlu);
102 #if HAVE_SUITESPARSE_UMFPACK 103 Map::addCreator(
"direct", umfpack);
105 Map::addCreator(
"direct", superlu);
A CreatorMap is used to construct objects, which types depends on key words determined at run time...
Definition: CreatorMap.hpp:29
Definition: AdaptBase.hpp:6
Definition: CreatorMap.hpp:16