Absorption Column¶
![]()
Rigorous absorption column: a staged column without condenser or reboiler, solved by the equilibrium stage solvers of the Column base class. In extractor mode (OperationMode) it models a liquid-liquid extraction column.
DWSIM.UnitOperations.UnitOperations.AbsorptionColumn
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← Column ← AbsorptionColumn
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Lean water |
| Inlet, material | 1 |
Solvent-laden air |
| Inlet, material | 2 |
|
| Inlet, material | 3 |
|
| Inlet, material | 4 |
|
| Inlet, material | 5 |
|
| Inlet, material | 6 |
|
| Inlet, material | 7 |
|
| Inlet, material | 8 |
|
| Inlet, material | 9 |
|
| Outlet, material | 0 |
Clean gas |
| Outlet, material | 1 |
Rich water |
| Outlet, material | 2 |
|
| Outlet, material | 3 |
|
| Outlet, material | 4 |
|
| Outlet, material | 5 |
|
| Outlet, material | 6 |
|
| Outlet, material | 7 |
|
| Outlet, material | 8 |
|
| Outlet, material | 9 |
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("AbsorptionColumnExample")
.WithCompounds("Water", "Acetone", "Nitrogen")
.WithPropertyPackage(PropertyPackages.NRTL))
water = (fs.AddMaterialStream("Lean water")
.At(Q.Celsius(25.0), Q.Bar(1.01325))
.WithMolarFlow(Q.MolPerSecond(150.0))
.SetCompoundMolarFlow("Water", 150.0))
gas = (fs.AddMaterialStream("Solvent-laden air")
.At(Q.Celsius(30.0), Q.Bar(1.01325))
.WithMolarFlow(Q.MolPerSecond(20.0))
.SetCompoundMolarFlow("Acetone", 0.4)
.SetCompoundMolarFlow("Nitrogen", 19.6))
clean_gas = fs.AddMaterialStream("Clean gas")
rich_water = fs.AddMaterialStream("Rich water")
column = (fs.AddAbsorptionColumn("ABS-1")
.WithNumberOfStages(10)
.WithFeed(water, "Stage1") # liquid enters at the top
.WithFeed(gas, "Stage10") # gas enters at the bottom
.WithTopProduct(clean_gas)
.WithBottoms(rich_water)
.WithTopPressure(Q.Bar(1.01325))
.WithColumnPressureDrop(Q.Bar(0.0)))
fs.AutoLayout()
fs.Solve()
acetone_in = gas.MolarFlowMolPerSecond * gas.OverallMoleFraction("Acetone")
acetone_out = clean_gas.MolarFlowMolPerSecond * clean_gas.OverallMoleFraction("Acetone")
print(f"Acetone in clean gas = {clean_gas.OverallMoleFraction('Acetone') * 1e6:.0f} ppm (molar)")
print(f"Acetone recovery = {100.0 * (1.0 - acetone_out / acetone_in):.2f} %")
print(f"Acetone in water = {rich_water.OverallMoleFraction('Acetone'):.4f} (mole fraction)")
print(f"Clean gas T = {clean_gas.TemperatureK - 273.15:.1f} C")
print(f"Rich water T = {rich_water.TemperatureK - 273.15:.1f} C")
Output
Acetone in clean gas = 203 ppm (molar)
Acetone recovery = 98.97 %
Acetone in water = 0.0026 (mole fraction)
Clean gas T = 25.0 C
Rich water T = 23.9 C
DWSIM 10.2.11.0, generated 2026-10-08.
Properties¶
IDs accepted by GetPropertyValue, SetPropertyValue, the sensitivity analysis, the optimizer, the Adjust block and dynamic events. Units are SI; pass another unit system to GetPropertyValue to get them converted.
All 71 properties
| ID | Name | Unit (SI) | Input |
|---|---|---|---|
PROP_AC_0 |
Top Stage Pressure | Pa | yes |
PROP_AC_1 |
Bottom Stage Pressure | Pa | yes |
PROP_AC_2 |
Number of Stages | result | |
Stage_Efficiency_1 |
yes | ||
Stage_DowncomerLength_1 |
m | yes | |
Stage_DowncomerHeight_1 |
m | yes | |
Stage_TotalHoleArea_1 |
m2 | yes | |
Stage_LiquidLevel_1 |
m | yes | |
Stage_Height_1 |
m | yes | |
Stage_Efficiency_2 |
yes | ||
Stage_DowncomerLength_2 |
m | yes | |
Stage_DowncomerHeight_2 |
m | yes | |
Stage_TotalHoleArea_2 |
m2 | yes | |
Stage_LiquidLevel_2 |
m | yes | |
Stage_Height_2 |
m | yes | |
Stage_Efficiency_3 |
yes | ||
Stage_DowncomerLength_3 |
m | yes | |
Stage_DowncomerHeight_3 |
m | yes | |
Stage_TotalHoleArea_3 |
m2 | yes | |
Stage_LiquidLevel_3 |
m | yes | |
Stage_Height_3 |
m | yes | |
Stage_Efficiency_4 |
yes | ||
Stage_DowncomerLength_4 |
m | yes | |
Stage_DowncomerHeight_4 |
m | yes | |
Stage_TotalHoleArea_4 |
m2 | yes | |
Stage_LiquidLevel_4 |
m | yes | |
Stage_Height_4 |
m | yes | |
Stage_Efficiency_5 |
yes | ||
Stage_DowncomerLength_5 |
m | yes | |
Stage_DowncomerHeight_5 |
m | yes | |
Stage_TotalHoleArea_5 |
m2 | yes | |
Stage_LiquidLevel_5 |
m | yes | |
Stage_Height_5 |
m | yes | |
Stage_Efficiency_6 |
yes | ||
Stage_DowncomerLength_6 |
m | yes | |
Stage_DowncomerHeight_6 |
m | yes | |
Stage_TotalHoleArea_6 |
m2 | yes | |
Stage_LiquidLevel_6 |
m | yes | |
Stage_Height_6 |
m | yes | |
Stage_Efficiency_7 |
yes | ||
Stage_DowncomerLength_7 |
m | yes | |
Stage_DowncomerHeight_7 |
m | yes | |
Stage_TotalHoleArea_7 |
m2 | yes | |
Stage_LiquidLevel_7 |
m | yes | |
Stage_Height_7 |
m | yes | |
Stage_Efficiency_8 |
yes | ||
Stage_DowncomerLength_8 |
m | yes | |
Stage_DowncomerHeight_8 |
m | yes | |
Stage_TotalHoleArea_8 |
m2 | yes | |
Stage_LiquidLevel_8 |
m | yes | |
Stage_Height_8 |
m | yes | |
Stage_Efficiency_9 |
yes | ||
Stage_DowncomerLength_9 |
m | yes | |
Stage_DowncomerHeight_9 |
m | yes | |
Stage_TotalHoleArea_9 |
m2 | yes | |
Stage_LiquidLevel_9 |
m | yes | |
Stage_Height_9 |
m | yes | |
Stage_Efficiency_10 |
yes | ||
Stage_DowncomerLength_10 |
m | yes | |
Stage_DowncomerHeight_10 |
m | yes | |
Stage_TotalHoleArea_10 |
m2 | yes | |
Stage_LiquidLevel_10 |
m | yes | |
Stage_Height_10 |
m | yes | |
Stream 'Lean water' Stage Index |
yes | ||
Stream 'Solvent-laden air' Stage Index |
yes | ||
Stream 'Clean gas' Stage Index |
yes | ||
Stream 'Rich water' Stage Index |
yes | ||
Estimated Height |
mm | yes | |
Estimated Diameter |
mm | yes | |
Number of Stages |
yes | ||
Sump_LiquidLevel |
m | yes |
Dynamic mode¶
Extra properties used when the flowsheet runs in dynamic mode.
| Name | Unit |
|---|---|
| Max. P change (%) | |
| Max. L change (%) | |
| Max. V change (%) | |
| Time step discretization | |
| Souders-Brown Coefficient | |
| Flooding Alarm | |
| Weeping Alarm | |
| Apply Murphree Efficiency | |
| Quasi-Steady Vapor | |
| Calibrate Tray Coefficients | |
| Start Empty | |
| Initial Pressure | |
| Initial Temperature | |
| Initial Sump Level | |
| Minimum Pressure | |
| Coolant Temperature | |
| Tray Weeping |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
AbsorptionColumn(): Initializes a new default instance of the AbsorptionColumn class.
Initializes a new default instance of the AbsorptionColumn class.
AbsorptionColumn(string, string, IFlowsheet): Initializes a new instance of the AbsorptionColumn class with a name and description, creates the default stages and...
Initializes a new instance of the AbsorptionColumn class with a name and description, creates the default stages and sets every stage pressure to 101325 Pa.
| Parameter | Type | Description |
|---|---|---|
name |
String |
The name of this unit operation. |
description |
String |
A brief description of this unit operation. |
fs |
IFlowsheet |
The flowsheet that owns this column. |
Properties¶
MobileCompatible: Gets a value indicating whether this unit operation is compatible with mobile interfaces.
Gets a value indicating whether this unit operation is compatible with mobile interfaces. Always True.
OperationMode: Gets or sets the operation mode: Absorber (0) for gas-liquid absorption, Extractor (1) for liquid-liquid extraction...
Gets or sets the operation mode: Absorber (0) for gas-liquid absorption, Extractor (1) for liquid-liquid extraction, where the solvers treat the two phases as two liquids.
Methods¶
CloneXML(): Creates a deep copy of this object by round-tripping through XML serialization.
Creates a deep copy of this object by round-tripping through XML serialization.
ConnectBottoms(ISimulationObject): Connects the bottoms liquid product stream to the bottom stage of the column.
Connects the bottoms liquid product stream to the bottom stage of the column.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
The material stream that receives the bottoms product. |
ConnectFeed(ISimulationObject, int): Connects a feed to a stage by its zero-based index: 0 is the top stage (the condenser, which the editor calls...
Connects a feed to a stage by its zero-based index: 0 is the top stage (the condenser, which the editor calls Stage1), so the editor's StageN is index N - 1.
| Parameter | Type | Description |
|---|---|---|
feed |
ISimulationObject |
|
stagenumber |
Int32 |
ConnectFeed(ISimulationObject, string): Connects a feed to the stage named as the editor shows it, e.g.
Connects a feed to the stage named as the editor shows it, e.g. "Stage10" (Stage1 is the condenser when there is one).
| Parameter | Type | Description |
|---|---|---|
feed |
ISimulationObject |
|
stageName |
String |
ConnectTopProduct(ISimulationObject): Connects the top product.
Connects the top product. This column's top product leaves stage 0 as the overhead stream V(0), so it is marked OverheadVapor - the same behaviour the UI stores. Distillate means a liquid drawn off stage 0 at rate LSS(0), which for an absorber is zero, and the product's flow would then be left out of the closing mass balance entirely.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
GetDisplayDescription(): Returns the localized description string for this unit operation type.
Returns the localized description string for this unit operation type.
GetDisplayName(): Returns the localized display name for this unit operation type.
Returns the localized display name for this unit operation type.
GetIconBitmapBytes(): Returns the raw bytes of the icon image for this unit operation.
Returns the raw bytes of the icon image for this unit operation.
GetProperties(PropertyType): Get a list of all properties of the object.
Get a list of all properties of the object.
| Parameter | Type | Description |
|---|---|---|
proptype |
PropertyType |
Type of the property. |
GetPropertyUnit(string, IUnitsOfMeasure): Gets the units of a property.
Gets the units of a property.
| Parameter | Type | Description |
|---|---|---|
prop |
String |
Property identifier. |
su |
IUnitsOfMeasure |
Units system to use. Null to use the default (SI) system. |
GetPropertyValue(string, IUnitsOfMeasure): Returns the value of a named property, converting from SI to the current unit system.
Returns the value of a named property, converting from SI to the current unit system. Falls back to extra properties if the property is not found in the base implementation.
| Parameter | Type | Description |
|---|---|---|
prop |
String |
The property identifier string. |
su |
IUnitsOfMeasure |
Optional units-of-measure system used for conversion; uses the shared SI system when Nothing. |
GetReport(IUnitsOfMeasure, CultureInfo, string): Generates a plain-text results report for this unit operation: number of stages and the stage temperature, pressure...
Generates a plain-text results report for this unit operation: number of stages and the stage temperature, pressure, vapor flow and liquid flow profiles.
| Parameter | Type | Description |
|---|---|---|
su |
IUnitsOfMeasure |
The unit system used for formatting output values. |
ci |
CultureInfo |
The culture info used for number formatting. |
numberformat |
String |
A .NET numeric format string (e.g. "G6") applied to output values. |
SetPropertyValue(string, object, IUnitsOfMeasure): Sets the value of a property.
Sets the value of a property.
| Parameter | Type | Description |
|---|---|---|
prop |
String |
Property identifier. |
propval |
Object |
Property value to set at the specified units. |
su |
IUnitsOfMeasure |
Units system to use. Null to use the default (SI) system. |
Fields¶
_opmode: Backing field for OperationMode.
Backing field for OperationMode. Default OpMode.Absorber.