mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Allow UDA for WSEGVALV item 4
This commit is contained in:
@@ -264,6 +264,7 @@ MultisegmentWellEval<FluidSystem,Indices,Scalar>::
|
||||
assembleICDPressureEq(const int seg,
|
||||
const UnitSystem& unit_system,
|
||||
WellState& well_state,
|
||||
const SummaryState& summary_state,
|
||||
const bool use_average_density,
|
||||
DeferredLogger& deferred_logger)
|
||||
{
|
||||
@@ -306,9 +307,9 @@ assembleICDPressureEq(const int seg,
|
||||
}
|
||||
break;
|
||||
case Segment::SegmentType::VALVE :
|
||||
icd_pressure_drop = segments_.pressureDropValve(seg);
|
||||
icd_pressure_drop = segments_.pressureDropValve(seg, summary_state);
|
||||
if (reverseFlow){
|
||||
extra_derivatives = -segments_.pressureDropValve(seg, /*extra_reverse_flow_derivatives*/ true);
|
||||
extra_derivatives = -segments_.pressureDropValve(seg, summary_state, /*extra_reverse_flow_derivatives*/ true);
|
||||
}
|
||||
break;
|
||||
default: {
|
||||
@@ -380,6 +381,7 @@ MultisegmentWellEval<FluidSystem,Indices,Scalar>::
|
||||
assemblePressureEq(const int seg,
|
||||
const UnitSystem& unit_system,
|
||||
WellState& well_state,
|
||||
const SummaryState& summary_state,
|
||||
const bool use_average_density,
|
||||
DeferredLogger& deferred_logger)
|
||||
{
|
||||
@@ -387,7 +389,7 @@ assemblePressureEq(const int seg,
|
||||
case Segment::SegmentType::SICD :
|
||||
case Segment::SegmentType::AICD :
|
||||
case Segment::SegmentType::VALVE : {
|
||||
assembleICDPressureEq(seg, unit_system, well_state, use_average_density, deferred_logger);
|
||||
assembleICDPressureEq(seg, unit_system, well_state, summary_state, use_average_density, deferred_logger);
|
||||
break;
|
||||
}
|
||||
default :
|
||||
|
||||
@@ -41,6 +41,8 @@ class ConvergenceReport;
|
||||
class GroupState;
|
||||
class Schedule;
|
||||
class WellContributions;
|
||||
class SummaryState;
|
||||
|
||||
template<class FluidSystem, class Indices, class Scalar> class WellInterfaceIndices;
|
||||
class WellState;
|
||||
|
||||
@@ -83,6 +85,7 @@ protected:
|
||||
void assembleICDPressureEq(const int seg,
|
||||
const UnitSystem& unit_system,
|
||||
WellState& well_state,
|
||||
const SummaryState& summary_state,
|
||||
const bool use_average_density,
|
||||
DeferredLogger& deferred_logger);
|
||||
|
||||
@@ -94,6 +97,7 @@ protected:
|
||||
void assemblePressureEq(const int seg,
|
||||
const UnitSystem& unit_system,
|
||||
WellState& well_state,
|
||||
const SummaryState& summary_state,
|
||||
const bool use_average_density,
|
||||
DeferredLogger& deferred_logger);
|
||||
|
||||
|
||||
@@ -769,10 +769,11 @@ template<class FluidSystem, class Indices, class Scalar>
|
||||
typename MultisegmentWellSegments<FluidSystem,Indices,Scalar>::EvalWell
|
||||
MultisegmentWellSegments<FluidSystem,Indices,Scalar>::
|
||||
pressureDropValve(const int seg,
|
||||
const SummaryState& summary_state,
|
||||
const bool extra_reverse_flow_derivatives /*false*/) const
|
||||
{
|
||||
const auto& segment_set = well_.wellEcl().getSegments();
|
||||
const Valve& valve = segment_set[seg].valve();
|
||||
Opm::WellSegments& segment_set = well_.wellEcl().getSegments();
|
||||
Valve& valve = segment_set[seg].valve();
|
||||
|
||||
EvalWell mass_rate = mass_rates_[seg];
|
||||
const int seg_upwind = upwinding_segments_[seg];
|
||||
@@ -814,7 +815,9 @@ pressureDropValve(const int seg,
|
||||
const EvalWell friction_pressure_loss =
|
||||
mswellhelpers::frictionPressureLoss(additional_length, diameter, area, roughness, density, mass_rate, visc);
|
||||
|
||||
const double area_con = valve.conCrossArea();
|
||||
const double udq_default = 0.0; // TODO: Get this from UDQPARAMS
|
||||
ValveUDAEval uda_eval {summary_state, this->well_.name(), seg, udq_default};
|
||||
const double area_con = valve.conCrossArea(uda_eval);
|
||||
const double cv = valve.conFlowCoefficient();
|
||||
|
||||
const EvalWell constriction_pressure_loss =
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace Opm {
|
||||
class SegmentState;
|
||||
class UnitSystem;
|
||||
class WellInterfaceGeneric;
|
||||
class SummaryState;
|
||||
|
||||
} // namespace Opm
|
||||
|
||||
@@ -85,8 +86,8 @@ public:
|
||||
|
||||
// pressure drop for sub-critical valve (WSEGVALV)
|
||||
EvalWell pressureDropValve(const int seg,
|
||||
const SummaryState& st,
|
||||
const bool extra_reverse_flow_derivatives = false) const;
|
||||
|
||||
// pressure loss due to acceleration
|
||||
EvalWell accelerationPressureLoss(const int seg) const;
|
||||
|
||||
@@ -162,7 +163,7 @@ private:
|
||||
std::vector<std::vector<EvalWell>> phase_fractions_;
|
||||
std::vector<std::vector<EvalWell>> phase_viscosities_;
|
||||
|
||||
const WellInterfaceGeneric& well_;
|
||||
WellInterfaceGeneric& well_;
|
||||
|
||||
void copyPhaseDensities(const unsigned phaseIdx,
|
||||
const std::size_t stride,
|
||||
|
||||
@@ -1907,7 +1907,8 @@ namespace Opm
|
||||
deferred_logger);
|
||||
} else {
|
||||
const UnitSystem& unit_system = ebosSimulator.vanguard().eclState().getDeckUnitSystem();
|
||||
this->assemblePressureEq(seg, unit_system, well_state, this->param_.use_average_density_ms_wells_, deferred_logger);
|
||||
const auto& summary_state = ebosSimulator.vanguard().summaryState();
|
||||
this->assemblePressureEq(seg, unit_system, well_state, summary_state, this->param_.use_average_density_ms_wells_, deferred_logger);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -174,6 +174,11 @@ const Well& WellInterfaceGeneric::wellEcl() const
|
||||
return well_ecl_;
|
||||
}
|
||||
|
||||
Well& WellInterfaceGeneric::wellEcl()
|
||||
{
|
||||
return well_ecl_;
|
||||
}
|
||||
|
||||
const PhaseUsage& WellInterfaceGeneric::phaseUsage() const
|
||||
{
|
||||
assert(phase_usage_ != nullptr);
|
||||
|
||||
@@ -80,6 +80,7 @@ public:
|
||||
void adaptRatesForVFP(std::vector<double>& rates) const;
|
||||
|
||||
const Well& wellEcl() const;
|
||||
Well& wellEcl();
|
||||
const PhaseUsage& phaseUsage() const;
|
||||
|
||||
/// Returns true if the well is currently in prediction mode (i.e. not history mode).
|
||||
|
||||
Reference in New Issue
Block a user