Skip to content

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

Distillation Column in the example flowsheet

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.

public DistillationColumn()
Public Sub New()

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.
public DistillationColumn(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

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.

public bool ReboiledAbsorber { get; set; }
Public Property ReboiledAbsorber As Boolean

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.

public bool RefluxedAbsorber { get; set; }
Public Property RefluxedAbsorber As Boolean

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).

public double TotalCondenserSubcoolingDeltaT { get; set; }
Public Property TotalCondenserSubcoolingDeltaT As Double

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

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

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

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

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

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.

public void ConvertToComplex()
Public Sub ConvertToComplex()

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: 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.
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

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.
public void SetCondenserSpec(string spectype, double value, string units, string compound = "")
Public Sub SetCondenserSpec(spectype As String, value As Double, units As String, compound 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

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.
public void SetReboilerSpec(string spectype, double value, string units, string compound = "")
Public Sub SetReboilerSpec(spectype As String, value As Double, units As String, compound As String = "")