StandardWell: use scalar mobilities in computeConnLevel(Inj|Prod)Ind

unifies code with MultisegmentWell
This commit is contained in:
Arne Morten Kvarving
2023-05-12 15:12:26 +02:00
parent b5517c8600
commit c234d4faa5
2 changed files with 8 additions and 9 deletions

View File

@@ -243,13 +243,13 @@ namespace Opm
void computeConnLevelProdInd(const FluidState& fs, void computeConnLevelProdInd(const FluidState& fs,
const std::function<double(const double)>& connPICalc, const std::function<double(const double)>& connPICalc,
const std::vector<EvalWell>& mobility, const std::vector<Scalar>& mobility,
double* connPI) const; double* connPI) const;
void computeConnLevelInjInd(const typename StandardWell<TypeTag>::FluidState& fs, void computeConnLevelInjInd(const typename StandardWell<TypeTag>::FluidState& fs,
const Phase preferred_phase, const Phase preferred_phase,
const std::function<double(const double)>& connIICalc, const std::function<double(const double)>& connIICalc,
const std::vector<EvalWell>& mobility, const std::vector<Scalar>& mobility,
double* connII, double* connII,
DeferredLogger& deferred_logger) const; DeferredLogger& deferred_logger) const;

View File

@@ -1341,7 +1341,7 @@ namespace Opm
return wellPICalc.connectionProdIndStandard(allPerfID, mobility); return wellPICalc.connectionProdIndStandard(allPerfID, mobility);
}; };
std::vector<EvalWell> mob(this->num_components_, {this->primary_variables_.numWellEq() + Indices::numEq, 0.0}); std::vector<Scalar> mob(this->num_components_, 0.0);
getMobility(ebosSimulator, static_cast<int>(subsetPerfID), mob, deferred_logger); getMobility(ebosSimulator, static_cast<int>(subsetPerfID), mob, deferred_logger);
const auto& fs = fluidState(subsetPerfID); const auto& fs = fluidState(subsetPerfID);
@@ -2404,7 +2404,7 @@ namespace Opm
StandardWell<TypeTag>:: StandardWell<TypeTag>::
computeConnLevelProdInd(const typename StandardWell<TypeTag>::FluidState& fs, computeConnLevelProdInd(const typename StandardWell<TypeTag>::FluidState& fs,
const std::function<double(const double)>& connPICalc, const std::function<double(const double)>& connPICalc,
const std::vector<EvalWell>& mobility, const std::vector<Scalar>& mobility,
double* connPI) const double* connPI) const
{ {
const auto& pu = this->phaseUsage(); const auto& pu = this->phaseUsage();
@@ -2413,7 +2413,7 @@ namespace Opm
// Note: E100's notion of PI value phase mobility includes // Note: E100's notion of PI value phase mobility includes
// the reciprocal FVF. // the reciprocal FVF.
const auto connMob = const auto connMob =
mobility[ this->flowPhaseToEbosCompIdx(p) ].value() mobility[ this->flowPhaseToEbosCompIdx(p) ]
* fs.invB(this->flowPhaseToEbosPhaseIdx(p)).value(); * fs.invB(this->flowPhaseToEbosPhaseIdx(p)).value();
connPI[p] = connPICalc(connMob); connPI[p] = connPICalc(connMob);
@@ -2443,7 +2443,7 @@ namespace Opm
computeConnLevelInjInd(const typename StandardWell<TypeTag>::FluidState& fs, computeConnLevelInjInd(const typename StandardWell<TypeTag>::FluidState& fs,
const Phase preferred_phase, const Phase preferred_phase,
const std::function<double(const double)>& connIICalc, const std::function<double(const double)>& connIICalc,
const std::vector<EvalWell>& mobility, const std::vector<Scalar>& mobility,
double* connII, double* connII,
DeferredLogger& deferred_logger) const DeferredLogger& deferred_logger) const
{ {
@@ -2468,9 +2468,8 @@ namespace Opm
deferred_logger); deferred_logger);
} }
const auto zero = EvalWell{this->primary_variables_.numWellEq() + Indices::numEq, 0.0}; const auto mt = std::accumulate(mobility.begin(), mobility.end(), 0.0);
const auto mt = std::accumulate(mobility.begin(), mobility.end(), zero); connII[phase_pos] = connIICalc(mt * fs.invB(this->flowPhaseToEbosPhaseIdx(phase_pos)).value());
connII[phase_pos] = connIICalc(mt.value() * fs.invB(this->flowPhaseToEbosPhaseIdx(phase_pos)).value());
} }