Skip to content

polykin.thermo.acm¤

IdealSolution ¤

Bases: MolecularACM

Ideal solution model.

This model is based on the following trivial molar excess Gibbs energy expression:

\[ g^{E} = 0 \]
PARAMETER DESCRIPTION
N

Number of components.

TYPE: int

name

Name of the model instance.

TYPE: str DEFAULT: ''

Source code in src/polykin/thermo/acm/ideal.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class IdealSolution(MolecularACM):
    r"""[Ideal solution](https://en.wikipedia.org/wiki/Ideal_solution) model.

    This model is based on the following trivial molar excess Gibbs energy
    expression:

    $$ g^{E} = 0 $$

    Parameters
    ----------
    N : int
        Number of components.
    name : str
        Name of the model instance.
    """

    def __init__(self, N: int, name: str = "") -> None:

        super().__init__(N, name)

    def gE(self, T: float, x: FloatVector) -> float:
        return 0.0

    @override
    def gamma(self, T: float, x: FloatVector) -> FloatVector:
        return np.ones(self.N)

Dgmix ¤

Dgmix(T: float, x: FloatVector) -> float

Calculate the molar Gibbs energy of mixing.

\[ \Delta_{mix} g = g^E + R T \sum_i {x_i \ln{x_i}} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
float

Molar Gibbs energy of mixing [J/mol].

Source code in src/polykin/thermo/acm/base.py
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
def Dgmix(self, T: float, x: FloatVector) -> float:
    r"""Calculate the molar Gibbs energy of mixing.

    $$ \Delta_{mix} g = g^E + R T \sum_i {x_i \ln{x_i}} $$

    Parameters
    ----------
    T : float
        Temperature [K].
    x : FloatVector (N)
        Mole fractions of all components [mol/mol].

    Returns
    -------
    float
        Molar Gibbs energy of mixing [J/mol].
    """
    return self.gE(T, x) - T * self._Dsmix_ideal(T, x)

Dhmix ¤

Dhmix(T: float, x: FloatVector) -> float

Calculate the molar enthalpy of mixing.

\[ \Delta_{mix} h = h^{E} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
float

Molar enthalpy of mixing [J/mol].

Source code in src/polykin/thermo/acm/base.py
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
def Dhmix(self, T: float, x: FloatVector) -> float:
    r"""Calculate the molar enthalpy of mixing.

    $$ \Delta_{mix} h = h^{E} $$

    Parameters
    ----------
    T : float
        Temperature [K].
    x : FloatVector (N)
        Mole fractions of all components [mol/mol].

    Returns
    -------
    float
        Molar enthalpy of mixing [J/mol].
    """
    return self.hE(T, x)

Dsmix ¤

Dsmix(T: float, x: FloatVector) -> float

Calculate the molar entropy of mixing.

\[ \Delta_{mix} s = s^{E} - R \sum_i {x_i \ln{x_i}} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
float

Molar entropy of mixing [J/(mol·K)].

Source code in src/polykin/thermo/acm/base.py
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
def Dsmix(self, T: float, x: FloatVector) -> float:
    r"""Calculate the molar entropy of mixing.

    $$ \Delta_{mix} s = s^{E} - R \sum_i {x_i \ln{x_i}} $$

    Parameters
    ----------
    T : float
        Temperature [K].
    x : FloatVector (N)
        Mole fractions of all components [mol/mol].

    Returns
    -------
    float
        Molar entropy of mixing [J/(mol·K)].
    """
    return self.sE(T, x) + self._Dsmix_ideal(T, x)

N property ¤

N: int

Number of components.

activity ¤

activity(T: float, x: FloatVector) -> FloatVector

Calculate the activities.

\[ a_i = x_i \gamma_i \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
FloatVector(N)

Activities of all components.

Source code in src/polykin/thermo/acm/base.py
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
def activity(self, T: float, x: FloatVector) -> FloatVector:
    r"""Calculate the activities.

    $$ a_i = x_i \gamma_i $$

    Parameters
    ----------
    T : float
        Temperature [K].
    x : FloatVector (N)
        Mole fractions of all components [mol/mol].

    Returns
    -------
    FloatVector (N)
        Activities of all components.
    """
    return x * self.gamma(T, x)

gE ¤

gE(T: float, x: FloatVector) -> float

Calculate the molar excess Gibbs energy.

\[ g^{E} \equiv g - g^{id} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
float

Molar excess Gibbs energy [J/mol].

Source code in src/polykin/thermo/acm/ideal.py
34
35
def gE(self, T: float, x: FloatVector) -> float:
    return 0.0

gamma ¤

gamma(T: float, x: FloatVector) -> FloatVector

Calculate the activity coefficients based on mole fraction.

\[ \ln \gamma_i = \frac{1}{RT} \left( \frac{\partial (n g^E)}{\partial n_i} \right)_{T,P,n_j} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
FloatVector(N)

Activity coefficients of all components.

Source code in src/polykin/thermo/acm/ideal.py
37
38
39
@override
def gamma(self, T: float, x: FloatVector) -> FloatVector:
    return np.ones(self.N)

hE ¤

hE(T: float, x: FloatVector) -> float

Calculate the molar excess enthalpy.

\[ h^{E} = g^{E} + T s^{E} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
float

Molar excess enthalpy [J/mol].

Source code in src/polykin/thermo/acm/base.py
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
def hE(self, T: float, x: FloatVector) -> float:
    r"""Calculate the molar excess enthalpy.

    $$ h^{E} = g^{E} + T s^{E} $$

    Parameters
    ----------
    T : float
        Temperature [K].
    x : FloatVector (N)
        Mole fractions of all components [mol/mol].

    Returns
    -------
    float
        Molar excess enthalpy [J/mol].
    """
    return self.gE(T, x) + T * self.sE(T, x)

sE ¤

sE(T: float, x: FloatVector) -> float

Calculate the molar excess entropy.

\[ s^{E} = -\left(\frac{\partial g^{E}}{\partial T}\right)_{P,x_i} \]
PARAMETER DESCRIPTION
T

Temperature [K].

TYPE: float

x

Mole fractions of all components [mol/mol].

TYPE: FloatVector(N)

RETURNS DESCRIPTION
float

Molar excess entropy [J/(mol·K)].

Source code in src/polykin/thermo/acm/base.py
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
def sE(self, T: float, x: FloatVector) -> float:
    r"""Calculate the molar excess entropy.

    $$ s^{E} = -\left(\frac{\partial g^{E}}{\partial T}\right)_{P,x_i} $$

    Parameters
    ----------
    T : float
        Temperature [K].
    x : FloatVector (N)
        Mole fractions of all components [mol/mol].

    Returns
    -------
    float
        Molar excess entropy [J/(mol·K)].
    """
    return -1 * derivative_complex(lambda T_: self.gE(T_, x), T)[0]