Skip to content

Continuous Cake Filter

Represents a continuous cake filter unit operation that separates solids from a liquid stream. The calculation is based on the cake filter equations from McCabe, Smith and Harriott, "Unit Operations of Chemical Engineering", Chapter 29. Solids removal efficiency is governed by the specified cake relative humidity, filter area, and operating parameters.

DWSIM.UnitOperations.UnitOperations.Filter
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← Filter

At a glance

Continuous Cake Filter in the example flowsheet

Port Index Connected in the example
Inlet, material 0 Slurry
Outlet, material 0 Filtrate
Outlet, material 1 Cake

Example

This code runs on every build of this site, and the output below is what it printed.

fs = (Flowsheet.Create("FilterExample")
      .WithCompounds("Water", "Benzoic acid")
      .WithPropertyPackage(PropertyPackages.Raoult))

# Keep benzoic acid in the solid phase: the filter reads the solids from phase 7.
pp = list(fs.Inner.PropertyPackages.Values)[0].__implementation__
pp.ForcedSolids.Add("Benzoic acid")

slurry = (fs.AddMaterialStream("Slurry")
          .At(Q.Celsius(25.0), Q.Bar(1.0))
          .SetCompoundMassFlow("Water", 5.0)          # kg/s
          .SetCompoundMassFlow("Benzoic acid", 0.5))
filtrate = fs.AddMaterialStream("Filtrate")
cake = fs.AddMaterialStream("Cake")

flt = (fs.AddFilter("F-1")
       .ConnectFeed(slurry)
       .ConnectProduct(filtrate, 0)
       .ConnectProduct(cake, 1))

# Simulation mode: the pressure drop needed to pass the feed through a given area.
f = flt.Object
f.CalcMode = Filter.CalculationMode.Simulation
f.TotalFilterArea = 8.0                 # m2
f.SubmergedAreaFraction = 0.35
f.FilterCycleTime = 90.0                # s per drum revolution
f.SpecificCakeResistance = 3.0e9        # m/kg
f.FilterMediumResistance = 1.0e9        # 1/m
f.CakeRelativeHumidity = 15.0           # % liquid in the discharged cake

fs.AutoLayout()
fs.Solve()

c = cake.Object
print(f"Pressure drop   = {f.PressureDrop / 1e5:.3f} bar")
print(f"Filtrate        = {filtrate.Object.GetMassFlow():.3f} kg/s")
print(f"Cake            = {c.GetMassFlow():.3f} kg/s, "
      f"{c.Phases[0].Compounds['Water'].MassFraction * 100:.1f} wt% water")
print(f"Mass balance    = {slurry.Object.GetMassFlow():.3f} kg/s in, "
      f"{filtrate.Object.GetMassFlow() + c.GetMassFlow():.3f} kg/s out")

Output

Pressure drop   = 0.161 bar
Filtrate        = 4.912 kg/s
Cake            = 0.588 kg/s, 15.0 wt% water
Mass balance    = 5.500 kg/s in, 5.500 kg/s out

DWSIM 10.2.11.0, generated 2026-10-08.

Calculation modes

Set with CalcMode (CalculationMode). The mode decides which properties are inputs; every other one is a result and is overwritten by the calculation.

Mode Value What it does Inputs
Design 0 Design mode: calculates the required total filter area given a specified pressure drop. PROP_FT_2, PROP_FT_3, PROP_FT_4, PROP_FT_5, PROP_FT_6, PROP_FT_7
Simulation 1 Simulation mode: calculates the pressure drop given a specified total filter area. PROP_FT_1, PROP_FT_2, PROP_FT_3, PROP_FT_4, PROP_FT_5, PROP_FT_6

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 in
PROP_FT_0 Energy Balance kW result
PROP_FT_1 Total Filter Area m2 Simulation
PROP_FT_2 Cake Relative Humidity (%) % all modes
PROP_FT_3 Cycle Time s all modes
PROP_FT_4 Filter Medium Resistance m-1 all modes
PROP_FT_5 Specific Cake Resistance m/kg all modes
PROP_FT_6 Submerged Area Fraction all modes
PROP_FT_7 Total Pressure Drop Pa Design

Dynamic mode

Extra properties used when the flowsheet runs in dynamic mode.

Name Unit
Cake Mass kg
Backwash Interval s
Backwash Duration s
Time Since Last Backwash s
Backwash Active
Separation Efficiency

Learn more

API members

Public members declared by this class. Inherited members are documented on the base classes.

Constructors

Filter(): Initializes a new instance of the Filter class with default settings.

Initializes a new instance of the Filter class with default settings.

public Filter()
Public Sub New()

Filter(string, string): Initializes a new instance of the Filter class with the specified name and description.

Initializes a new instance of the Filter class with the specified name and description.

Parameter Type Description
name String The display name of the filter object.
description String A brief description of the filter object.
public Filter(string name, string description)
Public Sub New(name As String, description As String)

Properties

