Properly update multipliers after cleaning, and ensure that the cleaning occurs before the multipliers are applied to the well.

This commit is contained in:
Vegard Kippe 2024-10-07 19:33:18 +02:00
parent 136bd93fd6
commit ca9cad3f07
2 changed files with 14 additions and 13 deletions

View File

@ -1841,6 +1841,17 @@ updateFiltrationModelsPostStep(const double dt,
}
}
template<class Scalar>
void BlackoilWellModelGeneric<Scalar>::
updateInjMult(DeferredLogger& deferred_logger)
{
for (const auto& well : this->well_container_generic_) {
if (well->isInjector() && well->wellEcl().getInjMultMode() != Well::InjMultMode::NONE) {
well->updateInjMult(this->prev_inj_multipliers_[well->name()], deferred_logger);
}
}
}
template<class Scalar>
void BlackoilWellModelGeneric<Scalar>::
updateFiltrationModelsPreStep(DeferredLogger& deferred_logger)
@ -1849,26 +1860,14 @@ updateFiltrationModelsPreStep(DeferredLogger& deferred_logger)
if (well->isInjector()) {
const auto it = filter_cake_.find(well->name());
if (it != filter_cake_.end()) {
well->updateFilterCakeMultipliers(it->second.multipliers());
it->second.updatePreStep(*well, deferred_logger);
well->updateFilterCakeMultipliers(it->second.multipliers());
}
}
}
}
template<class Scalar>
void BlackoilWellModelGeneric<Scalar>::
updateInjMult(DeferredLogger& deferred_logger)
{
for (const auto& well : this->well_container_generic_) {
if (well->isInjector() && well->wellEcl().getInjMultMode() != Well::InjMultMode::NONE) {
well->updateInjMult(this->prev_inj_multipliers_[well->name()], deferred_logger);
}
}
}
template class BlackoilWellModelGeneric<double>;
#if FLOW_INSTANTIATE_FLOAT

View File

@ -92,6 +92,8 @@ applyCleaning(const WellInterfaceGeneric<Scalar>& well,
filter_cake.sf_multiplier = 1.0;
skin_factor_[perf] *= factor;
const auto denom = connection.ctfProperties().peaceman_denom;
inj_fc_multiplier_[perf] = denom / (denom + skin_factor_[perf]);
const Scalar rw = connection.getFilterCakeRadius();
switch (filter_cake.geometry) {
case FilterCake::FilterCakeGeometry::LINEAR: {