Chromatography Column¶
![]()
Chromatography column (simplified Langmuir-binding + user-specified resolution model). For each compound, the user specifies a "RecoveryToProduct" fraction (0 to 1) - for BindElute mode, this is the elution yield; for FlowThrough, it's the pass-through fraction. ApplyChemistryDefaults fills the binding capacity, the Thomas rate constant and the recoveries with typical values for the selected chemistry; the editors and the FluentAPI call it when the chemistry changes. The column's dynamic binding capacity is checked against the target load of one cycle (feed rate times CycleLoadTime_s).
DWSIM.UnitOperations.UnitOperations.UnitOp_Chromatography
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← UnitOp_Chromatography
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Clarified lysate |
| Outlet, material | 0 |
Eluate |
| Outlet, material | 1 |
Flow-through |
Example¶
This code runs on every build of this site, and the output below is what it printed.
# Casein stands in for the target protein; glucose is the impurity to clear.
fs = (Flowsheet.Create("ChromatographyExample")
.WithCompounds("Water", "Casein", "Glucose")
.WithPropertyPackage(PropertyPackages.NRTL))
lysate = (fs.AddMaterialStream("Clarified lysate")
.At(Q.Celsius(20.0), Q.Bar(3.0))
.SetCompoundMassFlow("Water", 0.9850) # kg/s
.SetCompoundMassFlow("Casein", 0.0100)
.SetCompoundMassFlow("Glucose", 0.0050))
eluate = fs.AddMaterialStream("Eluate")
flowthrough = fs.AddMaterialStream("Flow-through")
col = (fs.AddChromatographyColumn("IEX-1")
.WithMode(ChromatographyMode.BindElute)
.WithChemistry(ChromatographyChemistry.IonExchange)
.WithColumnVolumeLiters(200.0)
.WithDynamicBindingCapacityGPerL(60.0)
.WithDefaultRecoveryToProduct(0.25) # elution buffer volume, as a share of the load
.WithRecoveryToProduct("Casein", 0.92) # elution yield of the protein
.WithRecoveryToProduct("Glucose", 0.01)
.ConnectFeed(lysate, 0)
.ConnectProduct(eluate, 0)
.ConnectProduct(flowthrough, 1))
fs.AutoLayout()
fs.Solve()
p_in = lysate.Object.Phases[0].Compounds
p_out = eluate.Object.Phases[0].Compounds
protein, sugar = p_out["Casein"].MassFlow, p_out["Glucose"].MassFlow
print(f"Protein recovery = {protein / p_in['Casein'].MassFlow * 100.0:.1f} %")
feed_purity = p_in["Casein"].MassFlow / (p_in["Casein"].MassFlow + p_in["Glucose"].MassFlow)
print(f"Protein purity = {protein / (protein + sugar) * 100.0:.1f} % of solutes (feed {feed_purity * 100.0:.1f} %)")
print(f"Concentration factor = {p_out['Casein'].MassFraction / p_in['Casein'].MassFraction:.1f}")
print(f"Eluate flow = {eluate.MassFlowKgPerSecond * 3600.0:.0f} kg/h")
Output
Protein recovery = 92.0 %
Protein purity = 99.5 % of solutes (feed 66.7 %)
Concentration factor = 3.6
Eluate flow = 920 kg/h
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 |
|---|---|---|---|
Mode |
- | yes | |
Chemistry |
- | yes | |
Target Compound |
- | yes | |
Column Volume |
L | yes | |
Dynamic Binding Capacity |
g/L | yes | |
Default Recovery To Product |
- | yes | |
Cycle Load Time |
s | yes | |
Thomas Rate Constant |
L/(g.s) | yes | |
Loading Time |
s | yes | |
Feed Mass |
kg/s | result | |
Product Mass |
kg/s | result | |
Waste Mass |
kg/s | result | |
Target Recovery |
- | result | |
Load Per Cycle |
kg | result | |
Binding Capacity |
kg | result | |
Load Ratio |
- | result | |
Time To Capacity |
s | result | |
Load Volume Fraction |
- | result | |
Saturated |
- | result |
Learn more¶
-
User guide
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
UnitOp_Chromatography(): Initializes a new default instance of the UnitOp_Chromatography class.
Initializes a new default instance of the UnitOp_Chromatography class.
UnitOp_Chromatography(string, string): Initializes a new instance of the UnitOp_Chromatography class with a name and description.
Initializes a new instance of the UnitOp_Chromatography class with a name and description.
| Parameter | Type | Description |
|---|---|---|
name |
String |
The name of this unit operation. |
description |
String |
A brief description of this unit operation. |
Properties¶
Chemistry: Gets or sets the resin chemistry: IonExchange (default), Affinity, HIC (hydrophobic interaction), SizeExclusion or...
Gets or sets the resin chemistry: IonExchange (default), Affinity, HIC (hydrophobic interaction), SizeExclusion or MixedMode. The calculation does not read it; the editors and the FluentAPI WithChemistry call ApplyChemistryDefaults when it changes, which fills the binding capacity, the Thomas rate constant and the recoveries with typical values for the chemistry. Setting the property directly keeps the current values.
ColumnVolume_L: Gets or sets the packed column (resin bed) volume, in L.
Gets or sets the packed column (resin bed) volume, in L. Default 10 L.
ComponentDescription: Gets or sets the display description for this unit operation.
Gets or sets the display description for this unit operation.
ComponentName: Gets or sets the display name for this unit operation.
Gets or sets the display name for this unit operation.
CycleLoadTime_s: Gets or sets the duration of the load step of one cycle, in s.
Gets or sets the duration of the load step of one cycle, in s. The target load per cycle is the target feed mass flow times this time, and Result_LoadRatio divides it by the binding capacity. Default 1 s, which reproduces the load ratio of earlier versions (target feed rate in kg/s over capacity in kg); set the real load time of the cycle. Result_TimeToCapacity_s gives the time that fills the capacity.
DefaultRecoveryToProduct: Gets or sets the fraction (0 to 1) of each compound sent to the Product outlet when the compound has no entry in...
Gets or sets the fraction (0 to 1) of each compound sent to the Product outlet when the compound has no entry in RecoveryToProduct. Default 0.05.
DynamicBindingCapacity_gL: Gets or sets the dynamic binding capacity of the resin, in g per L of column volume.
Gets or sets the dynamic binding capacity of the resin, in g per L of column volume. Default 40 g/L. Used for the load ratio check and as q_max in the Thomas breakthrough model.
IsBio: Gets a value that marks this unit operation as a bioprocess unit.
Gets a value that marks this unit operation as a bioprocess unit. The object palettes read this flag by reflection to list it in the Biochemical group.
LoadingTime_s: Loading time (s) of the dynamic breakthrough simulation (BindElute_Dynamic).
Loading time (s) of the dynamic breakthrough simulation (BindElute_Dynamic). 0 = auto (to about 99 % saturation).
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.
Mode: Gets or sets the operating mode: BindElute (0, default), FlowThrough (1) or BindElute_Dynamic (2).
Gets or sets the operating mode: BindElute (0, default), FlowThrough (1) or BindElute_Dynamic (2). The compound split always uses the per-compound recoveries; BindElute_Dynamic also builds a Thomas-model breakthrough curve for the loading step.
ObjectClass: Gets or sets the simulation object class category (always Separators).
Gets or sets the simulation object class category (always Separators).
RecoveryFromChemistryDefaults: Gets or sets the names of the compounds whose RecoveryToProduct entry was filled by...
Gets or sets the names of the compounds whose RecoveryToProduct entry was filled by ApplyChemistryDefaults. The editors label these rows as chemistry defaults; SetRecoveryToProduct takes a compound off the list when the user sets its recovery. The calculation does not read it. Empty by default, so files saved before it existed show every entry as user-set.
RecoveryToProduct: Gets or sets the per-compound fraction (0 to 1) of the feed mass sent to the Product outlet, keyed by compound name.
Gets or sets the per-compound fraction (0 to 1) of the feed mass sent to the Product outlet, keyed by compound name. The remainder goes to the Waste outlet. In bind-elute mode this is the elution yield; in flow-through mode it is the pass-through fraction.
ResinDensity_gL: Resin bulk density, in g/L of column.
Resin bulk density, in g/L of column. Not used by the calculation: the dynamic binding capacity is per litre of column, so the Thomas capacity term is q_max (g/L) times the column volume (L) and the resin density cancels. Kept so older files load.
Result_BindingCapacity_kg: Gets or sets the calculated binding capacity of the column, in kg: dynamic binding capacity (g/L) times column...
Gets or sets the calculated binding capacity of the column, in kg: dynamic binding capacity (g/L) times column volume (L) / 1000.
Result_FeedMass_kgs: Gets or sets the calculated feed mass flow, in kg/s.
Gets or sets the calculated feed mass flow, in kg/s.
Result_LoadPerCycle_kg: Gets or sets the calculated target load per cycle, in kg: target feed mass flow times...
Gets or sets the calculated target load per cycle, in kg: target feed mass flow times CycleLoadTime_s.
Result_LoadRatio: Gets or sets the calculated load ratio (dimensionless): target load per cycle (target feed mass flow times...
Gets or sets the calculated load ratio (dimensionless): target load per cycle (target feed mass flow times CycleLoadTime_s, in kg) divided by the column binding capacity (dynamic binding capacity times column volume, in kg). Values above 1 mean the column is saturated.
Result_LoadVolumeFraction: Gets or sets the calculated feed volume loaded per cycle as a fraction of the column volume: feed volumetric flow...
Gets or sets the calculated feed volume loaded per cycle as a fraction of the column volume: feed volumetric flow times CycleLoadTime_s over the column volume. Size exclusion runs take 0.02 to 0.05 (2 to 5 % of CV).
Result_ProductMass_kgs: Gets or sets the calculated Product outlet mass flow, in kg/s.
Gets or sets the calculated Product outlet mass flow, in kg/s.
Result_Saturated: Gets or sets a value indicating whether the last calculation exceeded the binding capacity (load ratio above 1).
Gets or sets a value indicating whether the last calculation exceeded the binding capacity (load ratio above 1).
Result_TargetRecovery: Gets or sets the calculated recovery (0 to 1) of the target compounds in the Product outlet.
Gets or sets the calculated recovery (0 to 1) of the target compounds in the Product outlet. The target is TargetCompound, or every compound above 5000 g/mol when it is empty.
Result_TimeToCapacity_s: Gets or sets the calculated load time that fills the binding capacity, in s: binding capacity over target feed mass...
Gets or sets the calculated load time that fills the binding capacity, in s: binding capacity over target feed mass flow. 0 when the feed has no target.
Result_WasteMass_kgs: Gets or sets the calculated Waste outlet mass flow, in kg/s.
Gets or sets the calculated Waste outlet mass flow, in kg/s.
SEC_ExclusionLimit_gmol: Gets or sets the exclusion limit of the size exclusion resin, in g/mol: compounds at or above it elute in the void...
Gets or sets the exclusion limit of the size exclusion resin, in g/mol: compounds at or above it elute in the void volume (Kav = 0). Default 600 000 g/mol (Superdex 200 class, globular proteins). Read only by ApplyChemistryDefaults for SizeExclusion.
SEC_PermeationLimit_gmol: Gets or sets the total permeation limit of the size exclusion resin, in g/mol: compounds at or below it reach the...
Gets or sets the total permeation limit of the size exclusion resin, in g/mol: compounds at or below it reach the whole pore volume (Kav = 1). Default 10 000 g/mol (Superdex 200 class). Read only by ApplyChemistryDefaults for SizeExclusion.
SupportsDynamicMode: Gets a value indicating whether this unit operation supports dynamic simulation mode.
Gets a value indicating whether this unit operation supports dynamic simulation mode. Always False.
TargetCompound: Gets or sets the name of the target compound (the product the column captures or polishes).
Gets or sets the name of the target compound (the product the column captures or polishes). Empty (default): every compound above 5000 g/mol counts as a target for the recovery, the load ratio and the Thomas breakthrough. ApplyChemistryDefaults gives the target the chemistry yield and treats the other macromolecules as impurities.
ThomasRateConstant_Lgs: Thomas rate constant k_Th, in L/(g.s).
Thomas rate constant k_Th, in L/(g.s). Typical: 1e-4 to 1e-2. Used by BindElute_Dynamic only.
Methods¶
ApplyChemistryDefaults(): Fills DynamicBindingCapacity_gL, ThomasRateConstant_Lgs and...
Fills DynamicBindingCapacity_gL, ThomasRateConstant_Lgs and the RecoveryToProduct entries with typical platform values for Chemistry (see GetChemistryDefaults). The editors and the FluentAPI WithChemistry call it when the chemistry changes; Calculate never does, so a saved flowsheet keeps the values it was saved with. Recoveries: the target (TargetCompound, or every compound above 5000 g/mol when it is empty) gets the chemistry step yield; host cell proteins (a compound named HCP or host cell protein) and, with a named target, the other compounds above 5000 g/mol get 10^-LRV. Size exclusion sets the binding capacity to 0 and gives every compound 1 - Kav (SizeExclusionKav). Water, and the small solutes outside size exclusion, keep their entries or DefaultRecoveryToProduct. Entries a previous call filled (those on RecoveryFromChemistryDefaults) are removed first, so a compound the new chemistry does not cover returns to DefaultRecoveryToProduct; entries the user typed stay. Each compound it fills goes on RecoveryFromChemistryDefaults.
Calculate(object): Calculates the object.
Calculates the object.
| Parameter | Type | Description |
|---|---|---|
args |
Object |
ChemistryDefaultRecovery(ICompoundConstantProperties): Returns the recovery to product that ApplyChemistryDefaults gives a compound under the...
Returns the recovery to product that ApplyChemistryDefaults gives a compound under the current Chemistry, or Nothing when the defaults leave the compound alone (water, and small solutes outside size exclusion).
| Parameter | Type | Description |
|---|---|---|
compound |
ICompoundConstantProperties |
The compound. |
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.
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.
GetChartModel(string): Builds an OxyPlot model of the breakthrough curve (against bed volumes) or of the cumulative load (against time).
Builds an OxyPlot model of the breakthrough curve (against bed volumes) or of the cumulative load (against time).
| Parameter | Type | Description |
|---|---|---|
name |
String |
GetChartModelNames(): Chart names the PFD chart object can embed: the curves of the last dynamic bind-elute run.
Chart names the PFD chart object can embed: the curves of the last dynamic bind-elute run.
GetChemistryDefaults(ChromatographyChemistry): Returns the typical platform values of a resin chemistry: dynamic binding capacity, Thomas rate constant, target...
Returns the typical platform values of a resin chemistry: dynamic binding capacity, Thomas rate constant, target step yield and impurity log reduction.
| Parameter | Type | Description |
|---|---|---|
chemistry |
ChromatographyChemistry |
The resin chemistry. |
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.
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.
Generates a plain-text results report for this unit operation.
| Parameter | Type | Description |
|---|---|---|
su |
IUnitsOfMeasure |
The unit system used for formatting output values (not used; values are reported in fixed units). |
ci |
CultureInfo |
The culture info used for number formatting. |
numberformat |
String |
A .NET numeric format string (e.g. "G6") applied to output values. |
RecoveryFor(string): Returns the fraction of a compound sent to the Product outlet: its entry in RecoveryToProduct...
Returns the fraction of a compound sent to the Product outlet: its entry in RecoveryToProduct, or DefaultRecoveryToProduct when it has none, clamped to 0 to 1. Calculate splits the feed with it and the editors show it in the recovery grids, so both always agree.
| Parameter | Type | Description |
|---|---|---|
compName |
String |
The compound name. |
RecoverySource(string): Returns where the recovery of a compound comes from, as the editors label it: 'user-set' (an entry the user typed)...
Returns where the recovery of a compound comes from, as the editors label it: "user-set" (an entry the user typed), "chemistry default" (an entry filled by ApplyChemistryDefaults) or "default recovery" (no entry; DefaultRecoveryToProduct applies).
| Parameter | Type | Description |
|---|---|---|
compName |
String |
The compound name. |
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. |
SetRecoveryToProduct(string, double): Sets the recovery to product of one compound as a user value: writes its RecoveryToProduct...
Sets the recovery to product of one compound as a user value: writes its RecoveryToProduct entry and takes it off RecoveryFromChemistryDefaults. The editors and the FluentAPI WithRecoveryToProduct call it.
| Parameter | Type | Description |
|---|---|---|
compName |
String |
The compound name. |
value |
Double |
The fraction (0 to 1) of the compound feed mass sent to the Product outlet. |
SizeExclusionKav(double): Returns the size exclusion partition coefficient Kav for a molecular weight: linear in log10(MW) from 1 at...
Returns the size exclusion partition coefficient Kav for a molecular weight: linear in log10(MW) from 1 at SEC_PermeationLimit_gmol to 0 at SEC_ExclusionLimit_gmol, clamped to 0 to 1 (Carta and Jungbauer 2010).
| Parameter | Type | Description |
|---|---|---|
molarWeight |
Double |
The molecular weight, in g/mol. |
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¶