putting all the pressure assmeble function to one function

assemblePressureEq for MSW
This commit is contained in:
Kai Bao
2021-01-08 15:27:43 +01:00
parent 2dc63b7a57
commit 00ca6dc492
2 changed files with 34 additions and 18 deletions

View File

@@ -422,7 +422,10 @@ namespace Opm
const Well::ProductionControls& prod_controls, const Well::ProductionControls& prod_controls,
Opm::DeferredLogger& deferred_logger); 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 // hytrostatic pressure loss
EvalWell getHydroPressureLoss(const int seg) const; EvalWell getHydroPressureLoss(const int seg) const;
@@ -511,8 +514,8 @@ namespace Opm
EvalWell pressureDropValve(const int seg) const; EvalWell pressureDropValve(const int seg) const;
// assemble pressure equation for ICD segments // assemble pressure equation for ICD segments
void assembleICDPressureEq(const int seg, WellState& well_state, void assembleICDPressureEq(const int seg, const UnitSystem& unit_system,
const UnitSystem& unit_system, DeferredLogger& deferred_logger) const; WellState& well_state, DeferredLogger& deferred_logger) const;
// check whether the well is operable under BHP limit with current reservoir condition // 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; virtual void checkOperabilityUnderBHPLimitProducer(const WellState& well_state, const Simulator& ebos_simulator, Opm::DeferredLogger& deferred_logger) override;

View File

@@ -2213,7 +2213,7 @@ namespace Opm
template <typename TypeTag> template <typename TypeTag>
void void
MultisegmentWell<TypeTag>:: MultisegmentWell<TypeTag>::
assemblePressureEq(const int seg, WellState& well_state) const assembleDefaultPressureEq(const int seg, WellState& well_state) const
{ {
assert(seg != 0); // not top segment assert(seg != 0); // not top segment
@@ -2996,18 +2996,8 @@ namespace Opm
const Opm::Schedule& schedule = ebosSimulator.vanguard().schedule(); const Opm::Schedule& schedule = ebosSimulator.vanguard().schedule();
assembleControlEq(well_state, schedule, summaryState, inj_controls, prod_controls, deferred_logger); assembleControlEq(well_state, schedule, summaryState, inj_controls, prod_controls, deferred_logger);
} else { } else {
// TODO: maybe the following should go to the function assemblePressureEq() const UnitSystem& unit_system = ebosSimulator.vanguard().eclState().getDeckUnitSystem();
switch(segmentSet()[seg].segmentType()) { assemblePressureEq(seg, unit_system, well_state, deferred_logger);
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);
}
} }
well_state.segPressDrop()[seg] = well_state.segPressDropHydroStatic()[seg] + 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> template<typename TypeTag>
bool bool
MultisegmentWell<TypeTag>:: MultisegmentWell<TypeTag>::
@@ -3511,8 +3522,8 @@ namespace Opm
template<typename TypeTag> template<typename TypeTag>
void void
MultisegmentWell<TypeTag>:: MultisegmentWell<TypeTag>::
assembleICDPressureEq(const int seg, WellState& well_state, assembleICDPressureEq(const int seg, const UnitSystem& unit_system,
const UnitSystem& unit_system, DeferredLogger& deferred_logger) const WellState& well_state, DeferredLogger& deferred_logger) const
{ {
// TODO: upwinding needs to be taken care of // TODO: upwinding needs to be taken care of
// top segment can not be a spiral ICD device // top segment can not be a spiral ICD device
@@ -3531,8 +3542,10 @@ namespace Opm
break; break;
case Segment::SegmentType::AICD : case Segment::SegmentType::AICD :
icd_pressure_drop = pressureDropAutoICD(seg, unit_system); icd_pressure_drop = pressureDropAutoICD(seg, unit_system);
break;
case Segment::SegmentType::VALVE : case Segment::SegmentType::VALVE :
icd_pressure_drop = pressureDropValve(seg); icd_pressure_drop = pressureDropValve(seg);
break;
default: { default: {
OPM_DEFLOG_THROW(std::runtime_error, "Segment " + std::to_string(segmentSet()[seg].segmentNumber()) OPM_DEFLOG_THROW(std::runtime_error, "Segment " + std::to_string(segmentSet()[seg].segmentNumber())
+ " for well " + name() + " is not of ICD type", deferred_logger); + " for well " + name() + " is not of ICD type", deferred_logger);