Delayed Coker¶
DWSIM Plus
Available with a DWSIM Plus (Patreon) subscription.
![]()
Shortcut Delayed Coker. Feed: vacuum residue. Products: 5 material outlets (dry gas, LPG, naphtha, LGO, HGO). Coke is reported (not streamed); heater duty (endothermic) is absorbed from the energy connector. Yields anchor on feed CCR using Nelson / Gary & Handwerk correlations; the remainder of the mass balance splits to LGO/HGO. Lights (dry gas, LPG, naphtha, LGO) are emitted as moles of a single surrogate compound each; HGO keeps the feed pseudocomponents. Metals concentrate in coke.
DWSIM.UnitOperations.Refining.Coker.CokerUnitOperation
Assembly DWSIM.UnitOperations.Refining.dll · Object ← BaseClass ← UnitOpBaseClass ← CokerUnitOperation
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Vacuum-resid |
| Inlet, energy | 1 |
Heater-duty |
| Outlet, material | 0 |
Dry-gas |
| Outlet, material | 1 |
LPG |
| Outlet, material | 2 |
Coker-naphtha |
| Outlet, material | 3 |
LGO |
| Outlet, material | 4 |
HGO |
Example¶
This code runs on every build of this site, and the output below is what it printed.
# Dry gas, LPG, naphtha and LGO leave as one surrogate compound each;
# the heavy gas oil keeps the feed pseudos. Coke stays in the drum.
fs = Flowsheet.Create("CokerExample").WithCompounds("Methane", "Propane", "2,2,4-trimethylpentane", "N-dodecane")
# Vacuum residue as two pseudocomponents: name, NBP (K), SG, MW
resid = [("VR-1", 820.0, 0.99, 650.0), ("VR-2", 900.0, 1.02, 900.0)]
for name, nbp, sg, mw in resid:
CompoundExtensions.WithPseudoComponent(fs, name, Q.Kelvin(nbp), sg, mw,
paraffinFrac=0.30, naphtenicFrac=0.30, aromaticFrac=0.40)
fs.WithPropertyPackage(PropertyPackages.PengRobinson)
feed = fs.AddMaterialStream("Vacuum-resid").At(Q.Celsius(300.0), Q.Bar(5.0))
for name, *_ in resid:
feed.SetCompoundMassFlow(name, 25.0) # kg/s each, 50 kg/s in total
comp = feed.Object.Phases[0].Compounds[name]
ContaminantKeys.Set(comp, ContaminantKeys.CCR_wt_pct, 20.0)
ContaminantKeys.Set(comp, ContaminantKeys.WtPctSulfur, 3.5)
products = [fs.AddMaterialStream(tag) for tag in ("Dry-gas", "LPG", "Coker-naphtha", "LGO", "HGO")]
heater = fs.AddEnergyStream("Heater-duty")
coker = (fs.AddCoker("DCU-1")
.WithHeaterOutletTemperature(Q.Celsius(495.0))
.WithDrumPressure(Q.Bar(2.0))
.WithCokeFromCCRFactor(1.6) # wt% coke per wt% CCR
.WithLGOofGasOil(0.55)
.ConnectFeed(feed, 0)
.ConnectEnergyFeed(heater, 1))
for port, stream in enumerate(products):
coker.ConnectProduct(stream, port)
fs.AutoLayout()
fs.Solve()
r = coker.Object.Results
liquids = sum(s.MassFlowKgPerSecond for s in products)
print(f"Coke yield = {r.CokeMassFlow / r.FeedMassFlow * 100.0:.1f} wt% ({r.CokeMassFlow * 86.4:.0f} t/d)")
print(f"Gas (C1-C4) = {(products[0].MassFlowKgPerSecond + products[1].MassFlowKgPerSecond) / r.FeedMassFlow * 100.0:.1f} wt%")
print(f"Naphtha = {products[2].MassFlowKgPerSecond / r.FeedMassFlow * 100.0:.1f} wt%")
print(f"LGO + HGO = {(products[3].MassFlowKgPerSecond + products[4].MassFlowKgPerSecond) / r.FeedMassFlow * 100.0:.1f} wt%")
print(f"Products + coke = {liquids + r.CokeMassFlow:.2f} kg/s (feed {r.FeedMassFlow:.2f} kg/s)")
print(f"Heater duty = {heater.EnergyFlowKW / 1000.0:.1f} MW")
Output
Coke yield = 32.0 wt% (1382 t/d)
Gas (C1-C4) = 10.7 wt%
Naphtha = 18.1 wt%
LGO + HGO = 39.2 wt%
Products + coke = 50.00 kg/s (feed 50.00 kg/s)
Heater duty = 19.9 MW
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 |
|---|---|---|---|
Heater Outlet Temperature |
K | yes | |
Drum Pressure |
Pa | yes | |
Heater Duty Per Kg Feed |
J/kg | yes | |
Coke-from-CCR Factor |
NF | yes | |
Fallback CCR |
NF | yes | |
Feed Mass Flow |
kg/s | result | |
CCR Used |
NF | result | |
Dry Gas Yield |
NF | result | |
LPG Yield |
NF | result | |
Naphtha Yield |
NF | result | |
LGO Yield |
NF | result | |
HGO Yield |
NF | result | |
Coke Yield |
NF | result | |
Coke Mass Flow |
kg/s | result | |
Heater Duty |
kW | result | |
Heater Duty Estimate |
kW | result | |
Ni In Coke |
kg/s | result | |
V In Coke |
kg/s | result | |
Feed xP |
NF | result | |
Feed xN |
NF | result | |
Feed xA |
NF | result |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
Properties¶
ComponentDescription: Gets or sets the CAPE-OPEN component description for this unit operation.
Gets or sets the CAPE-OPEN component description for this unit operation.
Config: Gets or sets the configuration of this delayed coker: the heater outlet temperature, drum pressure, heater duty per...
Gets or sets the configuration of this delayed coker: the heater outlet temperature, drum pressure, heater duty per kg of feed, CCR-based coke, gas and naphtha yield correlations, gas and gas oil splits, feed PNA corrections, sulfur and nitrogen partitioning across the products and coke, and the product surrogate compounds.
IsRefining: Gets a value indicating that this unit operation belongs to the refining group.
Gets a value indicating that this unit operation belongs to the refining group. Always true; the object palette uses it to list the unit under the Refinery category.
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 false.
ObjectClass: Gets the simulation object class category (Reactors).
Gets the simulation object class category (Reactors).
Prefix: Gets the default name prefix for this unit operation ('COK-').
Gets the default name prefix for this unit operation ("COK-").
Methods¶
Calculate(object): Calculates the object.
Calculates the object.
| Parameter | Type | Description |
|---|---|---|
args |
Object |
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.
CloseEditForm(): Closes the editor of this object, if it is open.
Closes the editor of this object, if it is open.
CreateConnectors(): Creates the graphic connector definitions on the flowsheet: a Feed inlet on the left, a Heater Duty energy inlet at...
Creates the graphic connector definitions on the flowsheet: a Feed inlet on the left, a Heater Duty energy inlet at the bottom, and five product outlets (Dry Gas, LPG, Naphtha, LGO, HGO) on the right.
DeCalculate(): Decalculates the object.
Decalculates the object.
DisplayEditForm(): Opens the editor of this object.
Opens the editor of this object. A host that has no editor for it does nothing.
Draw(object): Draws the unit operation icon on the given SkiaSharp canvas.
Draws the unit operation icon on the given SkiaSharp canvas. Draw mode 2 uses the embedded PNG image (falling back to the vector icon if it cannot be loaded), draw mode 1 draws the vector icon as a silhouette, and other modes draw the vector icon.
| Parameter | Type | Description |
|---|---|---|
g |
Object |
The SkiaSharp canvas (SKCanvas). |
GetDisplayDescription(): Returns the description string for this unit operation type.
Returns the description string for this unit operation type.
GetDisplayName(): Returns the display name for this unit operation type.
Returns the display name for this unit operation type.
GetIconBitmapBytes(): Returns the raw bytes of the icon image for this unit operation, rendered from the vector icon at 64 x 64 pixels.
Returns the raw bytes of the icon image for this unit operation, rendered from the vector icon at 64 x 64 pixels.
GetPreferredGraphicObjectHeight(): Returns the preferred height of the flowsheet graphic object, in pixels.
Returns the preferred height of the flowsheet graphic object, in pixels.
GetPreferredGraphicObjectWidth(): Returns the preferred width of the flowsheet graphic object, in pixels.
Returns the preferred width of the flowsheet graphic object, in pixels.
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. |
LoadData(List<XElement>): Restores the unit operation state from a list of XML elements previously produced by SaveData.
Restores the unit operation state from a list of XML elements previously produced by SaveData.
| Parameter | Type | Description |
|---|---|---|
data |
List<XElement> |
The list of XElement objects containing serialized state. |
PopulateEditorPanel(object): Populates the cross-platform (Avalonia) editor panel with controls: buttons that open the configuration and results...
Populates the cross-platform (Avalonia) editor panel with controls: buttons that open the configuration and results forms. Other container types are ignored.
| Parameter | Type | Description |
|---|---|---|
ctner |
Object |
The editor panel (layout container) to populate. |
ReturnInstance(string): Creates and returns a new instance for deserialization.
Creates and returns a new instance for deserialization.
| Parameter | Type | Description |
|---|---|---|
typename |
String |
The type name to instantiate (not used). |
SaveData(): Serializes the unit operation state to a list of XML elements for persistence.
Serializes the unit operation state to a list of XML elements for persistence.
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. |
UpdateEditForm(): Redraws the editor of this object with the current values, if it is open.
Redraws the editor of this object with the current values, if it is open.
Fields¶