mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
removing function allow_cross_flow() from StandardWellsDense
This commit is contained in:
parent
229244142f
commit
9c215faade
@ -107,7 +107,7 @@ namespace Opm
|
||||
WellState& well_state,
|
||||
bool only_wells);
|
||||
|
||||
bool crossFlowAllowed(const Simulator& ebosSimulator) const;
|
||||
virtual bool crossFlowAllowed(const Simulator& ebosSimulator) const;
|
||||
|
||||
void getMobility(const Simulator& ebosSimulator,
|
||||
const int perf,
|
||||
@ -145,7 +145,6 @@ namespace Opm
|
||||
using WellInterface<TypeTag>::indexOfWell;
|
||||
using WellInterface<TypeTag>::name;
|
||||
using WellInterface<TypeTag>::wellType;
|
||||
using WellInterface<TypeTag>::allowCrossFlow;
|
||||
using WellInterface<TypeTag>::wellControls;
|
||||
using WellInterface<TypeTag>::compFrac;
|
||||
using WellInterface<TypeTag>::numberOfPhases;
|
||||
@ -172,6 +171,7 @@ namespace Opm
|
||||
using WellInterface<TypeTag>::first_perf_;
|
||||
using WellInterface<TypeTag>::ref_depth_;
|
||||
using WellInterface<TypeTag>::perf_depth_;
|
||||
using WellInterface<TypeTag>::allow_cf_;
|
||||
|
||||
// densities of the fluid in each perforation
|
||||
std::vector<double> perf_densities_;
|
||||
|
@ -723,7 +723,7 @@ namespace Opm
|
||||
StandardWell<TypeTag>::
|
||||
crossFlowAllowed(const Simulator& ebosSimulator) const
|
||||
{
|
||||
if (allowCrossFlow()) {
|
||||
if (allow_cf_) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -162,8 +162,6 @@ enum WellVariablePositions {
|
||||
const int cell_idx,
|
||||
std::vector<EvalWell>& mob) const;
|
||||
|
||||
bool allow_cross_flow(const int w, const Simulator& ebosSimulator) const;
|
||||
|
||||
void localInvert(Mat& istlA) const;
|
||||
|
||||
void print(Mat& istlA) const;
|
||||
|
@ -328,7 +328,7 @@ namespace Opm {
|
||||
if (PolymerModule::hasPlyshlog()) {
|
||||
// compute the well water velocity with out shear effects.
|
||||
const int numComp = numComponents();
|
||||
bool allow_cf = allow_cross_flow(w, ebosSimulator);
|
||||
const bool allow_cf = well_container_[w]->crossFlowAllowed(ebosSimulator);
|
||||
const EvalWell& bhp = getBhp(w);
|
||||
std::vector<EvalWell> cq_s(numComp,0.0);
|
||||
computeWellFlux(w, wells().WI[perf], intQuants, mob, bhp, wellPerforationPressureDiffs()[perf], allow_cf, cq_s);
|
||||
@ -364,42 +364,6 @@ namespace Opm {
|
||||
|
||||
|
||||
|
||||
template<typename TypeTag>
|
||||
bool
|
||||
StandardWellsDense<TypeTag>::
|
||||
allow_cross_flow(const int w, const Simulator& ebosSimulator) const
|
||||
{
|
||||
if (wells().allow_cf[w]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// check for special case where all perforations have cross flow
|
||||
// then the wells must allow for cross flow
|
||||
for (int perf = wells().well_connpos[w] ; perf < wells().well_connpos[w+1]; ++perf) {
|
||||
const int cell_idx = wells().well_cells[perf];
|
||||
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0));
|
||||
const auto& fs = intQuants.fluidState();
|
||||
EvalWell pressure = extendEval(fs.pressure(FluidSystem::oilPhaseIdx));
|
||||
EvalWell bhp = getBhp(w);
|
||||
|
||||
// Pressure drawdown (also used to determine direction of flow)
|
||||
EvalWell well_pressure = bhp + wellPerforationPressureDiffs()[perf];
|
||||
EvalWell drawdown = pressure - well_pressure;
|
||||
|
||||
if (drawdown.value() < 0 && wells().type[w] == INJECTOR) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (drawdown.value() > 0 && wells().type[w] == PRODUCER) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
template<typename TypeTag>
|
||||
void
|
||||
@ -2254,7 +2218,7 @@ namespace Opm {
|
||||
const int numComp = numComponents();
|
||||
well_flux.resize(np, 0.0);
|
||||
|
||||
const bool allow_cf = allow_cross_flow(well_index, ebosSimulator);
|
||||
const bool allow_cf = well_container_[well_index]->crossFlowAllowed(ebosSimulator);
|
||||
for (int perf = wells().well_connpos[well_index]; perf < wells().well_connpos[well_index + 1]; ++perf) {
|
||||
const int cell_index = wells().well_cells[perf];
|
||||
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_index, /*timeIdx=*/ 0));
|
||||
|
@ -135,8 +135,12 @@ namespace Opm
|
||||
|
||||
int numComponents() const;
|
||||
|
||||
// simply returning allow_cf_
|
||||
// TODO: to check whether needed, it causes name problem with the crossFlowAllowed
|
||||
bool allowCrossFlow() const;
|
||||
|
||||
virtual bool crossFlowAllowed(const Simulator& ebosSimulator) const = 0;
|
||||
|
||||
// TODO: for this kind of function, maybe can make a function with parameter perf
|
||||
const std::vector<int>& saturationTableNumber() const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user