Class PackedColumn
- All Implemented Interfaces:
Serializable, Runnable, DistillationInterface, ProcessEquipmentInterface, ProcessElementInterface, SimulationInterface, NamedInterface
Models a packed column for gas absorption (amine, TEG, water wash) or stripping applications.
Internally wraps a DistillationColumn and adds packing-specific functionality: HETP
calculation, packing hydraulics (flooding, pressure drop, mass transfer), and packing selection.
The number of theoretical stages is determined from packed bed height and HETP. The underlying
DistillationColumn provides the rigorous VLE calculations, while the
PackingHydraulicsCalculator provides the hydraulic design evaluation.
Usage example:
PackedColumn contactor = new PackedColumn("TEG Contactor", gasStream);
contactor.setPackedHeight(6.0);
contactor.setPackingType("Mellapak-250Y");
contactor.setStructuredPacking(true);
contactor.setDesignFloodFraction(0.70);
contactor.addSolventStream(leanTEGStream);
contactor.run();
StreamInterface dryGas = contactor.getGasOutStream();
StreamInterface richSolvent = contactor.getLiquidOutStream();
double hetp = contactor.getHETP();
double percentFlood = contactor.getPercentFlood();
String report = contactor.toJson();
- Version:
- 1.0
- Author:
- NeqSim
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class DistillationColumn
DistillationColumn.Builder, DistillationColumn.SimplifiedKvalueModel, DistillationColumn.SolverType -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleColumn internal diameter [m].private doubleDesign flood fraction (0-1).private doubleFlooding velocity [m/s].private doubleHETP from hydraulics calculation [m].private PackingHydraulicsCalculatorPacking hydraulics calculator (populated after run).private booleanWhether hydraulics design is feasible.private static final org.apache.logging.log4j.LoggerLogger.private doublePacked bed height [m].private doubleTotal packing pressure drop [Pa].private StringPacking type name.private doublePercent flooding at operating conditions.private static final longSerialization version UID.private booleanWhether packing is structured (true) or random (false).private doubleNumber of theoretical stages from HETP (packed_height / HETP).Fields inherited from class DistillationColumn
bottomTrayPressure, condenserCoolingDuty, distoperations, feedmixer, gasOutStream, hasCondenser, hasReboiler, heater, liquidOutStream, maxNumberOfIterations, numberOfTrays, separator2, stream_3, stream_3isset, topTrayPressure, traysFields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
ConstructorsConstructorDescriptionPackedColumn(String name, boolean hasCondenser, boolean hasReboiler) Create a packed column with a given number of stages (from HETP).PackedColumn(String name, double packedHeight, String packingType, boolean hasCondenser, boolean hasReboiler) Create a packed column with specified packed height and packing type.PackedColumn(String name, StreamInterface gasInStream) Create a packed column for absorber/contactor use (no condenser, no reboiler). -
Method Summary
Modifier and TypeMethodDescriptionvoidaddSolventStream(StreamInterface solventStream) Add the solvent (lean amine/TEG) stream to the top of the column.private voidCalculate packing hydraulics after the column has converged.private static intestimateStages(double height, double hetpGuess) Estimate the number of theoretical stages from packed height and an initial HETP guess.doubleGet design flood fraction.doubleGet flooding velocity [m/s].doublegetHETP()Get the calculated HETP [m].Get the packing hydraulics calculator (null before run).doubleGet packed bed height [m].doubleGet packing pressure drop [Pa].doublegetPackingPressureDrop(String unit) Get packing pressure drop with unit.Get packing type name.doubleGet percent flooding at operating conditions.doubleGet the number of theoretical stages.booleanCheck if the hydraulic design is feasible.booleanCheck if packing is structured.voidIn this method all thermodynamic and unit operations will be calculated in a steady state calculation.voidsetColumnDiameter(double diameter) Override column diameter [m].voidsetDesignFloodFraction(double fraction) Set design flood fraction (typical 0.65-0.75).voidsetPackedHeight(double height) Set packed bed height [m].voidsetPackingType(String packingType) Set packing type by name.voidsetStructuredPacking(boolean structured) Set whether packing is structured or random.toJson()Generate a JSON report including both column results and packing hydraulics.Methods inherited from class DistillationColumn
addFeedStream, addFeedStream, builder, calcColumnInternals, calcColumnInternals, componentMassBalanceCheck, displayResult, energyBalanceCheck, findOptimalNumberOfTrays, getBottomSpecification, getCondenser, getCondenserTemperature, getConvergenceHistory, getEnergyBalanceError, getEnthalpyBalanceTolerance, getFeedStreams, getFsFactor, getGasOutStream, getInnerLoopSteps, getInternalDiameter, getLastBottomSpecificationResidual, getLastEnergyResidual, getLastIterationCount, getLastMassResidual, getLastMeshEnergyResidualNorm, getLastMeshEquilibriumResidualNorm, getLastMeshMaterialResidualNorm, getLastMeshResidual, getLastMeshResidualNorm, getLastMeshResidualVector, getLastMeshSpecificationResidualNorm, getLastMeshSummationResidualNorm, getLastSolveTimeSeconds, getLastSpecificationResidual, getLastTemperatureResidual, getLastTopSpecificationResidual, getLiquidOutStream, getMassBalance, getMassBalanceError, getMassBalanceTolerance, getMechanicalDesign, getMeshResidualTolerance, getMurphreeEfficiency, getNumerOfTrays, getReboiler, getReboilerTemperature, getSolverType, getTemperatureTolerance, getTopSpecification, getTray, getTrayDryPressureDrop, getTrayEnthalpy, getTrayLiquidHoldup, getTrays, getTrayWeirHeight, getTrayWeirLength, init, initMechanicalDesign, isDoInitializion, isDoMultiPhaseCheck, isDynamicColumnEnabled, isDynamicEnergyEnabled, isEnforceEnergyBalanceTolerance, isEnforceMeshResidualTolerance, isReactive, main, massBalanceCheck, resetToleranceOverrides, runBroyden, runTransient, setBottomPressure, setBottomProductFlowRate, setBottomProductPurity, setBottomSpecification, setCondenserRefluxRatio, setCondenserTemperature, setDoInitializion, setDynamicColumnEnabled, setDynamicEnergyEnabled, setEnforceEnergyBalanceTolerance, setEnforceMeshResidualTolerance, setEnthalpyBalanceTolerance, setError, setInnerLoopSteps, setInternalDiameter, setMassBalanceTolerance, setMaxNumberOfIterations, setMeshResidualTolerance, setMultiPhaseCheck, setMurphreeEfficiency, setNumberOfTrays, setReactive, setReactive, setReboilerBoilupRatio, setReboilerTemperature, setRelaxationFactor, setSolverType, setTemperatureTolerance, setTopComponentRecovery, setTopCondenserDuty, setTopPressure, setTopProductPurity, setTopSpecification, setTrayDryPressureDrop, setTrayWeirHeight, setTrayWeirLength, solved, solveDampedSubstitution, solveDirectSubstitution, solveInsideOut, solveMeshResidual, solveNewton, solveSumRates, solveWegstein, toJson, updateSpecificationResidualDiagnostics, validateSetupMethods inherited from class ProcessEquipmentBaseClass
addCapacityConstraint, addController, copy, equals, getAvailableMargin, getAvailableMarginPercent, getBottleneckConstraint, getCapacityConstraints, getConditionAnalysisMessage, getConstraintEvaluationReport, getController, getController, getControllers, getEffectiveCapacityFactor, getEnergyStream, getEntropyProduction, getExergyChange, getFailureMode, getMassBalance, getMaxUtilization, getMaxUtilizationPercent, getMinimumFlow, getPressure, getPressure, getProperty, getReferenceDesignation, getReport_json, getResultTable, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initializeDefaultConstraints, initInstrumentDesign, isActive, isActive, isCapacityAnalysisEnabled, isCapacityExceeded, isFailed, isHardLimitExceeded, isNearCapacityLimit, isSetEnergyStream, reportResults, restoreFromFailure, run_step, runConditionAnalysis, setCapacityAnalysisEnabled, setController, setEnergyStream, setEnergyStream, setFailureMode, setFlowValveController, setMinimumFlow, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, simulateDegradedOperation, simulateTripMethods inherited from class SimulationBaseClass
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from class NamedBaseClass
getName, getTagNumber, setName, setTagNumberMethods inherited from class Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface NamedInterface
getName, getTagName, getTagNumber, setName, 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, getMaxUtilization, getMaxUtilizationPercent, getOperatingEnvelopeViolation, getOutletFlowRate, getOutletPressure, getOutletStreams, getOutletTemperature, getPressure, getPressure, getReferenceDesignation, getReferenceDesignationString, getReport_json, getRestCapacity, getResultTable, getSimulationValidationErrors, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initInstrumentDesign, isCapacityExceeded, isHardLimitExceeded, isNearCapacityLimit, isSimulationValid, isWithinOperatingEnvelope, needRecalculation, reportResults, runConditionAnalysis, setController, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperatureMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, run_step, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTime
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger. -
packedHeight
private double packedHeightPacked bed height [m]. -
packingType
Packing type name. -
structuredPacking
private boolean structuredPackingWhether packing is structured (true) or random (false). -
designFloodFraction
private double designFloodFractionDesign flood fraction (0-1). Typical 0.65-0.75 for packed columns. -
columnDiameter
private double columnDiameterColumn internal diameter [m]. If <= 0, auto-sized from hydraulics. -
hydraulics
Packing hydraulics calculator (populated after run). -
hetp
private double hetpHETP from hydraulics calculation [m]. -
theoreticalStages
private double theoreticalStagesNumber of theoretical stages from HETP (packed_height / HETP). -
percentFlood
private double percentFloodPercent flooding at operating conditions. -
packingPressureDrop
private double packingPressureDropTotal packing pressure drop [Pa]. -
floodingVelocity
private double floodingVelocityFlooding velocity [m/s]. -
hydraulicsOk
private boolean hydraulicsOkWhether hydraulics design is feasible.
-
-
Constructor Details
-
PackedColumn
Create a packed column with a given number of stages (from HETP).The default HETP of ~0.5 m is used initially. After running, HETP is recalculated from packing correlations and the internal stage count is updated.
- Parameters:
name- equipment namehasCondenser- true to include a condenserhasReboiler- true to include a reboiler
-
PackedColumn
Create a packed column for absorber/contactor use (no condenser, no reboiler).- Parameters:
name- equipment namegasInStream- the gas inlet stream (bottom)
-
PackedColumn
public PackedColumn(String name, double packedHeight, String packingType, boolean hasCondenser, boolean hasReboiler) Create a packed column with specified packed height and packing type.- Parameters:
name- equipment namepackedHeight- packed bed height [m]packingType- packing name (e.g., "Pall-Ring-50", "Mellapak-250Y")hasCondenser- true for condenserhasReboiler- true for reboiler
-
-
Method Details
-
estimateStages
private static int estimateStages(double height, double hetpGuess) Estimate the number of theoretical stages from packed height and an initial HETP guess.- Parameters:
height- packed bed height [m]hetpGuess- initial HETP guess [m]- Returns:
- estimated stage count (at least 2)
-
setPackedHeight
public void setPackedHeight(double height) Set packed bed height [m].- Parameters:
height- packed bed height
-
getPackedHeight
public double getPackedHeight()Get packed bed height [m].- Returns:
- packed bed height
-
setPackingType
Set packing type by name.- Parameters:
packingType- packing name (e.g., "Pall-Ring-50", "Mellapak-250Y")
-
getPackingType
-
setStructuredPacking
public void setStructuredPacking(boolean structured) Set whether packing is structured or random.- Parameters:
structured- true for structured (e.g., Mellapak), false for random (e.g., Pall Ring)
-
isStructuredPacking
public boolean isStructuredPacking()Check if packing is structured.- Returns:
- true for structured packing
-
setDesignFloodFraction
public void setDesignFloodFraction(double fraction) Set design flood fraction (typical 0.65-0.75).- Parameters:
fraction- flood fraction
-
getDesignFloodFraction
public double getDesignFloodFraction()Get design flood fraction.- Returns:
- flood fraction
-
setColumnDiameter
public void setColumnDiameter(double diameter) Override column diameter [m]. Set to <= 0 for auto-sizing.- Parameters:
diameter- column diameter
-
addSolventStream
Add the solvent (lean amine/TEG) stream to the top of the column.- Parameters:
solventStream- the lean solvent stream
-
getHETP
public double getHETP()Get the calculated HETP [m].- Returns:
- HETP
-
getTheoreticalStages
public double getTheoreticalStages()Get the number of theoretical stages.- Returns:
- theoretical stages
-
getPercentFlood
public double getPercentFlood()Get percent flooding at operating conditions.- Returns:
- percent flood
-
getPackingPressureDrop
public double getPackingPressureDrop()Get packing pressure drop [Pa].- Returns:
- pressure drop
-
getPackingPressureDrop
Get packing pressure drop with unit.- Parameters:
unit- "Pa", "mbar", "bar"- Returns:
- pressure drop in specified unit
-
getFloodingVelocity
public double getFloodingVelocity()Get flooding velocity [m/s].- Returns:
- flooding velocity
-
isHydraulicsOk
public boolean isHydraulicsOk()Check if the hydraulic design is feasible.- Returns:
- true if all hydraulic checks pass
-
getHydraulics
Get the packing hydraulics calculator (null before run).- Returns:
- hydraulics calculator
-
run
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:
runin interfaceSimulationInterface- Overrides:
runin classDistillationColumn- Parameters:
id- UUID
-
calcPackingHydraulics
private void calcPackingHydraulics()Calculate packing hydraulics after the column has converged. -
toJson
Generate a JSON report including both column results and packing hydraulics.- Specified by:
toJsonin interfaceProcessEquipmentInterface- Overrides:
toJsonin classDistillationColumn- Returns:
- comprehensive JSON report
-