Skip to content

polykin.kinetics¤

PropagationHalfLength ¤

Half-length model for the decay of the propagation rate coefficient with chain length.

This model implements the chain-length dependence:

\[ k_p(i) = k_p \left[ 1+ (C - 1)\exp{\left (-\frac{\ln 2}{i_{1/2}} (i-1) \right )} \right] \]

where \(k_p=k_p(\infty)\) is the long-chain value of the propagation rate coefficient, \(C\ge 1\) is the ratio \(k_p(1)/k_p\) and \((i_{1/2}+1)\) is the hypothetical chain-length at which the difference \(k_p(1) - k_p\) is halved.

References

  • Smith, Gregory B., et al. "The effects of chain length dependent propagation and termination on the kinetics of free-radical polymerization at low chain lengths." European polymer journal 41.2 (2005): 225-230.
PARAMETER DESCRIPTION
kp

Long-chain value of the propagation rate coefficient, \(k_p\).

TYPE: Arrhenius | Eyring

C

Ratio of the propagation coefficients of a monomeric radical and a long-chain radical, \(C\).

TYPE: float DEFAULT: 10.0

ihalf

Half-length, \(i_{1/2}\).

TYPE: float DEFAULT: 1.0

name

Name.

TYPE: str DEFAULT: ''

Examples:

>>> from polykin.kinetics import PropagationHalfLength, Arrhenius
>>> kp = Arrhenius(
...    10**7.63, 32.5e3/8.314, Tmin=261., Tmax=366.,
...    symbol='k_p', unit='L/mol/s', name='kp of styrene')
>>> kpi = PropagationHalfLength(kp, C=10, ihalf=0.5,
...    name='kp(T,i) of styrene')
>>> kpi
name:    kp(T,i) of styrene
C:       10
ihalf:   0.5
kp:
  name:            kp of styrene
  symbol:          k_p
  unit:            L/mol/s
  Trange [K]:      (261.0, 366.0)
  k0 [L/mol/s]:    42657951.88015926
  EaR [K]:         3909.0690401732018
  T0 [K]:          inf
>>> kpi(T=50., i=3, Tunit='C')
371.75986615653215
Source code in src/polykin/kinetics/cldpropagation.py
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
class PropagationHalfLength(KineticCoefficientCLD):
    r"""Half-length model for the decay of the propagation rate coefficient
    with chain length.

    This model implements the chain-length dependence:

    $$ k_p(i) = k_p \left[ 1+ (C - 1)\exp{\left (-\frac{\ln 2}{i_{1/2}} (i-1)
                \right )} \right] $$

    where $k_p=k_p(\infty)$ is the long-chain value of the propagation rate
    coefficient, $C\ge 1$ is the ratio $k_p(1)/k_p$ and $(i_{1/2}+1)$ is the
    hypothetical chain-length at which the difference $k_p(1) - k_p$ is halved.

    **References**

    *   Smith, Gregory B., et al. "The effects of chain length dependent
        propagation and termination on the kinetics of free-radical
        polymerization at low chain lengths." European polymer journal
        41.2 (2005): 225-230.

    Parameters
    ----------
    kp : Arrhenius | Eyring
        Long-chain value of the propagation rate coefficient, $k_p$.
    C : float
        Ratio of the propagation coefficients of a monomeric radical and a
        long-chain radical, $C$.
    ihalf : float
        Half-length, $i_{1/2}$.
    name : str
        Name.

    Examples
    --------
    >>> from polykin.kinetics import PropagationHalfLength, Arrhenius
    >>> kp = Arrhenius(
    ...    10**7.63, 32.5e3/8.314, Tmin=261., Tmax=366.,
    ...    symbol='k_p', unit='L/mol/s', name='kp of styrene')

    >>> kpi = PropagationHalfLength(kp, C=10, ihalf=0.5,
    ...    name='kp(T,i) of styrene')
    >>> kpi
    name:    kp(T,i) of styrene
    C:       10
    ihalf:   0.5
    kp:
      name:            kp of styrene
      symbol:          k_p
      unit:            L/mol/s
      Trange [K]:      (261.0, 366.0)
      k0 [L/mol/s]:    42657951.88015926
      EaR [K]:         3909.0690401732018
      T0 [K]:          inf

    >>> kpi(T=50., i=3, Tunit='C')
    371.75986615653215
    """

    kp: Union[Arrhenius, Eyring]
    C: float
    ihalf: float
    symbol: str = 'k_p(i)'

    def __init__(self,
                 kp: Union[Arrhenius, Eyring],
                 C: float = 10.0,
                 ihalf: float = 1.0,
                 name: str = ''
                 ) -> None:

        check_type(kp, (Arrhenius, Eyring), 'kp')
        check_bounds(C, 1., 100., 'C')
        check_bounds(ihalf, 0.1, 10, 'ihalf')

        self.kp = kp
        self.C = C
        self.ihalf = ihalf
        self.name = name

    def __repr__(self) -> str:
        return custom_repr(self, ('name', 'C', 'ihalf', 'kp'))

    @staticmethod
    def equation(i: Union[int, IntArray],
                 kp: Union[float, FloatArray],
                 C: float,
                 ihalf: float
                 ) -> Union[float, FloatArray]:
        r"""Half-length model chain-length dependence equation.

        Parameters
        ----------
        i : int | IntArray
            Chain length of radical.
        kp : float | FloatArray
            Long-chain value of the propagation rate coefficient, $k_p$.
        C : float
            Ratio of the propagation coefficients of a monomeric radical and a
            long-chain radical, $C$.
        ihalf : float
            Half-length, $i_{i/2}$.

        Returns
        -------
        float | FloatArray
            Coefficient value.
        """

        return kp*(1 + (C - 1)*exp(-log(2)*(i - 1)/ihalf))

    def __call__(self,
                 T: Union[float, FloatArrayLike],
                 i: Union[int, IntArrayLike],
                 Tunit: Literal['C', 'K'] = 'K'
                 ) -> Union[float, FloatArray]:
        r"""Evaluate kinetic coefficient at given conditions, including unit
        conversion and range check.

        Parameters
        ----------
        T : float | FloatArrayLike
            Temperature.
            Unit = `Tunit`.
        i : int | IntArrayLike
            Chain length of radical.
        Tunit : Literal['C', 'K']
            Temperature unit.

        Returns
        -------
        float | FloatArray
            Coefficient value.
        """
        TK = convert_check_temperature(T, Tunit, self.kp.Trange)
        if isinstance(i, (list, tuple)):
            i = np.array(i, dtype=np.int32)
        return self.equation(i, self.kp(TK), self.C, self.ihalf)