CakeRelativeHumidity: Gets or sets the relative humidity of the discharged cake as a percentage (%).

Gets or sets the relative humidity of the discharged cake as a percentage (%).

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

CalcMode: Gets or sets the calculation mode (Design or Simulation).

Gets or sets the calculation mode (Design or Simulation).

public Filter.CalculationMode CalcMode { get; set; }
Public Property CalcMode As Filter.CalculationMode

EnergyImb: Gets or sets the energy imbalance across the filter (kW).

Gets or sets the energy imbalance across the filter (kW).

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

EquipmentTypes: Gets the list of supported equipment types for this unit operation.

Gets the list of supported equipment types for this unit operation.

public override List<string> EquipmentTypes { get; }
Public Overrides ReadOnly Property EquipmentTypes As List(Of String)

FilterCycleTime: Gets or sets the filter cycle time (s).

Gets or sets the filter cycle time (s).

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

FilterMediumResistance: Gets or sets the filter medium resistance (1/m).

Gets or sets the filter medium resistance (1/m).

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

HasPropertiesForDynamicMode: Gets a value indicating whether this unit operation exposes properties for dynamic mode.

Gets a value indicating whether this unit operation exposes properties for dynamic mode.

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

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.

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

ObjectClass: Gets or sets the simulation object class for this unit operation.

Gets or sets the simulation object class for this unit operation.

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

PressureDrop: Gets or sets the total pressure drop across the filter (Pa).

Gets or sets the total pressure drop across the filter (Pa).

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

SpecificCakeResistance: Gets or sets the specific cake resistance (m/kg).

Gets or sets the specific cake resistance (m/kg).

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

SubmergedAreaFraction: Gets or sets the fraction of the filter area that is submerged during filtration (dimensionless, 0 to 1).

Gets or sets the fraction of the filter area that is submerged during filtration (dimensionless, 0 to 1).

public double SubmergedAreaFraction { get; set; }
Public Property SubmergedAreaFraction As 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.

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

TotalFilterArea: Gets or sets the total filter area (m²).

Gets or sets the total filter area (m²).

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

Methods

Calculate(object): Calculates the filter separation results.

Calculates the filter separation results.

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 via XML serialization.

Creates a deep copy via XML serialization.

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

CloseEditForm(): Closes and disposes the editing form.

Closes and disposes the editing form.

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

CreateDynamicProperties(): Registers the dynamic properties for dynamic simulation mode: cake mass, backwash interval, duration, elapsed time...

Registers the dynamic properties for dynamic simulation mode: cake mass, backwash interval, duration, elapsed time and state, and the solids separation efficiency (fraction, 0-1).

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

DeCalculate(): Clears all calculated results.

Clears all calculated results.

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

DisplayEditForm(): Opens or activates the editing form.

Opens or activates the editing form.

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

GetDisplayDescription(): Returns the localised display description.

Returns the localised display description.

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

GetDisplayName(): Returns the localised display name.

Returns the localised display name.

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

GetIconBitmapBytes(): Returns the icon bitmap as a byte array.

Returns the icon bitmap as a byte array.

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

GetProperties(PropertyType): Returns an array of property identifiers for the specified property type.

Returns an array of property identifiers for the specified property type.

Parameter Type Description
proptype PropertyType
public override string[] GetProperties(PropertyType proptype)
Public Overrides Function GetProperties(proptype As PropertyType) As String()

GetPropertyUnit(string, IUnitsOfMeasure): Returns the unit string for the specified property.

Returns the unit string for the specified property.

Parameter Type Description
prop String
su IUnitsOfMeasure
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 the specified property.

Returns the value of the specified property.

Parameter Type Description
prop String
su IUnitsOfMeasure
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 report of the filter results.

Generates a plain-text report of the filter results.

Parameter Type Description
su IUnitsOfMeasure
ci CultureInfo
numberformat String
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

LoadData(List<XElement>): Loads object data from a list of XML elements.

Loads object data from a list of XML elements.

Parameter Type Description
data List<XElement> List of XML elements containing the serialized object data.
public override bool LoadData(List<XElement> data)
Public Overrides Function LoadData(data As List(Of XElement)) As Boolean

RunDynamicModel(): Runs one dynamic-mode integration step: accumulates captured solids in the cake, handles the backwash cycle, and...

Runs one dynamic-mode integration step: accumulates captured solids in the cake, handles the backwash cycle, and sets the filtrate flow from the cake and medium resistances and the cake outlet flow.

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

SaveData(): Saves object data to a list of XML elements for serialization.

Saves object data to a list of XML elements for serialization.

public override List<XElement> SaveData()
Public Overrides Function SaveData() As List(Of XElement)

SetPropertyValue(string, object, IUnitsOfMeasure): Sets the value of the specified property.

Sets the value of the specified property.

Parameter Type Description
prop String
propval Object
su IUnitsOfMeasure
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

UpdateEditForm(): Refreshes the editing form with updated data.

Refreshes the editing form with updated data.

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