Class SachdevaChokeFlow
java.lang.Object
neqsim.process.mechanicaldesign.valve.choke.MultiphaseChokeFlow
neqsim.process.mechanicaldesign.valve.choke.SachdevaChokeFlow
- All Implemented Interfaces:
Serializable
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:
-
Nested Class Summary
Nested classes/interfaces inherited from class MultiphaseChokeFlow
MultiphaseChokeFlow.FlowRegime -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final doubleMaximum gas quality for correlation validity.private static final doubleMinimum gas quality for correlation validity.private static final longFields inherited from class MultiphaseChokeFlow
chokeDiameter, dischargeCoefficient, polytropicExponent, upstreamDiameter -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor for SachdevaChokeFlow.SachdevaChokeFlow(double chokeDiameter) Constructor with choke diameter. -
Method Summary
Modifier and TypeMethodDescriptiondoublecalculateCriticalPressureRatio(double gasQuality, double specificHeatRatio) Calculates the critical pressure ratio for two-phase flow.doublecalculateDownstreamPressure(SystemInterface fluid, double upstreamPressure, double massFlowRate) Calculates the downstream pressure for a given mass flow rate.private doublecalculateGasOnlyFlow(SystemInterface fluid, double P1, double P2, double rhoGas1, double gamma) Calculates gas-only flow through the choke.private doublecalculateLiquidOnlyFlow(SystemInterface fluid, double P1, double P2, double rhoLiquid) Calculates liquid-only flow through the choke.doublecalculateMassFlowRate(SystemInterface fluid, double upstreamPressure, double downstreamPressure) Calculates the mass flow rate through the choke.private doublecalculateMixtureDensity(double gasQuality, double rhoGas, double rhoLiquid) Calculates the mixture density using mass fractions.doublecalculateVariableDischargeCoefficient(double reynoldsNumber, double gasVoidFraction) Calculates the discharge coefficient based on Reynolds number and void fraction.private doublegetGasDensity(SystemInterface fluid, double pressure) Gets the gas density from the fluid.private doublegetLiquidDensity(SystemInterface fluid) Gets the liquid density from the fluid.Returns the name of this choke flow model.Methods inherited from class MultiphaseChokeFlow
calculateGasQuality, calculateGLR, calculateSizingResults, determineFlowRegime, getChokeArea, getChokeDiameter, getDischargeCoefficient, getPolytropicExponent, getUpstreamDiameter, setChokeDiameter, setChokeDiameter, setDischargeCoefficient, setPolytropicExponent, setUpstreamDiameter
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
MIN_GAS_QUALITY
private static final double MIN_GAS_QUALITYMinimum gas quality for correlation validity.- See Also:
-
MAX_GAS_QUALITY
private static final double MAX_GAS_QUALITYMaximum 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:
calculateMassFlowRatein classMultiphaseChokeFlow- Parameters:
fluid- the thermodynamic system representing the fluidupstreamPressure- upstream pressure in PadownstreamPressure- 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:
calculateDownstreamPressurein classMultiphaseChokeFlow- Parameters:
fluid- the thermodynamic system representing the fluidupstreamPressure- upstream pressure in PamassFlowRate- 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:
calculateCriticalPressureRatioin classMultiphaseChokeFlow- 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 fractionrhoGas- gas density in kg/m3rhoLiquid- liquid density in kg/m3- Returns:
- mixture density in kg/m3
-
getGasDensity
Gets the gas density from the fluid.- Parameters:
fluid- thermodynamic systempressure- pressure in Pa- Returns:
- gas density in kg/m3
-
getLiquidDensity
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 systemP1- upstream pressure in PaP2- downstream pressure in ParhoLiquid- 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 systemP1- upstream pressure in PaP2- downstream pressure in ParhoGas1- upstream gas density in kg/m3gamma- 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 throatgasVoidFraction- volumetric gas fraction at throat- Returns:
- adjusted discharge coefficient
-
getModelName
Returns the name of this choke flow model.- Specified by:
getModelNamein classMultiphaseChokeFlow- Returns:
- model name
-