Class RateBasedAbsorber

All Implemented Interfaces:
Serializable, Runnable, AutoSizeable, AbsorberInterface, CapacityConstrainedEquipment, ProcessEquipmentInterface, SeparatorInterface, StateVectorProvider, ProcessElementInterface, SimulationInterface, NamedInterface

public class RateBasedAbsorber extends SimpleAbsorber
Rate-based packed column absorber using the two-film model with mass transfer coefficients.

This class implements a rigorous rate-based absorber/stripper model using the two-film theory with Onda (1968) or Billet-Schultes (1999) correlations for mass transfer coefficients. It supports chemical enhancement factors for reactive absorption (e.g., amine-CO2, amine-H2S).

The column is divided into stages (segments), and for each stage the model:

  1. Calculates gas-side and liquid-side mass transfer coefficients (kG, kL)
  2. Applies enhancement factors for chemical reactions
  3. Computes interfacial mass transfer rates using the overall driving force
  4. Performs material and energy balances to update compositions and temperatures

Mass Transfer Correlations

Supported mass transfer models via RateBasedAbsorber.MassTransferModel:

  • ONDA_1968 — Onda, Takeuchi & Okumoto, J. Chem. Eng. Japan, 1(1), 56-62 (1968)
  • BILLET_SCHULTES_1999 — Billet & Schultes, Trans IChemE, 77(A), 498-504 (1999)

Enhancement Factor Models

  • NONE — Physical absorption only (E = 1.0)
  • HATTA_PSEUDO_FIRST_ORDER — E = Ha/tanh(Ha) for pseudo-first-order reactions
  • VAN_KREVELEN_HOFTIJZER — Generalized enhancement for fast reactions with finite reactant

Usage Example

