Copper Bed Mercury Adsorber¶
DWSIM Plus
Available with a DWSIM Plus (Patreon) subscription.
![]()
Copper Bed Mercury Adsorber unit operation for DWSIM. Ports ───── Inlet 0 : Feed gas (may contain trace Mercury compound) Outlet 0 : Treated gas (Mercury reduced to outlet spec) Models ───── CapacityBased – vendor capacity + simple mass balance → bed lifetime WheelerJonas – Langmuir/Freundlich isotherm + Wheeler-Jonas breakthrough curve → C_out(bed age) The Hg compound (default name "Mercury") is identified in the stream by the configurable Config.HgCompoundName string. If that compound is absent from the stream, the user-specified inlet concentration is used instead and the outlet stream Hg composition is updated via mole-fraction scaling.
DWSIM.UnitOperations.CopperBedMercuryAdsorber.CopperBedMercuryAdsorberUnitOperation
Assembly DWSIM.UnitOperations.CopperBedMercuryAdsorber.dll · Object ← BaseClass ← UnitOpBaseClass ← CopperBedMercuryAdsorberUnitOperation
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Feed gas |
| Outlet, material | 0 |
Treated gas |
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("MercuryGuardBedExample")
.WithCompounds("Methane", "Ethane", "Mercury")
.WithPropertyPackage(PropertyPackages.PengRobinson))
# 1000 mol/s of gas is about 80 700 Nm3/h; 200 ug/Nm3 of Hg is a mole fraction of 2.2e-8.
gas = (fs.AddMaterialStream("Feed gas")
.At(Q.Celsius(30.0), Q.Bar(60.0))
.SetCompoundMolarFlow("Methane", 920.0) # mol/s
.SetCompoundMolarFlow("Ethane", 80.0)
.SetCompoundMolarFlow("Mercury", 2.24e-5))
treated = fs.AddMaterialStream("Treated gas")
bed = (fs.AddCopperBedMercuryAdsorber("HgR-1")
.WithOperationMode(CopperBedOperationMode.CapacityBased)
.WithSorbentPreset(SorbentPreset.CuSOnAlumina)
.WithMaxHgCapacityMgPerG(100.0) # vendor rating
.ConnectFeed(gas)
.ConnectProduct(treated))
cfg = bed.Config
cfg.Bed.SorbentMass = 10000.0 # kg
cfg.Bed.VesselDiameter = 2.4 # m
cfg.Bed.BedLength = 3.2 # m
cfg.BreakthroughConcentrationNm3 = 0.01 # ug/Nm3 outlet specification
fs.AutoLayout()
fs.Solve()
r = bed.Object.Results
print(f"Gas flow = {r.StandardVolumetricFlowNm3h:.0f} Nm3/h")
print(f"Inlet Hg = {r.InletHgConcentrationNm3:.1f} ug/Nm3")
print(f"Outlet Hg = {r.OutletHgConcentrationNm3:.3f} ug/Nm3 ({r.HgRemovalEfficiency * 100:.2f} % removed)")
print(f"Hg removed = {r.HgRemovedMassFlow * 3600 / 1e6:.2f} g/h") # HgRemovedMassFlow is in ug/s
print(f"Bed capacity = {r.TotalBedCapacityKg:.1f} kg Hg")
print(f"Bed lifetime = {r.BedLifetimeSeconds / 3.156e7:.1f} years")
print(f"Bed pressure drop = {r.PressureDrop / 1000:.2f} kPa")
Output
Gas flow = 80690 Nm3/h
Inlet Hg = 200.5 ug/Nm3
Outlet Hg = 0.010 ug/Nm3 (100.00 % removed)
Hg removed = 16.17 g/h
Bed capacity = 1000.0 kg Hg
Bed lifetime = 7.1 years
Bed pressure drop = 8.82 kPa
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 |
|---|---|---|---|
Operation Mode |
yes | ||
Sorbent Preset |
yes | ||
Isotherm Model |
yes | ||
Sorbent Mass |
kg | yes | |
Bulk Density |
kg/m3 | yes | |
Void Fraction |
yes | ||
Vessel Diameter |
mm | yes | |
Bed Length |
mm | yes | |
Particle Diameter |
mm | yes | |
Particle Sphericity |
yes | ||
Max Hg Capacity |
mg Hg/g | yes | |
Langmuir qSat |
mol/kg | yes | |
Langmuir b0 |
1/Pa | yes | |
Langmuir dH |
J/mol | yes | |
Freundlich KF |
mol/(kg.Pa^(1/nF)) | yes | |
Freundlich nF |
yes | ||
Wheeler-Jonas kv |
1/s | yes | |
Bed Age |
h | yes | |
Use Inlet Temperature |
yes | ||
Operating Temperature |
K | yes | |
Use Stream Hg Concentration |
yes | ||
Inlet Hg Concentration (Nm3) |
µg/Nm³ | yes | |
Breakthrough Concentration (Nm3) |
µg/Nm³ | yes | |
Hg Compound Name |
yes | ||
Inlet Hg Concentration |
µg/Nm³ | result | |
Outlet Hg Concentration |
µg/Nm³ | result | |
Hg Removal Efficiency |
% | result | |
Hg Removed Mass Flow |
kg/s | result | |
Bed Lifetime |
days | result | |
Bed Saturation |
% | result | |
Equilibrium Capacity |
mg Hg/g | result | |
Total Bed Capacity |
g Hg | result | |
Feed Molar Flow |
mol/s | result | |
Gas Volumetric Flow (Nm3h) |
Nm³/h | result | |
Pressure Drop |
Pa | result |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
CopperBedMercuryAdsorberUnitOperation()
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 input configuration: operation mode (capacity-based or Wheeler-Jonas), sorbent preset, mercury...
Gets or sets the input configuration: operation mode (capacity-based or Wheeler-Jonas), sorbent preset, mercury isotherm model, bed geometry and the name of the mercury compound in the stream.
IsPremium: Gets a value indicating that this unit operation is listed in the Premium group of the object palette (always true).
Gets a value indicating that this unit operation is listed in the Premium group of the object palette (always true).
MobileCompatible: Gets a value indicating whether this unit operation is compatible with mobile interfaces (always false).
Gets a value indicating whether this unit operation is compatible with mobile interfaces (always false).
ObjectClass: Gets the simulation object class category (separators).
Gets the simulation object class category (separators).
Prefix: Gets the default name prefix for this unit operation ('HGA-').
Gets the default name prefix for this unit operation ("HGA-").
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: one feed gas inlet on the left and one treated gas...
Creates the graphic connector definitions on the flowsheet: one feed gas inlet on the left and one treated gas outlet on the right. The energy connector is disabled.
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 on the given SkiaSharp canvas: the embedded photo in photorealistic mode (draw mode 2)...
Draws the unit operation on the given SkiaSharp canvas: the embedded photo in photorealistic mode (draw mode 2), otherwise the vector icon.
| Parameter | Type | Description |
|---|---|---|
g |
Object |
The SkiaSharp canvas. |
GetChartModel(string): Builds an OxyPlot model of the outlet-to-inlet mercury concentration ratio against bed age, from the breakthrough...
Builds an OxyPlot model of the outlet-to-inlet mercury concentration ratio against bed age, from the breakthrough time and the mass-transfer coefficient of the last calculation.
| Parameter | Type | Description |
|---|---|---|
name |
String |
GetChartModelNames(): Chart names the PFD chart object can embed.
Chart names the PFD chart object can embed.
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.
Returns the raw bytes of the icon image for this unit operation.
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.
Populates the cross-platform (Avalonia) editor panel with controls.
| 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. |
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¶