diff --git a/opm/autodiff/BlackoilModelBase_impl.hpp b/opm/autodiff/BlackoilModelBase_impl.hpp index 43bc57e59..44a9c544d 100644 --- a/opm/autodiff/BlackoilModelBase_impl.hpp +++ b/opm/autodiff/BlackoilModelBase_impl.hpp @@ -851,7 +851,7 @@ namespace detail { std::vector mob_perfcells; std::vector b_perfcells; - asImpl().extractWellPerfProperties(state, mob_perfcells, b_perfcells); + asImpl().stdWells().extractWellPerfProperties(rq_, fluid_.numPhases(), mob_perfcells, b_perfcells); if (param_.solve_welleq_initially_ && initial_assembly) { // solve the well equations as a pre-processing step asImpl().solveWellEq(mob_perfcells, b_perfcells, state, well_state); diff --git a/opm/autodiff/StandardWells.hpp b/opm/autodiff/StandardWells.hpp index 85222b7bc..3d2d85e8e 100644 --- a/opm/autodiff/StandardWells.hpp +++ b/opm/autodiff/StandardWells.hpp @@ -101,6 +101,12 @@ namespace Opm { const std::vector& depth_perf, const double grav); + template + void extractWellPerfProperties(const std::vector& rq, + const int np, + std::vector& mob_perfcells, + std::vector& b_perfcells) const; + protected: bool wells_active_; diff --git a/opm/autodiff/StandardWells_impl.hpp b/opm/autodiff/StandardWells_impl.hpp index dd5034172..55de376f8 100644 --- a/opm/autodiff/StandardWells_impl.hpp +++ b/opm/autodiff/StandardWells_impl.hpp @@ -247,6 +247,10 @@ namespace Opm } + + + + template void StandardWells:: @@ -277,4 +281,33 @@ namespace Opm well_perforation_pressure_diffs_ = Eigen::Map(cdp.data(), nperf); } + + + + + template + void + StandardWells:: + extractWellPerfProperties(const std::vector& rq, + const int np, + std::vector& mob_perfcells, + std::vector& b_perfcells) const + { + // If we have wells, extract the mobilities and b-factors for + // the well-perforated cells. + if ( !localWellsActive() ) { + mob_perfcells.clear(); + b_perfcells.clear(); + return; + } else { + const std::vector& well_cells = wellOps().well_cells; + mob_perfcells.resize(np, ADB::null()); + b_perfcells.resize(np, ADB::null()); + for (int phase = 0; phase < np; ++phase) { + mob_perfcells[phase] = subset(rq[phase].mob, well_cells); + b_perfcells[phase] = subset(rq[phase].b, well_cells); + } + } + } + }