Skip to content

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

Absorption Column in the example flowsheet

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

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.

public AbsorptionColumn()
Public Sub New()

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.
public AbsorptionColumn(string name, string description, IFlowsheet fs)
Public Sub New(name As String, description As String, fs As IFlowsheet)

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.

public override bool MobileCompatible { get; }
Public Overrides ReadOnly Property MobileCompatible As Boolean

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.

public AbsorptionColumn.OpMode OperationMode { get; set; }
Public Property OperationMode As AbsorptionColumn.OpMode

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.

public override object CloneXML()
Public Overrides Function CloneXML() As Object

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.
public void ConnectBottoms(ISimulationObject stream)
Public Sub ConnectBottoms(stream As ISimulationObject)

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
public void ConnectFeed(ISimulationObject feed, int stagenumber)
Public Sub ConnectFeed(feed As ISimulationObject, stagenumber As Integer)

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
public void ConnectFeed(ISimulationObject feed, string stageName)
Public Sub ConnectFeed(feed As ISimulationObject, stageName As 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
public void ConnectTopProduct(ISimulationObject stream)
Public Sub ConnectTopProduct(stream As ISimulationObject)

GetDisplayDescription(): Returns the localized description string for this unit operation type.

Returns the localized description string for this unit operation type.

public override string GetDisplayDescription()
Public Overrides Function GetDisplayDescription() As String

GetDisplayName(): Returns the localized display name for this unit operation type.

Returns the localized display name for this unit operation type.

public override string GetDisplayName()
Public Overrides Function GetDisplayName() As String

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.

public override byte[] GetIconBitmapBytes()
Public Overrides Function GetIconBitmapBytes() As Byte()

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.
public override string[] GetProperties(PropertyType proptype)
Public Overrides Function GetProperties(proptype As PropertyType) As String()

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.
public override string GetPropertyUnit(string prop, IUnitsOfMeasure su = null)
Public Overrides Function GetPropertyUnit(prop As String, su As IUnitsOfMeasure = Nothing) As String

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.
public override object GetPropertyValue(string prop, IUnitsOfMeasure su = null)
Public Overrides Function GetPropertyValue(prop As String, su As IUnitsOfMeasure = Nothing) As Object

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.
public override string GetReport(IUnitsOfMeasure su, CultureInfo ci, string numberformat)
Public Overrides Function GetReport(su As IUnitsOfMeasure, ci As CultureInfo, numberformat As String) As String

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.
public override bool SetPropertyValue(string prop, object propval, IUnitsOfMeasure su = null)
Public Overrides Function SetPropertyValue(prop As String, propval As Object, su As IUnitsOfMeasure = Nothing) As Boolean

Fields

_opmode: Backing field for OperationMode.

Backing field for OperationMode. Default OpMode.Absorber.

public AbsorptionColumn.OpMode _opmode
Public _opmode As AbsorptionColumn.OpMode