Skip to content

polykin.kinetics.emulsion¤

nbar_Stockmayer_OToole ¤

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

Average number of radicals per particle according to the Stockmayer-O'Toole exact quasi-steady-state solution.

\[ \bar{n} = \frac{a}{4} \frac{I_m(a)}{I_{m-1}(a)} \]

where \(a=\sqrt{8 \alpha}\), and \(I\) is the modified Bessel function of the first kind.

References

  • Stockmayer, W. H. Note on the Kinetics of Emulsion Polymerization. J. Polym. Sci. 1957, 24, 314-317.
  • O'Toole, J. T. Kinetics of Emulsion Polymerization. J. Appl. Polym. Sci. 1965, 9, 1291-1297.
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
  • nbar_Li_Brooks: Approximate solution; typically an order of magnitude faster.
  • 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_Stockmayer_OToole
>>> nbar = nbar_Stockmayer_OToole(alpha=1e-2, m=1e-4)
>>> print(f"nbar = {nbar:.2e}")
nbar = 5.02e-01
Source code in src/polykin/kinetics/emulsion/smithewart.py
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
def nbar_Stockmayer_OToole(
    alpha: float | FloatArray,
    m: float | FloatArray,
) -> float | FloatArray:
    r"""Average number of radicals per particle according to the Stockmayer-O'Toole exact
    quasi-steady-state solution.

    $$ \bar{n} = \frac{a}{4} \frac{I_m(a)}{I_{m-1}(a)} $$

    where $a=\sqrt{8 \alpha}$, and $I$ is the modified Bessel function of the first kind.

    **References**

    *   Stockmayer, W. H. Note on the Kinetics of Emulsion Polymerization. J. Polym. Sci.
        1957, 24, 314-317.
    *   O'Toole, J. T. Kinetics of Emulsion Polymerization. J. Appl. Polym. Sci.
        1965, 9, 1291-1297.

    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_Li_Brooks`](nbar_Li_Brooks.md):
      Approximate solution; typically an order of magnitude faster.
    * [`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_Stockmayer_OToole
    >>> nbar = nbar_Stockmayer_OToole(alpha=1e-2, m=1e-4)
    >>> print(f"nbar = {nbar:.2e}")
    nbar = 5.02e-01
    """
    alpha, m = np.broadcast_arrays(np.asarray(alpha), np.asarray(m))
    result = np.zeros_like(alpha, dtype=np.float64)

    mask_zero = (alpha == 0) & (m > 0)
    mask_general = ~mask_zero

    if np.any(mask_general):
        a = sqrt(8 * alpha[mask_general])
        result[mask_general] = (
            a / 4 * ive(m[mask_general], a) / ive(m[mask_general] - 1.0, a)
        )

    if result.ndim == 0:
        return float(result)
    else:
        return result