Skip to content

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: float | FloatArray

m

Dimensionless desorption frequency.

TYPE: float | FloatArray

RETURNS DESCRIPTION
float | FloatArray

Average number of radicals per particle.

See Also

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
def nbar_Li_Brooks(
    alpha: float | FloatArray,
    m: float | FloatArray,
) -> float | FloatArray:
    r"""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.

    Parameters
    ----------
    alpha : float | FloatArray
        Dimensionless entry frequency.
    m : float | FloatArray
        Dimensionless desorption frequency.

    Returns
    -------
    float | FloatArray
        Average number of radicals per particle.

    See Also
    --------
    * [`nbar_Stockmayer_OToole`](nbar_Stockmayer_OToole.md):
      Preferred exact solution; simpler and numerically robust.
    * [`nbar_Ugelstad`](nbar_Ugelstad.md):
      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
    """
    return (
        2 * alpha / (m + sqrt(m**2 + 8 * alpha * (2 * alpha + m) / (2 * alpha + m + 1)))
    )

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))