WellState: template Scalar type

This commit is contained in:
Arne Morten Kvarving
2024-02-17 18:13:46 +01:00
parent 58f334b264
commit be57843296
75 changed files with 730 additions and 664 deletions

View File

@@ -156,7 +156,7 @@ namespace Opm
void
MultisegmentWell<TypeTag>::
updatePrimaryVariables(const SummaryState& summary_state,
const WellState& well_state,
const WellState<Scalar>& well_state,
DeferredLogger& /* deferred_logger */)
{
const bool stop_or_zero_rate_target = this->stopppedOrZeroRateTarget(summary_state, well_state);
@@ -173,7 +173,7 @@ namespace Opm
MultisegmentWell<TypeTag>::
updateWellStateWithTarget(const Simulator& simulator,
const GroupState& group_state,
WellState& well_state,
WellState<Scalar>& well_state,
DeferredLogger& deferred_logger) const
{
Base::updateWellStateWithTarget(simulator, group_state, well_state, deferred_logger);
@@ -193,7 +193,7 @@ namespace Opm
ConvergenceReport
MultisegmentWell<TypeTag>::
getWellConvergence(const SummaryState& /* summary_state */,
const WellState& well_state,
const WellState<Scalar>& well_state,
const std::vector<double>& B_avg,
DeferredLogger& deferred_logger,
const bool relax_tolerance) const
@@ -255,7 +255,7 @@ namespace Opm
MultisegmentWell<TypeTag>::
recoverWellSolutionAndUpdateWellState(const SummaryState& summary_state,
const BVector& x,
WellState& well_state,
WellState<Scalar>& well_state,
DeferredLogger& deferred_logger)
{
if (!this->isOperableAndSolvable() && !this->wellIsStopped()) {
@@ -275,7 +275,7 @@ namespace Opm
void
MultisegmentWell<TypeTag>::
computeWellPotentials(const Simulator& simulator,
const WellState& well_state,
const WellState<Scalar>& well_state,
std::vector<double>& well_potentials,
DeferredLogger& deferred_logger)
{
@@ -346,7 +346,7 @@ namespace Opm
well_flux.resize(np, 0.0);
const bool allow_cf = this->getAllowCrossFlow();
const int nseg = this->numberOfSegments();
const WellState& well_state = simulator.problem().wellModel().wellState();
const WellState<Scalar>& well_state = simulator.problem().wellModel().wellState();
const auto& ws = well_state.well(this->indexOfWell());
auto segments_copy = ws.segments;
segments_copy.scale_pressure(bhp);
@@ -391,7 +391,7 @@ namespace Opm
well_copy.debug_cost_counter_ = 0;
// store a copy of the well state, we don't want to update the real well state
WellState well_state_copy = simulator.problem().wellModel().wellState();
WellState<Scalar> well_state_copy = simulator.problem().wellModel().wellState();
const auto& group_state = simulator.problem().wellModel().groupState();
auto& ws = well_state_copy.well(this->index_of_well_);
@@ -452,10 +452,9 @@ namespace Opm
template<typename TypeTag>
std::vector<double>
MultisegmentWell<TypeTag>::
computeWellPotentialWithTHP(
const WellState& well_state,
const Simulator& simulator,
DeferredLogger& deferred_logger) const
computeWellPotentialWithTHP(const WellState<Scalar>& well_state,
const Simulator& simulator,
DeferredLogger& deferred_logger) const
{
std::vector<double> potentials(this->number_of_phases_, 0.0);
const auto& summary_state = simulator.vanguard().summaryState();
@@ -513,7 +512,7 @@ namespace Opm
well_copy.debug_cost_counter_ = 0;
// store a copy of the well state, we don't want to update the real well state
WellState well_state_copy = simulator.problem().wellModel().wellState();
WellState<Scalar> well_state_copy = simulator.problem().wellModel().wellState();
const auto& group_state = simulator.problem().wellModel().groupState();
auto& ws = well_state_copy.well(this->index_of_well_);
@@ -572,7 +571,7 @@ namespace Opm
void
MultisegmentWell<TypeTag>::
solveEqAndUpdateWellState(const SummaryState& summary_state,
WellState& well_state,
WellState<Scalar>& well_state,
DeferredLogger& deferred_logger)
{
if (!this->isOperableAndSolvable() && !this->wellIsStopped()) return;
@@ -676,7 +675,7 @@ namespace Opm
MultisegmentWell<TypeTag>::
updateWellState(const SummaryState& summary_state,
const BVectorWell& dwells,
WellState& well_state,
WellState<Scalar>& well_state,
DeferredLogger& deferred_logger,
const double relaxation_factor)
{
@@ -710,7 +709,7 @@ namespace Opm
void
MultisegmentWell<TypeTag>::
calculateExplicitQuantities(const Simulator& simulator,
const WellState& well_state,
const WellState<Scalar>& well_state,
DeferredLogger& deferred_logger)
{
const auto& summary_state = simulator.vanguard().summaryState();
@@ -729,7 +728,7 @@ namespace Opm
MultisegmentWell<TypeTag>::
updateProductivityIndex(const Simulator& simulator,
const WellProdIndexCalculator& wellPICalc,
WellState& well_state,
WellState<Scalar>& well_state,
DeferredLogger& deferred_logger) const
{
auto fluidState = [&simulator, this](const int perf)
@@ -834,7 +833,7 @@ namespace Opm
const BVector& weights,
const int pressureVarIndex,
const bool use_well_weights,
const WellState& well_state) const
const WellState<Scalar>& well_state) const
{
// Add the pressure contribution to the cpr system for the well
this->linSys_.extractCPRPressureMatrix(jacobian,
@@ -1150,7 +1149,9 @@ namespace Opm
template<typename TypeTag>
void
MultisegmentWell<TypeTag>::
checkOperabilityUnderBHPLimit(const WellState& /*well_state*/, const Simulator& simulator, DeferredLogger& deferred_logger)
checkOperabilityUnderBHPLimit(const WellState<Scalar>& /*well_state*/,
const Simulator& simulator,
DeferredLogger& deferred_logger)
{
const auto& summaryState = simulator.vanguard().summaryState();
const double bhp_limit = WellBhpThpCalculator(*this).mostStrictBhpFromBhpLimits(summaryState);
@@ -1308,7 +1309,9 @@ namespace Opm
template<typename TypeTag>
void
MultisegmentWell<TypeTag>::
updateIPRImplicit(const Simulator& simulator, WellState& well_state, DeferredLogger& deferred_logger)
updateIPRImplicit(const Simulator& simulator,
WellState<Scalar>& well_state,
DeferredLogger& deferred_logger)
{
// Compute IPR based on *converged* well-equation:
// For a component rate r the derivative dr/dbhp is obtained by
@@ -1375,10 +1378,9 @@ namespace Opm
template<typename TypeTag>
void
MultisegmentWell<TypeTag>::
checkOperabilityUnderTHPLimit(
const Simulator& simulator,
const WellState& well_state,
DeferredLogger& deferred_logger)
checkOperabilityUnderTHPLimit(const Simulator& simulator,
const WellState<Scalar>& well_state,
DeferredLogger& deferred_logger)
{
const auto& summaryState = simulator.vanguard().summaryState();
const auto obtain_bhp = this->isProducer()
@@ -1432,7 +1434,7 @@ namespace Opm
const double dt,
const Well::InjectionControls& inj_controls,
const Well::ProductionControls& prod_controls,
WellState& well_state,
WellState<Scalar>& well_state,
const GroupState& group_state,
DeferredLogger& deferred_logger)
{
@@ -1584,7 +1586,7 @@ namespace Opm
const double dt,
const Well::InjectionControls& inj_controls,
const Well::ProductionControls& prod_controls,
WellState& well_state,
WellState<Scalar>& well_state,
const GroupState& group_state,
DeferredLogger& deferred_logger,
const bool fixed_control /*false*/,
@@ -1775,7 +1777,7 @@ namespace Opm
const double dt,
const Well::InjectionControls& inj_controls,
const Well::ProductionControls& prod_controls,
WellState& well_state,
WellState<Scalar>& well_state,
const GroupState& group_state,
DeferredLogger& deferred_logger)
{
@@ -1978,7 +1980,7 @@ namespace Opm
template<typename TypeTag>
void
MultisegmentWell<TypeTag>::
updateWaterThroughput(const double /*dt*/, WellState& /*well_state*/) const
updateWaterThroughput(const double /*dt*/, WellState<Scalar>& /*well_state*/) const
{
}
@@ -2016,7 +2018,7 @@ namespace Opm
template<typename TypeTag>
std::optional<double>
MultisegmentWell<TypeTag>::
computeBhpAtThpLimitProd(const WellState& well_state,
computeBhpAtThpLimitProd(const WellState<Scalar>& well_state,
const Simulator& simulator,
const SummaryState& summary_state,
DeferredLogger& deferred_logger) const