Class MultiphaseChokeFlow

java.lang.Object
neqsim.process.mechanicaldesign.valve.choke.MultiphaseChokeFlow
All Implemented Interfaces:
Serializable
Direct Known Subclasses:
GilbertChokeFlow, SachdevaChokeFlow

public abstract class MultiphaseChokeFlow extends Object implements Serializable
Abstract base class for multiphase choke flow calculations.

This class provides the foundation for calculating two-phase (gas-liquid) flow through production chokes. Unlike single-phase IEC 60534 models, these correlations account for the interaction between gas and liquid phases during flow through a restriction.

Key concepts:

  • Critical flow: Flow is choked when downstream pressure changes have no effect on flow rate. Occurs when pressure ratio P2/P1 falls below critical pressure ratio.
  • Subcritical flow: Both upstream and downstream pressures affect flow rate.
  • Gas quality (x_g): Mass fraction of gas in the two-phase mixture.

References:

  • Sachdeva, R., et al. (1986). "Two-Phase Flow Through Chokes." SPE 15657.
  • Perkins, T.K. (1990). "Critical and Subcritical Flow of Multiphase Mixtures Through Chokes." SPE 20633.
  • Gilbert, W.E. (1954). "Flowing and Gas-Lift Well Performance." API Drilling and Production Practice.
Version:
1.0
Author:
esol
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • dischargeCoefficient

      protected double dischargeCoefficient
      Discharge coefficient for the choke (typically 0.75-0.90).
    • chokeDiameter

      protected double chokeDiameter
      Choke throat diameter in meters.
    • upstreamDiameter

      protected double upstreamDiameter
      Upstream pipe diameter in meters.
    • polytropicExponent

      protected double polytropicExponent
      Polytropic exponent for gas expansion (1.0 = isothermal, gamma = isentropic).
  • Constructor Details

    • MultiphaseChokeFlow

      public MultiphaseChokeFlow()
      Default constructor for MultiphaseChokeFlow.
    • MultiphaseChokeFlow

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

    • calculateMassFlowRate

      public abstract double calculateMassFlowRate(SystemInterface fluid, double upstreamPressure, double downstreamPressure)
      Calculates the mass flow rate through the choke.
      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 abstract double calculateDownstreamPressure(SystemInterface fluid, double upstreamPressure, double massFlowRate)
      Calculates the downstream pressure for a given mass flow rate.
      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 abstract double calculateCriticalPressureRatio(double gasQuality, double specificHeatRatio)
      Calculates the critical pressure ratio for two-phase flow.
      Parameters:
      gasQuality - gas mass fraction (0 to 1)
      specificHeatRatio - ratio of specific heats (Cp/Cv)
      Returns:
      critical pressure ratio (P2/P1 at choking)
    • determineFlowRegime

      public MultiphaseChokeFlow.FlowRegime determineFlowRegime(SystemInterface fluid, double upstreamPressure, double downstreamPressure)
      Determines the flow regime (critical or subcritical).
      Parameters:
      fluid - the thermodynamic system
      upstreamPressure - upstream pressure in Pa
      downstreamPressure - downstream pressure in Pa
      Returns:
      the flow regime
    • calculateGasQuality

      public double calculateGasQuality(SystemInterface fluid)
      Calculates the gas quality (gas mass fraction) from the fluid.
      Parameters:
      fluid - the thermodynamic system
      Returns:
      gas mass fraction (0 to 1)
    • calculateGLR

      public double calculateGLR(SystemInterface fluid)
      Calculates the gas-liquid ratio (GLR) from the fluid.
      Parameters:
      fluid - the thermodynamic system
      Returns:
      GLR in Sm3/Sm3 (standard cubic meters gas per standard cubic meter liquid)
    • getChokeArea

      public double getChokeArea()
      Calculates the choke throat area.
      Returns:
      throat area in m^2
    • calculateSizingResults

      public Map<String,Object> calculateSizingResults(SystemInterface fluid, double upstreamPressure, double downstreamPressure)
      Calculates complete sizing results including all parameters.
      Parameters:
      fluid - the thermodynamic system
      upstreamPressure - upstream pressure in Pa
      downstreamPressure - downstream pressure in Pa
      Returns:
      map containing all sizing results
    • getDischargeCoefficient

      public double getDischargeCoefficient()
      Gets the discharge coefficient.
      Returns:
      discharge coefficient
    • setDischargeCoefficient

      public void setDischargeCoefficient(double dischargeCoefficient)
      Sets the discharge coefficient.
      Parameters:
      dischargeCoefficient - discharge coefficient (typically 0.75-0.90)
    • getChokeDiameter

      public double getChokeDiameter()
      Gets the choke diameter.
      Returns:
      choke diameter in meters
    • setChokeDiameter

      public void setChokeDiameter(double chokeDiameter)
      Sets the choke diameter.
      Parameters:
      chokeDiameter - choke diameter in meters
    • setChokeDiameter

      public void setChokeDiameter(double diameter, String unit)
      Sets the choke diameter with unit specification.
      Parameters:
      diameter - choke diameter value
      unit - unit of diameter ("m", "mm", "in", "64ths")
    • getUpstreamDiameter

      public double getUpstreamDiameter()
      Gets the upstream pipe diameter.
      Returns:
      upstream diameter in meters
    • setUpstreamDiameter

      public void setUpstreamDiameter(double upstreamDiameter)
      Sets the upstream pipe diameter.
      Parameters:
      upstreamDiameter - upstream diameter in meters
    • getPolytropicExponent

      public double getPolytropicExponent()
      Gets the polytropic exponent.
      Returns:
      polytropic exponent
    • setPolytropicExponent

      public void setPolytropicExponent(double polytropicExponent)
      Sets the polytropic exponent for gas expansion.
      Parameters:
      polytropicExponent - polytropic exponent (1.0 = isothermal, gamma = isentropic)
    • getModelName

      public abstract String getModelName()
      Returns the name of this choke flow model.
      Returns:
      model name