__call__ ¤

__call__(
    T: Union[float, FloatArrayLike],
    i: Union[int, IntArrayLike],
    Tunit: Literal["C", "K"] = "K",
) -> Union[float, FloatArray]

Evaluate kinetic coefficient at given conditions, including unit conversion and range check.

PARAMETER DESCRIPTION
T

Temperature. Unit = Tunit.

TYPE: float | FloatArrayLike

i

Chain length of radical.

TYPE: int | IntArrayLike

Tunit

Temperature unit.

TYPE: Literal['C', 'K'] DEFAULT: 'K'

RETURNS DESCRIPTION
float | FloatArray

Coefficient value.

Source code in src/polykin/kinetics/cldpropagation.py
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
def __call__(self,
             T: Union[float, FloatArrayLike],
             i: Union[int, IntArrayLike],
             Tunit: Literal['C', 'K'] = 'K'
             ) -> Union[float, FloatArray]:
    r"""Evaluate kinetic coefficient at given conditions, including unit
    conversion and range check.

    Parameters
    ----------
    T : float | FloatArrayLike
        Temperature.
        Unit = `Tunit`.
    i : int | IntArrayLike
        Chain length of radical.
    Tunit : Literal['C', 'K']
        Temperature unit.

    Returns
    -------
    float | FloatArray
        Coefficient value.
    """
    TK = convert_check_temperature(T, Tunit, self.kp.Trange)
    if isinstance(i, (list, tuple)):
        i = np.array(i, dtype=np.int32)
    return self.equation(i, self.kp(TK), self.C, self.ihalf)

equation staticmethod ¤

equation(
    i: Union[int, IntArray],
    kp: Union[float, FloatArray],
    C: float,
    ihalf: float,
) -> Union[float, FloatArray]

Half-length model chain-length dependence equation.

PARAMETER DESCRIPTION
i

Chain length of radical.

TYPE: int | IntArray

kp

Long-chain value of the propagation rate coefficient, \(k_p\).

TYPE: float | FloatArray

C

Ratio of the propagation coefficients of a monomeric radical and a long-chain radical, \(C\).

TYPE: float

ihalf

Half-length, \(i_{i/2}\).

TYPE: float

RETURNS DESCRIPTION
float | FloatArray

Coefficient value.

Source code in src/polykin/kinetics/cldpropagation.py
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
@staticmethod
def equation(i: Union[int, IntArray],
             kp: Union[float, FloatArray],
             C: float,
             ihalf: float
             ) -> Union[float, FloatArray]:
    r"""Half-length model chain-length dependence equation.

    Parameters
    ----------
    i : int | IntArray
        Chain length of radical.
    kp : float | FloatArray
        Long-chain value of the propagation rate coefficient, $k_p$.
    C : float
        Ratio of the propagation coefficients of a monomeric radical and a
        long-chain radical, $C$.
    ihalf : float
        Half-length, $i_{i/2}$.

    Returns
    -------
    float | FloatArray
        Coefficient value.
    """

    return kp*(1 + (C - 1)*exp(-log(2)*(i - 1)/ihalf))