Class OilWaterFlowRegimeDetector

java.lang.Object
neqsim.process.equipment.pipeline.twophasepipe.closure.OilWaterFlowRegimeDetector
All Implemented Interfaces:
Serializable

public class OilWaterFlowRegimeDetector extends Object implements Serializable
Oil-water flow regime detector for three-phase pipe flow.

Predicts the oil-water flow configuration (stratified, dispersed oil-in-water, dispersed water-in-oil, or dual dispersion) based on phase velocities, fluid properties, and pipe geometry. This is critical for:

  • Corrosion prediction (water wetting vs oil wetting of pipe wall)
  • Effective viscosity calculation (emulsion viscosity depends on continuous phase)
  • Produced water management (water dropout in low-velocity sections)
  • Phase inversion prediction (the point where continuous phase switches)

Flow Regime Classification

Based on the work of Trallero (1995), Angeli and Hewitt (2000), and Brauner (2003):

  • Stratified: Separate oil and water layers (low velocity)
  • Stratified with mixing: Stratified layers with interfacial waves/mixing zone
  • Dispersed oil-in-water (O/W): Oil droplets in continuous water phase
  • Dispersed water-in-oil (W/O): Water droplets in continuous oil phase
  • Dual dispersion: Both O/W and W/O regions coexist
  • Annular: Oil core with water annulus (or vice versa)

References

  • Trallero, J.L. (1995). Oil-Water Flow Patterns in Horizontal Pipes. PhD Thesis, U. Tulsa.
  • Brauner, N. (2003). Liquid-Liquid Two-Phase Flow Systems. In Modelling and Experimentation in Two-Phase Flow, Springer, pp. 221-279.
  • Angeli, P. and Hewitt, G.F. (2000). Flow structure in horizontal oil-water flow. Int. J. Multiphase Flow, 26(7), 1117-1140.
  • Decarre, S. and Fabre, J. (1997). Phase inversion prediction study. Oil & Gas Science and Technology, 52(4), 415-424.