RateBasedAbsorber absorber = new RateBasedAbsorber("CO2 Absorber");
absorber.addGasInStream(sourGas);
absorber.addSolventInStream(leanAmine);
absorber.setNumberOfStages(20);
absorber.setPackedHeight(15.0);
absorber.setColumnDiameter(2.5);
absorber.setMassTransferModel(RateBasedAbsorber.MassTransferModel.ONDA_1968);
absorber.setEnhancementModel(RateBasedAbsorber.EnhancementModel.HATTA_PSEUDO_FIRST_ORDER);
absorber.setReactionRateConstant(5000.0); // 1/s for CO2-MDEA
absorber.run();
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.
    • columnDiameter

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

      private double packedHeight
      Total packed height [m].
    • packingSpecificArea

      private double packingSpecificArea
      Packing specific surface area [m2/m3].
    • packingVoidFraction

      private double packingVoidFraction
      Packing void fraction [-].
    • packingNominalSize

      private double packingNominalSize
      Packing nominal size [m].
    • packingCriticalSurfaceTension

      private double packingCriticalSurfaceTension
      Critical surface tension of packing material [N/m].
    • massTransferModel

      private RateBasedAbsorber.MassTransferModel massTransferModel
      Mass transfer correlation.
    • enhancementModel

      private RateBasedAbsorber.EnhancementModel enhancementModel
      Enhancement factor model.
    • reactionRateConstant

      private double reactionRateConstant
      Second-order reaction rate constant [m3/(mol·s)] for enhancement factor.
    • stoichiometricRatio

      private double stoichiometricRatio
      Stoichiometric ratio (moles of B consumed per mole of A absorbed).
    • billetCL

      private double billetCL
      Billet-Schultes packing constant CL [-].
    • billetCV

      private double billetCV
      Billet-Schultes packing constant CV [-].
    • operatingPressure

      private double operatingPressure
      Column operating pressure [Pa].
    • gasInStream

      private StreamInterface gasInStream
      Gas inlet stream (bottom of column).
    • solventInStream

      private StreamInterface solventInStream
      Solvent inlet stream (top of column).
    • gasOutStream

      private StreamInterface gasOutStream
      Gas outlet stream (top of column).
    • solventOutStream

      private StreamInterface solventOutStream
      Solvent outlet stream (bottom of column).
    • stageResults

      private List<RateBasedAbsorber.StageResult> stageResults
      Stage-by-stage results.
    • overallKGa

      private double overallKGa
      Overall gas-phase mass transfer coefficient times interfacial area [1/s].
    • overallKLa

      private double overallKLa
      Overall liquid-phase mass transfer coefficient times interfacial area [1/s].
    • numberOfTransferUnits

      private double numberOfTransferUnits
      Number of overall gas-phase transfer units [-].
    • heightOfTransferUnit

      private double heightOfTransferUnit
      Height of an overall gas-phase transfer unit [m].
    • wettedArea

      private double wettedArea
      Wetted specific area [m2/m3].
    • columnArea

      private double columnArea
      Column cross-sectional area [m2].
  • Constructor Details

    • RateBasedAbsorber

      public RateBasedAbsorber(String name)
      Constructor for RateBasedAbsorber.
      Parameters:
      name - name of the absorber
  • Method Details

    • addGasInStream

      public void addGasInStream(StreamInterface stream)
      Set the gas inlet stream (enters at column bottom).
      Parameters:
      stream - gas inlet stream
    • addSolventInStream

      public void addSolventInStream(StreamInterface stream)
      Set the solvent inlet stream (enters at column top).
      Parameters:
      stream - solvent inlet stream
    • getGasOutStream

      public StreamInterface getGasOutStream()
      Get the gas outlet stream (exits at column top).
      Overrides:
      getGasOutStream in class Separator
      Returns:
      gas outlet stream
    • getSolventOutStream

      public StreamInterface getSolventOutStream()
      Get the solvent outlet stream (exits at column bottom).
      Returns:
      solvent outlet stream
    • setColumnDiameter

      public void setColumnDiameter(double diameter)
      Set the column internal diameter.
      Parameters:
      diameter - column diameter in meters
    • getColumnDiameter

      public double getColumnDiameter()
      Get the column internal diameter.
      Returns:
      column diameter in meters
    • setPackedHeight

      public void setPackedHeight(double height)
      Set the total packed height.
      Parameters:
      height - packed height in meters
    • getPackedHeight

      public double getPackedHeight()
      Get the total packed height.
      Returns:
      packed height in meters
    • setPackingSpecificArea

      public void setPackingSpecificArea(double area)
      Set the packing specific surface area.
      Parameters:
      area - specific surface area in m2/m3
    • setPackingVoidFraction

      public void setPackingVoidFraction(double voidFrac)
      Set the packing void fraction.
      Parameters:
      voidFrac - void fraction (0 to 1)
    • setPackingNominalSize

      public void setPackingNominalSize(double size)
      Set the packing nominal size.
      Parameters:
      size - nominal size in meters
    • setPackingCriticalSurfaceTension

      public void setPackingCriticalSurfaceTension(double sigma)
      Set the critical surface tension of packing material.
      Parameters:
      sigma - critical surface tension in N/m
    • setMassTransferModel

      public void setMassTransferModel(RateBasedAbsorber.MassTransferModel model)
      Set the mass transfer correlation model.
      Parameters:
      model - mass transfer model to use
    • getMassTransferModel

      public RateBasedAbsorber.MassTransferModel getMassTransferModel()
      Get the mass transfer correlation model.
      Returns:
      current mass transfer model
    • setEnhancementModel

      public void setEnhancementModel(RateBasedAbsorber.EnhancementModel model)
      Set the enhancement factor model.
      Parameters:
      model - enhancement model to use
    • setReactionRateConstant

      public void setReactionRateConstant(double k2)
      Set the second-order reaction rate constant for enhancement calculations.
      Parameters:
      k2 - reaction rate constant in m3/(mol*s)
    • setStoichiometricRatio

      public void setStoichiometricRatio(double ratio)
      Set the stoichiometric ratio for the absorption reaction.
      Parameters:
      ratio - moles of solvent reactant per mole of absorbed component
    • setBilletSchultesConstants

      public void setBilletSchultesConstants(double cl, double cv)
      Set Billet-Schultes packing constants.
      Parameters:
      cl - liquid-side packing constant CL
      cv - vapor-side packing constant CV
    • getNumberOfTransferUnits

      public double getNumberOfTransferUnits()
      Get the number of overall gas-phase transfer units.
      Returns:
      NTU value
    • getHeightOfTransferUnit

      public double getHeightOfTransferUnit()
      Get the height of an overall gas-phase transfer unit.
      Returns:
      HTU in meters
    • getOverallKGa

      public double getOverallKGa()
      Get the overall gas-side mass transfer coefficient times interfacial area.
      Returns:
      KGa in 1/s
    • getOverallKLa

      public double getOverallKLa()
      Get the overall liquid-side mass transfer coefficient times interfacial area.
      Returns:
      KLa in 1/s
    • getWettedArea

      public double getWettedArea()
      Get the wetted specific area of the packing.
      Overrides:
      getWettedArea in class Separator
      Returns:
      wetted area in m2/m3
    • getStageResults

      public List<RateBasedAbsorber.StageResult> getStageResults()
      Get the stage-by-stage calculation results.
      Returns:
      list of stage results
    • 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
      Overrides:
      run in class SimpleAbsorber
      Parameters:
      id - UUID
    • calculateStage

      private RateBasedAbsorber.StageResult calculateStage(SystemInterface gasPhase, SystemInterface liquidPhase, double stageHeight, int stageIndex)
      Calculate mass transfer for a single stage.
      Parameters:
      gasPhase - gas-phase system (modified in place)
      liquidPhase - liquid-phase system (modified in place)
      stageHeight - height of this stage segment [m]
      stageIndex - stage number (0-based)
      Returns:
      stage calculation result
    • calculateOndaMassTransfer

      private double[] calculateOndaMassTransfer(double uG, double uL, double rhoG, double rhoL, double muG, double muL, double sigmaL)
      Calculate mass transfer coefficients using the Onda (1968) correlation.

      Gas-side: kG = C1 * (a_p * D_G) * (Re_G)^0.7 * (Sc_G)^(1/3) * (a_p * d_p)^(-2.0)

      Liquid-side: kL = 0.0051 * (Re_L)^(2/3) * (Sc_L)^(-0.5) * (a_p * d_p)^0.4 * (mu_L * g/rho_L)^(1/3)

      Wetted area: a_w/a_p = 1 - exp(-1.45 * (sigma_c/sigma_L)^0.75 * Re_L^0.1 * Fr_L^(-0.05) * We_L^0.2)

      Parameters:
      uG - gas superficial velocity [m/s]
      uL - liquid superficial velocity [m/s]
      rhoG - gas density [kg/m3]
      rhoL - liquid density [kg/m3]
      muG - gas viscosity [Pa.s]
      muL - liquid viscosity [Pa.s]
      sigmaL - liquid surface tension [N/m]
      Returns:
      array [kG, kL, aw] where kG in [mol/(m2.s.Pa)], kL in [m/s], aw in [m2/m3]
    • calculateBilletSchultesMassTransfer

      private double[] calculateBilletSchultesMassTransfer(double uG, double uL, double rhoG, double rhoL, double muG, double muL, double sigmaL)
      Calculate mass transfer coefficients using the Billet-Schultes (1999) correlation.
      Parameters:
      uG - gas superficial velocity [m/s]
      uL - liquid superficial velocity [m/s]
      rhoG - gas density [kg/m3]
      rhoL - liquid density [kg/m3]
      muG - gas viscosity [Pa.s]
      muL - liquid viscosity [Pa.s]
      sigmaL - liquid surface tension [N/m]
      Returns:
      array [kG, kL, aw] where kG in [m/s], kL in [m/s], aw in [m2/m3]
    • calculateLiquidHoldup

      private double calculateLiquidHoldup(double uL, double rhoL, double muL)
      Calculate operating liquid holdup (simplified Stichlmair model).
      Parameters:
      uL - liquid superficial velocity [m/s]
      rhoL - liquid density [kg/m3]
      muL - liquid viscosity [Pa.s]
      Returns:
      liquid holdup fraction [-]
    • calculateEnhancementFactor

      private double calculateEnhancementFactor(double kL, SystemInterface liquidPhase, double rhoL, double muL)
      Calculate enhancement factor for chemical absorption.
      Parameters:
      kL - physical liquid-side mass transfer coefficient [m/s]
      liquidPhase - liquid phase system
      rhoL - liquid density [kg/m3]
      muL - liquid viscosity [Pa.s]
      Returns:
      enhancement factor E [-]