switching to scale the mobility instead of the well index

mostly to make the calculation of productivity easier.
This commit is contained in:
Kai Bao 2023-07-06 15:56:16 +02:00
parent cb74d26e85
commit 1981a3bf4d
3 changed files with 15 additions and 7 deletions

View File

@ -768,8 +768,6 @@ namespace Opm
// Pressure drawdown (also used to determine direction of flow) // Pressure drawdown (also used to determine direction of flow)
const Value drawdown = cell_press_at_perf - perf_press; const Value drawdown = cell_press_at_perf - perf_press;
const double effectiveTw = this->isInjector() ? this->inj_fc_multiplier_[perf] * Tw : Tw;
// producing perforations // producing perforations
if (drawdown > 0.0) { if (drawdown > 0.0) {
// Do nothing if crossflow is not allowed // Do nothing if crossflow is not allowed
@ -779,7 +777,7 @@ namespace Opm
// compute component volumetric rates at standard conditions // compute component volumetric rates at standard conditions
for (int comp_idx = 0; comp_idx < this->numComponents(); ++comp_idx) { for (int comp_idx = 0; comp_idx < this->numComponents(); ++comp_idx) {
const Value cq_p = - effectiveTw * (mob_perfcells[comp_idx] * drawdown); const Value cq_p = - Tw * (mob_perfcells[comp_idx] * drawdown);
cq_s[comp_idx] = b_perfcells[comp_idx] * cq_p; cq_s[comp_idx] = b_perfcells[comp_idx] * cq_p;
} }
@ -804,7 +802,7 @@ namespace Opm
} }
// injection perforations total volume rates // injection perforations total volume rates
const Value cqt_i = - effectiveTw * (total_mob * drawdown); const Value cqt_i = - Tw * (total_mob * drawdown);
// compute volume ratio between connection and at standard conditions // compute volume ratio between connection and at standard conditions
Value volume_ratio = 0.0; Value volume_ratio = 0.0;

View File

@ -239,7 +239,6 @@ namespace Opm
if (this->isInjector()) { if (this->isInjector()) {
drawdown += skin_pressure; drawdown += skin_pressure;
} }
const double effectiveTw = this->isInjector() ? this->inj_fc_multiplier_[perf] * Tw : Tw;
// producing perforations // producing perforations
if (drawdown > 0) { if (drawdown > 0) {
@ -250,7 +249,7 @@ namespace Opm
// compute component volumetric rates at standard conditions // compute component volumetric rates at standard conditions
for (int componentIdx = 0; componentIdx < this->numComponents(); ++componentIdx) { for (int componentIdx = 0; componentIdx < this->numComponents(); ++componentIdx) {
const Value cq_p = - effectiveTw * (mob[componentIdx] * drawdown); const Value cq_p = - Tw * (mob[componentIdx] * drawdown);
cq_s[componentIdx] = b_perfcells_dense[componentIdx] * cq_p; cq_s[componentIdx] = b_perfcells_dense[componentIdx] * cq_p;
} }
@ -272,7 +271,7 @@ namespace Opm
} }
// injection perforations total volume rates // injection perforations total volume rates
const Value cqt_i = - effectiveTw * (total_mob_dense * drawdown); const Value cqt_i = - Tw * (total_mob_dense * drawdown);
// compute volume ratio between connection at standard conditions // compute volume ratio between connection at standard conditions
Value volumeRatio = bhp * 0.0; // initialize it with the correct type Value volumeRatio = bhp * 0.0; // initialize it with the correct type

View File

@ -1267,6 +1267,17 @@ namespace Opm
OPM_DEFLOG_THROW(std::runtime_error, "individual mobility for wells does not work in combination with solvent", deferred_logger); OPM_DEFLOG_THROW(std::runtime_error, "individual mobility for wells does not work in combination with solvent", deferred_logger);
} }
} }
if (this->isInjector()) {
const auto perf_ecl_index = this->perforationData()[perf].ecl_index;
const auto& connections = this->well_ecl_.getConnections();
const auto& connection = connections[perf_ecl_index];
if (connection.filterCakeActive()) {
for (auto& val : mob) {
val *= this->inj_fc_multiplier_[perf];
}
}
}
} }