Skip to content

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

Crossflow Ultrafiltration in the example flowsheet

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

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.

public UnitOp_CrossflowUF()
Public Sub New()

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.
public UnitOp_CrossflowUF(string name, string description)
Public Sub New(name As String, description As String)

Properties

ComponentDescription: Gets or sets the display description for this unit operation.

Gets or sets the display description for this unit operation.

public override string ComponentDescription { get; set; }
Public Overrides Property ComponentDescription As String

ComponentName: Gets or sets the display name for this unit operation.

Gets or sets the display name for this unit operation.

public override string ComponentName { get; set; }
Public Overrides Property ComponentName As String

DefaultSievingCoefficient: Default sieving coefficient for compounds not listed in SievingCoefficients.

Default sieving coefficient for compounds not listed in SievingCoefficients.

public double DefaultSievingCoefficient { get; set; }
Public Property DefaultSievingCoefficient As Double

Diavolumes: Number of diavolumes of buffer exchanged.

Number of diavolumes of buffer exchanged. Used in DiafiltrationConstantVolume mode.

public double Diavolumes { get; set; }
Public Property Diavolumes As Double

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).

public double FoulingHalfLife_s { get; set; }
Public Property FoulingHalfLife_s As Double

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.

public bool IsBio { get; }
Public ReadOnly Property IsBio As Boolean

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.

public double MembraneArea_m2 { get; set; }
Public Property MembraneArea_m2 As Double

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.

public double MembraneFlux_kgm2s { get; set; }
Public Property MembraneFlux_kgm2s As Double

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.

public override bool MobileCompatible { get; }
Public Overrides ReadOnly Property MobileCompatible As Boolean

ObjectClass: Gets or sets the simulation object class category (always Separators).

Gets or sets the simulation object class category (always Separators).

public override SimulationObjectClass ObjectClass { get; set; }
Public Overrides Property ObjectClass As SimulationObjectClass

OperatingMode: Selected operating mode.

Selected operating mode.

public CrossflowUFMode OperatingMode { get; set; }
Public Property OperatingMode As CrossflowUFMode

Result_BufferMass_kgs: Diafiltration-buffer mass flow (kg/s).

Diafiltration-buffer mass flow (kg/s).

public double Result_BufferMass_kgs { get; set; }
Public Property Result_BufferMass_kgs As Double

Result_EffectiveVCF: Effective volume concentration factor actually realised.

Effective volume concentration factor actually realised.

public double Result_EffectiveVCF { get; set; }
Public Property Result_EffectiveVCF As Double

Result_FeedMass_kgs: Feed mass flow (kg/s).

Feed mass flow (kg/s).

public double Result_FeedMass_kgs { get; set; }
Public Property Result_FeedMass_kgs As Double

Result_MembraneArea_m2: Required membrane area (m2) at the specified flux.

Required membrane area (m2) at the specified flux. 0 if flux <= 0.

public double Result_MembraneArea_m2 { get; set; }
Public Property Result_MembraneArea_m2 As Double

Result_Permeate_kgs: Permeate mass flow (kg/s).

Permeate mass flow (kg/s).

public double Result_Permeate_kgs { get; set; }
Public Property Result_Permeate_kgs As Double

Result_Retentate_kgs: Retentate mass flow (kg/s).

Retentate mass flow (kg/s).

public double Result_Retentate_kgs { get; set; }
Public Property Result_Retentate_kgs As Double

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).

public Dictionary<string, double> SievingCoefficients { get; set; }
Public Property SievingCoefficients As Dictionary(Of String, Double)

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.

public override bool SupportsDynamicMode { get; }
Public Overrides ReadOnly Property SupportsDynamicMode As Boolean

TMP_Pa: Transmembrane pressure (Pa).

Transmembrane pressure (Pa). Reported only; not used in the flux calculation.

public double TMP_Pa { get; set; }
Public Property TMP_Pa As Double

VCF: Volume concentration factor (feed volume / retentate volume).

Volume concentration factor (feed volume / retentate volume). Used in Concentration mode.

public double VCF { get; set; }
Public Property VCF As Double

Methods

Calculate(object): Calculates the object.

Calculates the object.

Parameter Type Description
args Object
public override void Calculate(object args = null)
Public Overrides Sub Calculate(args As Object = Nothing)

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.

public override object CloneXML()
Public Overrides Function CloneXML() As Object

CloseEditForm(): Closes the editor of this object, if it is open.

Closes the editor of this object, if it is open.

public override void CloseEditForm()
Public Overrides Sub CloseEditForm()

DeCalculate(): Decalculates the object.

Decalculates the object.

public override void DeCalculate()
Public Overrides Sub DeCalculate()

DisplayEditForm(): Opens the editor of this object.

Opens the editor of this object. A host that has no editor for it does nothing.

public override void DisplayEditForm()
Public Overrides Sub DisplayEditForm()

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
public override object GetChartModel(string name)
Public Overrides Function GetChartModel(name As String) As Object

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.

public override List<string> GetChartModelNames()
Public Overrides Function GetChartModelNames() As List(Of String)

GetDisplayDescription(): Returns the description string for this unit operation type.

Returns the description string for this unit operation type.

public override string GetDisplayDescription()
Public Overrides Function GetDisplayDescription() As String

GetDisplayName(): Returns the display name for this unit operation type.

Returns the display name for this unit operation type.

public override string GetDisplayName()
Public Overrides Function GetDisplayName() As String

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.

public override byte[] GetIconBitmapBytes()
Public Overrides Function GetIconBitmapBytes() As Byte()

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.
public override string[] GetProperties(PropertyType proptype)
Public Overrides Function GetProperties(proptype As PropertyType) As String()

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.
public override string GetPropertyUnit(string prop, IUnitsOfMeasure su = null)
Public Overrides Function GetPropertyUnit(prop As String, su As IUnitsOfMeasure = Nothing) As String

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.
public override object GetPropertyValue(string prop, IUnitsOfMeasure su = null)
Public Overrides Function GetPropertyValue(prop As String, su As IUnitsOfMeasure = Nothing) As Object

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.
public override string GetReport(IUnitsOfMeasure su, CultureInfo ci, string numberformat)
Public Overrides Function GetReport(su As IUnitsOfMeasure, ci As CultureInfo, numberformat As String) As String

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.
public override bool SetPropertyValue(string prop, object propval, IUnitsOfMeasure su = null)
Public Overrides Function SetPropertyValue(prop As String, propval As Object, su As IUnitsOfMeasure = Nothing) As Boolean

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
public double SigmaFor(string compName)
Public Function SigmaFor(compName As String) As Double

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.

public override void UpdateEditForm()
Public Overrides Sub UpdateEditForm()

Fields

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.

public object f
Public f As Object