Skip to content

polykin.properties.vaporization_enthalpy¤

DHVL_Kistiakowsky_Vetere ¤

DHVL_Kistiakowsky_Vetere(
    Tb: float,
    M: float | None = None,
    kind: Literal[
        "any",
        "acid_alcohol",
        "ester",
        "hydrocarbon",
        "polar",
    ] = "any",
) -> float

Calculate the enthalpy of vaporization of a pure compound at the normal boiling point, using Vetere's modification of the Kistiakowsky method.

\[ \Delta H_{vb} = T_b \Delta S_{vb}(T_b, M, kind) \]

where \(T_b\) is the normal boiling point temperature, \(M\) is the molar mass, and \(\Delta S_{vb}(...)\) is the entropy of vaporization, given by one of five empirical correlations depending on the kind of compound (see Parameter description).

References

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

Normal boiling point temperature. Unit = K.

TYPE: float

M

Molar mass. Must be provided except if kind='any'. Unit = kg/mol.

TYPE: float | None DEFAULT: None

kind

Type of compound. 'any' corresponds ot the original correlation proposed by Kistiakowsky.

TYPE: Literal['any', 'acid_alcohol', 'ester', 'hydrocarbon', 'polar'] DEFAULT: 'any'

RETURNS DESCRIPTION
float

Vaporization enthalpy at the normal boiling point. Unit = J/mol.

See also

Examples:

Estimate the vaporization enthalpy of butadiene at the normal boiling temperature.

>>> from polykin.properties.vaporization_enthalpy \
...      import DHVL_Kistiakowsky_Vetere
>>> DHVL = DHVL_Kistiakowsky_Vetere(Tb=268.6, M=54.1e-3, kind='hydrocarbon')
>>> print(f"{DHVL/1e3:.1f} kJ/mol")
22.4 kJ/mol
Source code in src/polykin/properties/vaporization_enthalpy.py
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
def DHVL_Kistiakowsky_Vetere(
        Tb: float,
        M: float | None = None,
        kind: Literal['any', 'acid_alcohol', 'ester',
                      'hydrocarbon', 'polar'] = 'any') -> float:
    r"""Calculate the enthalpy of vaporization of a pure compound at the normal
    boiling point, using Vetere's modification of the Kistiakowsky method.

    $$ \Delta H_{vb} = T_b \Delta S_{vb}(T_b, M, kind) $$

    where $T_b$ is the normal boiling point temperature, $M$ is the molar mass,
    and $\Delta S_{vb}(...)$ is the entropy of vaporization, given by one of
    five empirical correlations depending on the kind of compound (see
    Parameter description).

    **References**

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

    Parameters
    ----------
    Tb : float
        Normal boiling point temperature. Unit = K.
    M : float | None
        Molar mass. Must be provided except if `kind='any'`. Unit = kg/mol.
    kind : Literal['any', 'acid_alcohol', 'ester', 'hydrocarbon', 'polar']
        Type of compound. `'any'` corresponds ot the original correlation
        proposed by Kistiakowsky.

    Returns
    -------
    float
        Vaporization enthalpy at the normal boiling point. Unit = J/mol.

    See also
    --------
    * [`DHVL_Pitzer`](DHVL_Pitzer.md): alternative method.
    * [`DHVL_Vetere`](DHVL_Vetere.md): alternative method.

    Examples
    --------
    Estimate the vaporization enthalpy of butadiene at the normal boiling
    temperature.
    >>> from polykin.properties.vaporization_enthalpy \
    ...      import DHVL_Kistiakowsky_Vetere
    >>> DHVL = DHVL_Kistiakowsky_Vetere(Tb=268.6, M=54.1e-3, kind='hydrocarbon')
    >>> print(f"{DHVL/1e3:.1f} kJ/mol")
    22.4 kJ/mol
    """

    if kind == 'any':
        DSvb = 30.6 + R*log(Tb)
        return DSvb*Tb

    if M is not None:
        M = M*1e3
    else:
        raise ValueError("`M` can't be `None` with selected compound kind.")

    if kind == 'hydrocarbon':
        DSvb = 58.20 + 13.7*log10(M) + 6.49/M*(Tb - (263*M)**0.581)**1.037
    elif kind == 'polar' or kind == 'ester':
        DSvb = 44.367 + 15.33 * \
            log10(Tb) + 0.39137*Tb/M + 4.330e-3/M*Tb**2 - 5.627e-6/M*Tb**3
        if kind == 'ester':
            DSvb *= 1.03
    elif kind == 'acid_alcohol':
        DSvb = 81.119 + 13.083 * \
            log10(Tb) - 25.769*Tb/M + 0.146528/M*Tb**2 - 2.1362e-4/M*Tb**3
    else:
        raise ValueError("Invalid compound `kind`.")

    return DSvb*Tb