mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
putting all the pressure assmeble function to one function
assemblePressureEq for MSW
This commit is contained in:
@@ -422,7 +422,10 @@ namespace Opm
|
||||
const Well::ProductionControls& prod_controls,
|
||||
Opm::DeferredLogger& deferred_logger);
|
||||
|
||||
void assemblePressureEq(const int seg, WellState& well_state) const;
|
||||
void assemblePressureEq(const int seg, const UnitSystem& unit_system,
|
||||
WellState& well_state, DeferredLogger& deferred_logger) const;
|
||||
|
||||
void assembleDefaultPressureEq(const int seg, WellState& well_state) const;
|
||||
|
||||
// hytrostatic pressure loss
|
||||
EvalWell getHydroPressureLoss(const int seg) const;
|
||||
@@ -511,8 +514,8 @@ namespace Opm
|
||||
EvalWell pressureDropValve(const int seg) const;
|
||||
|
||||
// assemble pressure equation for ICD segments
|
||||
void assembleICDPressureEq(const int seg, WellState& well_state,
|
||||
const UnitSystem& unit_system, DeferredLogger& deferred_logger) const;
|
||||
void assembleICDPressureEq(const int seg, const UnitSystem& unit_system,
|
||||
WellState& well_state, DeferredLogger& deferred_logger) const;
|
||||
|
||||
// check whether the well is operable under BHP limit with current reservoir condition
|
||||
virtual void checkOperabilityUnderBHPLimitProducer(const WellState& well_state, const Simulator& ebos_simulator, Opm::DeferredLogger& deferred_logger) override;
|
||||
|
||||
@@ -2213,7 +2213,7 @@ namespace Opm
|
||||
template <typename TypeTag>
|
||||
void
|
||||
MultisegmentWell<TypeTag>::
|
||||
assemblePressureEq(const int seg, WellState& well_state) const
|
||||
assembleDefaultPressureEq(const int seg, WellState& well_state) const
|
||||
{
|
||||
assert(seg != 0); // not top segment
|
||||
|
||||
@@ -2996,18 +2996,8 @@ namespace Opm
|
||||
const Opm::Schedule& schedule = ebosSimulator.vanguard().schedule();
|
||||
assembleControlEq(well_state, schedule, summaryState, inj_controls, prod_controls, deferred_logger);
|
||||
} else {
|
||||
// TODO: maybe the following should go to the function assemblePressureEq()
|
||||
switch(segmentSet()[seg].segmentType()) {
|
||||
case Segment::SegmentType::SICD :
|
||||
case Segment::SegmentType::AICD :
|
||||
case Segment::SegmentType::VALVE : {
|
||||
const UnitSystem& unit_system = ebosSimulator.vanguard().eclState().getDeckUnitSystem();
|
||||
assembleICDPressureEq(seg, well_state, unit_system, deferred_logger);
|
||||
break;
|
||||
}
|
||||
default :
|
||||
assemblePressureEq(seg, well_state);
|
||||
}
|
||||
assemblePressureEq(seg, unit_system, well_state, deferred_logger);
|
||||
}
|
||||
|
||||
well_state.segPressDrop()[seg] = well_state.segPressDropHydroStatic()[seg] +
|
||||
@@ -3018,6 +3008,27 @@ namespace Opm
|
||||
|
||||
|
||||
|
||||
|
||||
template<typename TypeTag>
|
||||
void
|
||||
MultisegmentWell<TypeTag>::
|
||||
assemblePressureEq(const int seg, const UnitSystem& unit_system,
|
||||
WellState& well_state, DeferredLogger& deferred_logger) const
|
||||
{
|
||||
switch(segmentSet()[seg].segmentType()) {
|
||||
case Segment::SegmentType::SICD :
|
||||
case Segment::SegmentType::AICD :
|
||||
case Segment::SegmentType::VALVE : {
|
||||
assembleICDPressureEq(seg, unit_system, well_state,deferred_logger);
|
||||
break;
|
||||
}
|
||||
default :
|
||||
assembleDefaultPressureEq(seg, well_state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename TypeTag>
|
||||
bool
|
||||
MultisegmentWell<TypeTag>::
|
||||
@@ -3511,8 +3522,8 @@ namespace Opm
|
||||
template<typename TypeTag>
|
||||
void
|
||||
MultisegmentWell<TypeTag>::
|
||||
assembleICDPressureEq(const int seg, WellState& well_state,
|
||||
const UnitSystem& unit_system, DeferredLogger& deferred_logger) const
|
||||
assembleICDPressureEq(const int seg, const UnitSystem& unit_system,
|
||||
WellState& well_state, DeferredLogger& deferred_logger) const
|
||||
{
|
||||
// TODO: upwinding needs to be taken care of
|
||||
// top segment can not be a spiral ICD device
|
||||
@@ -3531,8 +3542,10 @@ namespace Opm
|
||||
break;
|
||||
case Segment::SegmentType::AICD :
|
||||
icd_pressure_drop = pressureDropAutoICD(seg, unit_system);
|
||||
break;
|
||||
case Segment::SegmentType::VALVE :
|
||||
icd_pressure_drop = pressureDropValve(seg);
|
||||
break;
|
||||
default: {
|
||||
OPM_DEFLOG_THROW(std::runtime_error, "Segment " + std::to_string(segmentSet()[seg].segmentNumber())
|
||||
+ " for well " + name() + " is not of ICD type", deferred_logger);
|
||||
|
||||
Reference in New Issue
Block a user