Crystallizer¶
![]()
Crystallizer (cooling / evaporative / antisolvent). Splits the inlet between a Crystals outlet and a Mother-Liquor outlet. Solubility of the target solute in the solvent is described by a modified Apelblat/Van't-Hoff form: C_sat(T) [g solute / g solvent] = A + B(T - 298) + C(T - 298)^2 At steady state, mass crystallized = max(0, m_solute_in - C_sat * m_solvent_in). In Evaporative mode the solvent mass is reduced by EvaporationFraction before the check. The evaporated solvent leaves through the optional Vapor outlet (port 2) as vapor at the operating temperature, at the feed pressure or, when that is above the solvent vapor pressure at the operating temperature, at that vapor pressure (saturated vapor: the vessel runs under the vacuum at which the solvent boils at the operating temperature). With no Vapor stream connected the evaporated solvent stays in the Mother Liquor outlet, which closes the mass balance, and a warning is shown; the crystallized mass is the same in both cases. In Antisolvent mode, an additional stream adds solvent that "dilutes" the solubility by a user-set factor (SolubilityReductionByAntisolvent, 0 to 1). The heat duty is the enthalpy balance of the streams, sum of the outlets minus sum of the inlets, with the outlet enthalpies from flashes at the outlet conditions; in Evaporative mode it includes the latent heat of the evaporated solvent. It is reported in Result_Duty_kW (positive = heat added).
DWSIM.UnitOperations.UnitOperations.UnitOp_Crystallizer
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← UnitOp_Crystallizer
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Concentrate |
| Inlet, material | 1 |
|
| Outlet, material | 0 |
Crystals |
| Outlet, material | 1 |
Mother liquor |
| Outlet, material | 2 |
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("CrystallizerExample")
.WithCompounds("Water", "Lactose", "Glucose")
.WithPropertyPackage(PropertyPackages.NRTL))
# 55 g of lactose per 100 g of water, close to saturation at 60 C
concentrate = (fs.AddMaterialStream("Concentrate")
.At(Q.Celsius(60.0), Q.Bar(1.5))
.SetCompoundMassFlow("Water", 0.620) # kg/s
.SetCompoundMassFlow("Lactose", 0.341)
.SetCompoundMassFlow("Glucose", 0.010))
crystals = fs.AddMaterialStream("Crystals")
liquor = fs.AddMaterialStream("Mother liquor")
cr = (fs.AddCrystallizer("CR-1")
.WithMode(CrystallizerMode.Cooling)
.WithSoluteCompound("Lactose")
.WithSolventCompound("Water")
.WithOperatingTemperature(Q.Celsius(10.0))
# solubility in g lactose / g water = A + B (T - 298.15) + C (T - 298.15)^2,
# fitted to 0.119 at 0 C, 0.216 at 25 C and 0.582 at 60 C
.WithSolubilityCoefficients(0.216, 6.62e-3, 1.10e-4)
.WithMeanCrystalSizeMicrons(250.0)
.ConnectFeed(concentrate, 0)
.ConnectProduct(crystals, 0)
.ConnectProduct(liquor, 1))
fs.AutoLayout()
fs.Solve()
c = cr.Object
print(f"Solubility at 10 C = {c.Result_Csat_gg * 100.0:.1f} g/100 g water")
print(f"Crystals = {c.Result_Cryst_kgs * 3600.0:.0f} kg/h")
print(f"Lactose yield = {c.Result_Yield * 100.0:.1f} %")
print(f"Mother liquor = {c.Result_MotherLiquor_kgs * 3600.0:.0f} kg/h")
Output
Solubility at 10 C = 14.1 g/100 g water
Crystals = 912 kg/h
Lactose yield = 74.3 %
Mother liquor = 2584 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 | |
Solute Compound |
- | yes | |
Solvent Compound |
- | yes | |
Operating T |
K | yes | |
Solubility A |
- | yes | |
Solubility B |
- | yes | |
Solubility C |
- | yes | |
Evaporation Fraction |
- | result | |
Solubility Reduction By Antisolvent |
- | result | |
Mean Crystal Size |
um | yes | |
Solute In Feed |
kg/s | result | |
Crystallized Mass |
kg/s | result | |
Mother Liquor Mass |
kg/s | result | |
Crystallization Yield |
- | result | |
Saturation Concentration |
g/g | result | |
Vapor Mass |
kg/s | result | |
Heat Duty |
kW | result |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
UnitOp_Crystallizer(): Initializes a new default instance of the UnitOp_Crystallizer class.
Initializes a new default instance of the UnitOp_Crystallizer class.
UnitOp_Crystallizer(string, string): Initializes a new instance of the UnitOp_Crystallizer class with a name and description.
Initializes a new instance of the UnitOp_Crystallizer 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.
EvaporationFraction: Gets or sets the fraction (0-1) of the solvent evaporated in Evaporative mode.
Gets or sets the fraction (0-1) of the solvent evaporated in Evaporative mode. The evaporated solvent leaves through the Vapor outlet, or stays in the Mother Liquor outlet when no Vapor stream is connected. Default 0.30.
IsBio: Gets a value indicating that this unit operation belongs to the Bio group of the object palette.
Gets a value indicating that this unit operation belongs to the Bio group of the object palette. Always True.
MeanCrystalSize_um: Gets or sets the mean crystal size, in micrometres.
Gets or sets the mean crystal size, in micrometres. Reported only; the calculation does not use it. Default 200.
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 crystallization mode: Cooling (0) solves at OperatingT_K; Evaporative (1) solves...
Gets or sets the crystallization mode: Cooling (0) solves at OperatingT_K; Evaporative (1) solves at OperatingT_K after removing EvaporationFraction of the solvent; Antisolvent (2) keeps the feed temperature and reduces the solubility by SolubilityReductionByAntisolvent. Default Cooling.
ObjectClass: Gets or sets the simulation object class category (Separators).
Gets or sets the simulation object class category (Separators). The getter always returns Separators.
OperatingT_K: Gets or sets the operating temperature in Cooling and Evaporative modes, in K.
Gets or sets the operating temperature in Cooling and Evaporative modes, in K. Both outlets leave at this temperature. Default 278.15.
Result_Cryst_kgs: Gets or sets the crystals outlet mass flow, in kg/s.
Gets or sets the crystals outlet mass flow, in kg/s. Calculated result.
Result_Csat_gg: Gets or sets the saturation concentration used in the last calculation, in g solute per g solvent.
Gets or sets the saturation concentration used in the last calculation, in g solute per g solvent. Calculated result.
Result_Duty_kW: Gets or sets the heat duty from the enthalpy balance (outlets minus inlets), in kW; positive = heat added.
Gets or sets the heat duty from the enthalpy balance (outlets minus inlets), in kW; positive = heat added. Calculated result.
Result_MotherLiquor_kgs: Gets or sets the mother liquor outlet mass flow, in kg/s.
Gets or sets the mother liquor outlet mass flow, in kg/s. Calculated result.
Result_SoluteInFeed_kgs: Gets or sets the solute mass flow in the combined feed, in kg/s.
Gets or sets the solute mass flow in the combined feed, in kg/s. Calculated result.
Result_Vapor_kgs: Gets or sets the Vapor outlet mass flow (evaporated solvent), in kg/s.
Gets or sets the Vapor outlet mass flow (evaporated solvent), in kg/s. Zero outside Evaporative mode and when no Vapor stream is connected. Calculated result.
Result_Yield: Gets or sets the crystallization yield, the crystallized mass over the solute mass in the feed (0-1).
Gets or sets the crystallization yield, the crystallized mass over the solute mass in the feed (0-1). Calculated result.
Sol_A: Gets or sets the constant term A of the solubility correlation C_sat = A + B(T - 298.15) + C(T - 298.15)^2, in g...
Gets or sets the constant term A of the solubility correlation C_sat = A + B(T - 298.15) + C(T - 298.15)^2, in g solute per g solvent. Default 0.35.
Sol_B: Gets or sets the linear coefficient B of the solubility correlation, in g solute per g solvent per K.
Gets or sets the linear coefficient B of the solubility correlation, in g solute per g solvent per K. Default 0.005.
Sol_C: Gets or sets the quadratic coefficient C of the solubility correlation, in g solute per g solvent per K2.
Gets or sets the quadratic coefficient C of the solubility correlation, in g solute per g solvent per K2. Default 0.
SolubilityReductionByAntisolvent: Gets or sets the fractional reduction (0-1) of the solute solubility in Antisolvent mode; the saturation...
Gets or sets the fractional reduction (0-1) of the solute solubility in Antisolvent mode; the saturation concentration is multiplied by (1 - value). Default 0.7.
SoluteCompound: Gets or sets the name of the solute compound that crystallizes.
Gets or sets the name of the solute compound that crystallizes. Required.
SolventCompound: Gets or sets the name of the solvent compound used as the basis of the solubility.
Gets or sets the name of the solvent compound used as the basis of the solubility. Required. Default "Water".
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; it is calculated as a steady-state model.
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.
GetDisplayDescription(): Returns the localized description string for this unit operation type.
Returns the localized description string for this unit operation type.
GetDisplayName(): Returns the localized display name for this unit operation type.
Returns the localized 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. |
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. |
SolubilityAt(double): Evaluates the solubility correlation A + B(T - 298.15) + C(T - 298.15)^2, clipped at zero.
Evaluates the solubility correlation A + B(T - 298.15) + C(T - 298.15)^2, clipped at zero.
| Parameter | Type | Description |
|---|---|---|
T_K |
Double |
The temperature, in K. |
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¶