Class RateBasedAbsorber
- All Implemented Interfaces:
Serializable, Runnable, AutoSizeable, AbsorberInterface, CapacityConstrainedEquipment, ProcessEquipmentInterface, SeparatorInterface, StateVectorProvider, ProcessElementInterface, SimulationInterface, NamedInterface
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:
- Calculates gas-side and liquid-side mass transfer coefficients (kG, kL)
- Applies enhancement factors for chemical reactions
- Computes interfacial mass transfer rates using the overall driving force
- 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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumEnhancement factor model for chemical absorption.static enumMass transfer correlation model.static classStage-by-stage calculation result container.Nested classes/interfaces inherited from class Separator
Separator.Builder -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleBillet-Schultes packing constant CL [-].private doubleBillet-Schultes packing constant CV [-].private doubleColumn cross-sectional area [m2].private doubleColumn internal diameter [m].Enhancement factor model.private StreamInterfaceGas inlet stream (bottom of column).private StreamInterfaceGas outlet stream (top of column).private doubleHeight of an overall gas-phase transfer unit [m].private static final org.apache.logging.log4j.LoggerLogger object for class.Mass transfer correlation.private doubleNumber of overall gas-phase transfer units [-].private doubleColumn operating pressure [Pa].private doubleOverall gas-phase mass transfer coefficient times interfacial area [1/s].private doubleOverall liquid-phase mass transfer coefficient times interfacial area [1/s].private doubleTotal packed height [m].private doubleCritical surface tension of packing material [N/m].private doublePacking nominal size [m].private doublePacking specific surface area [m2/m3].private doublePacking void fraction [-].private doubleSecond-order reaction rate constant [m3/(mol·s)] for enhancement factor.private static final longSerialization version UID.private StreamInterfaceSolvent inlet stream (top of column).private StreamInterfaceSolvent outlet stream (bottom of column).private List<RateBasedAbsorber.StageResult> Stage-by-stage results.private doubleStoichiometric ratio (moles of B consumed per mole of A absorbed).private doubleWetted specific area [m2/m3].Fields inherited from class SimpleAbsorber
absorptionEfficiency, dT, inStream, outStream, setTemperature, system, temperatureOutFields inherited from class Separator
DEFAULT_DROPLET_CUTSIZE_LIMIT, DEFAULT_INLET_MOMENTUM_LIMIT, DEFAULT_K_VALUE_LIMIT, DEFAULT_LIQUID_DENSITY_FOR_SIZING, DEFAULT_MIN_OIL_RETENTION_TIME, DEFAULT_MIN_WATER_RETENTION_TIME, liquidLevel, numberOfInputStreamsFields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddGasInStream(StreamInterface stream) Set the gas inlet stream (enters at column bottom).voidaddSolventInStream(StreamInterface stream) Set the solvent inlet stream (enters at column top).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.private doublecalculateEnhancementFactor(double kL, SystemInterface liquidPhase, double rhoL, double muL) Calculate enhancement factor for chemical absorption.private doublecalculateLiquidHoldup(double uL, double rhoL, double muL) Calculate operating liquid holdup (simplified Stichlmair model).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.private RateBasedAbsorber.StageResultcalculateStage(SystemInterface gasPhase, SystemInterface liquidPhase, double stageHeight, int stageIndex) Calculate mass transfer for a single stage.doubleGet the column internal diameter.Get the gas outlet stream (exits at column top).doubleGet the height of an overall gas-phase transfer unit.Get the mass transfer correlation model.doubleGet the number of overall gas-phase transfer units.doubleGet the overall gas-side mass transfer coefficient times interfacial area.doubleGet the overall liquid-side mass transfer coefficient times interfacial area.doubleGet the total packed height.Get the solvent outlet stream (exits at column bottom).Get the stage-by-stage calculation results.doubleGet the wetted specific area of the packing.voidIn this method all thermodynamic and unit operations will be calculated in a steady state calculation.voidsetBilletSchultesConstants(double cl, double cv) Set Billet-Schultes packing constants.voidsetColumnDiameter(double diameter) Set the column internal diameter.voidSet the enhancement factor model.voidSet the mass transfer correlation model.voidsetPackedHeight(double height) Set the total packed height.voidsetPackingCriticalSurfaceTension(double sigma) Set the critical surface tension of packing material.voidsetPackingNominalSize(double size) Set the packing nominal size.voidsetPackingSpecificArea(double area) Set the packing specific surface area.voidsetPackingVoidFraction(double voidFrac) Set the packing void fraction.voidsetReactionRateConstant(double k2) Set the second-order reaction rate constant for enhancement calculations.voidsetStoichiometricRatio(double ratio) Set the stoichiometric ratio for the absorption reaction.Methods inherited from class SimpleAbsorber
displayResult, getFsFactor, getHTU, getInStream, getInTemperature, getMechanicalDesign, getNTU, getNumberOfStages, getNumberOfTheoreticalStages, getOutletStream, getOutletStream, getOutletTemperature, getOutStream, getOutStream, getOutTemperature, getSolventInStream, getStageEfficiency, getWettingRate, setAproachToEquilibrium, setdT, setHTU, setName, setNTU, setNumberOfStages, setNumberOfTheoreticalStages, setOutletTemperature, setOutTemperature, setStageEfficiencyMethods inherited from class Separator
addCapacityConstraint, addSeparatorSection, addStream, autoSize, autoSize, autoSize, builder, calcDropletCutSize, calcDropletCutSizeAtHLL, calcGasAreaAboveLevel, calcGasVelocityAboveLevel, calcInletMomentumFlux, calcInletMomentumFlux, calcKValue, calcKValueAtHLL, calcLiquidVolume, calcOilRetentionTime, calcSegmentArea, calcWaterRetentionTime, clearCapacityConstraints, disableConstraint, disableConstraints, enableConstraints, enforceHeadspace, equals, evaluateFireExposure, evaluateFireExposure, getBootVolume, getBottleneckConstraint, getCapacityConstraints, getCapacityDuty, getCapacityMax, getCapacityUtilization, getConstraintSummary, getDeRatedGasLoadFactor, getDeRatedGasLoadFactor, getDesignGasLoadFactor, getDesignLiquidLevelFraction, getEfficiency, getElectricalDesign, getEnabledConstraintNames, getEntropyProduction, getEquipmentState, getExergyChange, getExergyChange, getFeedStream, getGas, getGasCarryunderFraction, getGasLoadFactor, getGasLoadFactor, getGasSuperficialVelocity, getHeatDuty, getHeatDuty, getHeatInput, getHeatInput, getInletFlowRegime, getInletStreams, getInnerSurfaceArea, getInstrumentDesign, getInternalDiameter, getKFactor, getKFactorUtilization, getLiquid, getLiquidCarryoverFraction, getLiquidLevel, getLiquidOutStream, getMassBalance, getMaxAllowableGasFlowRate, getMaxAllowableGasVelocity, getMaxUtilization, getMistEliminatorDpCoeff, getMistEliminatorPressureDrop, getMistEliminatorThickness, getOperatingEnvelopeViolation, getOrientation, getOutletStreams, getPerformanceCalculator, getPerformanceSummary, getPressure, getPressureDrop, getResultTable, getSeparatorLength, getSeparatorSection, getSeparatorSection, getSeparatorSections, getSimulationValidationErrors, getSizingReport, getSizingReportJson, getStateVector, getThermoSystem, getUnwettedArea, getWeirHeight, getWeirLength, getWeirOverflowRate, hasGeometry, hashCode, initDesignFromFlow, initElectricalDesign, initializeCapacityConstraints, initializeTransientCalculation, initInstrumentDesign, initMechanicalDesign, isAutoSized, isCapacityExceeded, isConstraintEnabled, isDetailedEntrainmentCalculation, isDropletCutSizeWithinLimit, isDropletCutSizeWithinLimit, isEnforceCapacityLimits, isEnhancedEntrainmentCalculation, isHardLimitExceeded, isInletMomentumWithinLimit, isInletMomentumWithinLimit, isKValueWithinLimit, isKValueWithinLimit, isMistEliminatorFlooded, isOilRetentionTimeAboveMinimum, isOilRetentionTimeAboveMinimum, isOverloaded, isSetHeatInput, isSimulationValid, isSinglePhase, isWaterRetentionTimeAboveMinimum, isWaterRetentionTimeAboveMinimum, isWithinAllLimits, isWithinOperatingEnvelope, levelFromVolume, liquidArea, removeCapacityConstraint, runTransient, setBootVolume, setDesignGasLoadFactor, setDesignLiquidLevelFraction, setDetailedEntrainmentCalculation, setDropletCutSizeLimit, setDuty, setDuty, setEfficiency, setEnforceCapacityLimits, setEnhancedEntrainmentCalculation, setEntrainment, setGasCarryunderFraction, setGasLiquidSurfaceTension, setHeatDuty, setHeatDuty, setHeatInput, setHeatInput, setInletDeviceType, setInletMomentumLimit, setInletPipeDiameter, setInletStream, setInternalDiameter, setKValueLimit, setLiquidCarryoverFraction, setLiquidLevel, setMinOilRetentionTime, setMinWaterRetentionTime, setMistEliminatorDpCoeff, setMistEliminatorThickness, setOrientation, setPerformanceCalculator, setPressureDrop, setSeparatorLength, setTempPres, setWeirHeight, setWeirLength, sizeFromFlow, toJson, toJson, updateEntrainmentForTransient, updateEntrainmentFromPerformanceCalculator, useAllConstraints, useAPIConstraints, useConstraints, useEquinorConstraints, useGasCapacityConstraints, useGasScrubberConstraints, useLiquidCapacityConstraints, validateSetupMethods inherited from class ProcessEquipmentBaseClass
addController, copy, getAvailableMargin, getAvailableMarginPercent, getConditionAnalysisMessage, getConstraintEvaluationReport, getController, getController, getControllers, getEffectiveCapacityFactor, getEnergyStream, getFailureMode, getMassBalance, getMaxUtilizationPercent, getMinimumFlow, getPressure, getProperty, getReferenceDesignation, getReport_json, getSpecification, getTemperature, getTemperature, getUtilizationSummary, initializeDefaultConstraints, isActive, isActive, isCapacityAnalysisEnabled, isFailed, isNearCapacityLimit, isSetEnergyStream, reportResults, restoreFromFailure, run_step, runConditionAnalysis, setCapacityAnalysisEnabled, setController, setEnergyStream, setEnergyStream, setFailureMode, setFlowValveController, setMinimumFlow, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, simulateDegradedOperation, simulateTrip, solvedMethods inherited from class SimulationBaseClass
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from class NamedBaseClass
getName, getTagNumber, setTagNumberMethods inherited from class Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface CapacityConstrainedEquipment
disableAllConstraints, enableAllConstraints, getAvailableMargin, getAvailableMarginPercent, getMaxUtilizationPercent, getUtilizationSummary, isCapacityAnalysisEnabled, isNearCapacityLimit, setCapacityAnalysisEnabledMethods inherited from interface NamedInterface
getName, getTagName, getTagNumber, setTagName, setTagNumberMethods inherited from interface ProcessEquipmentInterface
addCapacityConstraint, addController, equals, getAvailableMargin, getAvailableMarginPercent, getBottleneckConstraint, getCapacityConstraints, getCapacityDuty, getCapacityMax, getConditionAnalysisMessage, getController, getController, getControllers, getElectricalDesign, getEntropyProduction, getEquipmentState, getExergyChange, getExergyChange, getExergyDestruction, getExergyDestruction, getFluid, getInletStreams, getInstrumentDesign, getMassBalance, getMassBalance, getMaxUtilization, getMaxUtilizationPercent, getOperatingEnvelopeViolation, getOutletFlowRate, getOutletPressure, getOutletStreams, getOutletTemperature, getPressure, getPressure, getReferenceDesignation, getReferenceDesignationString, getReport_json, getRestCapacity, getResultTable, getSimulationValidationErrors, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initInstrumentDesign, initMechanicalDesign, isCapacityExceeded, isHardLimitExceeded, isNearCapacityLimit, isSimulationValid, isWithinOperatingEnvelope, needRecalculation, reportResults, runConditionAnalysis, setController, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, toJson, toJson, validateSetupMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, run_step, runTransient, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTime, solvedMethods inherited from interface StateVectorProvider
getStateDimension, getStateNames
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object for class. -
columnDiameter
private double columnDiameterColumn internal diameter [m]. -
packedHeight
private double packedHeightTotal packed height [m]. -
packingSpecificArea
private double packingSpecificAreaPacking specific surface area [m2/m3]. -
packingVoidFraction
private double packingVoidFractionPacking void fraction [-]. -
packingNominalSize
private double packingNominalSizePacking nominal size [m]. -
packingCriticalSurfaceTension
private double packingCriticalSurfaceTensionCritical surface tension of packing material [N/m]. -
massTransferModel
Mass transfer correlation. -
enhancementModel
Enhancement factor model. -
reactionRateConstant
private double reactionRateConstantSecond-order reaction rate constant [m3/(mol·s)] for enhancement factor. -
stoichiometricRatio
private double stoichiometricRatioStoichiometric ratio (moles of B consumed per mole of A absorbed). -
billetCL
private double billetCLBillet-Schultes packing constant CL [-]. -
billetCV
private double billetCVBillet-Schultes packing constant CV [-]. -
operatingPressure
private double operatingPressureColumn operating pressure [Pa]. -
gasInStream
Gas inlet stream (bottom of column). -
solventInStream
Solvent inlet stream (top of column). -
gasOutStream
Gas outlet stream (top of column). -
solventOutStream
Solvent outlet stream (bottom of column). -
stageResults
Stage-by-stage results. -
overallKGa
private double overallKGaOverall gas-phase mass transfer coefficient times interfacial area [1/s]. -
overallKLa
private double overallKLaOverall liquid-phase mass transfer coefficient times interfacial area [1/s]. -
numberOfTransferUnits
private double numberOfTransferUnitsNumber of overall gas-phase transfer units [-]. -
heightOfTransferUnit
private double heightOfTransferUnitHeight of an overall gas-phase transfer unit [m]. -
wettedArea
private double wettedAreaWetted specific area [m2/m3]. -
columnArea
private double columnAreaColumn cross-sectional area [m2].
-
-
Constructor Details
-
RateBasedAbsorber
Constructor for RateBasedAbsorber.- Parameters:
name- name of the absorber
-
-
Method Details
-
addGasInStream
Set the gas inlet stream (enters at column bottom).- Parameters:
stream- gas inlet stream
-
addSolventInStream
Set the solvent inlet stream (enters at column top).- Parameters:
stream- solvent inlet stream
-
getGasOutStream
Get the gas outlet stream (exits at column top).- Overrides:
getGasOutStreamin classSeparator- Returns:
- gas outlet stream
-
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
Set the mass transfer correlation model.- Parameters:
model- mass transfer model to use
-
getMassTransferModel
Get the mass transfer correlation model.- Returns:
- current mass transfer model
-
setEnhancementModel
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 CLcv- 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:
getWettedAreain classSeparator- Returns:
- wetted area in m2/m3
-
getStageResults
Get the stage-by-stage calculation results.- Returns:
- list of stage results
-
run
In this method all thermodynamic and unit operations will be calculated in a steady state calculation.
- Specified by:
runin interfaceSimulationInterface- Overrides:
runin classSimpleAbsorber- 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 systemrhoL- liquid density [kg/m3]muL- liquid viscosity [Pa.s]- Returns:
- enhancement factor E [-]
-