Class ThreeFluidSection

All Implemented Interfaces:
Serializable, Cloneable

public class ThreeFluidSection extends TwoFluidSection implements Cloneable, Serializable
Extended section state for three-phase (gas-oil-water) pipe flow.

Extends TwoFluidSection to include a water phase alongside gas and liquid (oil). Uses a layered stratified model where water settles at the bottom, oil in the middle, and gas at the top.

Conservation Variables

The three-fluid model tracks 7 PDEs:
  • Gas mass: ∂(α_g ρ_g A)/∂t + ∂(α_g ρ_g u_g A)/∂x = Γ_go + Γ_gw
  • Oil mass: ∂(α_o ρ_o A)/∂t + ∂(α_o ρ_o u_o A)/∂x = -Γ_go
  • Water mass: ∂(α_w ρ_w A)/∂t + ∂(α_w ρ_w u_w A)/∂x = -Γ_gw
  • Gas momentum
  • Oil momentum
  • Water momentum
  • Mixture energy (or separate phase energies)

Stratified Three-Layer Geometry

        Gas (α_g)
    ─────────────────
        Oil (α_o)
    ─────────────────
       Water (α_w)
Version:
1.0
Author:
Even Solbraa
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • waterHoldup

      private double waterHoldup
    • waterVelocity

      private double waterVelocity
    • waterDensity

      private double waterDensity
    • waterViscosity

      private double waterViscosity
    • waterEnthalpy

      private double waterEnthalpy
    • oilHoldup

      private double oilHoldup
    • oilVelocity

      private double oilVelocity
    • oilDensity

      private double oilDensity
    • oilViscosity

      private double oilViscosity
    • oilEnthalpy

      private double oilEnthalpy
    • waterMassPerLength

      private double waterMassPerLength
    • waterMomentumPerLength

      private double waterMomentumPerLength
    • oilMassPerLength

      private double oilMassPerLength
    • oilMomentumPerLength

      private double oilMomentumPerLength
    • gasOilSurfaceTension

      private double gasOilSurfaceTension
    • oilWaterSurfaceTension

      private double oilWaterSurfaceTension
    • gasWaterSurfaceTension

      private double gasWaterSurfaceTension
    • waterLevel

      private double waterLevel
    • oilLevel

      private double oilLevel
    • waterArea

      private double waterArea
    • oilArea

      private double oilArea
    • waterWettedPerimeter

      private double waterWettedPerimeter
    • oilWettedPerimeter

      private double oilWettedPerimeter
    • gasOilInterfacialWidth

      private double gasOilInterfacialWidth
    • oilWaterInterfacialWidth

      private double oilWaterInterfacialWidth
    • waterCut

      private double waterCut
    • oilEvaporationRate

      private double oilEvaporationRate
    • waterEvaporationRate

      private double waterEvaporationRate
  • Constructor Details

    • ThreeFluidSection

      public ThreeFluidSection()
      Default constructor.
    • ThreeFluidSection

      public ThreeFluidSection(double position, double length, double diameter)
      Constructor with basic parameters.
      Parameters:
      position - Distance from inlet (m)
      length - Section length (m)
      diameter - Pipe diameter (m)
    • ThreeFluidSection

      public ThreeFluidSection(double position, double length, double diameter, double inclination)
      Constructor with inclination.
      Parameters:
      position - Distance from inlet (m)
      length - Section length (m)
      diameter - Pipe diameter (m)
      inclination - Pipe inclination (radians)
  • Method Details

    • initializeWaterPhase

      private void initializeWaterPhase()
      Initialize water phase with default values.
    • setHoldups

      public void setHoldups(double gasHoldup, double oilHoldup, double waterHoldup)
      Set holdups for all three phases. Must sum to 1.0.
      Parameters:
      gasHoldup - Gas holdup (0-1)
      oilHoldup - Oil holdup (0-1)
      waterHoldup - Water holdup (0-1)
    • updateConservativeVariables

      public void updateConservativeVariables()
      Update conservative variables from primitive variables.
      Overrides:
      updateConservativeVariables in class TwoFluidSection
    • extractPrimitiveVariables

      public void extractPrimitiveVariables()
      Extract primitive variables from conservative variables.
      Overrides:
      extractPrimitiveVariables in class TwoFluidSection
    • updateThreeLayerGeometry

      public void updateThreeLayerGeometry()
      Calculate three-layer stratified geometry.

      Assumes circular pipe with three stratified layers: water at bottom, oil in middle, gas at top.

    • calculateLevelFromArea

      private double calculateLevelFromArea(double targetArea, double d)
      Calculate liquid level from cross-sectional area using Newton iteration.
      Parameters:
      targetArea - target cross-sectional area in m²
      d - pipe diameter in meters
      Returns:
      liquid level height in meters
    • getTotalLiquidHoldup

      public double getTotalLiquidHoldup()
      Get total liquid holdup (oil + water).
      Returns:
      Total liquid holdup
    • getMixtureLiquidVelocity

      public double getMixtureLiquidVelocity()
      Get mixture liquid velocity (flow-weighted average).
      Returns:
      Mixture liquid velocity (m/s)
    • getMixtureLiquidDensity

      public double getMixtureLiquidDensity()
      Get mixture liquid density (holdup-weighted average).
      Returns:
      Mixture liquid density (kg/m³)
    • getMixtureLiquidViscosity

      public double getMixtureLiquidViscosity()
      Get mixture liquid viscosity (holdup-weighted average).
      Returns:
      Mixture liquid viscosity (Pa·s)
    • clone

      public ThreeFluidSection clone()
      Create a deep copy of this section.
      Overrides:
      clone in class TwoFluidSection
      Returns:
      Cloned section
    • getWaterHoldup

      public double getWaterHoldup()
      Overrides:
      getWaterHoldup in class TwoFluidSection
    • setWaterHoldup

      public void setWaterHoldup(double waterHoldup)
      Overrides:
      setWaterHoldup in class TwoFluidSection
    • getWaterVelocity

      public double getWaterVelocity()
      Overrides:
      getWaterVelocity in class TwoFluidSection
    • setWaterVelocity

      public void setWaterVelocity(double waterVelocity)
      Overrides:
      setWaterVelocity in class TwoFluidSection
    • getWaterDensity

      public double getWaterDensity()
      Overrides:
      getWaterDensity in class TwoFluidSection
    • setWaterDensity

      public void setWaterDensity(double waterDensity)
      Overrides:
      setWaterDensity in class TwoFluidSection
    • getWaterViscosity

      public double getWaterViscosity()
      Overrides:
      getWaterViscosity in class TwoFluidSection
    • setWaterViscosity

      public void setWaterViscosity(double waterViscosity)
      Overrides:
      setWaterViscosity in class TwoFluidSection
    • getWaterEnthalpy

      public double getWaterEnthalpy()
    • setWaterEnthalpy

      public void setWaterEnthalpy(double waterEnthalpy)
    • getOilHoldup

      public double getOilHoldup()
      Overrides:
      getOilHoldup in class TwoFluidSection
    • setOilHoldup

      public void setOilHoldup(double oilHoldup)
      Overrides:
      setOilHoldup in class TwoFluidSection
    • getOilVelocity

      public double getOilVelocity()
      Overrides:
      getOilVelocity in class TwoFluidSection
    • setOilVelocity

      public void setOilVelocity(double oilVelocity)
      Overrides:
      setOilVelocity in class TwoFluidSection
    • getOilDensity

      public double getOilDensity()
      Overrides:
      getOilDensity in class TwoFluidSection
    • setOilDensity

      public void setOilDensity(double oilDensity)
      Overrides:
      setOilDensity in class TwoFluidSection
    • getOilViscosity

      public double getOilViscosity()
      Overrides:
      getOilViscosity in class TwoFluidSection
    • setOilViscosity

      public void setOilViscosity(double oilViscosity)
      Overrides:
      setOilViscosity in class TwoFluidSection
    • getOilEnthalpy

      public double getOilEnthalpy()
    • setOilEnthalpy

      public void setOilEnthalpy(double oilEnthalpy)
    • getWaterMassPerLength

      public double getWaterMassPerLength()
      Overrides:
      getWaterMassPerLength in class TwoFluidSection
    • setWaterMassPerLength

      public void setWaterMassPerLength(double waterMassPerLength)
      Overrides:
      setWaterMassPerLength in class TwoFluidSection
    • getWaterMomentumPerLength

      public double getWaterMomentumPerLength()
      Overrides:
      getWaterMomentumPerLength in class TwoFluidSection
    • setWaterMomentumPerLength

      public void setWaterMomentumPerLength(double waterMomentumPerLength)
      Overrides:
      setWaterMomentumPerLength in class TwoFluidSection
    • getOilMassPerLength

      public double getOilMassPerLength()
      Overrides:
      getOilMassPerLength in class TwoFluidSection
    • setOilMassPerLength

      public void setOilMassPerLength(double oilMassPerLength)
      Overrides:
      setOilMassPerLength in class TwoFluidSection
    • getOilMomentumPerLength

      public double getOilMomentumPerLength()
      Overrides:
      getOilMomentumPerLength in class TwoFluidSection
    • setOilMomentumPerLength

      public void setOilMomentumPerLength(double oilMomentumPerLength)
      Overrides:
      setOilMomentumPerLength in class TwoFluidSection
    • getWaterLevel

      public double getWaterLevel()
    • getOilLevel

      public double getOilLevel()
    • getWaterArea

      public double getWaterArea()
    • getOilArea

      public double getOilArea()
    • getWaterWettedPerimeter

      public double getWaterWettedPerimeter()
    • getOilWettedPerimeter

      public double getOilWettedPerimeter()
    • getGasOilInterfacialWidth

      public double getGasOilInterfacialWidth()
    • getOilWaterInterfacialWidth

      public double getOilWaterInterfacialWidth()
    • getGasOilSurfaceTension

      public double getGasOilSurfaceTension()
    • setGasOilSurfaceTension

      public void setGasOilSurfaceTension(double gasOilSurfaceTension)
    • getOilWaterSurfaceTension

      public double getOilWaterSurfaceTension()
    • setOilWaterSurfaceTension

      public void setOilWaterSurfaceTension(double oilWaterSurfaceTension)
    • getGasWaterSurfaceTension

      public double getGasWaterSurfaceTension()
    • setGasWaterSurfaceTension

      public void setGasWaterSurfaceTension(double gasWaterSurfaceTension)
    • getWaterCut

      public double getWaterCut()
      Overrides:
      getWaterCut in class TwoFluidSection
    • setWaterCut

      public void setWaterCut(double waterCut)
      Overrides:
      setWaterCut in class TwoFluidSection
    • getOilEvaporationRate

      public double getOilEvaporationRate()
    • setOilEvaporationRate

      public void setOilEvaporationRate(double oilEvaporationRate)
    • getWaterEvaporationRate

      public double getWaterEvaporationRate()
    • setWaterEvaporationRate

      public void setWaterEvaporationRate(double waterEvaporationRate)