Polymerization Reactor¶
![]()
Free-radical polymerization reactor operated as a homogeneous, isothermal, well-mixed vessel. It reads the monomer and initiator (and optional solvent / chain-transfer agent) from its feed, solves the steady-state method-of-moments model at the reactor residence time, and writes the unreacted feed plus the polymer to its product stream, reporting conversion and the number- and weight-average molar masses. The polymer product compound's molar mass is set to the computed Mn so the mass balance closes.
DWSIM.UnitOperations.Reactors.Reactor_Polymerization
Assembly DWSIM.UnitOperations.dll · Object ← BaseClass ← UnitOpBaseClass ← Reactor ← Reactor_Polymerization
At a glance¶

| Port | Index | Connected in the example |
|---|---|---|
| Inlet, material | 0 |
Monomer feed |
| Inlet, energy | 1 |
Q |
| Inlet, material | 2 |
|
| Outlet, material | 0 |
Polymer solution |
| Outlet, material | 1 |
|
| Outlet, material | 2 |
Example¶
This code runs on every build of this site, and the output below is what it printed.
# Ethylbenzene stands in for styrene (no PC-SAFT parameters ship for styrene)
# and n-pentane for a soluble initiator.
fs = (Flowsheet.Create("PolymerizationReactorExample")
.WithCompounds("Ethylbenzene", "N-pentane", "Polystyrene")
.WithPropertyPackage(PropertyPackages.PCSAFT))
feed = (fs.AddMaterialStream("Monomer feed")
.At(Q.Celsius(90.0), Q.Bar(2.0))
.WithMassFlow(Q.KgPerSecond(1.0))
.SetCompoundMassFlow("Ethylbenzene", 0.99)
.SetCompoundMassFlow("N-pentane", 0.01))
product = fs.AddMaterialStream("Polymer solution")
duty = fs.AddEnergyStream("Q")
# no typed builder yet: place it with the generic builder and set the reactor object
poly = fs.AddUnitOperation(ObjectType.RCT_Polymerization, "R-1")
reactor = poly.Object.__implementation__ # the concrete Reactor_Polymerization
reactor.MonomerID = "Ethylbenzene"
reactor.InitiatorID = "N-pentane"
reactor.PolymerID = "Polystyrene"
reactor.LoadStyrenePreset() # styrene kinetics (initiation, propagation, termination)
reactor.MonomerMolarMass = 106.17 # g/mol, ethylbenzene
reactor.IsothermalTemperature = 363.15 # K
reactor.Volume = 30.0 # m3
(poly.ConnectFeed(feed, 0)
.ConnectProduct(product, 0)
.ConnectEnergyFeed(duty, 1))
fs.AutoLayout()
fs.Solve()
print(f"Monomer conversion = {100.0 * reactor.Conversion:.1f} %")
print(f"Polymer produced = {product.MassFlowKgPerSecond * product.OverallMassFraction('Polystyrene'):.3f} kg/s")
print(f"Mn / Mw = {reactor.Mn:.0f} / {reactor.Mw:.0f} g/mol")
print(f"Polydispersity = {reactor.PDI:.3f}")
print(f"Residence time = {reactor.ResidenceTime / 3600.0:.2f} h")
Output
Monomer conversion = 78.5 %
Polymer produced = 0.787 kg/s
Mn / Mw = 10144 / 15138 g/mol
Polydispersity = 1.492
Residence time = 6.60 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 |
|---|---|---|---|
Volume |
m3 | yes | |
Isothermal Temperature |
K | yes | |
Residence Time |
s | result | |
Conversion |
% | result | |
Number-Average Molar Mass (Mn) |
g/mol | result | |
Weight-Average Molar Mass (Mw) |
g/mol | result | |
Polydispersity Index |
result | ||
Rate of Polymerization |
mol/[L.s] | result | |
Heat Duty |
kW | result | |
Temperature Rise |
K (difference) | result |
Learn more¶
-
User guide
-
Tutorials
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
Reactor_Polymerization(): Initializes a new default instance of the Reactor_Polymerization class.
Initializes a new default instance of the Reactor_Polymerization class.
Reactor_Polymerization(string, string): Initializes a new instance of the Reactor_Polymerization class with a name and description, in isothermal operation...
Initializes a new instance of the Reactor_Polymerization class with a name and description, in isothermal operation mode.
| Parameter | Type | Description |
|---|---|---|
name |
String |
The name of this reactor. |
description |
String |
A brief description of this reactor. |
Properties¶
Conversion: Calculated overall molar conversion of the monomer feed (both monomers in copolymer mode), as a fraction from 0 to 1.
Calculated overall molar conversion of the monomer feed (both monomers in copolymer mode), as a fraction from 0 to 1.
CopolymerCompositionA: Instantaneous mole fraction of monomer A in the copolymer (copolymer mode only).
Instantaneous mole fraction of monomer A in the copolymer (copolymer mode only).
CutCompoundNames: Names of the generated cut compounds on the flowsheet (the distribution the reactor fills).
Names of the generated cut compounds on the flowsheet (the distribution the reactor fills).
CutMoleFractions: Relative mole fractions of the cuts (from the distribution generator); reproduce the Mn/Mw.
Relative mole fractions of the cuts (from the distribution generator); reproduce the Mn/Mw.
DistributionType: Shape of the molar-mass distribution the cuts are generated from.
Shape of the molar-mass distribution the cuts are generated from.
Efficiency: Initiator efficiency f: the fraction of the radicals formed by initiator decomposition that start a chain.
Initiator efficiency f: the fraction of the radicals formed by initiator decomposition that start a chain. Default 0.6.
EmitDistribution: When true, the polymer leaves the reactor as a set of molar-mass pseudo-component cuts (a real distribution) rather...
When true, the polymer leaves the reactor as a set of molar-mass pseudo-component cuts (a real distribution) rather than a single lumped polymer compound. The cut compounds must first be generated onto the flowsheet with GenerateDistributionCompounds.
GelGpC1: Propagation glass factor coefficients, g_p = exp(-(c1X + c2X^2 + c3*X^3)).
Propagation glass factor coefficients, g_p = exp(-(c1X + c2X^2 + c3*X^3)).
GelGpC2: Propagation glass factor coefficient c2 in g_p = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
Propagation glass factor coefficient c2 in g_p = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
GelGpC3: Propagation glass factor coefficient c3 in g_p = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
Propagation glass factor coefficient c3 in g_p = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
GelGtC1: Termination gel factor coefficients, g_t = exp(-(c1X + c2X^2 + c3*X^3)).
Termination gel factor coefficients, g_t = exp(-(c1X + c2X^2 + c3*X^3)).
GelGtC2: Termination gel factor coefficient c2 in g_t = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
Termination gel factor coefficient c2 in g_t = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
GelGtC3: Termination gel factor coefficient c3 in g_t = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
Termination gel factor coefficient c3 in g_t = exp(-(c1X + c2X^2 + c3*X^3)), where X is the monomer conversion.
GelModel: Gel / glass effect model applied to termination and propagation (None = off).
Gel / glass effect model applied to termination and propagation (None = off).
HasPropertiesForDynamicMode: Gets a value indicating whether this reactor has properties used in dynamic mode.
Gets a value indicating whether this reactor has properties used in dynamic mode. Always True.
HeatOfPolymerization: Heat of polymerization per mole of monomer added to a chain (J/mol, negative = exothermic).
Heat of polymerization per mole of monomer added to a chain (J/mol, negative = exothermic).
InitiatorID: Name of the initiator compound in the feed.
Name of the initiator compound in the feed.
IsothermalTemperature: Isothermal operating temperature (K); when zero the feed temperature is used.
Isothermal operating temperature (K); when zero the feed temperature is used.
Kd_A: Arrhenius pre-exponential factor for initiator decomposition, in 1/s.
Arrhenius pre-exponential factor for initiator decomposition, in 1/s. Rate constant k = Aexp(-E/(RT)). Default 1.58E+15 (AIBN).
Kd_E: Arrhenius activation energy for initiator decomposition, in J/mol.
Arrhenius activation energy for initiator decomposition, in J/mol. Default 128000 (AIBN).
Kp_A: Arrhenius pre-exponential factor for propagation (homo-propagation of monomer A in copolymer mode), in L/(mol.s).
Arrhenius pre-exponential factor for propagation (homo-propagation of monomer A in copolymer mode), in L/(mol.s). Default 4.266E+7 (styrene).
Kp_E: Arrhenius activation energy for propagation (homo-propagation of monomer A in copolymer mode), in J/mol.
Arrhenius activation energy for propagation (homo-propagation of monomer A in copolymer mode), in J/mol. Default 32510 (styrene).
KpB_A: Arrhenius pre-exponential for the homo-propagation of monomer B (L/mol/s).
Arrhenius pre-exponential for the homo-propagation of monomer B (L/mol/s).
KpB_E: Arrhenius activation energy for the homo-propagation of monomer B (J/mol).
Arrhenius activation energy for the homo-propagation of monomer B (J/mol).
Ktc_A: Arrhenius pre-exponential factor for termination by combination, in L/(mol.s).
Arrhenius pre-exponential factor for termination by combination, in L/(mol.s). Rate constant k = Aexp(-E/(RT)); 0 disables this pathway.
Ktc_E: Arrhenius activation energy for termination by combination, in J/mol.
Arrhenius activation energy for termination by combination, in J/mol.
Ktd_A: Arrhenius pre-exponential factor for termination by disproportionation, in L/(mol.s).
Arrhenius pre-exponential factor for termination by disproportionation, in L/(mol.s). Rate constant k = Aexp(-E/(RT)); 0 disables this pathway.
Ktd_E: Arrhenius activation energy for termination by disproportionation, in J/mol.
Arrhenius activation energy for termination by disproportionation, in J/mol.
KtrM_A: Arrhenius pre-exponential factor for chain transfer to monomer (from a monomer A radical in copolymer mode), in...
Arrhenius pre-exponential factor for chain transfer to monomer (from a monomer A radical in copolymer mode), in L/(mol.s). Rate constant k = Aexp(-E/(RT)); 0 disables this pathway.
KtrM_E: Arrhenius activation energy for chain transfer to monomer (from a monomer A radical in copolymer mode), in J/mol.
Arrhenius activation energy for chain transfer to monomer (from a monomer A radical in copolymer mode), in J/mol.
KtrMB_A: Transfer to monomer from a monomer-B radical: Arrhenius A (L/mol/s).
Transfer to monomer from a monomer-B radical: Arrhenius A (L/mol/s).
KtrMB_E: Transfer to monomer from a monomer-B radical: Arrhenius E (J/mol).
Transfer to monomer from a monomer-B radical: Arrhenius E (J/mol).
KtrS_A: Arrhenius pre-exponential factor for chain transfer to the solvent or chain-transfer agent, in L/(mol.s).
Arrhenius pre-exponential factor for chain transfer to the solvent or chain-transfer agent, in L/(mol.s). Rate constant k = Aexp(-E/(RT)); 0 disables this pathway.
KtrS_E: Arrhenius activation energy for chain transfer to the solvent or chain-transfer agent, in J/mol.
Arrhenius activation energy for chain transfer to the solvent or chain-transfer agent, in J/mol.
Mn: Calculated number-average molar mass of the polymer, in g/mol.
Calculated number-average molar mass of the polymer, in g/mol.
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.
MonomerBID: Name of the second monomer compound in the feed (empty = homopolymerization).
Name of the second monomer compound in the feed (empty = homopolymerization).
MonomerBMolarMass: Molar mass of the second monomer (g/mol).
Molar mass of the second monomer (g/mol).
MonomerID: Name of the monomer compound in the feed.
Name of the monomer compound in the feed.
MonomerMolarMass: Molar mass of the monomer (monomer A in copolymer mode), in g/mol.
Molar mass of the monomer (monomer A in copolymer mode), in g/mol. Default 104.15 (styrene).
Mw: Calculated weight-average molar mass of the polymer, in g/mol.
Calculated weight-average molar mass of the polymer, in g/mol.
NumberOfCuts: Number of pseudo-component cuts the distribution is discretized into.
Number of pseudo-component cuts the distribution is discretized into.
PDI: Calculated polydispersity index of the polymer, Mw/Mn.
Calculated polydispersity index of the polymer, Mw/Mn.
PlugFlow: When true the reactor is solved as a plug-flow / batch reactor (composition drifts along the residence time) instead...
When true the reactor is solved as a plug-flow / batch reactor (composition drifts along the residence time) instead of a perfectly mixed CSTR (a single, fixed outlet composition).
PolymerID: Name of the polymer product compound (a PC-SAFT pseudo-compound already in the flowsheet).
Name of the polymer product compound (a PC-SAFT pseudo-compound already in the flowsheet).
RateOfPolymerization: Calculated rate of polymerization (monomer consumption rate), in mol/(L.s).
Calculated rate of polymerization (monomer consumption rate), in mol/(L.s).
ReactivityRatioA: Reactivity ratio of monomer A, rA = kpAA/kpAB.
Reactivity ratio of monomer A, rA = kpAA/kpAB.
ReactivityRatioB: Reactivity ratio of monomer B, rB = kpBB/kpBA.
Reactivity ratio of monomer B, rB = kpBB/kpBA.
ResidenceTime: Calculated residence time, reactor volume divided by the feed volumetric flow, in s.
Calculated residence time, reactor volume divided by the feed volumetric flow, in s.
SolventID: Name of the solvent or chain-transfer-agent compound (empty for a bulk polymerization).
Name of the solvent or chain-transfer-agent compound (empty for a bulk polymerization).
Volume: Reactor vessel volume (m3).
Reactor vessel volume (m3).
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 and disposes the editing form.
Closes and disposes the editing form.
CreateDynamicProperties(): Registers the dynamic properties for dynamic simulation mode: content reset, initialization from the inlet stream...
Registers the dynamic properties for dynamic simulation mode: content reset, initialization from the inlet stream and operating pressure.
DeCalculate(): Decalculates the object.
Decalculates the object.
DisplayEditForm(): Opens or activates the editing form for this reactor.
Opens or activates the editing form for this reactor.
GenerateDistributionCompounds(): Generates the molar-mass pseudo-component cuts for the polymer distribution and registers them on the flowsheet - in...
Generates the molar-mass pseudo-component cuts for the polymer distribution and registers them on the flowsheet - in the compound list and in every material stream - so the reactor can emit a real distribution instead of a single lumped polymer. The cuts clone the polymer product compound and share its CAS (the equation of state reuses its parameters at each cut's own molar mass); the grid is placed from the current Mn and PDI when the reactor has a solution, otherwise from the polymer compound's molar mass and a most-probable spread. Call this once, then set EmitDistribution.
GetChartModel(string): Builds an OxyPlot model of the Schulz-Zimm weight distribution from Mn and PDI, as the editor draws it.
Builds an OxyPlot model of the Schulz-Zimm weight distribution from Mn and PDI, as the editor draws it.
| Parameter | Type | Description |
|---|---|---|
name |
String |
GetChartModelNames(): Chart names the PFD chart object can embed: the molecular weight distribution of the last calculation.
Chart names the PFD chart object can embed: the molecular weight distribution of the last calculation.
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 reactor.
Returns the raw bytes of the icon image for this reactor.
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 reactor: compounds, operation mode, residence time, conversion...
Generates a plain-text results report for this reactor: compounds, operation mode, residence time, conversion, temperature rise, heat duty, Mn, Mw and PDI.
| 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. |
IsCopolymer(): True when a second monomer is configured, selecting the binary copolymerization model.
True when a second monomer is configured, selecting the binary copolymerization model.
LoadStyreneMMAPreset(): Loads the AIBN-initiated styrene(A)/methyl-methacrylate(B) copolymer benchmark kinetics.
Loads the AIBN-initiated styrene(A)/methyl-methacrylate(B) copolymer benchmark kinetics.
LoadStyrenePreset(): Loads the AIBN-initiated bulk styrene benchmark kinetics into this reactor.
Loads the AIBN-initiated bulk styrene benchmark kinetics into this reactor.
RunDynamicModel(): Dynamic (transient) model: the reactor is a well-mixed holdup that reacts each integration step.
Dynamic (transient) model: the reactor is a well-mixed holdup that reacts each integration step. The inlet is the (possibly time-varying) feed and the holdup grows with it, so charging the vessel and then cutting the feed gives a batch trajectory, while metering the feed in gives a semibatch one - both showing the copolymer composition and molar mass developing in time. Isothermal.
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. |
UpdateEditForm(): Refreshes the editing form with updated data.
Refreshes the editing form with updated data.
Fields¶
DynState: Transient holdup state carried across integration steps in dynamic mode.
Transient holdup state carried across integration steps in dynamic mode.