53 using M =
typename Traits::M;
54 using X =
typename Traits::X;
55 using Y =
typename Traits::Y;
57 using FTraits = Dune::FieldTraits<typename M::field_type>;
60 using Creator = ISTLSolverCreator<S,Traits>;
67 auto cg =
new Creator<Dune::CGSolver<X>>;
68 Map::addCreator(
"cg", cg);
71 auto pcg =
new Creator<Dune::GeneralizedPCGSolver<X>>;
72 Map::addCreator(
"pcg", pcg);
74 auto fcg =
new Creator<Dune::RestartedFCGSolver<X>>;
75 Map::addCreator(
"fcg", fcg);
77 auto cfcg =
new Creator<Dune::CompleteFCGSolver<X>>;
78 Map::addCreator(
"cfcg", cfcg);
80 auto bicgstab =
new Creator<Dune::BiCGSTABSolver<X>>;
81 Map::addCreator(
"bicgstab", bicgstab);
82 Map::addCreator(
"bcgs", bicgstab);
83 Map::addCreator(
"default", bicgstab);
85 auto minres =
new Creator<Dune::MINRESSolver<X>>;
86 Map::addCreator(
"minres", minres);
88 auto gmres =
new Creator<Dune::RestartedGMResSolver<X,Y>>;
89 Map::addCreator(
"gmres", gmres);
91 auto fgmres =
new Creator<Dune::RestartedFlexibleGMResSolver<X,Y>>;
92 Map::addCreator(
"fgmres", fgmres);
94 init_direct(std::is_same<typename FTraits::real_type, double>{});
97 static void init_direct(std::false_type)
99 warning(
"Direct solvers not created for the matrix with real_type = {}.",
100 Dune::className<typename FTraits::real_type>());
103 static void init_direct(std::true_type)
105#if HAVE_SUITESPARSE_UMFPACK
106 auto umfpack =
new Creator<Dune::UMFPack<M>>;
107 Map::addCreator(
"umfpack", umfpack);
110#if HAVE_SUITESPARSE_LDL
111 auto ldl =
new Creator<Dune::LDL<M>>;
112 Map::addCreator(
"ldl", ldl);
115#if HAVE_SUITESPARSE_SPQR
116 auto spqr =
new Creator<Dune::SPQR<M>>;
117 Map::addCreator(
"spqr", spqr);
121 auto superlu =
new Creator<Dune::SuperLU<M>>;
122 Map::addCreator(
"superlu", superlu);
126#if HAVE_SUITESPARSE_UMFPACK
127 Map::addCreator(
"direct", umfpack);
129 Map::addCreator(
"direct", superlu);