Distillation Column¶
![]()
Rigorous distillation column: a staged column with an optional condenser on the top stage and an optional reboiler on the bottom stage, solved by the equilibrium stage solvers of the Column base class. With ReboiledAbsorber or RefluxedAbsorber set, the condenser or the reboiler is left out of the stage model.
DWSIM.UnitOperations.UnitOperations.DistillationColumn
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← Column ← DistillationColumn
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Feed |
| Inlet, material | 1 |
|
| Inlet, material | 2 |
|
| Inlet, material | 3 |
|
| Inlet, material | 4 |
|
| Inlet, material | 5 |
|
| Inlet, material | 6 |
|
| Inlet, material | 7 |
|
| Inlet, material | 8 |
|
| Inlet, material | 9 |
|
| Inlet, energy | 10 |
Q-reb |
| Outlet, material | 0 |
Distillate |
| Outlet, material | 1 |
Bottoms |
| Outlet, material | 2 |
|
| Outlet, material | 3 |
|
| Outlet, material | 4 |
|
| Outlet, material | 5 |
|
| Outlet, material | 6 |
|
| Outlet, material | 7 |
|
| Outlet, material | 8 |
|
| Outlet, material | 9 |
|
| Outlet, energy | 10 |
Q-cond |
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("DistillationColumnExample")
.WithCompounds("Benzene", "Toluene")
.WithPropertyPackage(PropertyPackages.PengRobinson))
# equimolar liquid feed just below its bubble point (about 92 C at 1 atm)
feed = (fs.AddMaterialStream("Feed")
.At(Q.Celsius(90.0), Q.Bar(1.01325))
.WithMolarFlow(Q.MolPerSecond(100.0))
.SetCompoundMolarFlow("Benzene", 50.0)
.SetCompoundMolarFlow("Toluene", 50.0))
distillate = fs.AddMaterialStream("Distillate")
bottoms = fs.AddMaterialStream("Bottoms")
q_cond = fs.AddEnergyStream("Q-cond")
q_reb = fs.AddEnergyStream("Q-reb")
column = (fs.AddDistillationColumn("T-1")
.WithNumberOfStages(20) # condenser is Stage1, reboiler is Stage20
.WithFeed(feed, "Stage10")
.WithDistillate(distillate)
.WithBottoms(bottoms)
.WithCondenserDuty(q_cond)
.WithReboilerDuty(q_reb)
.WithCondenserSpec("Reflux Ratio", 2.0)
.WithReboilerSpec("Product Molar Flow Rate", Q.MolPerSecond(50.0))
.WithTopPressure(Q.Bar(1.01325))
.WithColumnPressureDrop(Q.Bar(0.0)))
fs.AutoLayout()
fs.Solve()
print(f"Distillate benzene = {distillate.OverallMoleFraction('Benzene'):.4f} (mole fraction)")
print(f"Bottoms toluene = {bottoms.OverallMoleFraction('Toluene'):.4f} (mole fraction)")
print(f"Top T / bottom T = {distillate.TemperatureK - 273.15:.1f} C / {bottoms.TemperatureK - 273.15:.1f} C")
print(f"Condenser duty = {q_cond.EnergyFlowKW:.1f} kW")
print(f"Reboiler duty = {q_reb.EnergyFlowKW:.1f} kW")
Output
Distillate benzene = 0.9889 (mole fraction)
Bottoms toluene = 0.9889 (mole fraction)
Top T / bottom T = 79.9 C / 110.2 C
Condenser duty = 4557.4 kW
Reboiler duty = 4660.0 kW
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 136 properties
| ID | Name | Unit (SI) | Input |
|---|---|---|---|
PROP_DC_2 |
Condenser Pressure Drop | Pa | yes |
PROP_DC_5 |
Condenser Duty | kW | result |
PROP_DC_6 |
Reboiler Duty | kW | result |
PROP_DC_7 |
Number of Stages | yes | |
PROP_DC_8 |
Column Pressure Drop | Pa | yes |
Stage_Pressure_1 |
Pa | yes | |
Stage_Pressure_2 |
Pa | yes | |
Stage_Pressure_3 |
Pa | yes | |
Stage_Pressure_4 |
Pa | yes | |
Stage_Pressure_5 |
Pa | yes | |
Stage_Pressure_6 |
Pa | yes | |
Stage_Pressure_7 |
Pa | yes | |
Stage_Pressure_8 |
Pa | yes | |
Stage_Pressure_9 |
Pa | yes | |
Stage_Pressure_10 |
Pa | yes | |
Stage_Pressure_11 |
Pa | yes | |
Stage_Pressure_12 |
Pa | yes | |
Stage_Pressure_13 |
Pa | yes | |
Stage_Pressure_14 |
Pa | yes | |
Stage_Pressure_15 |
Pa | yes | |
Stage_Pressure_16 |
Pa | yes | |
Stage_Pressure_17 |
Pa | yes | |
Stage_Pressure_18 |
Pa | yes | |
Stage_Pressure_19 |
Pa | yes | |
Stage_Pressure_20 |
Pa | yes | |
Stage_Efficiency_1 |
yes | ||
Stage_Efficiency_2 |
yes | ||
Stage_Efficiency_3 |
yes | ||
Stage_Efficiency_4 |
yes | ||
Stage_Efficiency_5 |
yes | ||
Stage_Efficiency_6 |
yes | ||
Stage_Efficiency_7 |
yes | ||
Stage_Efficiency_8 |
yes | ||
Stage_Efficiency_9 |
yes | ||
Stage_Efficiency_10 |
yes | ||
Stage_Efficiency_11 |
yes | ||
Stage_Efficiency_12 |
yes | ||
Stage_Efficiency_13 |
yes | ||
Stage_Efficiency_14 |
yes | ||
Stage_Efficiency_15 |
yes | ||
Stage_Efficiency_16 |
yes | ||
Stage_Efficiency_17 |
yes | ||
Stage_Efficiency_18 |
yes | ||
Stage_Efficiency_19 |
yes | ||
Stage_Efficiency_20 |
yes | ||
Stage_Temperature_1 |
K | result | |
Stage_Temperature_2 |
K | result | |
Stage_Temperature_3 |
K | result | |
Stage_Temperature_4 |
K | result | |
Stage_Temperature_5 |
K | result | |
Stage_Temperature_6 |
K | result | |
Stage_Temperature_7 |
K | result | |
Stage_Temperature_8 |
K | result | |
Stage_Temperature_9 |
K | result | |
Stage_Temperature_10 |
K | result | |
Stage_Temperature_11 |
K | result | |
Stage_Temperature_12 |
K | result | |
Stage_Temperature_13 |
K | result | |
Stage_Temperature_14 |
K | result | |
Stage_Temperature_15 |
K | result | |
Stage_Temperature_16 |
K | result | |
Stage_Temperature_17 |
K | result | |
Stage_Temperature_18 |
K | result | |
Stage_Temperature_19 |
K | result | |
Stage_Temperature_20 |
K | result | |
Stage_LiquidLevel_1 |
m | result | |
Stage_LiquidLevel_2 |
m | result | |
Stage_LiquidLevel_3 |
m | result | |
Stage_LiquidLevel_4 |
m | result | |
Stage_LiquidLevel_5 |
m | result | |
Stage_LiquidLevel_6 |
m | result | |
Stage_LiquidLevel_7 |
m | result | |
Stage_LiquidLevel_8 |
m | result | |
Stage_LiquidLevel_9 |
m | result | |
Stage_LiquidLevel_10 |
m | result | |
Stage_LiquidLevel_11 |
m | result | |
Stage_LiquidLevel_12 |
m | result | |
Stage_LiquidLevel_13 |
m | result | |
Stage_LiquidLevel_14 |
m | result | |
Stage_LiquidLevel_15 |
m | result | |
Stage_LiquidLevel_16 |
m | result | |
Stage_LiquidLevel_17 |
m | result | |
Stage_LiquidLevel_18 |
m | result | |
Stage_LiquidLevel_19 |
m | result | |
Stage_LiquidLevel_20 |
m | result | |
Stage_VaporFlow_1 |
mol/s | result | |
Stage_LiquidFlow_1 |
mol/s | result | |
Stage_VaporFlow_2 |
mol/s | result | |
Stage_LiquidFlow_2 |
mol/s | result | |
Stage_VaporFlow_3 |
mol/s | result | |
Stage_LiquidFlow_3 |
mol/s | result | |
Stage_VaporFlow_4 |
mol/s | result | |
Stage_LiquidFlow_4 |
mol/s | result | |
Stage_VaporFlow_5 |
mol/s | result | |
Stage_LiquidFlow_5 |
mol/s | result | |
Stage_VaporFlow_6 |
mol/s | result | |
Stage_LiquidFlow_6 |
mol/s | result | |
Stage_VaporFlow_7 |
mol/s | result | |
Stage_LiquidFlow_7 |
mol/s | result | |
Stage_VaporFlow_8 |
mol/s | result | |
Stage_LiquidFlow_8 |
mol/s | result | |
Stage_VaporFlow_9 |
mol/s | result | |
Stage_LiquidFlow_9 |
mol/s | result | |
Stage_VaporFlow_10 |
mol/s | result | |
Stage_LiquidFlow_10 |
mol/s | result | |
Stage_VaporFlow_11 |
mol/s | result | |
Stage_LiquidFlow_11 |
mol/s | result | |
Stage_VaporFlow_12 |
mol/s | result | |
Stage_LiquidFlow_12 |
mol/s | result | |
Stage_VaporFlow_13 |
mol/s | result | |
Stage_LiquidFlow_13 |
mol/s | result | |
Stage_VaporFlow_14 |
mol/s | result | |
Stage_LiquidFlow_14 |
mol/s | result | |
Stage_VaporFlow_15 |
mol/s | result | |
Stage_LiquidFlow_15 |
mol/s | result | |
Stage_VaporFlow_16 |
mol/s | result | |
Stage_LiquidFlow_16 |
mol/s | result | |
Stage_VaporFlow_17 |
mol/s | result | |
Stage_LiquidFlow_17 |
mol/s | result | |
Stage_VaporFlow_18 |
mol/s | result | |
Stage_LiquidFlow_18 |
mol/s | result | |
Stage_VaporFlow_19 |
mol/s | result | |
Stage_LiquidFlow_19 |
mol/s | result | |
Stage_VaporFlow_20 |
mol/s | result | |
Stage_LiquidFlow_20 |
mol/s | result | |
Sump_LiquidLevel |
m | result | |
Condenser_Specification_Value |
yes | ||
Reboiler_Specification_Value |
yes | ||
Global_Stage_Efficiency |
yes | ||
Condenser_Calculated_Value |
result | ||
Reboiler_Calculated_Value |
result | ||
Stream 'Feed' Stage Index |
yes | ||
Stream 'Distillate' Stage Index |
yes | ||
Stream 'Bottoms' Stage Index |
yes | ||
Estimated Height |
mm | result | |
Estimated Diameter |
mm | result |
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 | Pa |
| Initial Temperature | K |
| Initial Sump Level | m |
| Minimum Pressure | Pa |
| Coolant Temperature | K |
| Tray Weeping |
Learn more¶
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
DistillationColumn(): Initializes a new default instance of the DistillationColumn class.
Initializes a new default instance of the DistillationColumn class.
DistillationColumn(string, string, IFlowsheet): Initializes a new instance of the DistillationColumn class with a name and description, creates the default stages...
Initializes a new instance of the DistillationColumn 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.
ReboiledAbsorber: Gets or sets whether the column has no condenser.
Gets or sets whether the column has no condenser. When True the top stage is a plain stage and the condenser specification is ignored. Set by ConvertToComplex after the condenser is moved to separate flowsheet objects. Default False.
RefluxedAbsorber: Gets or sets whether the column has no reboiler.
Gets or sets whether the column has no reboiler. When True the bottom stage is a plain stage and the reboiler specification is ignored. Set by ConvertToComplex after the reboiler is moved to separate flowsheet objects. Default False.
TotalCondenserSubcoolingDeltaT: Subcooling of the condenser liquid below its bubble point, in K.
Subcooling of the condenser liquid below its bubble point, in K. The solvers evaluate the top stage K-values at the stage temperature minus this value. Default 0 (saturated liquid).
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 (reboiler) of the column.
Connects the bottoms liquid product stream to the bottom stage (reboiler) of the column.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
The material stream that receives the bottoms product. |
ConnectCondenserDuty(ISimulationObject): Connects the energy stream that carries the condenser duty out of the column.
Connects the energy stream that carries the condenser duty out of the column.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
The energy stream for the condenser duty. |
ConnectDistillate(ISimulationObject): Connects the distillate (liquid top product) stream to the top stage (condenser) of the column.
Connects the distillate (liquid top product) stream to the top stage (condenser) of the column.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
The material stream that receives the distillate. |
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 |
ConnectReboilerDuty(ISimulationObject): Connects the energy stream that supplies the reboiler duty to the column.
Connects the energy stream that supplies the reboiler duty to the column.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
The energy stream for the reboiler duty. |
ConnectVaporProduct(ISimulationObject): Connects the overhead vapor product stream to the top stage (condenser) of the column.
Connects the overhead vapor product stream to the top stage (condenser) of the column.
| Parameter | Type | Description |
|---|---|---|
stream |
ISimulationObject |
The material stream that receives the overhead vapor. |
ConvertToComplex(): Replaces the built-in condenser and reboiler with separate flowsheet objects.
Replaces the built-in condenser and reboiler with separate flowsheet objects. For the condenser it adds a vessel, a splitter, a pump, a valve and a recycle block that returns the reflux to the top stage; for the reboiler it adds a splitter, a vessel, a pump, a valve and a recycle block that returns the boilup to the bottom stage. The existing product and duty streams are reconnected to the new objects, the end stages are removed, and ReboiledAbsorber and RefluxedAbsorber are set accordingly. Does nothing when the column is not on a flowsheet.
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: condenser type, number of stages, condenser and...
Generates a plain-text results report for this unit operation: condenser type, number of stages, condenser and reboiler duties, 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. |
SetCondenserSpec(string, double, string, string): Sets the condenser specification.
Sets the condenser specification. The spec type is a ColumnSpec.SpecType name (Heat_Duty, Product_Molar_Flow_Rate, Component_Molar_Flow_Rate, Product_Mass_Flow_Rate, Component_Mass_Flow_Rate, Component_Fraction, Component_Recovery, Stream_Ratio, Temperature, Feed_Recovery) or a common alias such as "Reflux_Ratio", "Duty" or "Temp"; a unit in parentheses after the name is used when units is empty.
| Parameter | Type | Description |
|---|---|---|
spectype |
String |
The specification type name or alias. |
value |
Double |
The specification value, expressed in units. |
units |
String |
The unit of the value. For a component fraction spec this is the basis, "Molar" (default when empty) or "Mass". |
compound |
String |
The compound name for component-based specifications. |
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. |
SetReboilerSpec(string, double, string, string): Sets the reboiler specification.
Sets the reboiler specification. The spec type is a ColumnSpec.SpecType name (Heat_Duty, Product_Molar_Flow_Rate, Component_Molar_Flow_Rate, Product_Mass_Flow_Rate, Component_Mass_Flow_Rate, Component_Fraction, Component_Recovery, Stream_Ratio, Temperature, Feed_Recovery) or a common alias such as "Boilup_Ratio", "Duty" or "Temp"; a unit in parentheses after the name is used when units is empty.
| Parameter | Type | Description |
|---|---|---|
spectype |
String |
The specification type name or alias. |
value |
Double |
The specification value, expressed in units. |
units |
String |
The unit of the value. For a component fraction spec this is the basis, "Molar" (default when empty) or "Mass". |
compound |
String |
The compound name for component-based specifications. |