Version:
1.0
Author:
Even Solbraa
See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static enum 
    Oil-water flow regime enumeration.
    static class 
    Result of oil-water flow regime detection.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private double
    Critical Weber number for droplet breakup (Hinze, 1955).
    private static final double
    Gravitational acceleration (m/s2).
    private double
    Empirical constant for inversion model (Decarre and Fabre, 1997).
    private static final long
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    double
    calcCriticalDispersionVelocity(double waterCut, double rhoOil, double rhoWater, double muCont, double sigmaOW, double diameter)
    Calculate the critical mixture velocity for transition from stratified to fully dispersed oil-water flow (Brauner, 2003).
    double
    calcEffectiveViscosity(double waterCut, double muOil, double muWater, boolean oilContinuous)
    Calculate effective viscosity of the oil-water mixture.
    double
    calcInversionWaterFraction(double muRatio, double rhoOil, double rhoWater)
    Calculate the phase inversion water fraction.
    double
    calcMaxDropletDiameter(double velocity, double rhoCont, double sigmaOW, double diameter, double muCont)
    Calculate the maximum stable droplet diameter using the Hinze (1955) criterion.
    detect(double waterCut, double mixtureVelocity, double rhoOil, double rhoWater, double muOil, double muWater, double sigmaOW, double pipeDiameter, double inclination)
    Detect oil-water flow regime and compute associated properties.
    double
    Get the critical Weber number.
    double
    Get the inversion model constant.
    boolean
    isWaterDropoutLikely(double waterCut, double mixtureVelocity, double rhoOil, double rhoWater, double muOil, double diameter, double dropletDiameter)
    Check if water dropout is likely in a low-point section.
    void
    setCriticalWeber(double we)
    Set the critical Weber number for droplet breakup.
    void
    setInversionConstant(double constant)
    Set the inversion model constant.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • GRAVITY

      private static final double GRAVITY
      Gravitational acceleration (m/s2).
      See Also:
    • criticalWeber

      private double criticalWeber
      Critical Weber number for droplet breakup (Hinze, 1955).
    • inversionConstant

      private double inversionConstant
      Empirical constant for inversion model (Decarre and Fabre, 1997).
  • Constructor Details

    • OilWaterFlowRegimeDetector

      public OilWaterFlowRegimeDetector()
      Default constructor.
  • Method Details

    • detect

      public OilWaterFlowRegimeDetector.OilWaterResult detect(double waterCut, double mixtureVelocity, double rhoOil, double rhoWater, double muOil, double muWater, double sigmaOW, double pipeDiameter, double inclination)
      Detect oil-water flow regime and compute associated properties.
      Parameters:
      waterCut - water volume fraction in liquid (0-1)
      mixtureVelocity - superficial mixture liquid velocity (m/s)
      rhoOil - oil density (kg/m3)
      rhoWater - water density (kg/m3)
      muOil - oil dynamic viscosity (Pa.s)
      muWater - water dynamic viscosity (Pa.s)
      sigmaOW - oil-water interfacial tension (N/m)
      pipeDiameter - pipe internal diameter (m)
      inclination - pipe inclination (radians, positive = uphill)
      Returns:
      OilWaterResult with regime classification and properties
    • calcInversionWaterFraction

      public double calcInversionWaterFraction(double muRatio, double rhoOil, double rhoWater)
      Calculate the phase inversion water fraction.

      Uses the model of Decarre and Fabre (1997) where inversion occurs when the surface-energy-weighted viscosity ratio reaches equilibrium. For equal viscosity fluids, inversion is near 50%.

      Parameters:
      muRatio - oil-to-water viscosity ratio (mu_o/mu_w)
      rhoOil - oil density (kg/m3)
      rhoWater - water density (kg/m3)
      Returns:
      water volume fraction at inversion point (0-1)
    • calcCriticalDispersionVelocity

      public double calcCriticalDispersionVelocity(double waterCut, double rhoOil, double rhoWater, double muCont, double sigmaOW, double diameter)
      Calculate the critical mixture velocity for transition from stratified to fully dispersed oil-water flow (Brauner, 2003).

      Below this velocity, gravity dominates and the phases stratify. Above this velocity, turbulent mixing disperses one phase into the other.

      Parameters:
      waterCut - water volume fraction (0-1)
      rhoOil - oil density (kg/m3)
      rhoWater - water density (kg/m3)
      muCont - viscosity of continuous phase (Pa.s)
      sigmaOW - oil-water interfacial tension (N/m)
      diameter - pipe diameter (m)
      Returns:
      critical mixture velocity (m/s)
    • calcMaxDropletDiameter

      public double calcMaxDropletDiameter(double velocity, double rhoCont, double sigmaOW, double diameter, double muCont)
      Calculate the maximum stable droplet diameter using the Hinze (1955) criterion.

      d_max = We_crit^{3/5} * (sigma / rho_c)^{3/5} * epsilon^{-2/5} where epsilon is the turbulent energy dissipation rate estimated from the mixture velocity.

      Parameters:
      velocity - mixture velocity (m/s)
      rhoCont - density of continuous phase (kg/m3)
      sigmaOW - oil-water interfacial tension (N/m)
      diameter - pipe diameter (m)
      muCont - viscosity of continuous phase (Pa.s)
      Returns:
      maximum stable droplet diameter (m)
    • calcEffectiveViscosity

      public double calcEffectiveViscosity(double waterCut, double muOil, double muWater, boolean oilContinuous)
      Calculate effective viscosity of the oil-water mixture.

      Uses the Brinkman (1952) equation for dilute dispersions and the Pal and Rhodes (1989) model for concentrated dispersions:

      • Dilute (phi < 0.3): mu_eff = mu_c * (1 - phi)^{-2.5}
      • Concentrated: mu_eff = mu_c * (1 - phi/phi_max)^{-2.5}
      where phi is the dispersed phase volume fraction and phi_max ~ 0.74 is maximum packing.
      Parameters:
      waterCut - water volume fraction (0-1)
      muOil - oil viscosity (Pa.s)
      muWater - water viscosity (Pa.s)
      oilContinuous - true if oil is the continuous phase
      Returns:
      effective mixture viscosity (Pa.s)
    • isWaterDropoutLikely

      public boolean isWaterDropoutLikely(double waterCut, double mixtureVelocity, double rhoOil, double rhoWater, double muOil, double diameter, double dropletDiameter)
      Check if water dropout is likely in a low-point section.

      Water dropout occurs when the settling velocity of water droplets exceeds the turbulent re-entrainment capacity. This is particularly relevant in:

      • Low-velocity sections (turndown conditions)
      • Pipe low-points (valleys) where water can accumulate
      • After uphill sections where water may slide back
      Parameters:
      waterCut - water volume fraction (0-1)
      mixtureVelocity - mixture velocity (m/s)
      rhoOil - oil density (kg/m3)
      rhoWater - water density (kg/m3)
      muOil - oil viscosity (Pa.s)
      diameter - pipe diameter (m)
      dropletDiameter - water droplet diameter (m)
      Returns:
      true if water dropout is likely
    • setCriticalWeber

      public void setCriticalWeber(double we)
      Set the critical Weber number for droplet breakup.
      Parameters:
      we - critical Weber number (default 1.17 from Hinze, 1955)
    • getCriticalWeber

      public double getCriticalWeber()
      Get the critical Weber number.
      Returns:
      critical Weber number
    • setInversionConstant

      public void setInversionConstant(double constant)
      Set the inversion model constant.
      Parameters:
      constant - exponent for viscosity ratio in inversion model (default 0.5)
    • getInversionConstant

      public double getInversionConstant()
      Get the inversion model constant.
      Returns:
      inversion constant