Shortcut Column¶
![]()
Represents a shortcut distillation column unit operation that uses the Fenske-Underwood-Gilliland method to estimate the minimum number of stages, minimum reflux ratio, condenser and reboiler duties, and optimum feed stage for a single-feed, two-product column.
DWSIM.UnitOperations.UnitOperations.ShortcutColumn
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← ShortcutColumn
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Feed |
| Inlet, energy | 1 |
Q-reb |
| Outlet, material | 0 |
Distillate |
| Outlet, material | 1 |
Bottoms |
| Outlet, energy | energy |
Q-cond |
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("ShortcutColumnExample")
.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.AddShortcutColumn("T-1")
.ConnectFeed(feed, 0)
.ConnectProduct(distillate, 0)
.ConnectProduct(bottoms, 1)
.ConnectEnergyProduct(q_cond) # condenser duty leaves on the energy port
.ConnectEnergyFeed(q_reb, 1)) # reboiler duty enters on inlet port 1
sc = column.Object
sc.m_lightkey = "Benzene"
sc.m_heavykey = "Toluene"
sc.m_lightkeymolarfrac = 0.01 # benzene mole fraction in the bottoms
sc.m_heavykeymolarfrac = 0.01 # toluene mole fraction in the distillate
sc.m_refluxratio = 2.0
sc.m_condenserpressure = 101325.0 # Pa
sc.m_boilerpressure = 101325.0 # Pa
fs.AutoLayout()
fs.Solve()
print(f"Minimum reflux ratio = {sc.m_Rmin:.3f}")
print(f"Minimum stages = {sc.m_Nmin:.2f}")
print(f"Theoretical stages = {sc.m_N:.2f} (optimum feed stage {sc.ofs:.1f})")
print(f"Distillate = {distillate.MolarFlowMolPerSecond:.2f} mol/s, "
f"benzene {distillate.OverallMoleFraction('Benzene'):.4f}")
print(f"Condenser duty = {q_cond.EnergyFlowKW:.1f} kW")
print(f"Reboiler duty = {q_reb.EnergyFlowKW:.1f} kW")
Output
Minimum reflux ratio = 1.328
Minimum stages = 10.26
Theoretical stages = 18.71 (optimum feed stage 9.4)
Distillate = 50.00 mol/s, benzene 0.9900
Condenser duty = 4556.3 kW
Reboiler duty = 4659.3 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.
| ID | Name | Unit (SI) | Input |
|---|---|---|---|
PROP_SC_0 |
Reflux Ratio | yes | |
PROP_SC_1 |
Heavy Key Molar Fraction | yes | |
PROP_SC_2 |
Light Key Molar Fraction | yes | |
PROP_SC_3 |
Condenser Pressure | Pa | yes |
PROP_SC_4 |
Reboiler Pressure | Pa | yes |
PROP_SC_5 |
Minimum Reflux Ratio | result | |
PROP_SC_6 |
Minimum Stages | result | |
PROP_SC_7 |
Optimal Feed Stage | result | |
PROP_SC_8 |
Stripping Liquid Molar Flow | mol/s | result |
PROP_SC_9 |
Rectify Liquid Molar Flow | mol/s | result |
PROP_SC_10 |
Stripping Vapor Molar Flow | mol/s | result |
PROP_SC_11 |
Rectify Vapor Molar Flow | mol/s | result |
PROP_SC_12 |
Condenser Duty | kW | result |
PROP_SC_13 |
Reboiler Duty | kW | result |
PROP_SC_14 |
Actual Stages | result | |
Stage Height |
m | yes | |
Estimated Height |
m | yes | |
Estimated Diameter |
m | yes |
Dynamic mode¶
Extra properties used when the flowsheet runs in dynamic mode.
| Name | Unit |
|---|---|
| Condenser Volume | m3 |
| Reboiler Volume | m3 |
| Condenser UA | |
| Reboiler UA | |
| Initialize using Inlet Stream | |
| Reset Content |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
ShortcutColumn(): Initializes a new default instance of the ShortcutColumn class.
Initializes a new default instance of the ShortcutColumn class.
ShortcutColumn(string, string): Initializes a new instance of the ShortcutColumn class with a name and description.
Initializes a new instance of the ShortcutColumn class with a name and description.
| Parameter | Type | Description |
|---|---|---|
name |
String |
The display name of the shortcut column. |
description |
String |
A brief description of the shortcut column. |
Properties¶
CondenserAccumulationStream: Material stream that holds the condenser (reflux drum) contents in dynamic mode.
Material stream that holds the condenser (reflux drum) contents in dynamic mode. Its mass flow carries the holdup mass, in kg. Created on the first dynamic step and discarded by the "Reset Content" dynamic property.
EquipmentTypes: Gets the list of equipment sub-types available for this column (Tray, Packed).
Gets the list of equipment sub-types available for this column (Tray, Packed).
EstimatedDiameter: Gets or sets the estimated column diameter (m) from the last calculation.
Gets or sets the estimated column diameter (m) from the last calculation.
EstimatedHeight: Gets or sets the estimated column height (m) from the last calculation.
Gets or sets the estimated column height (m) from the last calculation.
HasPropertiesForDynamicMode: Gets a value indicating whether this unit operation has properties used in dynamic mode.
Gets a value indicating whether this unit operation has properties used in dynamic mode. Always True.
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.
ObjectClass: Gets or sets the simulation object class category (Columns).
Gets or sets the simulation object class category (Columns).
ReboilerAccumulationStream: Material stream that holds the reboiler sump contents in dynamic mode.
Material stream that holds the reboiler sump contents in dynamic mode. Its mass flow carries the holdup mass, in kg. Created on the first dynamic step and discarded by the "Reset Content" dynamic property.
StageHeight: Gets or sets the tray or packing height per theoretical stage (m).
Gets or sets the tray or packing height per theoretical stage (m).
SupportsDynamicMode: Gets a value indicating whether this unit operation can run in dynamic mode.
Gets a value indicating whether this unit operation can run in dynamic mode. Always True.
Methods¶
Calculate(object): Performs the Fenske-Underwood-Gilliland shortcut calculation: determines minimum stages, minimum reflux, actual...
Performs the Fenske-Underwood-Gilliland shortcut calculation: determines minimum stages, minimum reflux, actual number of stages, condenser/reboiler duties, and product compositions.
| Parameter | Type | Description |
|---|---|---|
args |
Object |
Optional calculation arguments (not used). |
CloneXML(): Creates a deep copy of this shortcut column via XML serialization.
Creates a deep copy of this shortcut column via XML serialization.
CloseEditForm(): Closes and disposes the editing form.
Closes and disposes the editing form.
CreateDimensionsList(): Creates the dimensions list (Diameter, Height, NumberOfTrays) used for column sizing.
Creates the dimensions list (Diameter, Height, NumberOfTrays) used for column sizing.
CreateDynamicProperties(): Registers the dynamic properties for dynamic simulation mode: condenser and reboiler holdup volumes, condenser and...
Registers the dynamic properties for dynamic simulation mode: condenser and reboiler holdup volumes, condenser and reboiler UA, initialization from the feed stream and content reset.
DeCalculate(): Clears all calculated results.
Clears all calculated results.
DisplayEditForm(): Opens or activates the editing form.
Opens or activates the editing form.
GetDisplayDescription(): Returns the localised display description.
Returns the localised display description.
GetDisplayName(): Returns the localised display name.
Returns the localised display name.
GetIconBitmapBytes(): Returns the icon bitmap as a byte array.
Returns the icon bitmap as a byte array.
GetProperties(PropertyType): Returns an array of property identifiers for the specified property type.
Returns an array of property identifiers for the specified property type.
| Parameter | Type | Description |
|---|---|---|
proptype |
PropertyType |
GetPropertyDescription(string): Returns a human-readable description of the specified property.
Returns a human-readable description of the specified property.
| Parameter | Type | Description |
|---|---|---|
p |
String |
GetPropertyUnit(string, IUnitsOfMeasure): Returns the unit string for the specified property.
Returns the unit string for the specified property.
| Parameter | Type | Description |
|---|---|---|
prop |
String |
|
su |
IUnitsOfMeasure |
GetPropertyValue(string, IUnitsOfMeasure): Returns the value of the specified property.
Returns the value of the specified property.
| Parameter | Type | Description |
|---|---|---|
prop |
String |
|
su |
IUnitsOfMeasure |
GetReport(IUnitsOfMeasure, CultureInfo, string): Generates a plain-text results report for this unit operation: inlet conditions, calculation parameters and the...
Generates a plain-text results report for this unit operation: inlet conditions, calculation parameters and the shortcut results (minimum reflux, stage counts, feed stage, duties, section flows and estimated size).
| 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. |
LoadData(List<XElement>): Restores the shortcut column state from a list of XML elements.
Restores the shortcut column state from a list of XML elements.
| Parameter | Type | Description |
|---|---|---|
data |
List<XElement> |
The list of XML elements containing the serialized data. |
rminfunc(double, object, object, double, int): Objective function for the Underwood root search: the squared residual of sum(alpha_i z_i / (alpha_i - theta)) - 1 +...
Objective function for the Underwood root search: the squared residual of sum(alpha_i z_i / (alpha_i - theta)) - 1 + q over the compounds present in the feed.
| Parameter | Type | Description |
|---|---|---|
x |
Double |
The trial Underwood root theta. |
alpha |
Object |
The relative volatilities of the compounds with respect to the heavy key. |
z |
Object |
The feed mole fractions. |
q |
Double |
The feed thermal condition (liquid fraction of the feed). |
n |
Int32 |
The index of the last compound (number of compounds minus one). |
RunDynamicModel(): Runs one dynamic-mode integration step.
Runs one dynamic-mode integration step. The feed is added to the reboiler holdup and the products are withdrawn; the reboiler holdup is flashed at the reboiler pressure and its vapor moves to the condenser holdup; the condenser holdup is flashed at the condenser pressure and the reflux fraction R/(R+1) of its liquid returns to the reboiler. The distillate and bottoms take the liquid phase, temperature and enthalpy of the condenser and reboiler holdups. When no holdup exists and initialization from the feed is off, the steady-state calculation runs instead.
SaveData(): Serializes the shortcut column state into a list of XML elements.
Serializes the shortcut column state into a list of XML elements.
SetPropertyValue(string, object, IUnitsOfMeasure): Sets the value of the specified property.
Sets the value of the specified property.
| Parameter | Type | Description |
|---|---|---|
prop |
String |
|
propval |
Object |
|
su |
IUnitsOfMeasure |
UpdateDimensionsList(): Updates the dimension values from the current calculated results.
Updates the dimension values from the current calculated results.
UpdateEditForm(): Refreshes the editing form with updated data.
Refreshes the editing form with updated data.
Fields¶
condtype: Condenser type: TotalCond (total condenser, liquid distillate) or PartialCond (partial condenser, vapor distillate).
Condenser type: TotalCond (total condenser, liquid distillate) or PartialCond (partial condenser, vapor distillate). Default TotalCond.
f: The classic (WinForms) editor window open for this unit operation, if any.
The classic (WinForms) editor window open for this unit operation, if any. Not saved with the flowsheet.
L: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
L_: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_boilerpressure: Reboiler pressure, in Pa.
Reboiler pressure, in Pa. Default 101325 Pa.
m_condenserpressure: Condenser pressure, in Pa.
Condenser pressure, in Pa. Default 101325 Pa.
m_heavykey: Name of the heavy key compound.
Name of the heavy key compound.
m_heavykeymolarfrac: Specified mole fraction of the heavy key in the distillate product.
Specified mole fraction of the heavy key in the distillate product. Default 0.01.
m_lightkey: Name of the light key compound.
Name of the light key compound.
m_lightkeymolarfrac: Specified mole fraction of the light key in the bottoms product.
Specified mole fraction of the light key in the bottoms product. Default 0.01.
m_N: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_Nmin: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_Qb: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_Qc: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_refluxratio: Specified (actual) reflux ratio L/D.
Specified (actual) reflux ratio L/D. Must be greater than the calculated minimum reflux ratio. Default 1.5.
m_Rmin: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_Tb: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
m_Tc: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
ofs: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
V: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).
V_: Calculated results.
Calculated results. m_N: actual number of stages (Gilliland). m_Nmin: minimum number of stages (Fenske). m_Rmin: minimum reflux ratio (Underwood). m_Tc, m_Tb: condenser and reboiler temperatures in K, set by the dynamic model from the holdup streams. m_Qc, m_Qb: condenser and reboiler duties, in kW. L, V: rectifying section liquid and vapor molar flows, in mol/s. L_, V_: stripping section liquid and vapor molar flows, in mol/s. ofs: optimum feed stage location, estimated as the number of stripping section stages (Fenske between feed and bottoms, scaled by m_N/m_Nmin).