Class ShortcutDistillationColumn

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

public class ShortcutDistillationColumn extends ProcessEquipmentBaseClass implements DistillationInterface
Short-cut distillation column using the Fenske-Underwood-Gilliland (FUG) method.

This class provides rapid conceptual design estimates for distillation columns without requiring full rigorous tray-by-tray calculations. It calculates:

  • Minimum number of stages (Fenske equation)
  • Minimum reflux ratio (Underwood equations)
  • Actual number of stages for a given reflux ratio (Gilliland correlation)
  • Optimal feed tray location (Kirkbride equation)
  • Condenser and reboiler duties

The user must specify the light key component, heavy key component, and desired recoveries or product compositions. The column operates at the feed pressure.

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

    • serialVersionUID

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

      static org.apache.logging.log4j.Logger logger
      Logger object for class.
    • feedStream

      private StreamInterface feedStream
      Feed stream.
    • lightKey

      private String lightKey
      Light key component name.
    • heavyKey

      private String heavyKey
      Heavy key component name.
    • lightKeyRecoveryDistillate

      private double lightKeyRecoveryDistillate
      Recovery of light key in distillate (molar fraction, 0 to 1).
    • heavyKeyRecoveryBottoms

      private double heavyKeyRecoveryBottoms
      Recovery of heavy key in bottoms (molar fraction, 0 to 1).
    • refluxRatioMultiplier

      private double refluxRatioMultiplier
      Reflux ratio multiplier (actual / minimum).
    • condenserPressure

      private double condenserPressure
      Condenser pressure in bara.
    • reboilerPressure

      private double reboilerPressure
      Reboiler pressure in bara (default = feed pressure).
    • nMin

      private double nMin
      Minimum number of theoretical stages (Fenske).
    • rMin

      private double rMin
      Minimum reflux ratio (Underwood).
    • nActual

      private double nActual
      Actual number of theoretical stages (Gilliland).
    • rActual

      private double rActual
      Actual reflux ratio.
    • feedTrayNumber

      private int feedTrayNumber
      Optimal feed tray number from top (Kirkbride).
    • condenserDuty

      private double condenserDuty
      Condenser duty in Watts.
    • reboilerDuty

      private double reboilerDuty
      Reboiler duty in Watts.
    • alphaLKHK

      private double alphaLKHK
      Relative volatility of light key to heavy key.
    • distillateStream

      private StreamInterface distillateStream
      Distillate stream.
    • bottomsStream

      private StreamInterface bottomsStream
      Bottoms stream.
    • solved

      private boolean solved
      Flag indicating if the column has been solved.
  • Constructor Details

    • ShortcutDistillationColumn

      public ShortcutDistillationColumn(String name)
      Constructor for ShortcutDistillationColumn.
      Parameters:
      name - column name
    • ShortcutDistillationColumn

      public ShortcutDistillationColumn(String name, StreamInterface feedStream)
      Constructor for ShortcutDistillationColumn.
      Parameters:
      name - column name
      feedStream - the feed stream
  • Method Details

    • setFeedStream

      public void setFeedStream(StreamInterface feedStream)
      Set the feed stream.
      Parameters:
      feedStream - the feed stream
    • setLightKey

      public void setLightKey(String componentName)
      Set the light key component.
      Parameters:
      componentName - light key component name
    • setHeavyKey

      public void setHeavyKey(String componentName)
      Set the heavy key component.
      Parameters:
      componentName - heavy key component name
    • setLightKeyRecoveryDistillate

      public void setLightKeyRecoveryDistillate(double recovery)
      Set the recovery of light key in the distillate (mole fraction 0 to 1).
      Parameters:
      recovery - light key recovery in distillate (default 0.99)
    • setHeavyKeyRecoveryBottoms

      public void setHeavyKeyRecoveryBottoms(double recovery)
      Set the recovery of heavy key in the bottoms (mole fraction 0 to 1).
      Parameters:
      recovery - heavy key recovery in bottoms (default 0.99)
    • setRefluxRatioMultiplier

      public void setRefluxRatioMultiplier(double multiplier)
      Set the reflux ratio multiplier (R_actual / R_minimum). Default is 1.2.
      Parameters:
      multiplier - ratio of actual to minimum reflux (must be > 1.0)
    • setCondenserPressure

      public void setCondenserPressure(double pressure)
      Set the condenser pressure.
      Parameters:
      pressure - condenser pressure in bara
    • setCondenserPressure

      public void setCondenserPressure(double pressure, String unit)
      Set the condenser pressure with units.
      Parameters:
      pressure - condenser pressure
      unit - pressure unit (e.g., "bara", "barg")
    • setReboilerPressure

      public void setReboilerPressure(double pressure)
      Set the reboiler pressure.
      Parameters:
      pressure - reboiler pressure in bara
    • setNumberOfTrays

      public void setNumberOfTrays(int number)

      setNumberOfTrays.

      Specified by:
      setNumberOfTrays in interface DistillationInterface
      Parameters:
      number - a int
    • run

      public void run(UUID id)

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

      Specified by:
      run in interface SimulationInterface
      Parameters:
      id - UUID
    • computeFeedQuality

      private double computeFeedQuality(SystemInterface feedFluid)
      Compute feed quality parameter q. q = 1 for saturated liquid, q = 0 for saturated vapor.
      Parameters:
      feedFluid - the feed fluid after flash
      Returns:
      feed quality q
    • solveUnderwood

      private double solveUnderwood(double[] alpha, double[] zFeed, double q, int n)
      Solve the Underwood equation for theta using bisection.
      Parameters:
      alpha - relative volatilities
      zFeed - feed composition
      q - feed quality
      n - number of components
      Returns:
      theta value
    • underwoodFunction

      private double underwoodFunction(double[] alpha, double[] zFeed, double theta, double q, int n)
      Evaluate the Underwood function: sum(alpha_i * z_i / (alpha_i - theta)) - (1 - q).
      Parameters:
      alpha - relative volatilities
      zFeed - feed composition
      theta - current theta estimate
      q - feed quality
      n - number of components
      Returns:
      function value
    • estimateDistillateComposition

      private double[] estimateDistillateComposition(double[] zFeed, double[] alpha, int n, int lkIdx, int hkIdx)
      Estimate distillate composition based on key component recoveries.
      Parameters:
      zFeed - feed composition
      alpha - relative volatilities
      n - number of components
      lkIdx - light key index
      hkIdx - heavy key index
      Returns:
      estimated distillate mole fractions (normalized)
    • computeBottomsToDistillateRatio

      private double computeBottomsToDistillateRatio(double[] zFeed, double[] alpha, int n, int lkIdx, int hkIdx)
      Compute bottoms to distillate molar ratio.
      Parameters:
      zFeed - feed composition
      alpha - relative volatilities
      n - number of components
      lkIdx - light key index
      hkIdx - heavy key index
      Returns:
      B/D ratio
    • computeDuties

      private void computeDuties(SystemInterface feedFluid, double reflux, double[] zFeed, double[] xD, int n, int lkIdx, int hkIdx)
      Compute condenser and reboiler duties.
      Parameters:
      feedFluid - the feed fluid
      reflux - actual reflux ratio
      zFeed - feed composition
      xD - distillate composition
      n - number of components
      lkIdx - light key index
      hkIdx - heavy key index
    • computeDistillateTotalFraction

      private double computeDistillateTotalFraction(double[] zFeed, int n, int lkIdx, int hkIdx)
      Compute total distillate fraction.
      Parameters:
      zFeed - feed composition
      n - number of components
      lkIdx - light key index
      hkIdx - heavy key index
      Returns:
      total distillate fraction
    • createOutputStreams

      private void createOutputStreams(SystemInterface feedFluid, double[] zFeed, double[] xD, int n, int lkIdx, int hkIdx)
      Create output streams for distillate and bottoms.
      Parameters:
      feedFluid - feed fluid
      zFeed - feed composition
      xD - distillate composition
      n - number of components
      lkIdx - light key index
      hkIdx - heavy key index
    • getMinimumNumberOfStages

      public double getMinimumNumberOfStages()
      Get the minimum number of theoretical stages (Fenske).
      Returns:
      minimum number of stages
    • getMinimumRefluxRatio

      public double getMinimumRefluxRatio()
      Get the minimum reflux ratio (Underwood).
      Returns:
      minimum reflux ratio
    • getActualNumberOfStages

      public double getActualNumberOfStages()
      Get the actual number of theoretical stages (Gilliland).
      Returns:
      actual number of stages
    • getActualRefluxRatio

      public double getActualRefluxRatio()
      Get the actual reflux ratio.
      Returns:
      actual reflux ratio
    • getFeedTrayNumber

      public int getFeedTrayNumber()
      Get the optimal feed tray number from the top.
      Returns:
      feed tray number
    • getCondenserDuty

      public double getCondenserDuty()
      Get the condenser duty in Watts.
      Returns:
      condenser duty (negative = heat removed)
    • getReboilerDuty

      public double getReboilerDuty()
      Get the reboiler duty in Watts.
      Returns:
      reboiler duty (positive = heat added)
    • getRelativeVolatility

      public double getRelativeVolatility()
      Get the relative volatility of light key to heavy key.
      Returns:
      alpha_LK/HK
    • getDistillateStream

      public StreamInterface getDistillateStream()
      Get the distillate (overhead) stream.
      Returns:
      distillate stream
    • getBottomsStream

      public StreamInterface getBottomsStream()
      Get the bottoms stream.
      Returns:
      bottoms stream
    • isSolved

      public boolean isSolved()
      Check if the column has been solved.
      Returns:
      true if solved
    • getResultsJson

      public String getResultsJson()
      Get a complete results summary as JSON string.
      Returns:
      JSON string with all FUG results
    • toJson

      public String toJson()

      Serializes the Process Equipment along with its state to a JSON string.

      Specified by:
      toJson in interface ProcessEquipmentInterface
      Overrides:
      toJson in class ProcessEquipmentBaseClass
      Returns:
      json string.