Skip to content

polykin.copolymerization¤

kp_average_binary ¤

kp_average_binary(
    f1: Union[float, FloatArrayLike],
    r1: Union[float, FloatArray],
    r2: Union[float, FloatArray],
    k11: Union[float, FloatArray],
    k22: Union[float, FloatArray],
) -> Union[float, FloatArray]

Calculate the average propagation rate coefficient in a copolymerization.

For a binary system, the instantaneous average propagation rate coefficient is related to the instantaneous comonomer composition by:

\[ \bar{k}_p = \frac{r_1 f_1^2 + r_2 f_2^2 + 2f_1 f_2} {(r_1 f_1/k_{11}) + (r_2 f_2/k_{22})} \]

where \(f_i\) is the instantaneous comonomer composition of monomer \(i\), \(r_i\) are the reactivity ratios, and \(k_{ii}\) are the homo-propagation rate coefficients. Although the equation is written using terminal model notation, it is equally applicable in the frame of the penultimate model if \(r_i \rightarrow \bar{r}_i\) and \(k_{ii} \rightarrow \bar{k}_{ii}\).

PARAMETER DESCRIPTION
f1

Molar fraction of M1.

TYPE: float | FloatArrayLike

r1

Reactivity ratio of M1, \(r_1\) or \(\bar{r}_1\).

TYPE: float | FloatArray

r2

Reactivity ratio of M2, \(r_2\) or \(\bar{r}_2\).

TYPE: float | FloatArray

k11

Propagation rate coefficient of M1, \(k_{11}\) or \(\bar{k}_{11}\). Unit = L/(mol·s)

TYPE: float | FloatArray

k22

Propagation rate coefficient of M2, \(k_{22}\) or \(\bar{k}_{22}\). Unit = L/(mol·s)

TYPE: float | FloatArray

RETURNS DESCRIPTION
float | FloatArray

Average propagation rate coefficient. Unit = L/(mol·s)

Examples:

>>> from polykin.copolymerization import kp_average_binary

An example with f1 as scalar.

>>> kp = kp_average_binary(f1=0.5, r1=0.16, r2=0.70, k11=100., k22=1000.)
>>> print(f"{kp:.0f} L/(mol·s)")
622 L/(mol·s)

An example with f1 as list.

>>> f1 = [0.2, 0.6, 0.8]
>>> kp = kp_average_binary(f1=f1, r1=0.16, r2=0.70, k11=100., k22=1000.)
>>> kp
array([880.        , 523.87096774, 317.18309859])
Source code in src/polykin/copolymerization/binary.py
 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
def kp_average_binary(f1: Union[float, FloatArrayLike],
                      r1: Union[float, FloatArray],
                      r2: Union[float, FloatArray],
                      k11: Union[float, FloatArray],
                      k22: Union[float, FloatArray]
                      ) -> Union[float, FloatArray]:
    r"""Calculate the average propagation rate coefficient in a
    copolymerization.

    For a binary system, the instantaneous average propagation rate
    coefficient is related to the instantaneous comonomer composition by:

    $$ \bar{k}_p = \frac{r_1 f_1^2 + r_2 f_2^2 + 2f_1 f_2}
        {(r_1 f_1/k_{11}) + (r_2 f_2/k_{22})} $$

    where $f_i$ is the instantaneous comonomer composition of monomer $i$,
    $r_i$ are the reactivity ratios, and $k_{ii}$ are the homo-propagation
    rate coefficients. Although the equation is written using terminal
    model notation, it is equally applicable in the frame of the
    penultimate model if $r_i \rightarrow \bar{r}_i$ and
    $k_{ii} \rightarrow \bar{k}_{ii}$.

    Parameters
    ----------
    f1 : float | FloatArrayLike
        Molar fraction of M1.
    r1 : float | FloatArray
        Reactivity ratio of M1, $r_1$ or $\bar{r}_1$.
    r2 : float | FloatArray
        Reactivity ratio of M2, $r_2$ or $\bar{r}_2$.
    k11 : float | FloatArray
        Propagation rate coefficient of M1, $k_{11}$ or $\bar{k}_{11}$.
        Unit = L/(mol·s)
    k22 : float | FloatArray
        Propagation rate coefficient of M2, $k_{22}$ or $\bar{k}_{22}$.
        Unit = L/(mol·s)

    Returns
    -------
    float | FloatArray
        Average propagation rate coefficient. Unit = L/(mol·s)

    Examples
    --------
    >>> from polykin.copolymerization import kp_average_binary

    An example with f1 as scalar.
    >>> kp = kp_average_binary(f1=0.5, r1=0.16, r2=0.70, k11=100., k22=1000.)
    >>> print(f"{kp:.0f} L/(mol·s)")
    622 L/(mol·s)

    An example with f1 as list.
    >>> f1 = [0.2, 0.6, 0.8]
    >>> kp = kp_average_binary(f1=f1, r1=0.16, r2=0.70, k11=100., k22=1000.)
    >>> kp
    array([880.        , 523.87096774, 317.18309859])
    """
    f1 = np.asarray(f1)
    f2 = 1 - f1
    return (r1*f1**2 + r2*f2**2 + 2*f1*f2)/((r1*f1/k11) + (r2*f2/k22))