Class ScrubColumn

All Implemented Interfaces:
Serializable, Runnable, DistillationInterface, ProcessEquipmentInterface, ProcessElementInterface, SimulationInterface, NamedInterface

public class ScrubColumn extends DistillationColumn
LNG scrub column model for heavy hydrocarbon removal prior to liquefaction.

The scrub column removes C5+ (and optionally C3+/C4+) heavy hydrocarbons from the feed gas before it enters the main cryogenic heat exchanger. This prevents freeze-out of heavy hydrocarbons (particularly benzene, cyclohexane) in the MCHE at cryogenic temperatures.

This class extends DistillationColumn and adds:

  • Heavy key component specification (e.g., "n-pentane", "i-pentane")
  • Freeze-out temperature checking at column bottoms
  • Maximum allowable heavy component fraction in overhead gas
  • NGL recovery tracking for the bottoms product
Version:
1.0
Author:
NeqSim
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • logger

      private static final org.apache.logging.log4j.Logger logger
    • heavyKeyComponent

      private String heavyKeyComponent
      Heavy key component name (e.g., "n-pentane").
    • maxHeavyKeyInOverhead

      private double maxHeavyKeyInOverhead
      Maximum allowable mole fraction of heavy key in overhead gas.
    • minimumBottomsTemperature

      private double minimumBottomsTemperature
      Minimum column bottoms temperature to avoid freeze-out (K).
    • freezeOutRisk

      private boolean freezeOutRisk
      Whether freeze-out risk was detected in the last run.
    • freezeOutTemperature

      private double freezeOutTemperature
      Freeze-out temperature of the critical component (K).
    • nglRecovery

      private double nglRecovery
      NGL recovery fraction (moles heavy in bottoms / moles heavy in feed).
    • heavyKeyInOverheadMolFrac

      private double heavyKeyInOverheadMolFrac
      Heavy key mole fraction in overhead after run.
  • Constructor Details

    • ScrubColumn

      public ScrubColumn(String name, int numberOfTrays, boolean hasReboiler, boolean hasCondenser)
      Constructor for ScrubColumn.
      Parameters:
      name - name of the scrub column
      numberOfTrays - number of theoretical trays (excluding condenser/reboiler)
      hasReboiler - set true to include a reboiler
      hasCondenser - set true to include a condenser
  • Method Details

    • setHeavyKeyComponent

      public void setHeavyKeyComponent(String componentName)
      Set the heavy key component for separation specification.
      Parameters:
      componentName - name of the heavy key component (e.g., "n-pentane")
    • getHeavyKeyComponent

      public String getHeavyKeyComponent()
      Get the heavy key component name.
      Returns:
      heavy key component name
    • setMaxHeavyKeyInOverhead

      public void setMaxHeavyKeyInOverhead(double maxFraction)
      Set the maximum allowable mole fraction of the heavy key in the overhead gas.
      Parameters:
      maxFraction - maximum mole fraction (e.g., 0.001 for 0.1%)
    • getMaxHeavyKeyInOverhead

      public double getMaxHeavyKeyInOverhead()
      Get the maximum allowable heavy key mole fraction in overhead.
      Returns:
      maximum mole fraction
    • setMinimumBottomsTemperature

      public void setMinimumBottomsTemperature(double temperature, String unit)
      Set the minimum bottoms temperature to avoid freeze-out.
      Parameters:
      temperature - minimum temperature
      unit - temperature unit ("K" or "C")
    • getMinimumBottomsTemperature

      public double getMinimumBottomsTemperature()
      Get the minimum bottoms temperature.
      Returns:
      minimum bottoms temperature (K)
    • hasFreezeOutRisk

      public boolean hasFreezeOutRisk()
      Check if freeze-out risk was detected in the last run.
      Returns:
      true if freeze-out risk was detected
    • getFreezeOutTemperature

      public double getFreezeOutTemperature()
      Get the freeze-out temperature of the critical component.
      Returns:
      freeze-out temperature (K)
    • getNGLRecovery

      public double getNGLRecovery()
      Get the NGL recovery fraction (heavy components recovered in bottoms).
      Returns:
      NGL recovery fraction (0.0 to 1.0)
    • getHeavyKeyInOverheadMolFrac

      public double getHeavyKeyInOverheadMolFrac()
      Get the heavy key mole fraction in the overhead gas.
      Returns:
      heavy key mole fraction
    • run

      public void run(UUID id)

      In this method all thermodynamic and unit operations will be calculated in a steady state calculation.

      Solve the column until tray temperatures converge. The method applies sequential substitution with an adaptive relaxation controller. Pressures are set linearly between bottom and top. Each iteration performs an upward sweep where liquid flows downward followed by a downward sweep where vapour flows upward. Tray temperatures and inter-tray stream flow rates are relaxed if the combined temperature, mass and energy residuals grow, providing basic line-search behaviour.

      Specified by:
      run in interface SimulationInterface
      Overrides:
      run in class DistillationColumn
      Parameters:
      id - UUID
    • checkHeavyKeyInOverhead

      private void checkHeavyKeyInOverhead(StreamInterface gasOut)
      Check the overhead gas for heavy key component content.
      Parameters:
      gasOut - the gas outlet stream
    • checkFreezeOutRisk

      private void checkFreezeOutRisk(StreamInterface liqOut)
      Check the bottoms liquid for freeze-out risk.
      Parameters:
      liqOut - the liquid outlet stream
    • calculateNGLRecovery

      private void calculateNGLRecovery()
      Calculate the NGL recovery of heavy components in the bottoms product.