Class TwoFluidSection
- All Implemented Interfaces:
Serializable, Cloneable
- Direct Known Subclasses:
ThreeFluidSection
Extends the base PipeSection with additional state variables and methods required for the
two-fluid conservation equations. Key additions include:
- Separate conservative variables for each phase
- Wetted perimeter and interfacial geometry
- Wall and interfacial shear stresses
- Source term storage
Conservative Variables
For each phase k (gas or liquid), the conservative variables are:
- U1 = α_k * ρ_k * A (mass per unit length)
- U2 = α_k * ρ_k * v_k * A (momentum per unit length)
- U3 = α_k * ρ_k * E_k * A (energy per unit length)
- Version:
- 1.0
- Author:
- Even Solbraa
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class PipeSection
PipeSection.FlowRegime -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleMixture energy per unit length: (α_g*ρ_g*E_g + α_L*ρ_L*E_L) * A (J/m).private doubleEnergy source (W/m).private doubleGas hydraulic diameter (m).private doubleGas mass per unit length: α_g * ρ_g * A (kg/m).private doubleGas mass source (kg/(m·s)).private doubleGas momentum per unit length: α_g * ρ_g * v_g * A (kg/s).private doubleGas momentum source (N/m).private doubleGas wall shear stress (Pa).private doubleGas wetted perimeter (m).private GeometryCalculatorprivate doubleInterfacial shear stress (Pa).private doubleInterfacial width/perimeter (m).private doubleLiquid hydraulic diameter (m).private doubleLiquid mass per unit length: α_L * ρ_L * A (kg/m).private doubleLiquid mass source (kg/(m·s)).private doubleLiquid momentum per unit length: α_L * ρ_L * v_L * A (kg/s).private doubleLiquid momentum source (N/m).private doubleLiquid wall shear stress (Pa).private doubleLiquid wetted perimeter (m).private doubleOil density (kg/m³).private doubleOil holdup within liquid phase (oil/(oil+water)).private doubleOil holdup (fraction of pipe area). α_o = α_L - α_wprivate doubleOil mass per unit length: α_o * ρ_o * A (kg/m).private doubleOil momentum per unit length: α_o * ρ_o * v_o * A (kg/s).private doubleOil velocity (m/s).private doubleOil viscosity (Pa·s).private static final longprivate doubleLiquid level for stratified flow (m).private doubleWater cut (water fraction of total liquid).private doubleWater density (kg/m³).private doubleWater holdup (fraction of pipe area). α_wprivate doubleWater mass per unit length: α_w * ρ_w * A (kg/m).private doubleWater momentum per unit length: α_w * ρ_w * v_w * A (kg/s).private doubleWater velocity (m/s).private doubleWater viscosity (Pa·s). -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor.TwoFluidSection(double position, double length, double diameter, double inclination) Constructor with geometry. -
Method Summary
Modifier and TypeMethodDescriptiondouble[]Calculate gravity force per unit length for each phase.doubleCalculate the oil-water interfacial shear stress.clone()voidExtract primitive variables from conservative variables.static TwoFluidSectionfromPipeSection(PipeSection base) Create from existing PipeSection.doubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubleOverride getLiquidHoldup to return the total liquid holdup (oil + water).doubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledouble[]Get state vector for numerical integration (7-equation model with water-oil slip).doubledoubledoubledoubledoubledoubledoubledoublevoidsetEnergyPerLength(double energyPerLength) voidsetEnergySource(double energySource) voidsetGasHydraulicDiameter(double gasHydraulicDiameter) voidsetGasMassPerLength(double gasMassPerLength) voidsetGasMassSource(double gasMassSource) voidsetGasMomentumPerLength(double gasMomentumPerLength) voidsetGasMomentumSource(double gasMomentumSource) voidsetGasWallShear(double gasWallShear) voidsetGasWettedPerimeter(double gasWettedPerimeter) voidsetInterfacialShear(double interfacialShear) voidsetInterfacialWidth(double interfacialWidth) voidsetLiquidHoldup(double liquidHoldup) Override setLiquidHoldup to also update oil and water holdups proportionally.voidsetLiquidHydraulicDiameter(double liquidHydraulicDiameter) voidsetLiquidMassPerLength(double liquidMassPerLength) voidsetLiquidMassSource(double liquidMassSource) voidsetLiquidMomentumPerLength(double liquidMomentumPerLength) voidsetLiquidMomentumSource(double liquidMomentumSource) voidsetLiquidWallShear(double liquidWallShear) voidsetLiquidWettedPerimeter(double liquidWettedPerimeter) voidsetOilDensity(double oilDensity) voidsetOilFractionInLiquid(double oilFractionInLiquid) voidsetOilHoldup(double oilHoldup) voidsetOilMassPerLength(double oilMassPerLength) voidsetOilMomentumPerLength(double oilMomentumPerLength) voidsetOilVelocity(double oilVelocity) voidsetOilViscosity(double oilViscosity) voidsetStateVector(double[] state) Set state from vector (7-equation model with water-oil slip).voidsetStratifiedLiquidLevel(double stratifiedLiquidLevel) voidsetWaterCut(double waterCut) voidsetWaterDensity(double waterDensity) voidsetWaterHoldup(double waterHoldup) voidsetWaterMassPerLength(double waterMassPerLength) voidsetWaterMomentumPerLength(double waterMomentumPerLength) voidsetWaterVelocity(double waterVelocity) voidsetWaterViscosity(double waterViscosity) voidCalculate conservative variables from primitive variables.voidUpdate stratified flow geometry based on current liquid holdup.voidCalculate effective liquid properties for three-phase flow.voidUpdate conservative variables for water and oil separately.voidUpdate water and oil holdups from conservative variables.Methods inherited from class PipeSection
getAccumulatedLiquidVolume, getArea, getConservativeVariables, getDiameter, getEffectiveLiquidHoldup, getEffectiveMixtureDensity, getElevation, getFlowRegime, getFrictionPressureGradient, getGasDensity, getGasEnthalpy, getGasHoldup, getGasSoundSpeed, getGasVelocity, getGasViscosity, getGravityPressureGradient, getInclination, getLength, getLiquidDensity, getLiquidEnthalpy, getLiquidLevel, getLiquidSoundSpeed, getLiquidVelocity, getLiquidViscosity, getMassTransferRate, getMixtureDensity, getMixtureHeatCapacity, getMixtureVelocity, getPosition, getPressure, getRoughness, getSlugHoldup, getSuperficialGasVelocity, getSuperficialLiquidVelocity, getSurfaceTension, getTemperature, getWallisSoundSpeed, isHighPoint, isInSlugBody, isInSlugBubble, isLowPoint, setAccumulatedLiquidVolume, setDiameter, setElevation, setFlowRegime, setFrictionPressureGradient, setFromConservativeVariables, setGasDensity, setGasEnthalpy, setGasHoldup, setGasSoundSpeed, setGasVelocity, setGasViscosity, setGravityPressureGradient, setHighPoint, setInclination, setInSlugBody, setInSlugBubble, setLength, setLiquidDensity, setLiquidEnthalpy, setLiquidSoundSpeed, setLiquidVelocity, setLiquidViscosity, setLowPoint, setMassTransferRate, setMixtureHeatCapacity, setPosition, setPressure, setRoughness, setSlugHoldup, setSurfaceTension, setTemperature, updateDerivedQuantities
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
gasWettedPerimeter
private double gasWettedPerimeterGas wetted perimeter (m). -
liquidWettedPerimeter
private double liquidWettedPerimeterLiquid wetted perimeter (m). -
interfacialWidth
private double interfacialWidthInterfacial width/perimeter (m). -
stratifiedLiquidLevel
private double stratifiedLiquidLevelLiquid level for stratified flow (m). -
gasHydraulicDiameter
private double gasHydraulicDiameterGas hydraulic diameter (m). -
liquidHydraulicDiameter
private double liquidHydraulicDiameterLiquid hydraulic diameter (m). -
gasWallShear
private double gasWallShearGas wall shear stress (Pa). -
liquidWallShear
private double liquidWallShearLiquid wall shear stress (Pa). -
interfacialShear
private double interfacialShearInterfacial shear stress (Pa). Positive = gas pushes liquid. -
gasMassSource
private double gasMassSourceGas mass source (kg/(m·s)). From liquid evaporation. -
liquidMassSource
private double liquidMassSourceLiquid mass source (kg/(m·s)). From gas condensation. -
gasMomentumSource
private double gasMomentumSourceGas momentum source (N/m). Wall + interfacial + gravity. -
liquidMomentumSource
private double liquidMomentumSourceLiquid momentum source (N/m). Wall + interfacial + gravity. -
energySource
private double energySourceEnergy source (W/m). Heat transfer + friction work. -
gasMassPerLength
private double gasMassPerLengthGas mass per unit length: α_g * ρ_g * A (kg/m). -
liquidMassPerLength
private double liquidMassPerLengthLiquid mass per unit length: α_L * ρ_L * A (kg/m). -
gasMomentumPerLength
private double gasMomentumPerLengthGas momentum per unit length: α_g * ρ_g * v_g * A (kg/s). -
liquidMomentumPerLength
private double liquidMomentumPerLengthLiquid momentum per unit length: α_L * ρ_L * v_L * A (kg/s). -
energyPerLength
private double energyPerLengthMixture energy per unit length: (α_g*ρ_g*E_g + α_L*ρ_L*E_L) * A (J/m). -
oilFractionInLiquid
private double oilFractionInLiquidOil holdup within liquid phase (oil/(oil+water)). -
waterCut
private double waterCutWater cut (water fraction of total liquid). -
waterHoldup
private double waterHoldupWater holdup (fraction of pipe area). α_w -
oilHoldup
private double oilHoldupOil holdup (fraction of pipe area). α_o = α_L - α_w -
waterMassPerLength
private double waterMassPerLengthWater mass per unit length: α_w * ρ_w * A (kg/m). -
oilMassPerLength
private double oilMassPerLengthOil mass per unit length: α_o * ρ_o * A (kg/m). -
waterMomentumPerLength
private double waterMomentumPerLengthWater momentum per unit length: α_w * ρ_w * v_w * A (kg/s). -
oilMomentumPerLength
private double oilMomentumPerLengthOil momentum per unit length: α_o * ρ_o * v_o * A (kg/s). -
waterVelocity
private double waterVelocityWater velocity (m/s). -
oilVelocity
private double oilVelocityOil velocity (m/s). -
oilDensity
private double oilDensityOil density (kg/m³). -
waterDensity
private double waterDensityWater density (kg/m³). -
oilViscosity
private double oilViscosityOil viscosity (Pa·s). -
waterViscosity
private double waterViscosityWater viscosity (Pa·s). -
geometryCalc
-
-
Constructor Details
-
TwoFluidSection
public TwoFluidSection()Default constructor. -
TwoFluidSection
public TwoFluidSection(double position, double length, double diameter, double inclination) Constructor with geometry.- Parameters:
position- Position from inlet (m)length- Segment length (m)diameter- Pipe diameter (m)inclination- Pipe inclination (radians)
-
-
Method Details
-
fromPipeSection
Create from existing PipeSection.- Parameters:
base- Base pipe section to copy from- Returns:
- New TwoFluidSection with copied state
-
updateStratifiedGeometry
public void updateStratifiedGeometry()Update stratified flow geometry based on current liquid holdup. -
updateConservativeVariables
public void updateConservativeVariables()Calculate conservative variables from primitive variables. -
extractPrimitiveVariables
public void extractPrimitiveVariables()Extract primitive variables from conservative variables.This is the inverse operation of updateConservativeVariables. Requires equation of state evaluation for complete solution. Includes stability guards to prevent NaN values.
-
getStateVector
public double[] getStateVector()Get state vector for numerical integration (7-equation model with water-oil slip).- Returns:
- Conservative state [gasMass, oilMass, waterMass, gasMom, oilMom, waterMom, energy]
-
setStateVector
public void setStateVector(double[] state) Set state from vector (7-equation model with water-oil slip).- Parameters:
state- Conservative state [gasMass, oilMass, waterMass, gasMom, oilMom, waterMom, energy]
-
updateWaterOilHoldups
public void updateWaterOilHoldups()Update water and oil holdups from conservative variables. Should be called after extractPrimitiveVariables if separate tracking is needed. Note: extractPrimitiveVariables now also sets oil/water holdups, so this is mainly for velocity extraction. -
updateWaterOilConservativeVariables
public void updateWaterOilConservativeVariables()Update conservative variables for water and oil separately. -
updateThreePhaseProperties
public void updateThreePhaseProperties()Calculate effective liquid properties for three-phase flow.Combines oil and water properties using volume-weighted averages. Uses local water cut which may vary along the pipeline.
-
calcGravityForces
public double[] calcGravityForces()Calculate gravity force per unit length for each phase.- Returns:
- [gasGravityForce, liquidGravityForce] in N/m
-
getGasWettedPerimeter
public double getGasWettedPerimeter() -
setGasWettedPerimeter
public void setGasWettedPerimeter(double gasWettedPerimeter) -
getLiquidWettedPerimeter
public double getLiquidWettedPerimeter() -
setLiquidWettedPerimeter
public void setLiquidWettedPerimeter(double liquidWettedPerimeter) -
getInterfacialWidth
public double getInterfacialWidth() -
setInterfacialWidth
public void setInterfacialWidth(double interfacialWidth) -
getStratifiedLiquidLevel
public double getStratifiedLiquidLevel() -
setStratifiedLiquidLevel
public void setStratifiedLiquidLevel(double stratifiedLiquidLevel) -
getGasHydraulicDiameter
public double getGasHydraulicDiameter() -
setGasHydraulicDiameter
public void setGasHydraulicDiameter(double gasHydraulicDiameter) -
getLiquidHydraulicDiameter
public double getLiquidHydraulicDiameter() -
setLiquidHydraulicDiameter
public void setLiquidHydraulicDiameter(double liquidHydraulicDiameter) -
getGasWallShear
public double getGasWallShear() -
setGasWallShear
public void setGasWallShear(double gasWallShear) -
getLiquidWallShear
public double getLiquidWallShear() -
setLiquidWallShear
public void setLiquidWallShear(double liquidWallShear) -
getInterfacialShear
public double getInterfacialShear() -
setInterfacialShear
public void setInterfacialShear(double interfacialShear) -
calcOilWaterInterfacialShear
public double calcOilWaterInterfacialShear()Calculate the oil-water interfacial shear stress.Models the shear between oil and water phases when they flow at different velocities. Uses a simplified model based on relative velocity and Stokes settling.
- Returns:
- Oil-water interfacial shear stress (Pa), positive when oil flows faster than water
-
getGasMassSource
public double getGasMassSource() -
setGasMassSource
public void setGasMassSource(double gasMassSource) -
getLiquidMassSource
public double getLiquidMassSource() -
setLiquidMassSource
public void setLiquidMassSource(double liquidMassSource) -
getGasMomentumSource
public double getGasMomentumSource() -
setGasMomentumSource
public void setGasMomentumSource(double gasMomentumSource) -
getLiquidMomentumSource
public double getLiquidMomentumSource() -
setLiquidMomentumSource
public void setLiquidMomentumSource(double liquidMomentumSource) -
getEnergySource
public double getEnergySource() -
setEnergySource
public void setEnergySource(double energySource) -
getGasMassPerLength
public double getGasMassPerLength() -
setGasMassPerLength
public void setGasMassPerLength(double gasMassPerLength) -
getLiquidMassPerLength
public double getLiquidMassPerLength() -
setLiquidMassPerLength
public void setLiquidMassPerLength(double liquidMassPerLength) -
getGasMomentumPerLength
public double getGasMomentumPerLength() -
setGasMomentumPerLength
public void setGasMomentumPerLength(double gasMomentumPerLength) -
getLiquidMomentumPerLength
public double getLiquidMomentumPerLength() -
setLiquidMomentumPerLength
public void setLiquidMomentumPerLength(double liquidMomentumPerLength) -
getEnergyPerLength
public double getEnergyPerLength() -
setEnergyPerLength
public void setEnergyPerLength(double energyPerLength) -
getOilFractionInLiquid
public double getOilFractionInLiquid() -
setOilFractionInLiquid
public void setOilFractionInLiquid(double oilFractionInLiquid) -
getWaterCut
public double getWaterCut() -
setWaterCut
public void setWaterCut(double waterCut) -
getOilDensity
public double getOilDensity() -
setOilDensity
public void setOilDensity(double oilDensity) -
getWaterDensity
public double getWaterDensity() -
setWaterDensity
public void setWaterDensity(double waterDensity) -
getOilViscosity
public double getOilViscosity() -
setOilViscosity
public void setOilViscosity(double oilViscosity) -
getWaterViscosity
public double getWaterViscosity() -
setWaterViscosity
public void setWaterViscosity(double waterViscosity) -
getWaterHoldup
public double getWaterHoldup() -
setWaterHoldup
public void setWaterHoldup(double waterHoldup) -
getOilHoldup
public double getOilHoldup() -
setOilHoldup
public void setOilHoldup(double oilHoldup) -
getLiquidHoldup
public double getLiquidHoldup()Override getLiquidHoldup to return the total liquid holdup (oil + water).In TwoFluidSection, the oil and water holdups are tracked separately. This override ensures that getLiquidHoldup() returns their sum for consistent behavior with LiquidAccumulationTracker and other components that depend on total liquid holdup.
- Overrides:
getLiquidHoldupin classPipeSection- Returns:
- Total liquid holdup (oil + water)
-
setLiquidHoldup
public void setLiquidHoldup(double liquidHoldup) Override setLiquidHoldup to also update oil and water holdups proportionally.When the liquid holdup is changed (e.g., by LiquidAccumulationTracker), the oil and water holdups must be updated to maintain their relative proportions within the liquid phase.
- Overrides:
setLiquidHoldupin classPipeSection- Parameters:
liquidHoldup- the new total liquid holdup
-
getWaterMassPerLength
public double getWaterMassPerLength() -
setWaterMassPerLength
public void setWaterMassPerLength(double waterMassPerLength) -
getOilMassPerLength
public double getOilMassPerLength() -
setOilMassPerLength
public void setOilMassPerLength(double oilMassPerLength) -
getWaterMomentumPerLength
public double getWaterMomentumPerLength() -
setWaterMomentumPerLength
public void setWaterMomentumPerLength(double waterMomentumPerLength) -
getOilMomentumPerLength
public double getOilMomentumPerLength() -
setOilMomentumPerLength
public void setOilMomentumPerLength(double oilMomentumPerLength) -
getWaterVelocity
public double getWaterVelocity() -
setWaterVelocity
public void setWaterVelocity(double waterVelocity) -
getOilVelocity
public double getOilVelocity() -
setOilVelocity
public void setOilVelocity(double oilVelocity) -
clone
- Overrides:
clonein classPipeSection
-