Crossflow Ultrafiltration¶
![]()
Crossflow ultrafiltration / diafiltration unit. Splits an inlet (plus an optional diafiltration- buffer inlet) into a concentrated Retentate outlet and a Permeate outlet using per-compound sieving coefficients sigma_i in [0, 1] (0 = fully retained, 1 = freely permeable). Two operating modes are supported: Concentration - retentate volume = feed volume / VCF; m_ret_i / m_feed_i = VCF^(-sigma_i) DiafiltrationConstantVolume - retentate volume is held constant; m_ret_i / m_feed_i = exp(-N*(1-sigma_i))
DWSIM.UnitOperations.UnitOperations.UnitOp_CrossflowUF
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← UnitOp_CrossflowUF
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Protein solution |
| Inlet, material | 1 |
|
| Outlet, material | 0 |
Retentate |
| Outlet, material | 1 |
Permeate |
Example¶
This code runs on every build of this site, and the output below is what it printed.
# Casein stands in for the protein; glucose is a small solute that passes the membrane.
fs = (Flowsheet.Create("CrossflowUFExample")
.WithCompounds("Water", "Casein", "Glucose")
.WithPropertyPackage(PropertyPackages.NRTL))
feed = (fs.AddMaterialStream("Protein solution")
.At(Q.Celsius(15.0), Q.Bar(2.5))
.SetCompoundMassFlow("Water", 0.490) # kg/s
.SetCompoundMassFlow("Casein", 0.005)
.SetCompoundMassFlow("Glucose", 0.005))
retentate = fs.AddMaterialStream("Retentate")
permeate = fs.AddMaterialStream("Permeate")
uf = (fs.AddCrossflowUF("UF-1")
.WithOperatingMode(CrossflowUFMode.Concentration)
.WithVCF(5.0) # volume concentration factor
.WithDefaultSievingCoefficient(1.0) # water and small solutes pass freely
.WithSievingCoefficient("Casein", 0.02)
.WithMembraneFluxKgPerM2S(0.012) # about 43 L/(m2.h)
.ConnectFeed(feed, 0)
.ConnectProduct(retentate, 0)
.ConnectProduct(permeate, 1))
fs.AutoLayout()
fs.Solve()
ret = retentate.Object.Phases[0].Compounds
protein_in = feed.Object.Phases[0].Compounds["Casein"].MassFlow
feed_wt = feed.Object.Phases[0].Compounds["Casein"].MassFraction
print(f"Retentate flow = {retentate.MassFlowKgPerSecond * 3600.0:.0f} kg/h")
print(f"Permeate flow = {permeate.MassFlowKgPerSecond * 3600.0:.0f} kg/h")
print(f"Protein recovery = {ret['Casein'].MassFlow / protein_in * 100.0:.1f} %")
print(f"Protein in retentate = {ret['Casein'].MassFraction * 100.0:.2f} wt % (feed {feed_wt * 100.0:.2f} wt %)")
print(f"Membrane area = {uf.Object.Result_MembraneArea_m2:.1f} m2")
Output
Retentate flow = 374 kg/h
Permeate flow = 1426 kg/h
Protein recovery = 96.8 %
Protein in retentate = 4.66 wt % (feed 1.00 wt %)
Membrane area = 33.0 m2
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 |
|---|---|---|---|
Operating Mode |
yes | ||
VCF |
- | yes | |
Diavolumes |
- | result | |
Default Sieving Coefficient |
- | yes | |
Membrane Flux |
kg/m2/s | yes | |
Transmembrane Pressure |
Pa | yes | |
Feed Mass Flow |
kg/s | result | |
DF Buffer Mass Flow |
kg/s | result | |
Retentate Mass Flow |
kg/s | result | |
Permeate Mass Flow |
kg/s | result | |
Effective VCF |
- | result | |
Membrane Area |
m2 | result |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
UnitOp_CrossflowUF(): Initializes a new default instance of the UnitOp_CrossflowUF class.
Initializes a new default instance of the UnitOp_CrossflowUF class.
UnitOp_CrossflowUF(string, string): Initializes a new instance of the UnitOp_CrossflowUF class with a name and description.
Initializes a new instance of the UnitOp_CrossflowUF 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¶
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.
DefaultSievingCoefficient: Default sieving coefficient for compounds not listed in SievingCoefficients.
Default sieving coefficient for compounds not listed in SievingCoefficients.
Diavolumes: Number of diavolumes of buffer exchanged.
Number of diavolumes of buffer exchanged. Used in DiafiltrationConstantVolume mode.
FoulingHalfLife_s: Fouling half-life (s).
Fouling half-life (s). Hermia cake-filtration decay J(t) = J0 / (1 + t/tau). Set <= 0 to disable (no decline).
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.
MembraneArea_m2: Membrane area (m2) used only in dynamic modes.
Membrane area (m2) used only in dynamic modes. If <= 0 it is auto-sized from J0 and retentate flow.
MembraneFlux_kgm2s: Permeate flux through the membrane (kg/m2/s).
Permeate flux through the membrane (kg/m2/s). If > 0 the required membrane area is reported.
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 or sets the simulation object class category (always Separators).
Gets or sets the simulation object class category (always Separators).
OperatingMode: Selected operating mode.
Selected operating mode.
Result_BufferMass_kgs: Diafiltration-buffer mass flow (kg/s).
Diafiltration-buffer mass flow (kg/s).
Result_EffectiveVCF: Effective volume concentration factor actually realised.
Effective volume concentration factor actually realised.
Result_FeedMass_kgs: Feed mass flow (kg/s).
Feed mass flow (kg/s).
Result_MembraneArea_m2: Required membrane area (m2) at the specified flux.
Required membrane area (m2) at the specified flux. 0 if flux <= 0.
Result_Permeate_kgs: Permeate mass flow (kg/s).
Permeate mass flow (kg/s).
Result_Retentate_kgs: Retentate mass flow (kg/s).
Retentate mass flow (kg/s).
SievingCoefficients: Per-compound sieving coefficients sigma_i in [0, 1].
Per-compound sieving coefficients sigma_i in [0, 1]. Compounds absent from this dictionary use DefaultSievingCoefficient (default 1.0 = freely permeable).
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.
TMP_Pa: Transmembrane pressure (Pa).
Transmembrane pressure (Pa). Reported only; not used in the flux calculation.
VCF: Volume concentration factor (feed volume / retentate volume).
Volume concentration factor (feed volume / retentate volume). Used in Concentration mode.
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.
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 one group of the last dynamic trajectory, time in seconds on the x axis.
Builds an OxyPlot model of one group of the last dynamic trajectory, time in seconds on the x axis.
| Parameter | Type | Description |
|---|---|---|
name |
String |
GetChartModelNames(): Chart names the PFD chart object can embed: the time series of the last dynamic run.
Chart names the PFD chart object can embed: the time series of the last dynamic run.
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. |
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. |
SigmaFor(string): Returns the sieving coefficient for a compound - uses the dict or the default.
Returns the sieving coefficient for a compound - uses the dict or the default.
| Parameter | Type | Description |
|---|---|---|
compName |
String |
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¶