Class SeparatorGeometryCalculator

java.lang.Object
neqsim.process.equipment.separator.entrainment.SeparatorGeometryCalculator
All Implemented Interfaces:
Serializable

public class SeparatorGeometryCalculator extends Object implements 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 Details

    • serialVersionUID

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

      private double internalDiameter
    • tangentToTangentLength

      private double tangentToTangentLength
    • orientation

      private String 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

      public String 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

      public void setOrientation(String orientation)
      Sets the vessel orientation.
      Parameters:
      orientation - "horizontal" or "vertical"
    • getOrientation

      public String getOrientation()
      Gets the vessel orientation.
      Returns:
      orientation
    • 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]