Biomass Pretreatment Reactor¶
![]()
Biomass pretreatment reactor. Converts a lignocellulosic slurry (cellulose + hemicellulose + lignin) into a pretreated slurry containing sugars (glucose, xylose) and inhibitors (furfural, HMF, acetic acid). With ConversionMode = UserFractions (default) it applies the user-specified conversion fractions, whose defaults are keyed to the selected PretreatmentType. With ConversionMode = Severity the conversions follow from the severity factor R0 = t·exp((T - 100)/14.75), t in min and T in °C (Overend and Chornet, 1987), or, for dilute acid, from the combined severity CSF = log R0 - pH (Chum et al., 1990): the polysaccharides hydrolyse first order in R0 (Abatzoglou et al., 1992) and the sugars degrade by the consecutive model of Saeman (1945), with rate constants calibrated so that log R0 = 3.5 reproduces the technology defaults. Reactions: (C6H10O5)n + H2O -> C6H12O6 (cellulose to glucose) C6H12O6 -> C6H6O3 + 3 H2O (glucose to HMF) (C5H8O4)n + H2O -> C5H10O5 (xylan to xylose) C5H10O5 -> C5H4O2 + 3 H2O (xylose to furfural) Acetic acid is released from acetyl groups in the hemicellulose, proportionally to the hemicellulose mass consumed.
DWSIM.UnitOperations.Reactors.Reactor_Pretreatment
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← Reactor ← Reactor_Pretreatment
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Slurry |
| Outlet, material | 0 |
Pretreated |
Example¶
This code runs on every build of this site, and the output below is what it printed.
# The compound database has no cellulose, hemicellulose or lignin. The reactor works on
# mass, so any compound can carry each fraction: here sucrose stands in for cellulose,
# lactose for hemicellulose, coal for lignin and phenol for the dissolved lignin.
fs = (Flowsheet.Create("PretreatmentExample")
.WithCompounds("Water", "Sucrose", "Lactose", "Coal", "Phenol",
"Glucose", "Xylose", "Furfural", "Acetic acid")
.WithPropertyPackage(PropertyPackages.NRTL))
# 20 wt % solids: 40 % cellulose, 25 % hemicellulose, 20 % lignin (dry basis, rest water)
slurry = (fs.AddMaterialStream("Slurry")
.At(Q.Celsius(160.0), Q.Bar(7.0))
.SetCompoundMassFlow("Water", 0.830) # kg/s
.SetCompoundMassFlow("Sucrose", 0.080)
.SetCompoundMassFlow("Lactose", 0.050)
.SetCompoundMassFlow("Coal", 0.040))
pretreated = fs.AddMaterialStream("Pretreated")
pt = (fs.AddPretreatmentReactor("PT-1")
.WithTechnology(PretreatmentType.DiluteAcid)
.WithResidenceTime(Q.Minutes(15.0))
.WithCelluloseConversion(0.10)
.WithHemicelluloseConversion(0.90)
.WithXyloseToFurfural(0.05)
.WithGlucoseToHMF(0.0)
.WithLigninSolubilization(0.15)
.ConnectFeed(slurry, 0)
.ConnectProduct(pretreated, 0))
r = pt.Object
r.CelluloseCompound = "Sucrose"
r.HemicelluloseCompound = "Lactose"
r.LigninCompound = "Coal"
r.SolubleLigninCompound = "Phenol"
r.GlucoseCompound = "Glucose"
r.XyloseCompound = "Xylose"
r.FurfuralCompound = "Furfural"
r.AceticAcidCompound = "Acetic acid" # released by the acetyl groups of the hemicellulose
fs.AutoLayout()
fs.Solve()
print(f"Glucose released = {r.Result_GlucoseProduced_kgs * 3600.0:.1f} kg/h")
print(f"Xylose released = {r.Result_XyloseProduced_kgs * 3600.0:.1f} kg/h")
print(f"Furfural formed = {r.Result_FurfuralProduced_kgs * 3600.0:.2f} kg/h")
print(f"Acetic acid = {r.Result_AceticAcidProduced_kgs * 3600.0:.2f} kg/h")
print(f"Lignin dissolved = {r.Result_LigninSolubilized_kgs * 3600.0:.1f} kg/h")
print(f"Mass in / out = {slurry.MassFlowKgPerSecond:.4f} / {pretreated.MassFlowKgPerSecond:.4f} kg/s")
Output
Glucose released = 32.0 kg/h
Xylose released = 155.5 kg/h
Furfural formed = 8.43 kg/h
Acetic acid = 19.44 kg/h
Lignin dissolved = 21.6 kg/h
Mass in / out = 1.0000 / 1.0000 kg/s
DWSIM 10.2.11.0, generated 2026-10-08.
Calculation modes¶
Set with ConversionMode (PretreatmentConversionMode). The mode decides which properties are inputs; every other one is a result and is overwritten by the calculation.
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.
All 41 properties
| ID | Name | Unit (SI) | Input in |
|---|---|---|---|
Technology |
- | all modes | |
Conversion Mode |
- | all modes | |
Severity Log R0 |
- | all modes | |
Residence Time |
s | all modes | |
Solids Loading |
- | all modes | |
Cellulose Compound |
- | all modes | |
Hemicellulose Compound |
- | all modes | |
Lignin Compound |
- | all modes | |
Glucose Compound |
- | all modes | |
Xylose Compound |
- | all modes | |
Furfural Compound |
- | all modes | |
HMF Compound |
- | all modes | |
Acetic Acid Compound |
- | all modes | |
Water Compound |
- | all modes | |
Soluble Lignin Compound |
- | all modes | |
Acid Compound |
- | all modes | |
Acid Second pKa |
- | all modes | |
Cellulose Conversion |
- | UserFractions |
|
Glucose to HMF |
- | UserFractions |
|
Hemicellulose Conversion |
- | UserFractions |
|
Xylose to Furfural |
- | UserFractions |
|
Lignin Solubilization |
- | all modes | |
Acetic Acid Yield on Hemi |
- | all modes | |
Cellulose Consumed |
kg/s | result | |
Hemicellulose Consumed |
kg/s | result | |
Glucose Produced |
kg/s | result | |
Xylose Produced |
kg/s | result | |
HMF Produced |
kg/s | result | |
Furfural Produced |
kg/s | result | |
Acetic Acid Produced |
kg/s | result | |
Lignin Solubilized |
kg/s | result | |
Computed Log R0 |
- | result | |
Severity Temperature |
K | result | |
Feed Solids Loading |
- | result | |
Acid Concentration |
mol/kg | result | |
Liquid pH |
- | result | |
Combined Severity Factor |
- | result | |
Applied Cellulose Conversion |
- | result | |
Applied Glucose to HMF |
- | result | |
Applied Hemicellulose Conversion |
- | result | |
Applied Xylose to Furfural |
- | result |
Learn more¶
-
User guide
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
Reactor_Pretreatment(): Initializes a new default instance of the Reactor_Pretreatment class.
Initializes a new default instance of the Reactor_Pretreatment class.
Reactor_Pretreatment(string, string): Initializes a new instance of the Reactor_Pretreatment class with a name and description.
Initializes a new instance of the Reactor_Pretreatment class with a name and description.
| Parameter | Type | Description |
|---|---|---|
name |
String |
The name of this reactor. |
description |
String |
A brief description of this reactor. |
Properties¶
AceticAcidCompound: Gets or sets the name of the acetic acid compound released from the hemicellulose acetyl groups.
Gets or sets the name of the acetic acid compound released from the hemicellulose acetyl groups. The release runs only when this compound is assigned and present.
AceticAcidYieldOnHemi: g acetic acid released per g hemicellulose consumed (mass fraction).
g acetic acid released per g hemicellulose consumed (mass fraction). Default 0.12.
AcidCompound: Gets or sets the name of the mineral acid compound in the feed (e.g.
Gets or sets the name of the mineral acid compound in the feed (e.g. sulfuric acid). Its concentration in the liquid gives the pH of the combined severity. Optional; without it the dilute acid technology assumes pH 1.0. The acid passes through unchanged.
AcidSecondPKa: Gets or sets the second dissociation constant pKa2 of the acid in AcidCompound, at 25 °C.
Gets or sets the second dissociation constant pKa2 of the acid in AcidCompound, at 25 °C. The first proton is taken as fully dissociated. Default 1.99 (sulfuric acid); use a large value (e.g. 99) for a monoprotic strong acid such as HCl.
CelluloseCompound: Gets or sets the name of the compound that represents cellulose in the feed.
Gets or sets the name of the compound that represents cellulose in the feed. The cellulose to glucose reaction consumes it.
CelluloseConversion: Fraction of cellulose converted to glucose (0-1).
Fraction of cellulose converted to glucose (0-1). Typical dilute acid: 0.05-0.15 (main conversion is in EH downstream). Read in UserFractions mode; in Severity mode the applied value is Result_CelluloseConversion.
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.
ConversionMode: Gets or sets where the conversions come from: UserFractions (0, default) applies the conversion fractions as...
Gets or sets where the conversions come from: UserFractions (0, default) applies the conversion fractions as entered; Severity (1) computes the cellulose and hemicellulose conversions and the sugar degradation from the severity factor. Lignin solubilization and the acetic acid yield are read from their properties in both modes.
FurfuralCompound: Gets or sets the name of the furfural compound formed by xylose degradation.
Gets or sets the name of the furfural compound formed by xylose degradation. The degradation runs only when this compound is assigned and present.
GlucoseCompound: Gets or sets the name of the glucose product compound.
Gets or sets the name of the glucose product compound. Cellulose hydrolysis runs only when this compound is assigned and present.
GlucoseToHMF: Mass of HMF formed per mass of glucose generated (0-0.70); the glucose consumed is this value / 0.70, the HMF to...
Mass of HMF formed per mass of glucose generated (0-0.70); the glucose consumed is this value / 0.70, the HMF to glucose mass ratio. Typical dilute acid: 0.02-0.05. Read in UserFractions mode; in Severity mode the applied value is Result_GlucoseToHMF.
HemicelluloseCompound: Gets or sets the name of the compound that represents hemicellulose (xylan with acetyl groups) in the feed.
Gets or sets the name of the compound that represents hemicellulose (xylan with acetyl groups) in the feed. The hemicellulose to xylose and acetic acid reactions consume it.
HemicelluloseConversion: Fraction of hemicellulose converted to xylose (0-1).
Fraction of hemicellulose converted to xylose (0-1). Typical dilute acid: 0.80-0.95. Read in UserFractions mode; in Severity mode the applied value is Result_HemicelluloseConversion.
HMFCompound: Gets or sets the name of the 5-hydroxymethylfurfural (HMF) compound formed by glucose degradation.
Gets or sets the name of the 5-hydroxymethylfurfural (HMF) compound formed by glucose degradation. The degradation runs only when this compound is assigned and present.
IsBio: Gets a value indicating that this reactor belongs to the Bio group of the object palette.
Gets a value indicating that this reactor belongs to the Bio group of the object palette. Always True.
LigninCompound: Gets or sets the name of the compound that represents insoluble lignin in the feed.
Gets or sets the name of the compound that represents insoluble lignin in the feed. The solubilized fraction moves to SolubleLigninCompound.
LigninSolubilization: Fraction of lignin solubilized (0-1).
Fraction of lignin solubilized (0-1). Strong for alkaline/organosolv; low for dilute acid.
MobileCompatible: Gets a value indicating whether this reactor is compatible with mobile interfaces.
Gets a value indicating whether this reactor is compatible with mobile interfaces. Always False.
ObjectClass: Gets or sets the simulation object class category (Reactors).
Gets or sets the simulation object class category (Reactors).
ResidenceTime_s: Gets or sets the reactor residence time, in s.
Gets or sets the reactor residence time, in s. Default 600. When positive, the reactor computes the severity log R0 from it and from the reaction temperature; set it to zero to use SeverityLogR0 instead.
Result_AceticAcidProduced_kgs: Gets or sets the acetic acid mass flow released from the hemicellulose, in kg/s.
Gets or sets the acetic acid mass flow released from the hemicellulose, in kg/s. Calculated result.
Result_AcidConcentration_molkg: Gets or sets the acid concentration in the liquid (feed mass minus the solids), in mol per kg of liquid.
Gets or sets the acid concentration in the liquid (feed mass minus the solids), in mol per kg of liquid. Zero when no acid compound is assigned. Calculated result.
Result_CelluloseConsumed_kgs: Gets or sets the cellulose mass flow consumed by hydrolysis, in kg/s.
Gets or sets the cellulose mass flow consumed by hydrolysis, in kg/s. Calculated result.
Result_CelluloseConversion: Gets or sets the cellulose to glucose conversion applied in the last calculation (0-1).
Gets or sets the cellulose to glucose conversion applied in the last calculation (0-1). Calculated result.
Result_CombinedSeverity: Gets or sets the combined severity factor CSF = log R0 - pH (Chum et al., 1990).
Gets or sets the combined severity factor CSF = log R0 - pH (Chum et al., 1990). Severity mode uses it in place of log R0 for the DiluteAcid technology only. Calculated result.
Result_FurfuralProduced_kgs: Gets or sets the furfural mass flow produced, in kg/s.
Gets or sets the furfural mass flow produced, in kg/s. Calculated result.
Result_GlucoseProduced_kgs: Gets or sets the net glucose mass flow produced (after the part degraded to HMF), in kg/s.
Gets or sets the net glucose mass flow produced (after the part degraded to HMF), in kg/s. Calculated result.
Result_GlucoseToHMF: Gets or sets the HMF formed per mass of glucose generated applied in the last calculation (g/g).
Gets or sets the HMF formed per mass of glucose generated applied in the last calculation (g/g). Calculated result.
Result_HemicelluloseConsumed_kgs: Gets or sets the hemicellulose mass flow consumed, in kg/s.
Gets or sets the hemicellulose mass flow consumed, in kg/s. Calculated result.
Result_HemicelluloseConversion: Gets or sets the hemicellulose conversion applied in the last calculation (0-1).
Gets or sets the hemicellulose conversion applied in the last calculation (0-1). Calculated result.
Result_HMFProduced_kgs: Gets or sets the HMF mass flow produced, in kg/s.
Gets or sets the HMF mass flow produced, in kg/s. Calculated result.
Result_LigninSolubilized_kgs: Gets or sets the lignin mass flow moved to the soluble lignin compound, in kg/s.
Gets or sets the lignin mass flow moved to the soluble lignin compound, in kg/s. Calculated result.
Result_LogR0: Gets or sets the severity factor log10(R0) used in the calculation, with R0 in min: computed from the residence time...
Gets or sets the severity factor log10(R0) used in the calculation, with R0 in min: computed from the residence time and the reaction temperature when the residence time is positive, else equal to SeverityLogR0. Calculated result.
Result_pH: Gets or sets the pH of the liquid at 25 °C used by the combined severity: from the acid concentration when an acid...
Gets or sets the pH of the liquid at 25 °C used by the combined severity: from the acid concentration when an acid compound is assigned; 1.0 (the calibration pH) for dilute acid without one; 7 otherwise. Calculated result.
Result_SeverityTemperature_K: Gets or sets the temperature the severity is evaluated at, in K: the outlet temperature when the reactor runs in...
Gets or sets the temperature the severity is evaluated at, in K: the outlet temperature when the reactor runs in OutletTemperature mode, else the feed temperature. Calculated result.
Result_SolidsLoading_wfrac: Gets or sets the solids loading of the feed, in w/w: the mass of the cellulose, hemicellulose and lignin compounds...
Gets or sets the solids loading of the feed, in w/w: the mass of the cellulose, hemicellulose and lignin compounds over the total mass. Calculated result.
Result_XyloseProduced_kgs: Gets or sets the net xylose mass flow produced (after the part degraded to furfural), in kg/s.
Gets or sets the net xylose mass flow produced (after the part degraded to furfural), in kg/s. Calculated result.
Result_XyloseToFurfural: Gets or sets the furfural formed per mass of xylose generated applied in the last calculation (g/g).
Gets or sets the furfural formed per mass of xylose generated applied in the last calculation (g/g). Calculated result.
SeverityLogR0: Gets or sets the severity factor log10(R0) (dimensionless), with R0 in min.
Gets or sets the severity factor log10(R0) (dimensionless), with R0 in min. Default 3.5. Read only when ResidenceTime_s is zero; with a positive residence time the reactor computes log R0 from the residence time and the temperature, reported in Result_LogR0.
SolidsLoading_wfrac: Gets or sets the expected solids loading of the slurry, as a mass fraction (0-1).
Gets or sets the expected solids loading of the slurry, as a mass fraction (0-1). Default 0.20. The reactor computes the solids loading from the feed (Result_SolidsLoading_wfrac) and does not add or remove water; in Severity mode it warns when the feed differs from this value by more than 0.005.
SolubleLigninCompound: Gets or sets the name of the soluble lignin compound that receives the solubilized lignin.
Gets or sets the name of the soluble lignin compound that receives the solubilized lignin. Lignin solubilization runs only when this compound is assigned and present.
SupportsDynamicMode: Gets a value indicating whether this reactor supports dynamic simulation mode.
Gets a value indicating whether this reactor supports dynamic simulation mode. Always False; it is calculated as a steady-state model.
Technology: Gets or sets the pretreatment technology: DiluteAcid (0), SteamExplosion (1), Alkaline (2) or Organosolv (3).
Gets or sets the pretreatment technology: DiluteAcid (0), SteamExplosion (1), Alkaline (2) or Organosolv (3). It selects the conversion fractions set by ApplyTechnologyDefaults; in Severity mode it also selects the rate constants, calibrated on those defaults, and DiluteAcid switches the severity to the combined severity log R0 - pH. Default DiluteAcid.
WaterCompound: Gets or sets the name of the water compound, consumed by the hydrolysis reactions and released by the degradation...
Gets or sets the name of the water compound, consumed by the hydrolysis reactions and released by the degradation reactions. Default "Water".
XyloseCompound: Gets or sets the name of the xylose product compound.
Gets or sets the name of the xylose product compound. Hemicellulose hydrolysis runs only when this compound is assigned and present.
XyloseToFurfural: Mass of furfural formed per mass of xylose generated (0-0.64); the xylose consumed is this value / 0.64, the...
Mass of furfural formed per mass of xylose generated (0-0.64); the xylose consumed is this value / 0.64, the furfural to xylose mass ratio. Typical dilute acid: 0.05-0.10. Read in UserFractions mode; in Severity mode the applied value is Result_XyloseToFurfural.
Methods¶
AcidPH(double, double): pH at 25 °C of a strong acid whose first proton dissociates fully and whose second one follows pKa2.
pH at 25 °C of a strong acid whose first proton dissociates fully and whose second one follows pKa2.
| Parameter | Type | Description |
|---|---|---|
c_molkg |
Double |
Acid concentration, in mol per kg of water (taken as mol/L). |
pKa2 |
Double |
Second dissociation constant. |
ApplyTechnologyDefaults(): Preset default conversions for a given pretreatment technology.
Preset default conversions for a given pretreatment technology.
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 reactor type.
Returns the localized description string for this reactor type.
GetDisplayName(): Returns the localized display name for this reactor type.
Returns the localized display name for this reactor type.
GetIconBitmapBytes(): Returns the raw bytes of the icon image for this reactor.
Returns the raw bytes of the icon image for this reactor.
GetProperties(PropertyType): Returns the property IDs of this reactor.
Returns the property IDs of this reactor. The writable list (WR) follows ConversionMode: the Severity mode leaves out the four conversion fractions it computes.
| Parameter | Type | Description |
|---|---|---|
proptype |
PropertyType |
The kind of property to list. |
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 reactor.
Generates a plain-text results report for this reactor.
| 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. |
SeverityLog10R0(double, double): Severity factor log10(R0) of Overend and Chornet (1987), R0 = t·exp((T - 100)/14.75), t in min and T in °C.
Severity factor log10(R0) of Overend and Chornet (1987), R0 = t·exp((T - 100)/14.75), t in min and T in °C.
| Parameter | Type | Description |
|---|---|---|
time_s |
Double |
Residence time, in s. |
T_K |
Double |
Reaction temperature, in K. |
TechnologyDefaults(PretreatmentType): Returns the default fractions of a technology: cellulose conversion, glucose to HMF, hemicellulose conversion...
Returns the default fractions of a technology: cellulose conversion, glucose to HMF, hemicellulose conversion, xylose to furfural, lignin solubilization and acetic acid yield on hemicellulose, in this order. The Severity mode calibrates its rate constants on the first four at log R0 = 3.5.
| Parameter | Type | Description |
|---|---|---|
tech |
PretreatmentType |
The pretreatment technology. |
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¶