Class TrayHydraulicsCalculator

java.lang.Object
neqsim.process.equipment.distillation.internals.TrayHydraulicsCalculator
All Implemented Interfaces:
Serializable

public class TrayHydraulicsCalculator extends Object implements Serializable
Tray hydraulics calculator for distillation column internals sizing.

Calculates per-tray hydraulics for sieve, valve, and bubble-cap trays using industry-standard correlations including:

  • Flooding velocity — Fair correlation (Souders-Brown with tray spacing and FLV correction)
  • Weeping — Sinnott correlation (minimum vapor velocity to prevent liquid weeping)
  • Entrainment — Fair entrainment correlation (fractional entrainment vs percent flood)
  • Downcomer backup — Francis weir formula and backup height calculation
  • Pressure drop — dry tray + liquid head + residual head
  • Tray efficiency — O'Connell correlation (function of relative volatility and viscosity)
  • Turndown ratio — ratio of minimum to design vapor rate

References: Kister, H.Z. "Distillation Design" (1992); Ludwig, E.E. "Applied Process Design vol. 2" (2001); Fair, J.R. Petro/Chem Eng. (1961); Sinnott, R.K. "Chemical Engineering Design" (2005).

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

    • serialVersionUID

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

      private static final org.apache.logging.log4j.Logger logger
      Logger object for class.
    • trayType

      private String trayType
      Tray type: "sieve", "valve", or "bubble-cap".
    • columnDiameter

      private double columnDiameter
      Column internal diameter [m].
    • traySpacing

      private double traySpacing
      Tray spacing [m].
    • weirHeight

      private double weirHeight
      Weir height [m].
    • weirLength

      private double weirLength
      Weir length [m]. Set < 0 to auto-calculate as 0.73 * diameter.
    • downcommerAreaFraction

      private double downcommerAreaFraction
      Downcomer area as fraction of total column area.
    • holeDiameter

      private double holeDiameter
      Hole diameter [mm] (sieve trays).
    • holeAreaFraction

      private double holeAreaFraction
      Hole area as fraction of active area (sieve trays: 0.05-0.16, typical 0.10).
    • activeAreaFraction

      private double activeAreaFraction
      Active area as fraction of total column area (1 - 2 * downcomer fraction).
    • designFloodFraction

      private double designFloodFraction
      Design flooding fraction (0.70-0.85 typical).
    • vaporMassFlow

      private double vaporMassFlow
      Vapor mass flow rate [kg/s].
    • liquidMassFlow

      private double liquidMassFlow
      Liquid mass flow rate [kg/s].
    • vaporDensity

      private double vaporDensity
      Vapor density [kg/m3].
    • liquidDensity

      private double liquidDensity
      Liquid density [kg/m3].
    • liquidViscosity

      private double liquidViscosity
      Liquid viscosity [Pa.s].
    • surfaceTension

      private double surfaceTension
      Liquid surface tension [N/m].
    • relativeVolatility

      private double relativeVolatility
      Relative volatility of key components.
    • totalArea

      private double totalArea
      Total column cross-sectional area [m2].
    • activeArea

      private double activeArea
      Active (bubbling) area [m2].
    • downcommerArea

      private double downcommerArea
      Downcomer area (one side) [m2].
    • holeArea

      private double holeArea
      Hole area [m2] (sieve trays).
    • floodingVelocity

      private double floodingVelocity
      Flooding velocity based on net area [m/s].
    • actualVaporVelocity

      private double actualVaporVelocity
      Actual vapor velocity through net area [m/s].
    • percentFlood

      private double percentFlood
      Percent of flooding [%].
    • minimumVaporVelocity

      private double minimumVaporVelocity
      Minimum vapor velocity before weeping [m/s] (sieve trays).
    • weepingOk

      private boolean weepingOk
      Weeping check: true if actual velocity is above minimum.
    • entrainment

      private double entrainment
      Fractional liquid entrainment (mol liquid/mol vapor).
    • entrainmentOk

      private boolean entrainmentOk
      Entrainment check: true if entrainment < 0.1 (10%).
    • downcommerBackup

      private double downcommerBackup
      Total downcomer backup [m of clear liquid].
    • downcommerBackupFraction

      private double downcommerBackupFraction
      Downcomer backup as fraction of tray spacing + weir height.
    • downcommerBackupOk

      private boolean downcommerBackupOk
      Downcomer backup check: true if backup < 50% of (spacing + weir height).
    • weirCrest

      private double weirCrest
      Weir loading (crest over weir) [m3/s per m of weir length].
    • dryTrayPressureDrop

      private double dryTrayPressureDrop
      Dry tray pressure drop [Pa].
    • liquidHeadPressureDrop

      private double liquidHeadPressureDrop
      Liquid head on tray [Pa].
    • residualHeadPressureDrop

      private double residualHeadPressureDrop
      Residual head pressure drop [Pa].
    • totalTrayPressureDrop

      private double totalTrayPressureDrop
      Total tray pressure drop [Pa].
    • trayEfficiency

      private double trayEfficiency
      Tray efficiency (O'Connell).
    • turndownRatio

      private double turndownRatio
      Turndown ratio (min vapor/design vapor).
    • fsFactor

      private double fsFactor
      F-factor = u_v * sqrt(rho_v) [Pa^0.5].
    • calculatedWeirLength

      private double calculatedWeirLength
      Calculated weir length [m].
    • designOk

      private boolean designOk
      Overall design verdict: true if all checks pass.
  • Constructor Details

    • TrayHydraulicsCalculator

      public TrayHydraulicsCalculator()
      Default constructor.
  • Method Details

    • calculate

      public void calculate()
      Perform all tray hydraulic calculations.

      Call this after setting all geometry and operating parameters. Results are available through getter methods.

    • calculateAreas

      private void calculateAreas()
      Calculate all tray areas from geometry.
    • calculateFloodingVelocity

      private void calculateFloodingVelocity()
      Calculate flooding velocity using the Fair correlation.

      Uses the Souders-Brown equation with the capacity factor K from the Fair plot as a function of tray spacing and flow parameter (FLV). Surface tension correction is applied per the Kister-Haas modification.

    • getCapacityFactor

      private double getCapacityFactor(double spacing, double flv)
      Get the Fair capacity factor K as a function of tray spacing and flow parameter.

      Implements a curve fit to the Fair flooding correlation for sieve trays. Data from Kister (1992), Table 6.3.

      Parameters:
      spacing - tray spacing [m]
      flv - flow parameter [-]
      Returns:
      capacity factor K [m/s]
    • calculateActualVelocity

      private void calculateActualVelocity()
      Calculate actual vapor velocity and percent flooding.
    • calculateWeepingCheck

      private void calculateWeepingCheck()
      Check for weeping condition (sieve and valve trays).

      Uses the Sinnott correlation: minimum vapor velocity through holes to prevent weeping: u_min = [K_w - 0.90 * (25.4 - d_h)] / sqrt(rho_v), where K_w is from the weeping chart.

    • calculateEntrainment

      private void calculateEntrainment()
      Calculate entrainment using Fair's correlation.

      Fractional entrainment (psi) as a function of percent flood and flow parameter. High entrainment (> 0.1) reduces tray efficiency.

    • calculatePressureDrop

      private void calculatePressureDrop()
      Calculate tray pressure drop components.

      Total tray DP = dry tray DP + liquid head + residual head. Dry tray DP uses the orifice equation. Liquid head includes weir crest. Residual head accounts for surface tension at hole rim.

    • getOrificeCoefficient

      private double getOrificeCoefficient()
      Get the orifice discharge coefficient for the tray type.
      Returns:
      orifice coefficient Co
    • calculateDowncommerBackup

      private void calculateDowncommerBackup()
      Calculate downcomer backup height.

      Downcomer backup = tray pressure drop (as liquid head) + liquid head in downcomer + friction under downcomer. Must be less than tray spacing + weir height to prevent flooding.

    • calculateTrayEfficiency

      private void calculateTrayEfficiency()
      Calculate tray efficiency using the O'Connell correlation.

      E_o = 51 - 32.5 * log10(alpha * mu_L) where alpha is relative volatility and mu_L is liquid viscosity in centipoise. Valid range: alpha*mu from 0.1 to 10.

    • calculateTurndownRatio

      private void calculateTurndownRatio()
      Calculate turndown ratio.
    • assessDesign

      private void assessDesign()
      Assess overall design feasibility.
    • sizeColumnDiameter

      public double sizeColumnDiameter()
      Size column diameter for a given design flooding fraction.

      Given the operating conditions, calculates the minimum column diameter required to stay below the design flooding fraction. The diameter is rounded up to the nearest standard vessel size.

      Returns:
      required column diameter [m]
    • roundToStandardDiameter

      private double roundToStandardDiameter(double diameter)
      Round diameter to nearest standard vessel size (API/ASME).
      Parameters:
      diameter - raw diameter in meters
      Returns:
      nearest standard diameter in meters (rounded up)
    • getTrayType

      public String getTrayType()
      Get the tray type.
      Returns:
      tray type string
    • setTrayType

      public void setTrayType(String trayType)
      Set tray type: "sieve", "valve", or "bubble-cap".
      Parameters:
      trayType - the tray type
    • getColumnDiameter

      public double getColumnDiameter()
      Get column diameter [m].
      Returns:
      column diameter
    • setColumnDiameter

      public void setColumnDiameter(double columnDiameter)
      Set column diameter [m].
      Parameters:
      columnDiameter - column internal diameter
    • getTraySpacing

      public double getTraySpacing()
      Get tray spacing [m].
      Returns:
      tray spacing
    • setTraySpacing

      public void setTraySpacing(double traySpacing)
      Set tray spacing [m].
      Parameters:
      traySpacing - tray spacing
    • getWeirHeight

      public double getWeirHeight()
      Get weir height [m].
      Returns:
      weir height
    • setWeirHeight

      public void setWeirHeight(double weirHeight)
      Set weir height [m].
      Parameters:
      weirHeight - weir height
    • setWeirLength

      public void setWeirLength(double weirLength)
      Set weir length [m]. Use -1 for automatic calculation (0.73 * diameter).
      Parameters:
      weirLength - weir length or -1 for auto
    • getDowncommerAreaFraction

      public double getDowncommerAreaFraction()
      Get the downcomer area fraction.
      Returns:
      downcomer area fraction
    • setDowncommerAreaFraction

      public void setDowncommerAreaFraction(double fraction)
      Set the downcomer area fraction (typically 0.08-0.12).
      Parameters:
      fraction - downcomer area fraction
    • setHoleDiameter

      public void setHoleDiameter(double holeDiameter)
      Set hole diameter [mm] (sieve trays).
      Parameters:
      holeDiameter - hole diameter in mm
    • setHoleAreaFraction

      public void setHoleAreaFraction(double fraction)
      Set hole area fraction (sieve trays, typical 0.05-0.16).
      Parameters:
      fraction - hole area as fraction of active area
    • setDesignFloodFraction

      public void setDesignFloodFraction(double fraction)
      Set design flooding fraction (0.70-0.85).
      Parameters:
      fraction - design flooding fraction
    • setVaporMassFlow

      public void setVaporMassFlow(double flow)
      Set vapor mass flow [kg/s].
      Parameters:
      flow - vapor mass flow rate
    • setLiquidMassFlow

      public void setLiquidMassFlow(double flow)
      Set liquid mass flow [kg/s].
      Parameters:
      flow - liquid mass flow rate
    • setVaporDensity

      public void setVaporDensity(double density)
      Set vapor density [kg/m3].
      Parameters:
      density - vapor density
    • setLiquidDensity

      public void setLiquidDensity(double density)
      Set liquid density [kg/m3].
      Parameters:
      density - liquid density
    • setLiquidViscosity

      public void setLiquidViscosity(double viscosity)
      Set liquid viscosity [Pa.s].
      Parameters:
      viscosity - liquid dynamic viscosity
    • setSurfaceTension

      public void setSurfaceTension(double tension)
      Set liquid surface tension [N/m].
      Parameters:
      tension - surface tension
    • setRelativeVolatility

      public void setRelativeVolatility(double alpha)
      Set relative volatility of key components.
      Parameters:
      alpha - relative volatility
    • getFloodingVelocity

      public double getFloodingVelocity()
      Get flooding velocity [m/s].
      Returns:
      flooding velocity based on net area
    • getActualVaporVelocity

      public double getActualVaporVelocity()
      Get actual vapor velocity through net area [m/s].
      Returns:
      actual vapor velocity
    • getPercentFlood

      public double getPercentFlood()
      Get percent of flooding [%].
      Returns:
      percent flood
    • getMinimumVaporVelocity

      public double getMinimumVaporVelocity()
      Get minimum vapor velocity to prevent weeping [m/s].
      Returns:
      minimum velocity based on net area
    • isWeepingOk

      public boolean isWeepingOk()
      Check if tray is above the weeping point.
      Returns:
      true if no weeping
    • getEntrainment

      public double getEntrainment()
      Get fractional entrainment.
      Returns:
      fractional liquid entrainment (mol/mol)
    • isEntrainmentOk

      public boolean isEntrainmentOk()
      Check if entrainment is below the 10% threshold.
      Returns:
      true if entrainment is acceptable
    • getDowncommerBackup

      public double getDowncommerBackup()
      Get the total downcomer backup [m of clear liquid].
      Returns:
      downcomer backup height
    • getDowncommerBackupFraction

      public double getDowncommerBackupFraction()
      Get downcomer backup as fraction of available height.
      Returns:
      downcomer backup fraction
    • isDowncommerBackupOk

      public boolean isDowncommerBackupOk()
      Check if downcomer backup is within limits.
      Returns:
      true if backup is acceptable
    • getTotalTrayPressureDrop

      public double getTotalTrayPressureDrop()
      Get total tray pressure drop [Pa].
      Returns:
      total tray pressure drop
    • getTotalTrayPressureDropMbar

      public double getTotalTrayPressureDropMbar()
      Get total tray pressure drop in mbar.
      Returns:
      total tray pressure drop in mbar
    • getDryTrayPressureDrop

      public double getDryTrayPressureDrop()
      Get dry tray pressure drop [Pa].
      Returns:
      dry tray pressure drop
    • getLiquidHeadPressureDrop

      public double getLiquidHeadPressureDrop()
      Get liquid head pressure drop component [Pa].
      Returns:
      liquid head pressure drop
    • getResidualHeadPressureDrop

      public double getResidualHeadPressureDrop()
      Get residual head pressure drop component [Pa].
      Returns:
      residual head pressure drop
    • getTrayEfficiency

      public double getTrayEfficiency()
      Get tray efficiency (O'Connell).
      Returns:
      tray efficiency (0-1)
    • getFsFactor

      public double getFsFactor()
      Get the F-factor (Fs = u_v * sqrt(rho_v)).
      Returns:
      F-factor [Pa^0.5]
    • getTurndownRatio

      public double getTurndownRatio()
      Get the turndown ratio (min velocity / actual velocity).
      Returns:
      turndown ratio
    • getCalculatedWeirLength

      public double getCalculatedWeirLength()
      Get the calculated weir length [m].
      Returns:
      weir length
    • getActiveArea

      public double getActiveArea()
      Get the active area [m2].
      Returns:
      active bubbling area
    • getTotalArea

      public double getTotalArea()
      Get the total column area [m2].
      Returns:
      total cross-sectional area
    • getHoleArea

      public double getHoleArea()
      Get the hole area [m2].
      Returns:
      hole (or slot) area
    • getDowncommerArea

      public double getDowncommerArea()
      Get the downcomer area (one side) [m2].
      Returns:
      downcomer area
    • isDesignOk

      public boolean isDesignOk()
      Check if overall design is feasible.
      Returns:
      true if all hydraulic checks pass