Class SeparatorGeometryCalculator
java.lang.Object
neqsim.process.equipment.separator.entrainment.SeparatorGeometryCalculator
- All Implemented Interfaces:
Serializable
Precise separator geometry calculations for horizontal and vertical vessels.
This class computes the gas and liquid volumes, cross-sectional areas, effective settling heights, and residence times needed for accurate separation performance prediction in both horizontal and vertical separators.
Horizontal Separator Geometry:For a horizontal vessel with liquid level at height h in a cylinder of diameter D, the liquid and gas cross-sectional areas are computed from circular segment geometry:
$$ A_{liq} = \frac{D^2}{4}\left[\cos^{-1}\left(\frac{D-2h}{D}\right) - \frac{(D-2h)}{D}\sqrt{1-\left(\frac{D-2h}{D}\right)^2}\right] $$ $$ A_{gas} = \frac{\pi D^2}{4} - A_{liq} $$ Vertical Separator Geometry:For vertical vessels, the gas and liquid occupy the full cross section at different heights. The gas residence time depends on the gas travel height above the liquid level to the mist eliminator.
References:
- Arnold, K., Stewart, M. (2008), Surface Production Operations, Vol. 1, Gulf Professional Publishing.
- Svrcek, W.Y., Monnery, W.D. (1993), "Design Two-Phase Separators within the Right Limits", Chemical Engineering Progress, October, 53-60.
- API RP 12J (2008), "Specification for Oil and Gas Separators".
- Version:
- 1.0
- Author:
- NeqSim team
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate Stringprivate static final longSerialization version UID.private doubleprivate doubleprivate doubleprivate doubleprivate double -
Constructor Summary
ConstructorsConstructorDescriptionCreates a default SeparatorGeometryCalculator. -
Method Summary
Modifier and TypeMethodDescriptionstatic doublecalcKFactor(double gasVelocity, double gasDensity, double liquidDensity) Calculates the Souders-Brown K-factor for the current gas velocity and phase properties. $$ K = V_g \sqrt{\frac{\rho_g}{\rho_l - \rho_g}} $$static doublecalcSegmentArea(double diameter, double height) Calculates the area of a circular segment for liquid height h in a circle of diameter D.voidcalculate(double gasVolumeFlow, double liquidVolumeFlow) Calculates all geometry parameters for a two-phase separator.private voidcalculateHorizontal(double gasVolumeFlow, double liquidVolumeFlow) Calculates geometry for a horizontal two-phase separator.private voidcalculateHorizontalThreePhase(double gasVolumeFlow, double oilVolumeFlow, double waterVolumeFlow, double oilLevelFraction) Calculates geometry for a horizontal three-phase separator with weir.voidcalculateThreePhase(double gasVolumeFlow, double oilVolumeFlow, double waterVolumeFlow, double oilLevelFraction) Calculates all geometry parameters for a three-phase separator.private voidcalculateVertical(double gasVolumeFlow, double liquidVolumeFlow) Calculates geometry for a vertical two-phase separator.doubleGets the effective gas settling height.doubleGets the effective liquid settling height.doubleGets the calculated gas cross-sectional area.doubleGets the gas residence time in the gravity section.doubleGets the gas volume.doubleGets the effective gravity section length.doubleGets the inlet nozzle diameter.doubleGets the vessel internal diameter.doubleGets the calculated liquid cross-sectional area.doubleGets the liquid retention time.doubleGets the liquid volume.doubleGets the normal liquid level fraction.doubleGets the oil pad thickness (three-phase only).Gets the vessel orientation.doubleGets the tangent-to-tangent length.doubleGets the water layer height (three-phase only).voidsetHighLiquidLevel(double fraction) Sets the high liquid level fraction.voidsetInletNozzleDiameter(double diameter) Sets the inlet nozzle diameter.voidsetInternalDiameter(double internalDiameter) Sets the vessel internal diameter.voidsetLowLiquidLevel(double fraction) Sets the low liquid level fraction.voidsetMistEliminatorPosition(double fraction) Sets the mist eliminator position as a fraction of T-T length from inlet.voidsetNormalLiquidLevel(double fraction) Sets the normal liquid level as a fraction of diameter (horizontal) or total height (vertical).voidsetOrientation(String orientation) Sets the vessel orientation.voidsetTangentToTangentLength(double length) Sets the tangent-to-tangent length.voidsetWeirPosition(double fraction) Sets the weir position as a fraction of T-T length from inlet.toJson()Returns a JSON representation of all calculated geometric parameters.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
internalDiameter
private double internalDiameter -
tangentToTangentLength
private double tangentToTangentLength -
orientation
-
normalLiquidLevel
private double normalLiquidLevel -
highLiquidLevel
private double highLiquidLevel -
lowLiquidLevel
private double lowLiquidLevel -
inletDevicePosition
private double inletDevicePosition -
mistEliminatorPosition
private double mistEliminatorPosition -
weirPosition
private double weirPosition -
inletNozzleDiameter
private double inletNozzleDiameter -
gasOutletNozzleDiameter
private double gasOutletNozzleDiameter -
liquidOutletNozzleDiameter
private double liquidOutletNozzleDiameter -
gasArea
private double gasArea -
liquidArea
private double liquidArea -
totalArea
private double totalArea -
gasVolume
private double gasVolume -
liquidVolume
private double liquidVolume -
totalVolume
private double totalVolume -
effectiveGasSettlingHeight
private double effectiveGasSettlingHeight -
effectiveLiquidSettlingHeight
private double effectiveLiquidSettlingHeight -
gasResidenceTime
private double gasResidenceTime -
liquidResidenceTime
private double liquidResidenceTime -
gravitySectionLength
private double gravitySectionLength -
oilPadThickness
private double oilPadThickness -
waterLayerHeight
private double waterLayerHeight
-
-
Constructor Details
-
SeparatorGeometryCalculator
public SeparatorGeometryCalculator()Creates a default SeparatorGeometryCalculator.
-
-
Method Details
-
calculate
public void calculate(double gasVolumeFlow, double liquidVolumeFlow) Calculates all geometry parameters for a two-phase separator.- Parameters:
gasVolumeFlow- actual gas volume flow rate [m3/s]liquidVolumeFlow- actual liquid volume flow rate [m3/s]
-
calculateThreePhase
public void calculateThreePhase(double gasVolumeFlow, double oilVolumeFlow, double waterVolumeFlow, double oilLevelFraction) Calculates all geometry parameters for a three-phase separator.- Parameters:
gasVolumeFlow- actual gas volume flow rate [m3/s]oilVolumeFlow- actual oil volume flow rate [m3/s]waterVolumeFlow- actual water volume flow rate [m3/s]oilLevelFraction- fraction of liquid height occupied by oil (above weir height)
-
calculateHorizontal
private void calculateHorizontal(double gasVolumeFlow, double liquidVolumeFlow) Calculates geometry for a horizontal two-phase separator.- Parameters:
gasVolumeFlow- gas flow [m3/s]liquidVolumeFlow- liquid flow [m3/s]
-
calculateHorizontalThreePhase
private void calculateHorizontalThreePhase(double gasVolumeFlow, double oilVolumeFlow, double waterVolumeFlow, double oilLevelFraction) Calculates geometry for a horizontal three-phase separator with weir.- Parameters:
gasVolumeFlow- gas flow [m3/s]oilVolumeFlow- oil flow [m3/s]waterVolumeFlow- water flow [m3/s]oilLevelFraction- fraction of total liquid height that is oil
-
calculateVertical
private void calculateVertical(double gasVolumeFlow, double liquidVolumeFlow) Calculates geometry for a vertical two-phase separator.- Parameters:
gasVolumeFlow- gas flow [m3/s]liquidVolumeFlow- liquid flow [m3/s]
-
calcSegmentArea
public static double calcSegmentArea(double diameter, double height) Calculates the area of a circular segment for liquid height h in a circle of diameter D.Uses the standard circular segment formula:
$$ A = \frac{R^2}{2}\left(\theta - \sin\theta\right) $$where theta = 2 * arccos((R - h) / R) and R = D/2.
- Parameters:
diameter- vessel internal diameter [m]height- liquid height from bottom [m]- Returns:
- segment area [m2]
-
calcKFactor
public static double calcKFactor(double gasVelocity, double gasDensity, double liquidDensity) Calculates the Souders-Brown K-factor for the current gas velocity and phase properties. $$ K = V_g \sqrt{\frac{\rho_g}{\rho_l - \rho_g}} $$- Parameters:
gasVelocity- actual gas velocity in gas section [m/s]gasDensity- gas density [kg/m3]liquidDensity- liquid density [kg/m3]- Returns:
- K-factor [m/s]
-
toJson
Returns a JSON representation of all calculated geometric parameters.- Returns:
- JSON string
-
setInternalDiameter
public void setInternalDiameter(double internalDiameter) Sets the vessel internal diameter.- Parameters:
internalDiameter- [m]
-
getInternalDiameter
public double getInternalDiameter()Gets the vessel internal diameter.- Returns:
- internal diameter [m]
-
setTangentToTangentLength
public void setTangentToTangentLength(double length) Sets the tangent-to-tangent length.- Parameters:
length- [m]
-
getTangentToTangentLength
public double getTangentToTangentLength()Gets the tangent-to-tangent length.- Returns:
- T-T length [m]
-
setOrientation
Sets the vessel orientation.- Parameters:
orientation- "horizontal" or "vertical"
-
getOrientation
-
setNormalLiquidLevel
public void setNormalLiquidLevel(double fraction) Sets the normal liquid level as a fraction of diameter (horizontal) or total height (vertical).- Parameters:
fraction- [0-1]
-
getNormalLiquidLevel
public double getNormalLiquidLevel()Gets the normal liquid level fraction.- Returns:
- fraction [0-1]
-
setHighLiquidLevel
public void setHighLiquidLevel(double fraction) Sets the high liquid level fraction.- Parameters:
fraction- [0-1]
-
setLowLiquidLevel
public void setLowLiquidLevel(double fraction) Sets the low liquid level fraction.- Parameters:
fraction- [0-1]
-
setInletNozzleDiameter
public void setInletNozzleDiameter(double diameter) Sets the inlet nozzle diameter.- Parameters:
diameter- [m]
-
getInletNozzleDiameter
public double getInletNozzleDiameter()Gets the inlet nozzle diameter.- Returns:
- diameter [m]
-
setWeirPosition
public void setWeirPosition(double fraction) Sets the weir position as a fraction of T-T length from inlet.- Parameters:
fraction- [0-1]
-
setMistEliminatorPosition
public void setMistEliminatorPosition(double fraction) Sets the mist eliminator position as a fraction of T-T length from inlet.- Parameters:
fraction- [0-1]
-
getGasArea
public double getGasArea()Gets the calculated gas cross-sectional area.- Returns:
- gas area [m2]
-
getLiquidArea
public double getLiquidArea()Gets the calculated liquid cross-sectional area.- Returns:
- liquid area [m2]
-
getEffectiveGasSettlingHeight
public double getEffectiveGasSettlingHeight()Gets the effective gas settling height.- Returns:
- height [m]
-
getEffectiveLiquidSettlingHeight
public double getEffectiveLiquidSettlingHeight()Gets the effective liquid settling height.- Returns:
- height [m]
-
getGasResidenceTime
public double getGasResidenceTime()Gets the gas residence time in the gravity section.- Returns:
- time [s]
-
getLiquidResidenceTime
public double getLiquidResidenceTime()Gets the liquid retention time.- Returns:
- time [s]
-
getGravitySectionLength
public double getGravitySectionLength()Gets the effective gravity section length.- Returns:
- length [m]
-
getGasVolume
public double getGasVolume()Gets the gas volume.- Returns:
- gas volume [m3]
-
getLiquidVolume
public double getLiquidVolume()Gets the liquid volume.- Returns:
- liquid volume [m3]
-
getOilPadThickness
public double getOilPadThickness()Gets the oil pad thickness (three-phase only).- Returns:
- oil pad thickness [m]
-
getWaterLayerHeight
public double getWaterLayerHeight()Gets the water layer height (three-phase only).- Returns:
- water layer height [m]
-