19#ifndef OPM_SYSTEMPRECONDITIONERFACTORY_HEADER_INCLUDED
20#define OPM_SYSTEMPRECONDITIONERFACTORY_HEADER_INCLUDED
27#include <dune/istl/operators.hh>
28#include <dune/istl/paamg/pinfo.hh>
33template <
class Operator,
class Comm,
typename>
34struct StandardPreconditioners;
36template<
typename Scalar>
42template<
typename Scalar>
54template<
typename Scalar>
62 F::addCreator(
"system_cpr",
63 [](
const O& op,
const P& prm,
64 const std::function<V()>& sysWeightCalc,
65 std::size_t pressureIndex) {
66 std::function<ResVector<Scalar>()> resWeightCalc;
68 resWeightCalc = [sysWeightCalc]() {
69 return sysWeightCalc()[Dune::Indices::_0];
72 return std::make_shared<SystemPreconditioner<Scalar, SeqResOperator<Scalar>>>(
73 op.getmat(), resWeightCalc, pressureIndex, prm);
83template<
typename Scalar>
91 F::addCreator(
"system_cpr",
92 [](
const O& op,
const P& prm,
93 const std::function<V()>& sysWeightCalc,
94 std::size_t pressureIndex) {
95 std::function<ResVector<Scalar>()> resWeightCalc;
97 resWeightCalc = [sysWeightCalc]() {
98 return sysWeightCalc()[Dune::Indices::_0];
101 return std::make_shared<SystemPreconditioner<Scalar, SeqResOperator<Scalar>>>(
102 op.getmat(), resWeightCalc, pressureIndex, prm);
106template<
typename Scalar>
114 F::addCreator(
"system_cpr",
115 [](
const O& op,
const P& prm,
116 const std::function<V()>& sysWeightCalc,
117 std::size_t pressureIndex,
119 std::function<ResVector<Scalar>()> resWeightCalc;
121 resWeightCalc = [sysWeightCalc]() {
122 return sysWeightCalc()[Dune::Indices::_0];
125 const auto& resComm = comm[Dune::Indices::_0];
126 return std::make_shared<SystemPreconditioner<Scalar, ParResOperator<Scalar>,
ParResComm>>(
127 op.getmat(), resWeightCalc, pressureIndex, prm, resComm);
136 static void add() { detail::addSystemCprSeq<double>(); }
141 static void add() { detail::addSystemCprSeq<float>(); }
147 static void add() { detail::addSystemCprParSeq<double>(); }
152 static void add() { detail::addSystemCprParSeq<float>(); }
157 static void add() { detail::addSystemCprPar<double>(); }
162 static void add() { detail::addSystemCprPar<float>(); }
Definition: MultiComm.hpp:74
Definition: MultiComm.hpp:119
Definition: PreconditionerFactory.hpp:64
Hierarchical collection of key/value pairs.
Definition: PropertyTree.hpp:39
Definition: fvbaseprimaryvariables.hh:161
void addSystemCprSeq()
Definition: SystemPreconditionerFactory.hpp:55
void addSystemCprParSeq()
Definition: SystemPreconditionerFactory.hpp:84
void addSystemCprPar()
Definition: SystemPreconditionerFactory.hpp:107
Definition: blackoilbioeffectsmodules.hh:45
Dune::MultiTypeBlockVector< ResVector< Scalar >, WellVector< Scalar > > SystemVector
Definition: SystemTypes.hpp:59
Dune::OverlappingSchwarzOperator< SystemMatrix< Scalar >, SystemVector< Scalar >, SystemVector< Scalar >, SystemComm > SystemParOp
Definition: SystemPreconditionerFactory.hpp:44
Dune::OwnerOverlapCopyCommunication< int, int > ParResComm
Definition: SystemPreconditioner.hpp:40
Dune::MatrixAdapter< SystemMatrix< Scalar >, SystemVector< Scalar >, SystemVector< Scalar > > SystemSeqOp
Definition: SystemPreconditionerFactory.hpp:37
static void add()
Definition: SystemPreconditionerFactory.hpp:147
static void add()
Definition: SystemPreconditionerFactory.hpp:157
static void add()
Definition: SystemPreconditionerFactory.hpp:152
static void add()
Definition: SystemPreconditionerFactory.hpp:162
static void add()
Definition: SystemPreconditionerFactory.hpp:136
static void add()
Definition: SystemPreconditionerFactory.hpp:141
Definition: StandardPreconditioners_mpi.hpp:135