Class SachdevaChokeFlow

java.lang.Object
neqsim.process.mechanicaldesign.valve.choke.MultiphaseChokeFlow
neqsim.process.mechanicaldesign.valve.choke.SachdevaChokeFlow
All Implemented Interfaces:
Serializable

public class SachdevaChokeFlow extends MultiphaseChokeFlow
Sachdeva et al. (1986) mechanistic model for two-phase choke flow.

This is the industry-standard mechanistic model for calculating two-phase flow through production chokes. It handles both critical (choked) and subcritical flow regimes.

The model is based on the following assumptions:

  • Homogeneous flow (no slip between phases)
  • Polytropic gas expansion
  • Incompressible liquid phase
  • Negligible friction losses in the choke
  • Thermal equilibrium between phases

Mass Flow Rate Equation:

m_dot = Cd * A2 * sqrt(2 * P1 * rho1 / denominator)

where denominator accounts for:
- Kinetic energy change (velocity change through restriction)
- Polytropic gas expansion work
- Liquid work against pressure gradient

Critical Pressure Ratio Correlation:

y_critical = 0.5847 - 0.0227 * ln(x_g)

where x_g is the gas mass fraction (quality).

Reference: Sachdeva, R., Schmidt, Z., Brill, J.P., and Blais, R.M. (1986). "Two-Phase Flow Through Chokes." SPE 15657, presented at the 61st Annual Technical Conference, New Orleans, LA, October 5-8.

Version:
1.0
Author:
esol
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • MIN_GAS_QUALITY

      private static final double MIN_GAS_QUALITY
      Minimum gas quality for correlation validity.
      See Also:
    • MAX_GAS_QUALITY

      private static final double MAX_GAS_QUALITY
      Maximum gas quality for correlation validity.
      See Also:
  • Constructor Details

    • SachdevaChokeFlow

      public SachdevaChokeFlow()
      Default constructor for SachdevaChokeFlow.
    • SachdevaChokeFlow

      public SachdevaChokeFlow(double chokeDiameter)
      Constructor with choke diameter.
      Parameters:
      chokeDiameter - choke throat diameter in meters
  • Method Details

    • calculateMassFlowRate

      public double calculateMassFlowRate(SystemInterface fluid, double upstreamPressure, double downstreamPressure)
      Calculates the mass flow rate through the choke.
      Specified by:
      calculateMassFlowRate in class MultiphaseChokeFlow
      Parameters:
      fluid - the thermodynamic system representing the fluid
      upstreamPressure - upstream pressure in Pa
      downstreamPressure - downstream pressure in Pa
      Returns:
      mass flow rate in kg/s
    • calculateDownstreamPressure

      public double calculateDownstreamPressure(SystemInterface fluid, double upstreamPressure, double massFlowRate)
      Calculates the downstream pressure for a given mass flow rate.
      Specified by:
      calculateDownstreamPressure in class MultiphaseChokeFlow
      Parameters:
      fluid - the thermodynamic system representing the fluid
      upstreamPressure - upstream pressure in Pa
      massFlowRate - mass flow rate in kg/s
      Returns:
      downstream pressure in Pa
    • calculateCriticalPressureRatio

      public double calculateCriticalPressureRatio(double gasQuality, double specificHeatRatio)
      Calculates the critical pressure ratio for two-phase flow.
      Specified by:
      calculateCriticalPressureRatio in class MultiphaseChokeFlow
      Parameters:
      gasQuality - gas mass fraction (0 to 1)
      specificHeatRatio - ratio of specific heats (Cp/Cv)
      Returns:
      critical pressure ratio (P2/P1 at choking)
    • calculateMixtureDensity

      private double calculateMixtureDensity(double gasQuality, double rhoGas, double rhoLiquid)
      Calculates the mixture density using mass fractions.
      Parameters:
      gasQuality - gas mass fraction
      rhoGas - gas density in kg/m3
      rhoLiquid - liquid density in kg/m3
      Returns:
      mixture density in kg/m3
    • getGasDensity

      private double getGasDensity(SystemInterface fluid, double pressure)
      Gets the gas density from the fluid.
      Parameters:
      fluid - thermodynamic system
      pressure - pressure in Pa
      Returns:
      gas density in kg/m3
    • getLiquidDensity

      private double getLiquidDensity(SystemInterface fluid)
      Gets the liquid density from the fluid.
      Parameters:
      fluid - thermodynamic system
      Returns:
      liquid density in kg/m3
    • calculateLiquidOnlyFlow

      private double calculateLiquidOnlyFlow(SystemInterface fluid, double P1, double P2, double rhoLiquid)
      Calculates liquid-only flow through the choke.
      Parameters:
      fluid - thermodynamic system
      P1 - upstream pressure in Pa
      P2 - downstream pressure in Pa
      rhoLiquid - liquid density in kg/m3
      Returns:
      mass flow rate in kg/s
    • calculateGasOnlyFlow

      private double calculateGasOnlyFlow(SystemInterface fluid, double P1, double P2, double rhoGas1, double gamma)
      Calculates gas-only flow through the choke.
      Parameters:
      fluid - thermodynamic system
      P1 - upstream pressure in Pa
      P2 - downstream pressure in Pa
      rhoGas1 - upstream gas density in kg/m3
      gamma - specific heat ratio
      Returns:
      mass flow rate in kg/s
    • calculateVariableDischargeCoefficient

      public double calculateVariableDischargeCoefficient(double reynoldsNumber, double gasVoidFraction)
      Calculates the discharge coefficient based on Reynolds number and void fraction.

      This method provides a variable discharge coefficient that accounts for flow conditions.

      Parameters:
      reynoldsNumber - Reynolds number at choke throat
      gasVoidFraction - volumetric gas fraction at throat
      Returns:
      adjusted discharge coefficient
    • getModelName

      public String getModelName()
      Returns the name of this choke flow model.
      Specified by:
      getModelName in class MultiphaseChokeFlow
      Returns:
      model name