Skip to content

polykin.properties.pvt¤

geometric_interaction_mixing ¤

geometric_interaction_mixing(
    y: FloatVector,
    Q: FloatVector,
    k: FloatSquareMatrix | None = None,
) -> float

Calculate a mixture parameter using a geometric average with interaction.

\[ Q_m = \sum_i \sum_j y_i y_j (Q_i Q_j)^{1/2}(1-k_{ij}) \]

with \(k_{ii}=0\) and \(k_{i,j}=k_{j,i}\).

Note

Only the entries above the main diagonal of \(k_{i,j}\) are used.

References

  • RC Reid, JM Prausniz, and BE Poling. The properties of gases & liquids 4th edition, 1986, p. 75.
PARAMETER DESCRIPTION
y

Composition, usually molar or mass fractions.

TYPE: FloatVector

Q

Pure component property.

TYPE: FloatVector

k

Binary interaction parameter matrix.

TYPE: FloatSquareMatrix | None DEFAULT: None

RETURNS DESCRIPTION
float

Mixture parameter, \(Q_m\). Unit = [Q].

Source code in src/polykin/properties/pvt/mixing_rules.py
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
def geometric_interaction_mixing(y: FloatVector,
                                 Q: FloatVector,
                                 k: FloatSquareMatrix | None = None
                                 ) -> float:
    r"""Calculate a mixture parameter using a geometric average with
    interaction.

    $$ Q_m = \sum_i \sum_j y_i y_j (Q_i Q_j)^{1/2}(1-k_{ij}) $$

    with $k_{ii}=0$ and $k_{i,j}=k_{j,i}$.

    !!! note

        Only the entries above the main diagonal of $k_{i,j}$ are used.

    **References**

    *   RC Reid, JM Prausniz, and BE Poling. The properties of gases & liquids
        4th edition, 1986, p. 75.

    Parameters
    ----------
    y : FloatVector
        Composition, usually molar or mass fractions.
    Q : FloatVector
        Pure component property.
    k : FloatSquareMatrix | None
        Binary interaction parameter matrix.

    Returns
    -------
    float
        Mixture parameter, $Q_m$. Unit = [Q].
    """
    if k is None:
        Qm = (dot(y, sqrt(Q)))**2
    else:
        N = y.size
        Qm = 0.0
        for i in range(N):
            Qm += y[i]**2 * Q[i]
            for j in range(i+1, N):
                Qm += 2*y[i]*y[j]*sqrt(Q[i]*Q[j])*(1 - k[i, j])
    return Qm