Skip to content

polykin.kinetics.emulsion¤

compartmentalization_factor ¤

compartmentalization_factor(
    alpha: float, m: float
) -> float
compartmentalization_factor(
    alpha: FloatArray, m: FloatArray
) -> FloatArray
compartmentalization_factor(
    alpha: FloatArray, m: float
) -> FloatArray
compartmentalization_factor(
    alpha: float, m: FloatArray
) -> FloatArray
compartmentalization_factor(
    alpha: float | FloatArray, m: float | FloatArray
) -> float | FloatArray

Compartmentalization factor according to the Stockmayer-O'Toole quasi-steady-state solution.

The compartmentalization factor expresses the reduction of the effective termination rate in a compartmentalized system relative to that in a bulk system with the same overall radical concentration. It is defined as:

\[ D_f \equiv \frac{\overline{n(n-1)}}{\bar{n}^2 } = \frac{1}{2 \bar{n}} \left(\frac{\alpha}{\bar{n}} - m \right) \]

where \(\bar{n}(\alpha, m)\) is the average number of radicals per particle.

References

  • Wulkow, M.; Richards, J. R. Evaluation of the Chain Length Distribution in Free-Radical Emulsion Polymerization—The Compartmentalization Problem. Ind. Eng. Chem. Res. 2014, 53, 7275-7295.
PARAMETER DESCRIPTION
alpha

Dimensionless entry frequency.

TYPE: float | FloatArray

m

Dimensionless desorption frequency.

TYPE: float | FloatArray

RETURNS DESCRIPTION
float | FloatArray

Compartmentalization factor.

Examples:

Evaluate the compartmentalization factor for α=1e-2 and m=1e-4.

>>> from polykin.kinetics import compartmentalization_factor
>>> Df = compartmentalization_factor(alpha=1e-2, m=1e-4)
>>> print(f"Df = {Df:.2e}")
Df = 1.97e-02
Source code in src/polykin/kinetics/emulsion/smithewart.py
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
def compartmentalization_factor(
    alpha: float | FloatArray,
    m: float | FloatArray,
) -> float | FloatArray:
    r"""Compartmentalization factor according to the Stockmayer-O'Toole quasi-steady-state
    solution.

    The compartmentalization factor expresses the reduction of the effective termination
    rate in a compartmentalized system relative to that in a bulk system with the same
    overall radical concentration. It is defined as:

    $$ D_f \equiv \frac{\overline{n(n-1)}}{\bar{n}^2 }
           = \frac{1}{2 \bar{n}} \left(\frac{\alpha}{\bar{n}} - m \right) $$

    where $\bar{n}(\alpha, m)$ is the average number of radicals per particle.

    **References**

    *   Wulkow, M.; Richards, J. R. Evaluation of the Chain Length Distribution in
        Free-Radical Emulsion Polymerization—The Compartmentalization Problem.
        Ind. Eng. Chem. Res. 2014, 53, 7275-7295.

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

    Returns
    -------
    float | FloatArray
        Compartmentalization factor.

    Examples
    --------
    Evaluate the compartmentalization factor for α=1e-2 and m=1e-4.
    >>> from polykin.kinetics import compartmentalization_factor
    >>> Df = compartmentalization_factor(alpha=1e-2, m=1e-4)
    >>> print(f"Df = {Df:.2e}")
    Df = 1.97e-02
    """
    nbar = nbar_Stockmayer_OToole(alpha, m)
    return (alpha / nbar - m) / (2 * nbar)

Graphical Illustration¤

Typical dependence of the compartmentalization factor on the dimensionless entry and desorption frequencies (\(\alpha\) and \(m\)), and the average number of radicals per particle (\(\bar{n}\)).

import matplotlib.pyplot as plt
import numpy as np
from polykin.kinetics.emulsion import (
    compartmentalization_factor,
    nbar_Stockmayer_OToole,
)
from polykin.utils.docs import to_html

fig, ax = plt.subplots(2, 1)

alpha = np.logspace(-4, 4, 100)
for m in [0, 0.1, 1, 10]:
    Df = compartmentalization_factor(alpha, m)
    nbar = nbar_Stockmayer_OToole(alpha, m)
    ax[0].plot(alpha, Df,  label=rf"$m={m}$")
    ax[1].plot(nbar, Df)

ax[0].set_xlabel(r"$\alpha$")
ax[0].set_ylabel(r"$D_f$")
ax[0].set_xscale("log")
ax[0].set_xlim(1e-4, 1e4)
ax[0].grid(True)
ax[0].legend(loc="best")

ax[1].set_xlabel(r"$\bar{n}$")
ax[1].set_ylabel(r"$D_f$")
ax[1].set_xscale("log")
ax[1].set_xlim(1e-2, 1e2)
ax[1].grid(True)

fig.align_ylabels()
fig.tight_layout()

print(to_html(fig))