Class PipeMukherjeeAndBrill

All Implemented Interfaces:
Serializable, Runnable, CapacityConstrainedEquipment, PipeLineInterface, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface

public class PipeMukherjeeAndBrill extends Pipeline
Pipeline simulation using the Mukherjee and Brill (1985) correlation for multiphase flow.

Implements the Mukherjee-Brill correlation for predicting liquid holdup, pressure drop, and flow pattern in two-phase gas-liquid flow at all pipe inclinations. This correlation was developed from an extensive experimental database covering uphill, downhill, and horizontal flow.

Reference

Mukherjee, H. and Brill, J.P., "Pressure Drop Correlations for Inclined Two-Phase Flow", Journal of Energy Resources Technology, December 1985, Vol. 107, pp. 549-554.

Mukherjee, H. and Brill, J.P., "Empirical Equations to Predict Flow Patterns in Two-Phase Inclined Flow", International Journal of Multiphase Flow, 1985, Vol. 11, No. 3, pp. 299-315.

Flow Pattern Determination

The Mukherjee-Brill method classifies flow into four patterns:

  • STRATIFIED — Gas flows over a liquid layer (downhill and horizontal)
  • SLUG — Alternating liquid slugs and gas pockets
  • ANNULAR — Gas core with liquid film on wall (high gas rates)
  • BUBBLE — Small gas bubbles dispersed in liquid (high liquid rates)

Flow pattern boundaries depend on pipe inclination angle (theta), superficial gas and liquid velocities, and fluid properties.

Liquid Holdup Correlation

The Mukherjee-Brill holdup correlation uses the form:

H_L = exp[(C1 + C2*sin(theta) + C3*sin^2(theta) + C4*N_L^2) /
          (N_gv^C5 / (1 + N_Lv)^C6)]

where the coefficients C1-C6 depend on the flow pattern and pipe inclination direction (uphill, downhill, or horizontal).

Friction Factor

Uses the Moody friction factor for no-slip Reynolds number, with a two-phase multiplier based on holdup ratio to account for the increased wall shear from multiphase flow.

Applicability

  • All pipe inclinations from -90 to +90 degrees
  • Pipe diameters 1 to 6 inches (tested)
  • Gas-liquid and gas-condensate systems
  • Commonly used as alternative to Beggs-Brill for NCS pipeline design

Usage Example

SystemInterface fluid = new SystemSrkEos(303.15, 50.0);
fluid.addComponent("methane", 0.85);
fluid.addComponent("ethane", 0.10);
fluid.addComponent("propane", 0.05);
fluid.setMixingRule("classic");

Stream inlet = new Stream("inlet", fluid);
inlet.setFlowRate(30000, "kg/hr");
inlet.run();

PipeMukherjeeAndBrill pipe = new PipeMukherjeeAndBrill("pipeline", inlet);
pipe.setDiameter(0.2032); // 8 inch
pipe.setLength(15000.0); // 15 km
pipe.setElevation(-200.0); // slightly downhill
pipe.setNumberOfIncrements(30);
pipe.run();

