mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Adding hydrostatic and acceleration pressure losses to icd segments
This commit is contained in:
parent
3315027bcc
commit
edd421ac93
@ -253,26 +253,7 @@ assembleDefaultPressureEq(const int seg,
|
|||||||
assemblePressureEq(seg, seg_upwind, outlet_segment_index,
|
assemblePressureEq(seg, seg_upwind, outlet_segment_index,
|
||||||
pressure_equation, outlet_pressure, linSys_);
|
pressure_equation, outlet_pressure, linSys_);
|
||||||
|
|
||||||
if (this->accelerationalPressureLossConsidered()) {
|
assembleAccelerationAndHydroPressureLosses(seg, well_state, use_average_density);
|
||||||
handleAccelerationPressureLoss(seg, well_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Since density derivatives are organized differently than what is required for assemblePressureEq,
|
|
||||||
// this part needs to be assembled separately. Optionally use average density variant.
|
|
||||||
const auto hydro_pressure_drop_seg = segments_.getHydroPressureLoss(seg, seg);
|
|
||||||
if (!use_average_density){
|
|
||||||
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(baseif_).
|
|
||||||
assembleHydroPressureLoss(seg, seg, hydro_pressure_drop_seg, linSys_);
|
|
||||||
segments.pressure_drop_hydrostatic[seg] = hydro_pressure_drop_seg.value();
|
|
||||||
} else {
|
|
||||||
const int seg_outlet = this->segmentNumberToIndex(this->segmentSet()[seg].outletSegment());
|
|
||||||
const auto hydro_pressure_drop_outlet = segments_.getHydroPressureLoss(seg, seg_outlet);
|
|
||||||
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(baseif_).
|
|
||||||
assembleHydroPressureLoss(seg, seg, 0.5*hydro_pressure_drop_seg, linSys_);
|
|
||||||
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(baseif_).
|
|
||||||
assembleHydroPressureLoss(seg, seg_outlet, 0.5*hydro_pressure_drop_outlet, linSys_);
|
|
||||||
segments.pressure_drop_hydrostatic[seg] = 0.5*hydro_pressure_drop_seg.value() + 0.5*hydro_pressure_drop_outlet.value();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename FluidSystem, typename Indices, typename Scalar>
|
template<typename FluidSystem, typename Indices, typename Scalar>
|
||||||
@ -281,6 +262,7 @@ MultisegmentWellEval<FluidSystem,Indices,Scalar>::
|
|||||||
assembleICDPressureEq(const int seg,
|
assembleICDPressureEq(const int seg,
|
||||||
const UnitSystem& unit_system,
|
const UnitSystem& unit_system,
|
||||||
WellState& well_state,
|
WellState& well_state,
|
||||||
|
const bool use_average_density,
|
||||||
DeferredLogger& deferred_logger)
|
DeferredLogger& deferred_logger)
|
||||||
{
|
{
|
||||||
// TODO: upwinding needs to be taken care of
|
// TODO: upwinding needs to be taken care of
|
||||||
@ -338,6 +320,39 @@ assembleICDPressureEq(const int seg,
|
|||||||
linSys_,
|
linSys_,
|
||||||
FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx),
|
FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx),
|
||||||
FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx));
|
FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx));
|
||||||
|
|
||||||
|
assembleAccelerationAndHydroPressureLosses(seg, well_state, use_average_density);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename FluidSystem, typename Indices, typename Scalar>
|
||||||
|
void
|
||||||
|
MultisegmentWellEval<FluidSystem,Indices,Scalar>::
|
||||||
|
assembleAccelerationAndHydroPressureLosses(const int seg,
|
||||||
|
WellState& well_state,
|
||||||
|
const bool use_average_density)
|
||||||
|
{
|
||||||
|
auto& ws = well_state.well(baseif_.indexOfWell());
|
||||||
|
auto& segments = ws.segments;
|
||||||
|
if (this->accelerationalPressureLossConsidered()) {
|
||||||
|
handleAccelerationPressureLoss(seg, well_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since density derivatives are organized differently than what is required for assemblePressureEq,
|
||||||
|
// this part needs to be assembled separately. Optionally use average density variant.
|
||||||
|
const auto hydro_pressure_drop_seg = segments_.getHydroPressureLoss(seg, seg);
|
||||||
|
if (!use_average_density){
|
||||||
|
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(baseif_).
|
||||||
|
assembleHydroPressureLoss(seg, seg, hydro_pressure_drop_seg, linSys_);
|
||||||
|
segments.pressure_drop_hydrostatic[seg] = hydro_pressure_drop_seg.value();
|
||||||
|
} else {
|
||||||
|
const int seg_outlet = this->segmentNumberToIndex(this->segmentSet()[seg].outletSegment());
|
||||||
|
const auto hydro_pressure_drop_outlet = segments_.getHydroPressureLoss(seg, seg_outlet);
|
||||||
|
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(baseif_).
|
||||||
|
assembleHydroPressureLoss(seg, seg, 0.5*hydro_pressure_drop_seg, linSys_);
|
||||||
|
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(baseif_).
|
||||||
|
assembleHydroPressureLoss(seg, seg_outlet, 0.5*hydro_pressure_drop_outlet, linSys_);
|
||||||
|
segments.pressure_drop_hydrostatic[seg] = 0.5*hydro_pressure_drop_seg.value() + 0.5*hydro_pressure_drop_outlet.value();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename FluidSystem, typename Indices, typename Scalar>
|
template<typename FluidSystem, typename Indices, typename Scalar>
|
||||||
@ -353,7 +368,7 @@ assemblePressureEq(const int seg,
|
|||||||
case Segment::SegmentType::SICD :
|
case Segment::SegmentType::SICD :
|
||||||
case Segment::SegmentType::AICD :
|
case Segment::SegmentType::AICD :
|
||||||
case Segment::SegmentType::VALVE : {
|
case Segment::SegmentType::VALVE : {
|
||||||
assembleICDPressureEq(seg, unit_system, well_state,deferred_logger);
|
assembleICDPressureEq(seg, unit_system, well_state, use_average_density, deferred_logger);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default :
|
default :
|
||||||
|
@ -83,8 +83,13 @@ protected:
|
|||||||
void assembleICDPressureEq(const int seg,
|
void assembleICDPressureEq(const int seg,
|
||||||
const UnitSystem& unit_system,
|
const UnitSystem& unit_system,
|
||||||
WellState& well_state,
|
WellState& well_state,
|
||||||
|
const bool use_average_density,
|
||||||
DeferredLogger& deferred_logger);
|
DeferredLogger& deferred_logger);
|
||||||
|
|
||||||
|
void assembleAccelerationAndHydroPressureLosses(const int seg,
|
||||||
|
WellState& well_state,
|
||||||
|
const bool use_average_density);
|
||||||
|
|
||||||
|
|
||||||
void assemblePressureEq(const int seg,
|
void assemblePressureEq(const int seg,
|
||||||
const UnitSystem& unit_system,
|
const UnitSystem& unit_system,
|
||||||
|
Loading…
Reference in New Issue
Block a user