mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
introduce perforation densities and pressdiffs to MultisegmentWells
to reduce dependence on StandardWells.
This commit is contained in:
parent
25fbd20acf
commit
a8742a9348
@ -226,7 +226,7 @@ namespace Opm {
|
|||||||
|
|
||||||
const std::vector<int>& well_cells = msWellOps().well_cells;
|
const std::vector<int>& well_cells = msWellOps().well_cells;
|
||||||
|
|
||||||
stdWells().wellPerforationDensities() = V::Zero(nperf_total);
|
msWells().wellPerforationDensities() = V::Zero(nperf_total);
|
||||||
|
|
||||||
const V perf_press = Eigen::Map<const V>(xw.perfPress().data(), nperf_total);
|
const V perf_press = Eigen::Map<const V>(xw.perfPress().data(), nperf_total);
|
||||||
|
|
||||||
@ -327,8 +327,8 @@ namespace Opm {
|
|||||||
wells(), perf_cell_depth, cd, grav);
|
wells(), perf_cell_depth, cd, grav);
|
||||||
|
|
||||||
// 4. Store the results
|
// 4. Store the results
|
||||||
stdWells().wellPerforationDensities() = Eigen::Map<const V>(cd.data(), nperf_total); // This one is not useful for segmented wells at all
|
msWells().wellPerforationDensities() = Eigen::Map<const V>(cd.data(), nperf_total); // This one is not useful for segmented wells at all
|
||||||
stdWells().wellPerforationPressureDiffs() = Eigen::Map<const V>(cdp.data(), nperf_total);
|
msWells().wellPerforationPressureDiffs() = Eigen::Map<const V>(cdp.data(), nperf_total);
|
||||||
|
|
||||||
if ( !msWellOps().has_multisegment_wells ) {
|
if ( !msWellOps().has_multisegment_wells ) {
|
||||||
msWells().wellPerforationCellDensities() = V::Zero(nperf_total);
|
msWells().wellPerforationCellDensities() = V::Zero(nperf_total);
|
||||||
@ -503,7 +503,7 @@ namespace Opm {
|
|||||||
const int nw = wellsMultiSegment().size();
|
const int nw = wellsMultiSegment().size();
|
||||||
const int np = numPhases();
|
const int np = numPhases();
|
||||||
const DataBlock compi = Eigen::Map<const DataBlock>(wells().comp_frac, nw, np);
|
const DataBlock compi = Eigen::Map<const DataBlock>(wells().comp_frac, nw, np);
|
||||||
const V perf_press_diffs = stdWells().wellPerforationPressureDiffs();
|
const V perf_press_diffs = msWells().wellPerforationPressureDiffs();
|
||||||
msWells().computeWellFlux(state, perf_press_diffs, compi,
|
msWells().computeWellFlux(state, perf_press_diffs, compi,
|
||||||
mob_perfcells, b_perfcells, aliveWells, cq_s);
|
mob_perfcells, b_perfcells, aliveWells, cq_s);
|
||||||
asImpl().updatePerfPhaseRatesAndPressures(cq_s, state, well_state);
|
asImpl().updatePerfPhaseRatesAndPressures(cq_s, state, well_state);
|
||||||
@ -538,7 +538,7 @@ namespace Opm {
|
|||||||
// we need th concept of preforation pressures
|
// we need th concept of preforation pressures
|
||||||
xw.perfPress().resize(nperf_total, -1.e100);
|
xw.perfPress().resize(nperf_total, -1.e100);
|
||||||
|
|
||||||
const V& cdp = stdWells().wellPerforationPressureDiffs();
|
const V& cdp = msWells().wellPerforationPressureDiffs();
|
||||||
int start_segment = 0;
|
int start_segment = 0;
|
||||||
int start_perforation = 0;
|
int start_perforation = 0;
|
||||||
for (int i = 0; i < nw; ++i) {
|
for (int i = 0; i < nw; ++i) {
|
||||||
@ -661,7 +661,7 @@ namespace Opm {
|
|||||||
|
|
||||||
const int nw = wellsMultiSegment().size();
|
const int nw = wellsMultiSegment().size();
|
||||||
const DataBlock compi = Eigen::Map<const DataBlock>(wells().comp_frac, nw, np);
|
const DataBlock compi = Eigen::Map<const DataBlock>(wells().comp_frac, nw, np);
|
||||||
const V perf_press_diffs = stdWells().wellPerforationPressureDiffs();
|
const V perf_press_diffs = msWells().wellPerforationPressureDiffs();
|
||||||
msWells().computeWellFlux(wellSolutionState, perf_press_diffs, compi,
|
msWells().computeWellFlux(wellSolutionState, perf_press_diffs, compi,
|
||||||
mob_perfcells_const, b_perfcells_const, aliveWells, cq_s);
|
mob_perfcells_const, b_perfcells_const, aliveWells, cq_s);
|
||||||
|
|
||||||
|
@ -111,7 +111,11 @@ namespace Opm {
|
|||||||
|
|
||||||
Vector& segVDt() { return segvdt_; };
|
Vector& segVDt() { return segvdt_; };
|
||||||
|
|
||||||
|
const Vector& wellPerforationDensities() const { return well_perforation_densities_; };
|
||||||
|
Vector& wellPerforationDensities() { return well_perforation_densities_; };
|
||||||
|
|
||||||
|
const Vector& wellPerforationPressureDiffs() const { return well_perforation_pressure_diffs_; };
|
||||||
|
Vector& wellPerforationPressureDiffs() { return well_perforation_pressure_diffs_; };
|
||||||
|
|
||||||
template <class WellState>
|
template <class WellState>
|
||||||
void
|
void
|
||||||
@ -218,6 +222,13 @@ namespace Opm {
|
|||||||
// to handle the volume effects of the segment
|
// to handle the volume effects of the segment
|
||||||
Vector segvdt_;
|
Vector segvdt_;
|
||||||
|
|
||||||
|
// technically, they are only useful for standard wells
|
||||||
|
// since at the moment, we are handling both the standard
|
||||||
|
// wells and the multi-segment wells under the MultisegmentWells
|
||||||
|
// we need them to remove the dependency on StandardWells
|
||||||
|
Vector well_perforation_densities_;
|
||||||
|
Vector well_perforation_pressure_diffs_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
Loading…
Reference in New Issue
Block a user