System.out.println("Pressure drop: " + pipe.getPressureDrop() + " bar");
System.out.println("Flow pattern: " + pipe.getFlowPattern());
Version:
1.0
Author:
NeqSim
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serialization version UID.
      See Also:
    • logger

      private static final org.apache.logging.log4j.Logger logger
      Logger object for class.
    • GRAVITY

      private static final double GRAVITY
      Acceleration of gravity in m/s2.
      See Also:
    • currentFlowPattern

      private PipeMukherjeeAndBrill.FlowPattern currentFlowPattern
      Identified flow pattern.
    • totalPressureDrop

      private double totalPressureDrop
      Total pressure drop in bar.
    • superficialLiquidVelocity

      private double superficialLiquidVelocity
      Superficial liquid velocity in m/s.
    • superficialGasVelocity

      private double superficialGasVelocity
      Superficial gas velocity in m/s.
    • mixtureVelocity

      private double mixtureVelocity
      Mixture velocity in m/s.
    • calculatedHoldup

      private double calculatedHoldup
      Calculated liquid holdup.
    • mixtureDensity

      private double mixtureDensity
      Mixture density in kg/m3.
    • pressureProfileList

      private List<Double> pressureProfileList
      Pressure profile along the pipe.
    • temperatureProfileList

      private List<Double> temperatureProfileList
      Temperature profile along the pipe.
    • lengthProfileList

      private List<Double> lengthProfileList
      Length profile along the pipe.
    • flowPatternProfile

      private List<String> flowPatternProfile
      Flow pattern profile along the pipe.
  • Constructor Details

    • PipeMukherjeeAndBrill

      public PipeMukherjeeAndBrill()
      Default constructor for PipeMukherjeeAndBrill.
    • PipeMukherjeeAndBrill

      public PipeMukherjeeAndBrill(String name)
      Constructor with name.
      Parameters:
      name - equipment name
    • PipeMukherjeeAndBrill

      public PipeMukherjeeAndBrill(String name, StreamInterface inStream)
      Constructor with name and inlet stream.
      Parameters:
      name - equipment name
      inStream - inlet stream
  • Method Details

    • run

      public void run(UUID id)

      In this method all thermodynamic and unit operations will be calculated in a steady state calculation.

      Specified by:
      run in interface SimulationInterface
      Overrides:
      run in class Pipeline
      Parameters:
      id - UUID
    • calcSegmentPressureDrop

      private double calcSegmentPressureDrop(SystemInterface sys, double segLength, double segElev)
      Calculate pressure drop for a single pipe segment using the Mukherjee-Brill method.
      Parameters:
      sys - thermodynamic system at segment conditions
      segLength - segment length in meters
      segElev - segment elevation change in meters (positive = upward)
      Returns:
      pressure drop in bar
    • determineFlowPattern

      private PipeMukherjeeAndBrill.FlowPattern determineFlowPattern(double vSl, double vSg, double rhoL, double rhoG, double muL, double sigma, double theta)
      Determine flow pattern using Mukherjee-Brill boundaries.

      The flow pattern is determined from dimensionless gas and liquid velocity numbers, pipe inclination, and fluid properties.

      Parameters:
      vSl - superficial liquid velocity in m/s
      vSg - superficial gas velocity in m/s
      rhoL - liquid density in kg/m3
      rhoG - gas density in kg/m3
      muL - liquid viscosity in Pa.s
      sigma - surface tension in N/m
      theta - pipe inclination angle in radians
      Returns:
      identified flow pattern
    • calcLiquidHoldup

      private double calcLiquidHoldup(double nLv, double nGv, double nL, double theta, double lambdaL)
      Calculate liquid holdup using the Mukherjee-Brill correlation.

      The holdup is calculated from flow-pattern-dependent correlations using dimensionless velocity and viscosity numbers and the pipe inclination angle.

      Parameters:
      nLv - liquid velocity number
      nGv - gas velocity number
      nL - liquid viscosity number
      theta - pipe inclination angle in radians
      lambdaL - no-slip liquid fraction
      Returns:
      predicted liquid holdup (0 to 1)
    • calcFrictionMultiplier

      private double calcFrictionMultiplier(double holdupRatio)
      Calculate two-phase friction factor multiplier from holdup ratio.

      The Mukherjee-Brill friction factor correction accounts for the effect of slip between phases on the wall shear stress. The multiplier is based on the ratio of no-slip to actual liquid holdup.

      Parameters:
      holdupRatio - ratio of no-slip liquid fraction to actual holdup
      Returns:
      friction factor multiplier
    • calcFrictionFactor

      private double calcFrictionFactor(double re)
      Calculate Moody/Haaland friction factor.
      Parameters:
      re - Reynolds number
      Returns:
      Darcy friction factor
    • getTotalPressureDrop

      public double getTotalPressureDrop()
      Get the total pressure drop across the pipe.
      Returns:
      total pressure drop in bar
    • getPressureDrop

      public double getPressureDrop()
      Get the total pressure drop across the pipeline.
      Specified by:
      getPressureDrop in interface PipeLineInterface
      Overrides:
      getPressureDrop in class Pipeline
      Returns:
      pressure drop in bar
    • getLiquidHoldup

      public double getLiquidHoldup()
      Get the calculated liquid holdup at the last segment.
      Specified by:
      getLiquidHoldup in interface PipeLineInterface
      Overrides:
      getLiquidHoldup in class Pipeline
      Returns:
      liquid holdup fraction
    • getMixtureDensity

      public double getMixtureDensity()
      Get the mixture density at the last segment.
      Returns:
      mixture density in kg/m3
    • getFlowPattern

      public String getFlowPattern()
      Get the identified flow pattern.
      Returns:
      flow pattern string
    • getFlowPatternEnum

      public PipeMukherjeeAndBrill.FlowPattern getFlowPatternEnum()
      Get the identified flow pattern enum.
      Returns:
      flow pattern enum value
    • getPressureProfile

      public double[] getPressureProfile()
      Get the pressure profile along the pipe.
      Specified by:
      getPressureProfile in interface PipeLineInterface
      Overrides:
      getPressureProfile in class Pipeline
      Returns:
      array of pressures in bar at each increment
    • getPressureProfileList

      public List<Double> getPressureProfileList()
      Get the pressure profile as a list.
      Returns:
      list of pressures in bar
    • getTemperatureProfile

      public double[] getTemperatureProfile()
      Get the temperature profile along the pipe.
      Specified by:
      getTemperatureProfile in interface PipeLineInterface
      Overrides:
      getTemperatureProfile in class Pipeline
      Returns:
      array of temperatures in Kelvin at each increment
    • getTemperatureProfileList

      public List<Double> getTemperatureProfileList()
      Get the temperature profile as a list.
      Returns:
      list of temperatures in Kelvin
    • getLengthProfile

      public List<Double> getLengthProfile()
      Get the length profile along the pipe.
      Returns:
      list of cumulative lengths in meters
    • getFlowPatternProfile

      public List<String> getFlowPatternProfile()
      Get the flow pattern profile along the pipe.
      Returns:
      list of flow pattern names at each segment