polykin.kinetics.emulsion¤
nbar_Li_Brooks ¤
nbar_Li_Brooks(alpha: float, m: float) -> float
nbar_Li_Brooks(
alpha: FloatArray, m: FloatArray
) -> FloatArray
nbar_Li_Brooks(alpha: FloatArray, m: float) -> FloatArray
nbar_Li_Brooks(alpha: float, m: FloatArray) -> FloatArray
nbar_Li_Brooks(
alpha: float | FloatArray, m: float | FloatArray
) -> float | FloatArray
Average number of radicals per particle according to the Li-Brooks approximate quasi-steady-state solution.
\[ \bar{n} = \frac{2 \alpha}{m + \sqrt{m^2 +
\frac{8 \alpha \left( 2 \alpha + m \right)}{2 \alpha + m + 1}}} \]
This formula agrees well with the exact Stockmayer-O'Toole solution, with a maximum deviation of about 4%.
References
- Li B-G, Brooks BW. Prediction of the average number of radicals per particle for emulsion polymerization. J Polym Sci, Part A: Polym Chem 1993;31:2397-402.
| PARAMETER | DESCRIPTION |
|---|---|
alpha
|
Dimensionless entry frequency.
TYPE:
|
m
|
Dimensionless desorption frequency.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
float | FloatArray
|
Average number of radicals per particle. |
See Also
nbar_Stockmayer_OToole: Preferred exact solution; simpler and numerically robust.nbar_Ugelstad: Alternative exact solution based on continued fractions.
Examples:
Evaluate the average number of radicals per particle for α=1e-2 and m=1e-4.
>>> from polykin.kinetics import nbar_Li_Brooks
>>> nbar = nbar_Li_Brooks(alpha=1e-2, m=1e-4)
>>> print(f"nbar = {nbar:.2e}")
nbar = 5.02e-01
Source code in src/polykin/kinetics/emulsion/smithewart.py
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | |
Graphical Illustration¤
Illustration of the typical error obtained with the Li-Brooks approximation.
import matplotlib.pyplot as plt
import numpy as np
from polykin.kinetics.emulsion import nbar_Li_Brooks, nbar_Stockmayer_OToole
from polykin.utils.docs import to_html
fig, ax = plt.subplots()
alpha = np.logspace(-4, 4, 100)
error = np.zeros_like(alpha)
for m in [0, 0.1, 1, 10]:
for i in range(len(alpha)):
nbar_SO = nbar_Stockmayer_OToole(alpha[i], m)
nbar_LB = nbar_Li_Brooks(alpha[i], m)
error[i] = 1e2*(nbar_LB - nbar_SO)/nbar_SO
ax.plot(alpha, error, label=rf"$m={m}$")
ax.set_xscale("log")
ax.grid(True)
ax.legend(loc="best")
ax.set_xlabel(r"$\alpha$")
ax.set_ylabel("Relative Error (%)")
print(to_html(fig))