20 #include <opm/simulators/linalg/matrixblock.hh> 26 template <
typename Scalar,
int numWellEq,
int numEq>
27 CompWellEquations<Scalar, numWellEq, numEq>::
30 invDuneD_.setBuildMode(DiagMatWell::row_wise);
34 template <
typename Scalar,
int numWellEq,
int numEq>
36 CompWellEquations<Scalar, numWellEq, numEq>::
37 init(
const int num_conn,
const std::vector<std::size_t>& cells)
39 duneB_.setBuildMode(OffDiagMatWell::row_wise);
40 duneC_.setBuildMode(OffDiagMatWell::row_wise),
41 duneD_.setBuildMode(DiagMatWell::row_wise);
43 duneD_.setSize(1, 1, 1);
44 duneB_.setSize(1, num_conn, num_conn);
45 duneC_.setSize(1, num_conn, num_conn);
47 auto endD = duneD_.createend();
48 for (
auto row = duneD_.createbegin(); row != endD; ++row) {
50 row.insert(row.index());
53 auto endB = duneB_.createend();
54 for (
auto row = duneB_.createbegin(); row != endB; ++row) {
55 for (
int con = 0 ; con < num_conn; ++con) {
62 auto endC = duneC_.createend();
63 for (
auto row = duneC_.createbegin(); row != endC; ++row) {
64 for (
int con = 0; con < num_conn; ++con) {
71 Bx_.resize(duneB_.N());
73 invDrw_.resize(duneD_.N());
79 template <
typename Scalar,
int numWellEq,
int numEq>
81 CompWellEquations<Scalar, numWellEq, numEq>::
90 template <
typename Scalar,
int numWellEq,
int numEq>
92 CompWellEquations<Scalar, numWellEq, numEq>::
93 solve(BVectorWell& dx_well)
const 95 invDuneD_.mv(resWell_, dx_well);
98 template <
typename Scalar,
int numWellEq,
int numEq>
100 CompWellEquations<Scalar, numWellEq, numEq>::
106 bool singular =
false;
109 detail::invertMatrix(invDuneD_[0][0]);
110 }
catch (
const NumericalProblem&) {
112 }
catch (
const Dune::FMatrixError&) {
117 for (std::size_t i = 0; !singular && i < invDuneD_[0][0].rows; ++i) {
118 for (std::size_t j = 0; !singular && j < invDuneD_[0][0].cols; ++j) {
119 if (!std::isfinite(invDuneD_[0][0][i][j])) {
126 invDuneD_[0][0] = 0.0;
127 for (std::size_t i = 0; i < invDuneD_[0][0].rows; ++i) {
128 invDuneD_[0][0][i][i] = 1.0;
134 template <
typename Scalar,
int numWellEq,
int numEq>
136 CompWellEquations<Scalar, numWellEq, numEq>::
137 apply(BVector& r)
const 139 assert(invDrw_.size() == invDuneD_.N());
142 invDuneD_.mv(resWell_, invDrw_);
144 duneC_.mmtv(invDrw_, r);
147 template <
typename Scalar,
int numWellEq,
int numEq>
149 CompWellEquations<Scalar, numWellEq, numEq>::
150 recoverSolutionWell(
const BVector& x, BVectorWell& xw)
const 152 BVectorWell resWell = resWell_;
154 duneB_.mmv(x, resWell);
156 invDuneD_.mv(resWell, xw);
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45