Source code for chemicals.critical

"""Chemical Engineering Design Library (ChEDL). Utilities for process modeling.
Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Caleb Bell <Caleb.Andrew.Bell@gmail.com>
Copyright (C) 2020 Yoel Rene Cortes-Pena <yoelcortes@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This module contains lookup functions for critical temperature,
critical pressure, critical volume, and critical compressibility factors.
It also includes a few relationships between the critical properties, and a
variety of critical mixture property estimation routines.

For reporting bugs, adding feature requests, or submitting pull requests,
please use the `GitHub issue tracker <https://github.com/CalebBell/chemicals/>`_.

.. contents:: :local:

Critical Temperature
--------------------
.. autofunction:: chemicals.critical.Tc
.. autofunction:: chemicals.critical.Tc_methods
.. autodata:: chemicals.critical.Tc_all_methods
.. autodata:: chemicals.critical.Tc_all_method_types

Critical Pressure
-----------------
.. autofunction:: chemicals.critical.Pc
.. autofunction:: chemicals.critical.Pc_methods
.. autodata:: chemicals.critical.Pc_all_methods

Critical Volume
---------------
.. autofunction:: chemicals.critical.Vc
.. autofunction:: chemicals.critical.Vc_methods
.. autodata:: chemicals.critical.Vc_all_methods
.. autofunction:: chemicals.critical.Mersmann_Kind_predictor

Critical Compressibility Factor
-------------------------------
.. autofunction:: chemicals.critical.Zc
.. autofunction:: chemicals.critical.Zc_methods
.. autodata:: chemicals.critical.Zc_all_methods

Critical Property Relationships
-------------------------------
.. autofunction:: chemicals.critical.critical_surface
.. autofunction:: chemicals.critical.critical_surface_methods
.. autodata:: chemicals.critical.critical_surface_all_methods
.. autofunction:: chemicals.critical.third_property
.. autofunction:: chemicals.critical.Ihmels
.. autofunction:: chemicals.critical.Meissner
.. autofunction:: chemicals.critical.Grigoras
.. autofunction:: chemicals.critical.Hekayati_Raeissi
.. autofunction:: chemicals.critical.Tb_Tc_relationship

Critical Temperature of Mixtures
--------------------------------
.. autofunction:: chemicals.critical.Li
.. autofunction:: chemicals.critical.Chueh_Prausnitz_Tc
.. autofunction:: chemicals.critical.Grieves_Thodos
.. autofunction:: chemicals.critical.modified_Wilson_Tc

Critical Volume of Mixtures
---------------------------
.. autofunction:: chemicals.critical.Chueh_Prausnitz_Vc
.. autofunction:: chemicals.critical.modified_Wilson_Vc
"""

__all__ = ['Tc', 'Pc', 'Vc', 'Zc',
           'Mersmann_Kind_predictor',
           'third_property',
           'critical_surface',
           'Ihmels', 'Meissner', 'Grigoras', 'Hekayati_Raeissi', 'Li',
           'Tb_Tc_relationship',
           'Chueh_Prausnitz_Tc', 'Grieves_Thodos',
           'modified_Wilson_Tc', 'Chueh_Prausnitz_Vc',
           'modified_Wilson_Vc',
           'Tc_methods', 'Pc_methods',
           'Vc_methods', 'Zc_methods',
           'critical_surface_methods',
           'Tc_all_methods', 'Pc_all_methods',
           'Vc_all_methods', 'Zc_all_methods',
           'critical_surface_all_methods']


from fluids.constants import N_A, R, R_inv
from fluids.numerics import log

from chemicals import data_reader as dr
from chemicals import miscdata
from chemicals.data_reader import (
    data_source,
    database_constant_lookup,
    list_available_methods_from_df_dict,
    register_df_source,
    retrieve_any_from_df_dict,
    retrieve_from_df_dict,
)
from chemicals.utils import PY37, can_load_data, mark_numba_incompatible, os_path_join, source_path

folder = os_path_join(source_path, 'Critical Properties')
IUPAC = 'IUPAC'
MATTHEWS = 'MATTHEWS'
CRC = 'CRC'
PSRK = 'PSRK'
PD = 'PD'
YAWS = 'YAWS'
PINAMARTINES = 'PINAMARTINES'
FEDORS = 'FEDORS'
WILSON_JASPERSON = 'WILSON_JASPERSON'
ACENTRIC_DEFINITION = 'ACENTRIC_DEFINITION'

### Register data sources and lazy load them

@mark_numba_incompatible
def _add_Zc_to_df(df):
    # Some files don't have the `Zc` column; this adds it
    # TODO: Think about adding these to the files
    import pandas as pd
    if 'Zc' in df: return
    df['Zc'] = pd.Series(df['Pc']*df['Vc']*R_inv/df['Tc'], index=df.index)

# IUPAC Organic data series
# TODO: 12E of this data http://pubsdc3.acs.org/doi/10.1021/acs.jced.5b00571
register_df_source(folder, 'IUPACOrganicCriticalProps.tsv')

# CRC Handbook from TRC Organic data section (only in 2015)
# No Inorganic table was taken, although it is already present;
# data almost all from IUPAC
register_df_source(folder, 'CRCCriticalOrganics.tsv', postload=_add_Zc_to_df)
register_df_source(folder, 'Mathews1972InorganicCriticalProps.tsv')
register_df_source(folder, 'Appendix to PSRK Revision 4.tsv', postload=_add_Zc_to_df)
register_df_source(folder, 'PassutDanner1973.tsv')
register_df_source(folder, 'Yaws Collection.tsv', postload=_add_Zc_to_df)
register_df_source(folder, 'DIPPRPinaMartines.tsv', postload=_add_Zc_to_df)
register_df_source(folder, 'wilson_jasperson_Tc_Pc_predictions.tsv', int_CAS=True)
register_df_source(folder, 'fedors_Vc_predictions.tsv', int_CAS=True)
register_df_source(folder, 'omega_Psat_Tc_predictions.tsv', int_CAS=True)

_critical_data_loaded = False
@mark_numba_incompatible
def _load_critical_data():
    global critical_data_IUPAC, critical_data_Matthews, critical_data_CRC
    global critical_data_PSRKR4, critical_data_Yaws, critical_data_PassutDanner, critical_data_PinaMartines
    global Tc_sources, Pc_sources, Vc_sources, Zc_sources, omega_sources
    global _critical_data_loaded
    critical_data_IUPAC = data_source('IUPACOrganicCriticalProps.tsv')
    critical_data_Matthews = data_source('Mathews1972InorganicCriticalProps.tsv')
    critical_data_CRC = data_source('CRCCriticalOrganics.tsv')
    critical_data_PSRKR4 = data_source('Appendix to PSRK Revision 4.tsv')
    critical_data_Yaws = data_source('Yaws Collection.tsv')
    critical_data_PassutDanner = data_source('PassutDanner1973.tsv')
    critical_data_PinaMartines = data_source('DIPPRPinaMartines.tsv')
    critical_data_WilsonJasperson = data_source('wilson_jasperson_Tc_Pc_predictions.tsv')
    critical_data_Fedors = data_source('fedors_Vc_predictions.tsv')
    critical_data_omega_Psat_Tc = data_source('omega_Psat_Tc_predictions.tsv')
    _critical_data_loaded = True
    Tc_sources = {
        miscdata.HEOS: miscdata.heos_data,
        IUPAC: critical_data_IUPAC,
        MATTHEWS: critical_data_Matthews,
        CRC: critical_data_CRC,
        PSRK: critical_data_PSRKR4,
        PD: critical_data_PassutDanner,
        miscdata.WEBBOOK: miscdata.webbook_data,
        PINAMARTINES: critical_data_PinaMartines,
        YAWS: critical_data_Yaws,
        miscdata.JOBACK: miscdata.joback_predictions,
        WILSON_JASPERSON: critical_data_WilsonJasperson,
    }

    _add_Zc_to_df(miscdata.joback_predictions)
    _add_Zc_to_df(miscdata.webbook_data)
    _add_Zc_to_df(miscdata.heos_data)

    # Create copies just incase new dfs need to be added later
    Pc_sources = Tc_sources.copy()
    Vc_sources =  {
        miscdata.HEOS: miscdata.heos_data,
        IUPAC: critical_data_IUPAC,
        MATTHEWS: critical_data_Matthews,
        CRC: critical_data_CRC,
        PSRK: critical_data_PSRKR4,
        miscdata.WEBBOOK: miscdata.webbook_data,
        PINAMARTINES: critical_data_PinaMartines,
        YAWS: critical_data_Yaws,
        miscdata.JOBACK: miscdata.joback_predictions,
        FEDORS: critical_data_Fedors,
        }
    Zc_sources =  {
        miscdata.HEOS: miscdata.heos_data,
        IUPAC: critical_data_IUPAC,
        MATTHEWS: critical_data_Matthews,
        CRC: critical_data_CRC,
        PSRK: critical_data_PSRKR4,
        miscdata.WEBBOOK: miscdata.webbook_data,
        PINAMARTINES: critical_data_PinaMartines,
        YAWS: critical_data_Yaws,
        miscdata.JOBACK: miscdata.joback_predictions,
        }

    omega_sources = {
        miscdata.HEOS: miscdata.heos_data,
        PSRK: critical_data_PSRKR4,
        PD: critical_data_PassutDanner,
        YAWS: critical_data_Yaws,
        ACENTRIC_DEFINITION: critical_data_omega_Psat_Tc
    }

if PY37:
    def __getattr__(name):
        if name in ('critical_data_IUPAC', 'critical_data_Matthews',
                    'critical_data_CRC', 'critical_data_PSRKR4',
                    'critical_data_Yaws', 'critical_data_PassutDanner',
                    'critical_data_PinaMartines',
                    'critical_data_WilsonJasperson', 'critical_data_Fedors',
                    'critical_data_omega_Psat_Tc',
                    'Tc_sources', 'Pc_sources', 'Vc_sources', 'Zc_sources',
                    'omega_sources'):
            _load_critical_data()
            return globals()[name]
        raise AttributeError(f"module {__name__} has no attribute {name}")
else: # pragma: no cover
    if can_load_data:
        _load_critical_data()

### Critical point functions

Tc_all_methods = (miscdata.HEOS, IUPAC, MATTHEWS, CRC, PD, miscdata.WEBBOOK, PSRK, PINAMARTINES, YAWS, WILSON_JASPERSON, miscdata.JOBACK)
"""Tuple of method name keys. See the `Tc` for the actual references"""

Tc_all_method_types = {
    miscdata.HEOS: miscdata.EXPERIMENTAL_REVIEW,
    IUPAC: miscdata.EXPERIMENTAL_REVIEW,
    MATTHEWS: miscdata.EXPERIMENTAL_COMPILATION,
    CRC: miscdata.PROCESSED_EXPERIMENTAL,
    PD: miscdata.EXPERIMENTAL_COMPILATION_SECONDARY,
    miscdata.WEBBOOK: miscdata.PROCESSED_EXPERIMENTAL,

    PSRK: miscdata.PROCESSED_EXPERIMENTAL_PREDICTED,
    PINAMARTINES: miscdata.PROCESSED_EXPERIMENTAL_PREDICTED_SECONDARY,
    YAWS: miscdata.PROCESSED_EXPERIMENTAL_PREDICTED,

    WILSON_JASPERSON: miscdata.PREDICTED_GC,
    miscdata.JOBACK: miscdata.PREDICTED_GC,
}


[docs]@mark_numba_incompatible def Tc_methods(CASRN): """Return all methods available to obtain the critical temperature for the desired chemical. Parameters ---------- CASRN : str CASRN, [-] Returns ------- methods : list[str] Methods which can be used to obtain Tc with the given inputs. See Also -------- Tc """ if not _critical_data_loaded: _load_critical_data() return list_available_methods_from_df_dict(Tc_sources, CASRN, 'Tc')
[docs]@mark_numba_incompatible def Tc(CASRN, method=None): r'''This function handles the retrieval of a chemical's critical temperature. Lookup is based on CASRNs. Will automatically select a data source to use if no method is provided; returns None if the data is not available. Function has data for approximately 26000 chemicals. Parameters ---------- CASRN : str CASRN [-] Returns ------- Tc : float Critical temperature, [K] Other Parameters ---------------- method : string, optional The method name to use. Accepted methods are 'IUPAC', 'MATTHEWS', 'CRC', 'PD', 'WEBBOOK', 'PSRK', 'PINAMARTINES', 'YAWS', 'WILSON_JASPERSON', 'JOBACK', 'HEOS'. All valid values are also held in the list `Tc_all_methods`. Notes ----- The available sources are as follows: * 'IUPAC', a series of critically evaluated experimental datum for organic compounds in [1]_, [2]_, [3]_, [4]_, [5]_, [6]_, [7]_, [8]_, [9]_, [10]_, [11]_, and [12]_. * 'MATTHEWS', a series of critically evaluated data for inorganic compounds in [13]_. * 'CRC', a compillation of critically evaluated data by the TRC as published in [14]_. * 'PSRK', a compillation of experimental and estimated data published in [15]_. * 'PD', an older compillation of data published in [16]_ * 'YAWS', a large compillation of data from a variety of sources; no data points are sourced in the work of [17]_. * 'WEBBOOK', a NIST resource [18]_ containing mostly experimental and averaged values * 'JOBACK', an estimation method for organic substances in [19]_ * 'WILSON_JASPERSON', an estimation method in [21]_ * 'PINAMARTINES', a series of values in the supporting material of [20]_ * 'HEOS', a series of values from the NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids (and other high-precision fundamental equations of state) Examples -------- >>> Tc(CASRN='64-17-5') 514.71 See Also -------- Tc_methods References ---------- .. [1] Ambrose, Douglas, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 1. An Introductory Survey." Journal of Chemical & Engineering Data 41, no. 1 (January 1, 1996): 154-154. doi:10.1021/je950378q. .. [2] Ambrose, Douglas, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 2. Normal Alkanes." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 531-46. doi:10.1021/je00019a001. .. [3] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 3. Aromatic Hydrocarbons." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 547-58. doi:10.1021/je00019a002. .. [4] Gude, Michael, and Amyn S. Teja. "Vapor-Liquid Critical Properties of Elements and Compounds. 4. Aliphatic Alkanols." Journal of Chemical & Engineering Data 40, no. 5 (September 1, 1995): 1025-36. doi:10.1021/je00021a001. .. [5] Daubert, Thomas E. "Vapor-Liquid Critical Properties of Elements and Compounds. 5. Branched Alkanes and Cycloalkanes." Journal of Chemical & Engineering Data 41, no. 3 (January 1, 1996): 365-72. doi:10.1021/je9501548. .. [6] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 6. Unsaturated Aliphatic Hydrocarbons." Journal of Chemical & Engineering Data 41, no. 4 (January 1, 1996): 645-56. doi:10.1021/je9501999. .. [7] Kudchadker, Arvind P., Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 7. Oxygen Compounds Other Than Alkanols and Cycloalkanols." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 457-79. doi:10.1021/je0001680. .. [8] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 8. Organic Sulfur, Silicon, and Tin Compounds (C + H + S, Si, and Sn)." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 480-85. doi:10.1021/je000210r. .. [9] Marsh, Kenneth N., Colin L. Young, David W. Morton, Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 9. Organic Compounds Containing Nitrogen." Journal of Chemical & Engineering Data 51, no. 2 (March 1, 2006): 305-14. doi:10.1021/je050221q. .. [10] Marsh, Kenneth N., Alan Abramson, Douglas Ambrose, David W. Morton, Eugene Nikitin, Constantine Tsonopoulos, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 10. Organic Compounds Containing Halogens." Journal of Chemical & Engineering Data 52, no. 5 (September 1, 2007): 1509-38. doi:10.1021/je700336g. .. [11] Ambrose, Douglas, Constantine Tsonopoulos, and Eugene D. Nikitin. "Vapor-Liquid Critical Properties of Elements and Compounds. 11. Organic Compounds Containing B + O; Halogens + N, + O, + O + S, + S, + Si; N + O; and O + S, + Si." Journal of Chemical & Engineering Data 54, no. 3 (March 12, 2009): 669-89. doi:10.1021/je800580z. .. [12] Ambrose, Douglas, Constantine Tsonopoulos, Eugene D. Nikitin, David W. Morton, and Kenneth N. Marsh. "Vapor-Liquid Critical Properties of Elements and Compounds. 12. Review of Recent Data for Hydrocarbons and Non-Hydrocarbons." Journal of Chemical & Engineering Data, October 5, 2015, 151005081500002. doi:10.1021/acs.jced.5b00571. .. [13] Mathews, Joseph F. "Critical Constants of Inorganic Substances." Chemical Reviews 72, no. 1 (February 1, 1972): 71-100. doi:10.1021/cr60275a004. .. [14] Haynes, W.M., Thomas J. Bruno, and David R. Lide. CRC Handbook of Chemistry and Physics, 95E. Boca Raton, FL: CRC press, 2014. .. [15] Horstmann, Sven, Anna Jabłoniec, Jörg Krafczyk, Kai Fischer, and Jürgen Gmehling. "PSRK Group Contribution Equation of State: Comprehensive Revision and Extension IV, Including Critical Constants and A-Function Parameters for 1000 Components." Fluid Phase Equilibria 227, no. 2 (January 25, 2005): 157-64. doi:10.1016/j.fluid.2004.11.002. .. [16] Passut, Charles A., and Ronald P. Danner. "Acentric Factor. A Valuable Correlating Parameter for the Properties of Hydrocarbons." Industrial & Engineering Chemistry Process Design and Development 12, no. 3 (July 1, 1973): 365-68. doi:10.1021/i260047a026. .. [17] Yaws, Carl L. Thermophysical Properties of Chemicals and Hydrocarbons, Second Edition. Amsterdam Boston: Gulf Professional Publishing, 2014. .. [18] Shen, V.K., Siderius, D.W., Krekelberg, W.P., and Hatch, H.W., Eds., NIST WebBook, NIST, http://doi.org/10.18434/T4M88Q .. [19] Joback, K.G., and R.C. Reid. "Estimation of Pure-Component Properties from Group-Contributions." Chemical Engineering Communications 57, no. 1-6 (July 1, 1987): 233-43. doi:10.1080/00986448708960487. .. [20] Piña-Martinez, Andrés, Romain Privat, and Jean-Noël Jaubert. "Use of 300,000 Pseudo-Experimental Data over 1800 Pure Fluids to Assess the Performance of Four Cubic Equations of State: SRK, PR, Tc-RK, and Tc-PR." AIChE Journal n/a, no. n/a (n.d.): e17518. https://doi.org/10.1002/aic.17518. .. [21] Wilson, G. M., and L. V. Jasperson. "Critical Constants Tc, Pc, Estimation Based on Zero, First and Second Order Methods." In Proceedings of the AIChE Spring Meeting, 21, 1996. .. [22] Huber, Marcia L., Eric W. Lemmon, Ian H. Bell, and Mark O. McLinden. "The NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids." Industrial & Engineering Chemistry Research 61, no. 42 (October 26, 2022): 15449-72. https://doi.org/10.1021/acs.iecr.2c01427. ''' if dr.USE_CONSTANTS_DATABASE and method is None: val, found = database_constant_lookup(CASRN, 'Tc') if found: return val if not _critical_data_loaded: _load_critical_data() if method: return retrieve_from_df_dict(Tc_sources, CASRN, 'Tc', method) else: return retrieve_any_from_df_dict(Tc_sources, CASRN, 'Tc')
Pc_all_methods = (miscdata.HEOS, IUPAC, MATTHEWS, CRC, PD, miscdata.WEBBOOK, PSRK, PINAMARTINES, YAWS, WILSON_JASPERSON, miscdata.JOBACK) """Tuple of method name keys. See the `Pc` for the actual references"""
[docs]@mark_numba_incompatible def Pc_methods(CASRN): """Return all methods available to obtain the critical pressure for the desired chemical. Parameters ---------- CASRN : str CASRN, [-] Returns ------- methods : list[str] Methods which can be used to obtain Pc with the given inputs. See Also -------- Pc """ if not _critical_data_loaded: _load_critical_data() return list_available_methods_from_df_dict(Pc_sources, CASRN, 'Pc')
[docs]@mark_numba_incompatible def Pc(CASRN, method=None): r'''This function handles the retrieval of a chemical's critical pressure. Lookup is based on CASRNs. Will automatically select a data source to use if no method is provided; returns None if the data is not available. Function has data for approximately 26000 chemicals. Examples -------- >>> Pc(CASRN='64-17-5') 6268000.0 Parameters ---------- CASRN : str CASRN [-] Returns ------- Pc : float Critical pressure, [Pa] Other Parameters ---------------- method : string, optional The method name to use. Accepted methods are 'IUPAC', 'MATTHEWS', 'CRC', 'PD', 'WEBBOOK', 'PSRK', 'PINAMARTINES', 'YAWS', 'WILSON_JASPERSON', 'JOBACK', 'HEOS'. All valid values are also held in the list `Pc_all_methods`. Notes ----- The available sources are as follows: * 'IUPAC', a series of critically evaluated experimental datum for organic compounds in [1]_, [2]_, [3]_, [4]_, [5]_, [6]_, [7]_, [8]_, [9]_, [10]_, [11]_, and [12]_. * 'MATTHEWS', a series of critically evaluated data for inorganic compounds in [13]_. * 'CRC', a compillation of critically evaluated data by the TRC as published in [14]_. * 'PSRK', a compillation of experimental and estimated data published in [15]_. * 'PD', an older compillation of data published in [16]_ * 'YAWS', a large compillation of data from a variety of sources; no data points are sourced in the work of [17]_. * 'WEBBOOK', a NIST resource [18]_ containing mostly experimental and averaged values * 'JOBACK', an estimation method for organic substances in [19]_ * 'PINAMARTINES', a series of values in the supporting material of [20]_ * 'WILSON_JASPERSON', an estimation method in [21]_ * 'HEOS', a series of values from the NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids (and other high-precision fundamental equations of state) See Also -------- Pc_methods References ---------- .. [1] Ambrose, Douglas, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 1. An Introductory Survey." Journal of Chemical & Engineering Data 41, no. 1 (January 1, 1996): 154-154. doi:10.1021/je950378q. .. [2] Ambrose, Douglas, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 2. Normal Alkanes." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 531-46. doi:10.1021/je00019a001. .. [3] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 3. Aromatic Hydrocarbons." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 547-58. doi:10.1021/je00019a002. .. [4] Gude, Michael, and Amyn S. Teja. "Vapor-Liquid Critical Properties of Elements and Compounds. 4. Aliphatic Alkanols." Journal of Chemical & Engineering Data 40, no. 5 (September 1, 1995): 1025-36. doi:10.1021/je00021a001. .. [5] Daubert, Thomas E. "Vapor-Liquid Critical Properties of Elements and Compounds. 5. Branched Alkanes and Cycloalkanes." Journal of Chemical & Engineering Data 41, no. 3 (January 1, 1996): 365-72. doi:10.1021/je9501548. .. [6] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 6. Unsaturated Aliphatic Hydrocarbons." Journal of Chemical & Engineering Data 41, no. 4 (January 1, 1996): 645-56. doi:10.1021/je9501999. .. [7] Kudchadker, Arvind P., Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 7. Oxygen Compounds Other Than Alkanols and Cycloalkanols." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 457-79. doi:10.1021/je0001680. .. [8] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 8. Organic Sulfur, Silicon, and Tin Compounds (C + H + S, Si, and Sn)." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 480-85. doi:10.1021/je000210r. .. [9] Marsh, Kenneth N., Colin L. Young, David W. Morton, Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 9. Organic Compounds Containing Nitrogen." Journal of Chemical & Engineering Data 51, no. 2 (March 1, 2006): 305-14. doi:10.1021/je050221q. .. [10] Marsh, Kenneth N., Alan Abramson, Douglas Ambrose, David W. Morton, Eugene Nikitin, Constantine Tsonopoulos, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 10. Organic Compounds Containing Halogens." Journal of Chemical & Engineering Data 52, no. 5 (September 1, 2007): 1509-38. doi:10.1021/je700336g. .. [11] Ambrose, Douglas, Constantine Tsonopoulos, and Eugene D. Nikitin. "Vapor-Liquid Critical Properties of Elements and Compounds. 11. Organic Compounds Containing B + O; Halogens + N, + O, + O + S, + S, + Si; N + O; and O + S, + Si." Journal of Chemical & Engineering Data 54, no. 3 (March 12, 2009): 669-89. doi:10.1021/je800580z. .. [12] Ambrose, Douglas, Constantine Tsonopoulos, Eugene D. Nikitin, David W. Morton, and Kenneth N. Marsh. "Vapor-Liquid Critical Properties of Elements and Compounds. 12. Review of Recent Data for Hydrocarbons and Non-Hydrocarbons." Journal of Chemical & Engineering Data, October 5, 2015, 151005081500002. doi:10.1021/acs.jced.5b00571. .. [13] Mathews, Joseph F. "Critical Constants of Inorganic Substances." Chemical Reviews 72, no. 1 (February 1, 1972): 71-100. doi:10.1021/cr60275a004. .. [14] Haynes, W.M., Thomas J. Bruno, and David R. Lide. CRC Handbook of Chemistry and Physics, 95E. Boca Raton, FL: CRC press, 2014. .. [15] Horstmann, Sven, Anna Jabłoniec, Jörg Krafczyk, Kai Fischer, and Jürgen Gmehling. "PSRK Group Contribution Equation of State: Comprehensive Revision and Extension IV, Including Critical Constants and A-Function Parameters for 1000 Components." Fluid Phase Equilibria 227, no. 2 (January 25, 2005): 157-64. doi:10.1016/j.fluid.2004.11.002. .. [16] Passut, Charles A., and Ronald P. Danner. "Acentric Factor. A Valuable Correlating Parameter for the Properties of Hydrocarbons." Industrial & Engineering Chemistry Process Design and Development 12, no. 3 (July 1, 1973): 365-68. doi:10.1021/i260047a026. .. [17] Yaws, Carl L. Thermophysical Properties of Chemicals and Hydrocarbons, Second Edition. Amsterdam Boston: Gulf Professional Publishing, 2014. .. [18] Shen, V.K., Siderius, D.W., Krekelberg, W.P., and Hatch, H.W., Eds., NIST WebBook, NIST, http://doi.org/10.18434/T4M88Q .. [19] Joback, K.G., and R.C. Reid. "Estimation of Pure-Component Properties from Group-Contributions." Chemical Engineering Communications 57, no. 1-6 (July 1, 1987): 233-43. doi:10.1080/00986448708960487. .. [20] Piña-Martinez, Andrés, Romain Privat, and Jean-Noël Jaubert. "Use of 300,000 Pseudo-Experimental Data over 1800 Pure Fluids to Assess the Performance of Four Cubic Equations of State: SRK, PR, Tc-RK, and Tc-PR." AIChE Journal n/a, no. n/a (n.d.): e17518. https://doi.org/10.1002/aic.17518. .. [21] Wilson, G. M., and L. V. Jasperson. "Critical Constants Tc, Pc, Estimation Based on Zero, First and Second Order Methods." In Proceedings of the AIChE Spring Meeting, 21, 1996. .. [22] Huber, Marcia L., Eric W. Lemmon, Ian H. Bell, and Mark O. McLinden. "The NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids." Industrial & Engineering Chemistry Research 61, no. 42 (October 26, 2022): 15449-72. https://doi.org/10.1021/acs.iecr.2c01427. ''' if dr.USE_CONSTANTS_DATABASE and method is None: val, found = database_constant_lookup(CASRN, 'Pc') if found: return val if not _critical_data_loaded: _load_critical_data() if method: return retrieve_from_df_dict(Pc_sources, CASRN, 'Pc', method) else: return retrieve_any_from_df_dict(Pc_sources, CASRN, 'Pc')
Vc_all_methods = (miscdata.HEOS, IUPAC, MATTHEWS, CRC, miscdata.WEBBOOK, PSRK, PINAMARTINES, YAWS, FEDORS, miscdata.JOBACK) """Tuple of method name keys. See the `Vc` for the actual references"""
[docs]@mark_numba_incompatible def Vc_methods(CASRN): """Return all methods available to obtain the critical volume for the desired chemical. Parameters ---------- CASRN : str CASRN, [-] Returns ------- methods : list[str] Methods which can be used to obtain Vc with the given inputs. See Also -------- Vc """ if not _critical_data_loaded: _load_critical_data() return list_available_methods_from_df_dict(Vc_sources, CASRN, 'Vc')
[docs]@mark_numba_incompatible def Vc(CASRN, method=None): r'''This function handles the retrieval of a chemical's critical volume. Lookup is based on CASRNs. Will automatically select a data source to use if no method is provided; returns None if the data is not available. Preferred sources are 'IUPAC' for organic chemicals, and 'MATTHEWS' for inorganic chemicals. Function has data for approximately 25000 chemicals. Examples -------- >>> Vc(CASRN='64-17-5') 0.000168634064081 Parameters ---------- CASRN : str CASRN [-] Returns ------- Vc : float Critical volume, [m^3/mol] Other Parameters ---------------- method : string, optional The method name to use. Accepted methods are 'IUPAC', 'MATTHEWS', 'CRC', 'WEBBOOK', 'PSRK', 'PINAMARTINES', 'YAWS', 'FEDORS', 'JOBACK', 'HEOS'. All valid values are also held in the list `Vc_all_methods`. Notes ----- The available sources are as follows: * 'IUPAC', a series of critically evaluated experimental datum for organic compounds in [1]_, [2]_, [3]_, [4]_, [5]_, [6]_, [7]_, [8]_, [9]_, [10]_, [11]_, and [12]_. * 'MATTHEWS', a series of critically evaluated data for inorganic compounds in [13]_. * 'CRC', a compillation of critically evaluated data by the TRC as published in [14]_. * 'PSRK', a compillation of experimental and estimated data published in [15]_. * 'YAWS', a large compillation of data from a variety of sources; no data points are sourced in the work of [16]_. * 'WEBBOOK', a NIST resource [17]_ containing mostly experimental and averaged values * 'JOBACK', an estimation method for organic substances in [18]_ * 'FEDORS', an estimation methid in [20]_ * 'PINAMARTINES', a series of values in the supporting material of [19]_ * 'HEOS', a series of values from the NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids (and other high-precision fundamental equations of state) See Also -------- Vc_methods References ---------- .. [1] Ambrose, Douglas, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 1. An Introductory Survey." Journal of Chemical & Engineering Data 41, no. 1 (January 1, 1996): 154-154. doi:10.1021/je950378q. .. [2] Ambrose, Douglas, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 2. Normal Alkanes." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 531-46. doi:10.1021/je00019a001. .. [3] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 3. Aromatic Hydrocarbons." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 547-58. doi:10.1021/je00019a002. .. [4] Gude, Michael, and Amyn S. Teja. "Vapor-Liquid Critical Properties of Elements and Compounds. 4. Aliphatic Alkanols." Journal of Chemical & Engineering Data 40, no. 5 (September 1, 1995): 1025-36. doi:10.1021/je00021a001. .. [5] Daubert, Thomas E. "Vapor-Liquid Critical Properties of Elements and Compounds. 5. Branched Alkanes and Cycloalkanes." Journal of Chemical & Engineering Data 41, no. 3 (January 1, 1996): 365-72. doi:10.1021/je9501548. .. [6] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 6. Unsaturated Aliphatic Hydrocarbons." Journal of Chemical & Engineering Data 41, no. 4 (January 1, 1996): 645-56. doi:10.1021/je9501999. .. [7] Kudchadker, Arvind P., Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 7. Oxygen Compounds Other Than Alkanols and Cycloalkanols." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 457-79. doi:10.1021/je0001680. .. [8] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 8. Organic Sulfur, Silicon, and Tin Compounds (C + H + S, Si, and Sn)." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 480-85. doi:10.1021/je000210r. .. [9] Marsh, Kenneth N., Colin L. Young, David W. Morton, Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 9. Organic Compounds Containing Nitrogen." Journal of Chemical & Engineering Data 51, no. 2 (March 1, 2006): 305-14. doi:10.1021/je050221q. .. [10] Marsh, Kenneth N., Alan Abramson, Douglas Ambrose, David W. Morton, Eugene Nikitin, Constantine Tsonopoulos, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 10. Organic Compounds Containing Halogens." Journal of Chemical & Engineering Data 52, no. 5 (September 1, 2007): 1509-38. doi:10.1021/je700336g. .. [11] Ambrose, Douglas, Constantine Tsonopoulos, and Eugene D. Nikitin. "Vapor-Liquid Critical Properties of Elements and Compounds. 11. Organic Compounds Containing B + O; Halogens + N, + O, + O + S, + S, + Si; N + O; and O + S, + Si." Journal of Chemical & Engineering Data 54, no. 3 (March 12, 2009): 669-89. doi:10.1021/je800580z. .. [12] Ambrose, Douglas, Constantine Tsonopoulos, Eugene D. Nikitin, David W. Morton, and Kenneth N. Marsh. "Vapor-Liquid Critical Properties of Elements and Compounds. 12. Review of Recent Data for Hydrocarbons and Non-Hydrocarbons." Journal of Chemical & Engineering Data, October 5, 2015, 151005081500002. doi:10.1021/acs.jced.5b00571. .. [13] Mathews, Joseph F. "Critical Constants of Inorganic Substances." Chemical Reviews 72, no. 1 (February 1, 1972): 71-100. doi:10.1021/cr60275a004. .. [14] Haynes, W.M., Thomas J. Bruno, and David R. Lide. CRC Handbook of Chemistry and Physics, 95E. Boca Raton, FL: CRC press, 2014. .. [15] Horstmann, Sven, Anna Jabłoniec, Jörg Krafczyk, Kai Fischer, and Jürgen Gmehling. "PSRK Group Contribution Equation of State: Comprehensive Revision and Extension IV, Including Critical Constants and A-Function Parameters for 1000 Components." Fluid Phase Equilibria 227, no. 2 (January 25, 2005): 157-64. doi:10.1016/j.fluid.2004.11.002. .. [16] Yaws, Carl L. Thermophysical Properties of Chemicals and Hydrocarbons, Second Edition. Amsterdam Boston: Gulf Professional Publishing, 2014. .. [17] Shen, V.K., Siderius, D.W., Krekelberg, W.P., and Hatch, H.W., Eds., NIST WebBook, NIST, http://doi.org/10.18434/T4M88Q .. [18] Joback, K.G., and R.C. Reid. "Estimation of Pure-Component Properties from Group-Contributions." Chemical Engineering Communications 57, no. 1-6 (July 1, 1987): 233-43. doi:10.1080/00986448708960487. .. [19] Piña-Martinez, Andrés, Romain Privat, and Jean-Noël Jaubert. "Use of 300,000 Pseudo-Experimental Data over 1800 Pure Fluids to Assess the Performance of Four Cubic Equations of State: SRK, PR, Tc-RK, and Tc-PR." AIChE Journal n/a, no. n/a (n.d.): e17518. https://doi.org/10.1002/aic.17518. .. [20] Fedors, R. F. "A Method to Estimate Critical Volumes." AIChE Journal 25, no. 1 (1979): 202-202. https://doi.org/10.1002/aic.690250129. .. [21] Huber, Marcia L., Eric W. Lemmon, Ian H. Bell, and Mark O. McLinden. "The NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids." Industrial & Engineering Chemistry Research 61, no. 42 (October 26, 2022): 15449-72. https://doi.org/10.1021/acs.iecr.2c01427. ''' if dr.USE_CONSTANTS_DATABASE and method is None: val, found = database_constant_lookup(CASRN, 'Vc') if found: return val if not _critical_data_loaded: _load_critical_data() if method: return retrieve_from_df_dict(Vc_sources, CASRN, 'Vc', method) else: return retrieve_any_from_df_dict(Vc_sources, CASRN, 'Vc')
Zc_all_methods = (miscdata.HEOS, IUPAC, MATTHEWS, CRC, miscdata.WEBBOOK, PSRK, PINAMARTINES, YAWS, miscdata.JOBACK) """Tuple of method name keys. See the `Zc` for the actual references"""
[docs]@mark_numba_incompatible def Zc_methods(CASRN): """Return all methods available to obtain the critical compressibility for the desired chemical. Parameters ---------- CASRN : str CASRN, [-] Returns ------- methods : list[str] Methods which can be used to obtain Zc with the given inputs. See Also -------- Zc """ if not _critical_data_loaded: _load_critical_data() return list_available_methods_from_df_dict(Zc_sources, CASRN, 'Zc')
[docs]@mark_numba_incompatible def Zc(CASRN, method=None): r'''This function handles the retrieval of a chemical's critical compressibility. Lookup is based on CASRNs. Will automatically select a data source to use if no method is provided; returns None if the data is not available. Preferred sources are 'IUPAC' for organic chemicals, and 'MATTHEWS' for inorganic chemicals. Function has data for approximately 25000 chemicals. Examples -------- >>> Zc(CASRN='64-17-5') 0.247 Parameters ---------- CASRN : str CASRN [-] Returns ------- Zc : float Critical compressibility, [-] Other Parameters ---------------- method : string, optional The method name to use. Accepted methods are 'IUPAC', 'MATTHEWS', 'CRC', 'PSRK', 'YAWS', 'HEOS'. All valid values are also held in `Zc_all_methods`. Notes ----- The available sources are as follows: * 'IUPAC', a series of critically evaluated experimental datum for organic compounds in [1]_, [2]_, [3]_, [4]_, [5]_, [6]_, [7]_, [8]_, [9]_, [10]_, [11]_, and [12]_. * 'MATTHEWS', a series of critically evaluated data for inorganic compounds in [13]_. * 'CRC', a compillation of critically evaluated data by the TRC as published in [14]_. * 'PSRK', a compillation of experimental and estimated data published in [15]_. * 'YAWS', a large compillation of data from a variety of sources; no data points are sourced in the work of [16]_. * 'WEBBOOK', a NIST resource [17]_ containing mostly experimental and averaged values * 'JOBACK', an estimation method for organic substances in [18]_ * 'PINAMARTINES', a series of values in the supporting material of [19]_ * 'HEOS', a series of values from the NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids (and other high-precision fundamental equations of state) See Also -------- Zc_methods References ---------- .. [1] Ambrose, Douglas, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 1. An Introductory Survey." Journal of Chemical & Engineering Data 41, no. 1 (January 1, 1996): 154-154. doi:10.1021/je950378q. .. [2] Ambrose, Douglas, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 2. Normal Alkanes." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 531-46. doi:10.1021/je00019a001. .. [3] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 3. Aromatic Hydrocarbons." Journal of Chemical & Engineering Data 40, no. 3 (May 1, 1995): 547-58. doi:10.1021/je00019a002. .. [4] Gude, Michael, and Amyn S. Teja. "Vapor-Liquid Critical Properties of Elements and Compounds. 4. Aliphatic Alkanols." Journal of Chemical & Engineering Data 40, no. 5 (September 1, 1995): 1025-36. doi:10.1021/je00021a001. .. [5] Daubert, Thomas E. "Vapor-Liquid Critical Properties of Elements and Compounds. 5. Branched Alkanes and Cycloalkanes." Journal of Chemical & Engineering Data 41, no. 3 (January 1, 1996): 365-72. doi:10.1021/je9501548. .. [6] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 6. Unsaturated Aliphatic Hydrocarbons." Journal of Chemical & Engineering Data 41, no. 4 (January 1, 1996): 645-56. doi:10.1021/je9501999. .. [7] Kudchadker, Arvind P., Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 7. Oxygen Compounds Other Than Alkanols and Cycloalkanols." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 457-79. doi:10.1021/je0001680. .. [8] Tsonopoulos, Constantine, and Douglas Ambrose. "Vapor-Liquid Critical Properties of Elements and Compounds. 8. Organic Sulfur, Silicon, and Tin Compounds (C + H + S, Si, and Sn)." Journal of Chemical & Engineering Data 46, no. 3 (May 1, 2001): 480-85. doi:10.1021/je000210r. .. [9] Marsh, Kenneth N., Colin L. Young, David W. Morton, Douglas Ambrose, and Constantine Tsonopoulos. "Vapor-Liquid Critical Properties of Elements and Compounds. 9. Organic Compounds Containing Nitrogen." Journal of Chemical & Engineering Data 51, no. 2 (March 1, 2006): 305-14. doi:10.1021/je050221q. .. [10] Marsh, Kenneth N., Alan Abramson, Douglas Ambrose, David W. Morton, Eugene Nikitin, Constantine Tsonopoulos, and Colin L. Young. "Vapor-Liquid Critical Properties of Elements and Compounds. 10. Organic Compounds Containing Halogens." Journal of Chemical & Engineering Data 52, no. 5 (September 1, 2007): 1509-38. doi:10.1021/je700336g. .. [11] Ambrose, Douglas, Constantine Tsonopoulos, and Eugene D. Nikitin. "Vapor-Liquid Critical Properties of Elements and Compounds. 11. Organic Compounds Containing B + O; Halogens + N, + O, + O + S, + S, + Si; N + O; and O + S, + Si." Journal of Chemical & Engineering Data 54, no. 3 (March 12, 2009): 669-89. doi:10.1021/je800580z. .. [12] Ambrose, Douglas, Constantine Tsonopoulos, Eugene D. Nikitin, David W. Morton, and Kenneth N. Marsh. "Vapor-Liquid Critical Properties of Elements and Compounds. 12. Review of Recent Data for Hydrocarbons and Non-Hydrocarbons." Journal of Chemical & Engineering Data, October 5, 2015, 151005081500002. doi:10.1021/acs.jced.5b00571. .. [13] Mathews, Joseph F. "Critical Constants of Inorganic Substances." Chemical Reviews 72, no. 1 (February 1, 1972): 71-100. doi:10.1021/cr60275a004. .. [14] Haynes, W.M., Thomas J. Bruno, and David R. Lide. CRC Handbook of Chemistry and Physics, 95E. Boca Raton, FL: CRC press, 2014. .. [15] Horstmann, Sven, Anna Jabłoniec, Jörg Krafczyk, Kai Fischer, and Jürgen Gmehling. "PSRK Group Contribution Equation of State: Comprehensive Revision and Extension IV, Including Critical Constants and A-Function Parameters for 1000 Components." Fluid Phase Equilibria 227, no. 2 (January 25, 2005): 157-64. doi:10.1016/j.fluid.2004.11.002. .. [16] Yaws, Carl L. Thermophysical Properties of Chemicals and Hydrocarbons, Second Edition. Amsterdam Boston: Gulf Professional Publishing, 2014. .. [17] Shen, V.K., Siderius, D.W., Krekelberg, W.P., and Hatch, H.W., Eds., NIST WebBook, NIST, http://doi.org/10.18434/T4M88Q .. [18] Joback, K.G., and R.C. Reid. "Estimation of Pure-Component Properties from Group-Contributions." Chemical Engineering Communications 57, no. 1-6 (July 1, 1987): 233-43. doi:10.1080/00986448708960487. .. [19] Piña-Martinez, Andrés, Romain Privat, and Jean-Noël Jaubert. "Use of 300,000 Pseudo-Experimental Data over 1800 Pure Fluids to Assess the Performance of Four Cubic Equations of State: SRK, PR, Tc-RK, and Tc-PR." AIChE Journal n/a, no. n/a (n.d.): e17518. https://doi.org/10.1002/aic.17518. .. [20] Huber, Marcia L., Eric W. Lemmon, Ian H. Bell, and Mark O. McLinden. "The NIST REFPROP Database for Highly Accurate Properties of Industrially Important Fluids." Industrial & Engineering Chemistry Research 61, no. 42 (October 26, 2022): 15449-72. https://doi.org/10.1021/acs.iecr.2c01427. ''' if dr.USE_CONSTANTS_DATABASE and method is None: val, found = database_constant_lookup(CASRN, 'Zc') if found: return val if not _critical_data_loaded: _load_critical_data() if method: return retrieve_from_df_dict(Zc_sources, CASRN, 'Zc', method) else: return retrieve_any_from_df_dict(Zc_sources, CASRN, 'Zc')
rcovs_Mersmann_Kind = {'C': 0.77, 'Cl': 0.99, 'I': 1.33, 'H': 0.37, 'F': 0.71, 'S': 1.04, 'O': 0.6, 'N': 0.71, 'Si': 1.17, 'Br': 1.14} rcovs_regressed = { 'Nb': 0.5139380605234125, 'Ne': 0.7708216694154189, 'Al': 1.004994775098707, 'Re': 1.1164444694484814, 'Rb': 2.9910506044828837, 'Rn': 1.9283158156480653, 'Xe': 1.694221043013319, 'Ta': 1.1185133195453156, 'Bi': 1.8436438207262267, 'Br': 1.3081458724155532, 'Hf': 0.8829545460486594, 'Mo': 0.740396259301556, 'He': 0.9808144122544257, 'C': 0.6068586007600608, 'B': 0.7039677272439753, 'F': 0.5409105884533288, 'I': 1.7262432419406561, 'H': 0.33296601702348533, 'K': 0.7384112258842432, 'O': 0.5883254088243008, 'N': 0.5467979701131293, 'P': 1.0444655158949694, 'Si': 1.4181434041348049, 'U': 1.5530287578073485, 'Sn': 1.3339487990207999, 'W': 0.8355335838735266, 'V': 0.6714619384794069, 'Sb': 0.8840680681215854, 'Se': 1.5747549515496795, 'Ge': 1.0730584829731715, 'Kr': 1.393999829252709, 'Cl': 1.0957835025011224, 'S': 1.0364452121761167, 'Hg': 0.6750818243474633, 'As': 0.6750687692915264, 'Ar': 1.2008872952022298, 'Cs': 3.433699060142929, 'Zr': 0.9346554283483623}
[docs]@mark_numba_incompatible def Mersmann_Kind_predictor(atoms, coeff=3.645, power=0.5, covalent_radii=rcovs_Mersmann_Kind): r'''Predicts the critical molar volume of a chemical based only on its atomic composition according to [1]_ and [2]_. This is a crude approach, but provides very reasonable estimates in practice. Optionally, the `coeff` used and the `power` in the fraction as well as the atomic contributions can be adjusted; this method is general and atomic contributions can be regressed to predict other properties with this routine. .. math:: \frac{\left(\frac{V_c}{n_a N_A}\right)^{1/3}}{d_a} = \frac{3.645}{\left(\frac{r_a}{r_H}\right)^{1/2}} r_a = d_a/2 d_a = 2 \frac{\sum_i (n_i r_i)}{n_a} In the above equations, :math:`n_i` is the number of atoms of species i in the molecule, :math:`r_i` is the covalent atomic radius of the atom, and :math:`n_a` is the total number of atoms in the molecule. Parameters ---------- atoms : dict Dictionary of atoms and their counts, [-] coeff : float, optional Coefficient used in the relationship, [m^2] power : float, optional Power applied to the relative atomic radius, [-] covalent_radii : dict or indexable, optional Object which can be indexed to atomic contrinbutions (by symbol), [-] Returns ------- Vc : float Predicted critical volume of the chemical, [m^3/mol] Notes ----- Using the :obj:`chemicals.elements.periodic_table` covalent radii (from RDKit), the coefficient and power should be 4.261206523632586 and 0.5597281770786228 respectively for best results. Examples -------- Prediction of critical volume of decane: >>> Mersmann_Kind_predictor({'C': 10, 'H': 22}) 0.0005851858957767497 This is compared against the experimental value, 0.000624 (a 6.2% relative error) Using custom fitted coefficients we can do a bit better: >>> from chemicals.critical import rcovs_regressed >>> Mersmann_Kind_predictor({'C': 10, 'H': 22}, coeff=4.261206523632586, ... power=0.5597281770786228, covalent_radii=rcovs_regressed) 0.0005956870915974391 The relative error is only 4.5% now. This is compared to an experimental uncertainty of 5.6%. Evaluating 1321 critical volumes in the database, the average relative error is 5.0%; standard deviation 6.8%; and worst value of 79% relative error for phosphorus. References ---------- .. [1] Mersmann, Alfons, and Matthias Kind. "Correlation for the Prediction of Critical Molar Volume." Industrial & Engineering Chemistry Research, October 16, 2017. https://doi.org/10.1021/acs.iecr.7b03171. .. [2] Mersmann, Alfons, and Matthias Kind. "Prediction of Mechanical and Thermal Properties of Pure Liquids, of Critical Data, and of Vapor Pressure." Industrial & Engineering Chemistry Research, January 31, 2017. https://doi.org/10.1021/acs.iecr.6b04323. ''' H_RADIUS_COV = covalent_radii['H'] tot = 0 atom_count = 0 for atom, count in atoms.items(): if atom not in covalent_radii: raise Exception('Atom %s is not supported by the supplied dictionary' %atom) tot += count*covalent_radii[atom] atom_count += count da = 2.*tot/atom_count ra = da/2. da_SI = da*1e-10 # Convert from angstrom to m return ((coeff/(ra/H_RADIUS_COV)**power)*da_SI)**3*N_A*atom_count
### Property Relationships
[docs]def Tb_Tc_relationship(Tb=None, Tc=None, fit='Perry8E'): r'''This function relates the normal boiling point and the critical point of a compound. It is inspired by the relationship shown in [1]_ on page 2-468 for inorganic compounds. .. math:: T_c = 1.64 T_b Parameters ---------- Tb : float, optional Normal boiling temperature of fluid [K] Tc : float, optional Critical temperature of fluid [K] fit : str, optional One of 'Perry8E', 'Chemicals2021FitInorganic', 'Chemicals2021FitElements', 'Chemicals2021FitBinary', 'Chemicals2021FitTernary', Chemicals2021FitOrganic', 'Chemicals2021FitBr', 'Chemicals2021FitC', 'Chemicals2021FitCl', 'Chemicals2021FitF', 'Chemicals2021FitI', 'Chemicals2021FitN', 'Chemicals2021FitO', ' 'Chemicals2021FitSi'. Returns ------- Tc or Tb : float The temperature variable not provided [K] Notes ----- `Chemicals2021FitBinary` applies for inorganic compounds with two types of atoms; `Chemicals2021FitTernary` for three; and the various models `Chemicals2021FitO`, `Chemicals2021FitC`, etc apply for inorganic compounds with those elements in them. The quality of this relationship is low, but if no further information is available it can be used to obtain an approximate value. Examples -------- Tetrabromosilane has a known boiling point of 427.15 K and a critical temperature of 663.0 K. >>> Tb_Tc_relationship(Tb=427.15, fit='Perry8E') 700.526 >>> Tb_Tc_relationship(Tb=427.15, fit='Chemicals2021FitBr') 668.0626 >>> Tb_Tc_relationship(Tb=427.15, fit='Chemicals2021FitSi') 651.8309 >>> Tb_Tc_relationship(Tb=427.15, fit='Chemicals2021FitBinary') 669.7712 >>> Tb_Tc_relationship(Tb=427.15, fit='Chemicals2021FitInorganic') 686.0029 The performance of the fits is fairly representative. However, because this method should only be used on compounds that don't have experimental critical points measured, many of the worst outlier chemicals have already been measured and the performance may be better than expected. It is recommended to use the methods `Chemicals2021FitElements`, `Chemicals2021FitBinary`, and `Chemicals2021FitTernary`. References ---------- .. [1] Green, Don, and Robert Perry. Perry's Chemical Engineers' Handbook, Eighth Edition. McGraw-Hill Professional, 2007. ''' if Tb is None and Tc is None or (Tc is not None and Tb is not None): raise ValueError("This function relates boiling and critical temperature; only one value must be provided") if fit == 'Perry8E': coeff = 1.64 elif fit == 'Chemicals2021FitInorganic': coeff = 1.606 elif fit == 'Chemicals2021FitOrganic': coeff = 1.453 elif fit == 'Chemicals2021FitElements': coeff = 1.748 elif fit == 'Chemicals2021FitBinary': coeff = 1.568 elif fit == 'Chemicals2021FitTernary': coeff = 1.601 elif fit == 'Chemicals2021FitCl': coeff = 1.558 elif fit == 'Chemicals2021FitN': coeff = 1.616 elif fit == 'Chemicals2021FitC': coeff = 1.611 elif fit == 'Chemicals2021FitF': coeff = 1.573 elif fit == 'Chemicals2021FitO': coeff = 1.613 elif fit == 'Chemicals2021FitI': coeff = 1.452 elif fit == 'Chemicals2021FitBr': coeff = 1.564 elif fit == 'Chemicals2021FitSi': coeff = 1.526 else: raise ValueError("Unrecognized method") if Tb is None: return Tc/coeff elif Tc is None: return coeff*Tb
def _assert_two_critical_properties_provided(Tc, Pc, Vc): specs = 0 # numba compatibility if Tc is not None: specs += 1 if Pc is not None: specs += 1 if Vc is not None: specs += 1 if specs != 2: raise ValueError('Two and only two of Tc, Pc, and Vc must be provided')
[docs]def Ihmels(Tc=None, Pc=None, Vc=None): r'''Most recent, and most recommended method of estimating critical properties from each other. Two of the three properties are required. This model uses the "critical surface", a general plot of Tc vs Pc vs Vc. The model used 421 organic compounds to derive equation. The general equation is in [1]_: .. math:: P_c = -0.025 + 2.215 \frac{T_c}{V_c} Parameters ---------- Tc : float Critical temperature of fluid (optional) [K] Pc : float Critical pressure of fluid (optional) [Pa] Vc : float Critical volume of fluid (optional) [m^3/mol] Returns ------- Tc, Pc or Vc : float Critical property of fluid [K], [Pa], or [m^3/mol] Notes ----- The prediction of Tc from Pc and Vc is not tested, as this is not necessary anywhere, but it is implemented. Internal units are MPa, cm^3/mol, and K. A slight error occurs when Pa, cm^3/mol and K are used instead, on the order of <0.2%. Their equation was also compared with 56 inorganic and elements. Devations of 20% for <200K or >1000K points. Examples -------- Succinic acid [110-15-6] >>> Ihmels(Tc=851.0, Vc=0.000308) 6095016.233766234 References ---------- .. [1] Ihmels, E. Christian. "The Critical Surface." Journal of Chemical & Engineering Data 55, no. 9 (September 9, 2010): 3474-80. doi:10.1021/je100167w. ''' _assert_two_critical_properties_provided(Tc, Pc, Vc) if Tc is not None and Vc is not None: Vc = Vc*1E6 # m^3/mol to cm^3/mol Pc_calc = -0.025+2.215*Tc/Vc Pc_calc = Pc_calc*1E6 # MPa to Pa return Pc_calc elif Tc is not None and Pc is not None: Pc = Pc*1e-6 # Pa to MPa Vc_calc = 443.0*Tc/(200.0*Pc+5.0) Vc_calc = Vc_calc/1E6 # cm^3/mol to m^3/mol return Vc_calc else: # Pc and Vc Pc = Pc*1e-6 # Pa to MPa Vc = Vc*1E6 # m^3/mol to cm^3/mol Tc_calc = 5.0/443.0*(40.0*Pc*Vc + Vc) return Tc_calc
[docs]def Meissner(Tc=None, Pc=None, Vc=None): r'''Old (1942) relationship for estimating critical properties from each other. Two of the three properties are required. This model uses the "critical surface", a general plot of Tc vs Pc vs Vc. The model used 42 organic and inorganic compounds to derive the equation. The general equation is in [1]_: .. math:: P_c = \frac{2.08 T_c}{V_c-8} Parameters ---------- Tc : float, optional Critical temperature of fluid [K] Pc : float, optional Critical pressure of fluid [Pa] Vc : float, optional Critical volume of fluid [m^3/mol] Returns ------- Tc, Pc or Vc : float Critical property of fluid [K], [Pa], or [m^3/mol] Notes ----- The prediction of Tc from Pc and Vc is not tested, as this is not necessary anywhere, but it is implemented. Internal units are atm, cm^3/mol, and K. A slight error occurs when Pa, cm^3/mol and K are used instead, on the order of <0.2%. This equation is less accurate than that of Ihmels, but surprisingly close. The author also proposed means of estimated properties independently. Examples -------- Succinic acid [110-15-6] >>> Meissner(Tc=851.0, Vc=0.000308) 5978445.199999999 References ---------- .. [1] Meissner, H. P., and E. M. Redding. "Prediction of Critical Constants." Industrial & Engineering Chemistry 34, no. 5 (May 1, 1942): 521-26. doi:10.1021/ie50389a003. ''' _assert_two_critical_properties_provided(Tc, Pc, Vc) if Tc and Vc: Vc = Vc*1E6 Pc = 20.8*Tc/(Vc-8) Pc = 101325*Pc # atm to Pa return Pc elif Tc and Pc: Pc = Pc/101325. # Pa to atm Vc = 104/5.0*Tc/Pc+8 Vc = Vc/1E6 # cm^3/mol to m^3/mol return Vc else: # Pc and Vc Pc = Pc/101325. # Pa to atm Vc = Vc*1E6 # m^3/mol to cm^3/mol Tc = 5./104.0*Pc*(Vc-8) return Tc
[docs]def Grigoras(Tc=None, Pc=None, Vc=None): r'''Relatively recent (1990) relationship for estimating critical properties from each other. Two of the three properties are required. This model uses the "critical surface", a general plot of Tc vs Pc vs Vc. The model used 137 organic and inorganic compounds to derive the equation. The general equation is in [1]_: .. math:: P_c = 2.9 + 20.2 \frac{T_c}{V_c} Parameters ---------- Tc : float, optional Critical temperature of fluid [K] Pc : float, optional Critical pressure of fluid [Pa] Vc : float, optional Critical volume of fluid [m^3/mol] Returns ------- Tc, Pc or Vc : float Critical property of fluid [K], [Pa], or [m^3/mol] Notes ----- The prediction of Tc from Pc and Vc is not tested, as this is not necessary anywhere, but it is implemented. Internal units are bar, cm^3/mol, and K. A slight error occurs when Pa, cm^3/mol and K are used instead, on the order of <0.2%. This equation is less accurate than that of Ihmels, but surprisingly close. The author also investigated an early QSPR model. Examples -------- Succinic acid [110-15-6] >>> Grigoras(Tc=851.0, Vc=0.000308) 5871233.766233766 References ---------- .. [1] Grigoras, Stelian. "A Structural Approach to Calculate Physical Properties of Pure Organic Substances: The Critical Temperature, Critical Volume and Related Properties." Journal of Computational Chemistry 11, no. 4 (May 1, 1990): 493-510. doi:10.1002/jcc.540110408 ''' _assert_two_critical_properties_provided(Tc, Pc, Vc) if Tc and Vc: Vc = Vc*1E6 # m^3/mol to cm^3/mol Pc = 2.9 + 20.2*Tc/Vc Pc = Pc*1E5 # bar to Pa return Pc elif Tc and Pc: Pc = Pc/1E5 # Pa to bar Vc = 202.0*Tc/(10*Pc-29.0) Vc = Vc/1E6 # cm^3/mol to m^3/mol return Vc else: # Pc and Vc Pc = Pc/1E5 # Pa to bar Vc = Vc*1E6 # m^3/mol to cm^3/mol Tc = 1.0/202*(10*Pc-29.0)*Vc return Tc
[docs]def Hekayati_Raeissi(MW, V_sat=None, Tc=None, Pc=None, Vc=None): r'''Estimation model for missing critical constants of a fluid according to [1]_. Based on the molecular weight and saturation molar volume of a fluid, and requires one of `Tc` or `Pc`. Optionally, `Vc` can be provided to increase the accuracy of the prediction of `Tc` or `Pc` a little. Parameters ---------- MW : float Molecular weight of fluid, [g/mol] V_sat : float, optional Molar volume of liquid at the saturation pressure of the fluid at 298.15 K. Used if `Vc` is not provided. [m^3/mol] Tc : float, optional Critical temperature of fluid (optional) [K] Pc : float, optional Critical pressure of fluid (optional) [Pa] Vc : float, optional Critical volume of fluid (optional) [m^3/mol] Returns ------- Tc : float Critical temperature of fluid [K] Pc : float Critical pressure of fluid [Pa] Vc : float Critical volume of fluid [m^3/mol] Notes ----- Internal units are kPa, m^3/kmol, and K. Examples -------- Toluene >>> Hekayati_Raeissi(MW=92.13842, V_sat=0.00010686, Pc=4108000.0) (599.7965819136947, 4108000.0, 0.000314909150453723) References ---------- .. [1] Hekayati, Javad, and Sona Raeissi. "Estimation of the Critical Properties of Compounds Using Volume-Based Thermodynamics." AIChE Journal n/a, no. n/a (n.d.): e17004. https://doi.org/10.1002/aic.17004. ''' if Tc is None and Pc is None: raise ValueError("One of `Tc` or `Pc` are required.") if Pc is not None: Pc *= 1e-3 # Pa to kPa if Vc is not None: Vc *= 1e3 # m^3/mol to m^3/kmol if V_sat is not None: V_sat *= 1e3 Tc_calc = Pc_calc = 0.0 Vc_estimated = False if Vc is None: if V_sat is None: raise ValueError("V_sat is required when Vc is not provided") Vc_estimated = True # Direct estimation of Vc from V and MW # 3.2 Equations 30-33 a3 = -2.636518E+00 b3 = 1.048744E-02 c3 = 1.222756E+00 d3 = 6.924349E-09 e3 = -1.102846E-05 f3 = 1.871249E-03 chi1 = a3 chi2 = b3*MW + c3 chi3 = MW*(MW*(d3*MW + e3) + f3) Vc = V_sat*(chi1*V_sat*V_sat + chi2) + chi3 if Vc_estimated: # equqtions 21-24; slightly less accurate than Equations 25-28 a1 = -1.434646E+02 b1 = 1.781802E-01 c1 = 4.196576E+01 d1 = -3.443955E-05 e1 = 9.812262E-03 f1 = 1.106396E-01 psi1 = a1 psi2 = b1*MW + c1 psi3 = d1*MW*MW + e1*MW + f1 fact = V_sat*V_sat*(psi1*V_sat + psi2) + psi3 if Pc is None: if Tc is not None: Pc_calc = R*Tc/fact elif Tc is None: if Pc is not None: Tc_calc = fact*Pc/R else: # Equations 25-28 a2 = -1.822904E-3 b2 = 1.947108E-5 c2 = 3.794091E0 d2 = -2.472981E-8 xi1 = a2*MW xi2 = b2*MW*MW + c2 xi3 = d2*MW*MW*MW fact = xi1*Vc*Vc + xi2*Vc + xi3 if Tc is None: Tc_calc = fact*Pc/R elif Pc is None: Pc_calc = R*Tc/fact Tc_ans = Tc if Tc is not None else Tc_calc Pc_ans = Pc if Pc is not None else Pc_calc Pc_ans *= 1e3 Vc *= 1e-3 return (Tc_ans, Pc_ans, Vc)
IHMELS = 'IHMELS' MEISSNER = 'MEISSNER' GRIGORAS = 'GRIGORAS' critical_surface_all_methods = (IHMELS, MEISSNER, GRIGORAS)
[docs]@mark_numba_incompatible def critical_surface_methods(Tc=None, Pc=None, Vc=None): """Return all methods available to obtain the third critial property for the desired chemical. Parameters ---------- Tc : float Critical temperature of fluid (optional) [K]. Pc : float Critical pressure of fluid (optional) [Pa]. Vc : float Critical volume of fluid (optional) [m^3/mol]. Returns ------- methods : list[str] Methods which can be used to obtain the third critical property with the given inputs. See Also -------- critical_surface """ if ((Tc is not None and Pc is not None) or (Tc is not None and Vc is not None) or (Pc is not None and Vc is not None)): return list(critical_surface_all_methods) else: return []
[docs]@mark_numba_incompatible def critical_surface(Tc=None, Pc=None, Vc=None, method=None): r'''Function for calculating a critical property of a substance from its other two critical properties. Calls functions Ihmels, Meissner, and Grigoras, each of which use a general 'Critical surface' type of equation. Limited accuracy is expected due to very limited theoretical backing. Parameters ---------- Tc : float Critical temperature of fluid (optional) [K]. Pc : float Critical pressure of fluid (optional) [Pa]. Vc : float Critical volume of fluid (optional) [m^3/mol]. method : string Request calculation uses the requested method. Returns ------- Tc, Pc or Vc : float Critical property of fluid [K], [Pa], or [m^3/mol]. Examples -------- Decamethyltetrasiloxane [141-62-8] >>> critical_surface(Tc=599.4, Pc=1.19E6, method='IHMELS') 0.0010927333333333334 See Also -------- critical_surface_methods_methods ''' # Numba compatibility should come eventually with no work done here if not method or method == IHMELS: return Ihmels(Tc=Tc, Pc=Pc, Vc=Vc) elif method == MEISSNER: return Meissner(Tc=Tc, Pc=Pc, Vc=Vc) elif method == GRIGORAS: return Grigoras(Tc=Tc, Pc=Pc, Vc=Vc) else: raise ValueError('Method not recognized; available methods are "IHMELS", "MEISSNER", and "GRIGORAS"')
[docs]@mark_numba_incompatible def third_property(CASRN=None, T=False, P=False, V=False): r'''Function for calculating a critical property of a substance from its other two critical properties, but retrieving the actual other critical values for convenient calculation. Calls functions Ihmels, Meissner, and Grigoras, each of which use a general 'Critical surface' type of equation. Limited accuracy is expected due to very limited theoretical backing. Parameters ---------- CASRN : str The CAS number of the desired chemical T : bool Estimate critical temperature P : bool Estimate critical pressure V : bool Estimate critical volume Returns ------- Tc, Pc or Vc : float Critical property of fluid [K], [Pa], or [m^3/mol] Examples -------- Decamethyltetrasiloxane [141-62-8] >>> third_property('141-62-8', V=True) 0.001135732 Succinic acid [110-15-6] >>> third_property('110-15-6', P=True) 6095016.233766234 ''' specs = 0 if T: specs += 1 if P: specs += 1 if V: specs += 1 if specs != 1: raise ValueError("Only one of the following arguments can be True: T, P, V") if V: Tc_value = Tc(CASRN) Pc_value = Pc(CASRN) if Tc_value is not None and Pc_value is not None: return critical_surface(Tc=Tc_value, Pc=Pc_value) elif P: Tc_value = Tc(CASRN) Vc_value = Vc(CASRN) if Tc_value is not None and Vc_value is not None: return critical_surface(Tc=Tc_value, Vc=Vc_value) else: Pc_value = Pc(CASRN) Vc_value = Vc(CASRN) if Pc_value is not None and Vc_value is not None: return critical_surface(Pc=Pc_value, Vc=Vc_value) # Fallthrough to this clause when one or both of the looked up properties fail raise ValueError("Could not find the required two properties")
### Crtical Temperature of Mixtures - Estimation routines
[docs]def Li(zs, Tcs, Vcs): r'''Calculates critical temperature of a mixture according to mixing rules in [1]_. Better than simple mixing rules. .. math:: T_{cm} = \sum_{i=1}^n \Phi_i T_{ci}\\ \Phi = \frac{x_i V_{ci}}{\sum_{j=1}^n x_j V_{cj}} Parameters ---------- zs : array-like Mole fractions of all components Tcs : array-like Critical temperatures of all components, [K] Vcs : array-like Critical volumes of all components, [m^3/mol] Returns ------- Tcm : float Critical temperatures of the mixture, [K] Notes ----- Reviewed in many papers on critical mixture temperature. Second example is from Najafi (2015), for ethylene, Benzene, ethylbenzene. This is similar to but not identical to the result from the article. The experimental point is 486.9 K. 2rd example is from Najafi (2015), for: butane/pentane/hexane 0.6449/0.2359/0.1192 mixture, exp: 450.22 K. Its result is identical to that calculated in the article. Examples -------- Nitrogen-Argon 50/50 mixture >>> Li([0.5, 0.5], [126.2, 150.8], [8.95e-05, 7.49e-05]) 137.40766423357667 butane/pentane/hexane 0.6449/0.2359/0.1192 mixture, exp: 450.22 K. >>> Li([0.6449, 0.2359, 0.1192], [425.12, 469.7, 507.6], ... [0.000255, 0.000313, 0.000371]) 449.68261498555444 References ---------- .. [1] Li, C. C. "Critical Temperature Estimation for Simple Mixtures." The Canadian Journal of Chemical Engineering 49, no. 5 (October 1, 1971): 709-10. doi:10.1002/cjce.5450490529. ''' N = len(zs) denominator_inv = 0.0 for i in range(N): denominator_inv += zs[i]*Vcs[i] denominator_inv = 1.0/denominator_inv Tcm = 0.0 for i in range(N): Tcm += zs[i]*Vcs[i]*Tcs[i]*denominator_inv return Tcm
[docs]def Chueh_Prausnitz_Tc(zs, Tcs, Vcs, taus): r'''Calculates critical temperature of a mixture according to mixing rules in [1]_. .. math:: T_{cm} = \sum_i^n \theta_i Tc_i + \sum_i^n\sum_j^n(\theta_i \theta_j \tau_{ij})T_{ref} \theta = \frac{x_i V_{ci}^{2/3}}{\sum_{j=1}^n x_j V_{cj}^{2/3}} For a binary mxiture, this simplifies to: .. math:: T_{cm} = \theta_1T_{c1} + \theta_2T_{c2} + 2\theta_1\theta_2\tau_{12} Parameters ---------- zs : array-like Mole fractions of all components Tcs : array-like Critical temperatures of all components, [K] Vcs : array-like Critical volumes of all components, [m^3/mol] taus : array-like of shape `zs` by `zs` Interaction parameters, [-] Returns ------- Tcm : float Critical temperatures of the mixture, [K] Notes ----- All parameters, even if zero, must be given to this function. Examples -------- butane/pentane/hexane 0.6449/0.2359/0.1192 mixture, exp: 450.22 K. >>> Chueh_Prausnitz_Tc([0.6449, 0.2359, 0.1192], [425.12, 469.7, 507.6], ... [0.000255, 0.000313, 0.000371], [[0, 1.92681, 6.80358], ... [1.92681, 0, 1.89312], [ 6.80358, 1.89312, 0]]) 450.122576472349 References ---------- .. [1] Chueh, P. L., and J. M. Prausnitz. "Vapor-Liquid Equilibria at High Pressures: Calculation of Critical Temperatures, Volumes, and Pressures of Nonpolar Mixtures." AIChE Journal 13, no. 6 (November 1, 1967): 1107-13. doi:10.1002/aic.690130613. .. [2] Najafi, Hamidreza, Babak Maghbooli, and Mohammad Amin Sobati. "Prediction of True Critical Temperature of Multi-Component Mixtures: Extending Fast Estimation Methods." Fluid Phase Equilibria 392 (April 25, 2015): 104-26. doi:10.1016/j.fluid.2015.02.001. ''' N = len(zs) denominator_inv = 0.0 zi_Vc_23s = [0.0]*N for i in range(N): v = zs[i]*Vcs[i]**(2.0/3.) zi_Vc_23s[i] = v denominator_inv += v denominator_inv = 1.0/denominator_inv Tcm = 0.0 for i in range(N): Tcm += zi_Vc_23s[i]*Tcs[i] for j in range(N): Tcm += zi_Vc_23s[i]*(zi_Vc_23s[j]*denominator_inv)*taus[i][j] Tcm *= denominator_inv return Tcm
[docs]def Grieves_Thodos(zs, Tcs, Aijs): r'''Calculates critical temperature of a mixture according to mixing rules in [1]_. .. math:: T_{cm} = \sum_{i} \frac{T_{ci}}{1 + (1/x_i)\sum_j A_{ij} x_j} For a binary mxiture, this simplifies to: .. math:: T_{cm} = \frac{T_{c1}}{1 + (x_2/x_1)A_{12}} + \frac{T_{c2}} {1 + (x_1/x_2)A_{21}} Parameters ---------- zs : array-like Mole fractions of all components Tcs : array-like Critical temperatures of all components, [K] Aijs : array-like of shape `zs` by `zs` Interaction parameters Returns ------- Tcm : float Critical temperatures of the mixture, [K] Notes ----- All parameters, even if zero, must be given to this function. Giving 0s gives really bad results however. Examples -------- butane/pentane/hexane 0.6449/0.2359/0.1192 mixture, exp: 450.22 K. >>> Grieves_Thodos([0.6449, 0.2359, 0.1192], [425.12, 469.7, 507.6], [[0, 1.2503, 1.516], [0.799807, 0, 1.23843], [0.659633, 0.807474, 0]]) 450.1839618758971 References ---------- .. [1] Grieves, Robert B., and George Thodos. "The Critical Temperatures of Multicomponent Hydrocarbon Systems." AIChE Journal 8, no. 4 (September 1, 1962): 550-53. doi:10.1002/aic.690080426. .. [2] Najafi, Hamidreza, Babak Maghbooli, and Mohammad Amin Sobati. "Prediction of True Critical Temperature of Multi-Component Mixtures: Extending Fast Estimation Methods." Fluid Phase Equilibria 392 (April 25, 2015): 104-26. doi:10.1016/j.fluid.2015.02.001. ''' N = len(zs) Tcm = 0.0 for i in range(N): tot = 0.0 row = Aijs[i] for j in range(N): tot += row[j]*zs[j] Tcm += Tcs[i]/(1. + 1./zs[i]*tot) return Tcm
[docs]def modified_Wilson_Tc(zs, Tcs, Aijs): r'''Calculates critical temperature of a mixture according to mixing rules in [1]_. Equation .. math:: T_{cm} = \sum_i x_i T_{ci} + C\sum_i x_i \ln \left(x_i + \sum_j x_j A_{ij}\right)T_{ref} For a binary mxiture, this simplifies to: .. math:: T_{cm} = x_1 T_{c1} + x_2 T_{c2} + C[x_1 \ln(x_1 + x_2A_{12}) + x_2\ln(x_2 + x_1 A_{21})] Parameters ---------- zs : float Mole fractions of all components Tcs : float Critical temperatures of all components, [K] Aijs : matrix Interaction parameters Returns ------- Tcm : float Critical temperatures of the mixture, [K] Notes ----- The equation and original article has been reviewed. [1]_ has 75 binary systems, and additional multicomponent mixture parameters. All parameters, even if zero, must be given to this function. 2rd example is from [2]_, for: butane/pentane/hexane 0.6449/0.2359/0.1192 mixture, exp: 450.22 K. Its result is identical to that calculated in the article. Examples -------- >>> modified_Wilson_Tc([0.6449, 0.2359, 0.1192], [425.12, 469.7, 507.6], ... [[0, 1.174450, 1.274390], [0.835914, 0, 1.21038], ... [0.746878, 0.80677, 0]]) 450.03059668230316 References ---------- .. [1] Teja, Amyn S., Kul B. Garg, and Richard L. Smith. "A Method for the Calculation of Gas-Liquid Critical Temperatures and Pressures of Multicomponent Mixtures." Industrial & Engineering Chemistry Process Design and Development 22, no. 4 (1983): 672-76. .. [2] Najafi, Hamidreza, Babak Maghbooli, and Mohammad Amin Sobati. "Prediction of True Critical Temperature of Multi-Component Mixtures: Extending Fast Estimation Methods." Fluid Phase Equilibria 392 (April 25, 2015): 104-26. doi:10.1016/j.fluid.2015.02.001. ''' N = len(zs) Tcm = 0.0 for i in range(N): Tcm += zs[i]*Tcs[i] Tcm_add = 0.0 for i in range(N): tot = 0.0 row = Aijs[i] for j in range(N): tot += zs[j]*row[j] Tcm_add += zs[i]*log(zs[i] + tot) Tcm += -2500.0*Tcm_add return Tcm
### Crtical Volume of Mixtures
[docs]def Chueh_Prausnitz_Vc(zs, Vcs, nus): r'''Calculates critical volume of a mixture according to mixing rules in [1]_ with an interaction parameter. .. math:: V_{cm} = \sum_i^n \theta_i V_{ci} + \sum_i^n\sum_j^n(\theta_i \theta_j \nu_{ij})V_{ref} \theta = \frac{x_i V_{ci}^{2/3}}{\sum_{j=1}^n x_j V_{cj}^{2/3}} Parameters ---------- zs : float Mole fractions of all components Vcs : float Critical volumes of all components, [m^3/mol] nus : matrix Interaction parameters, [cm^3/mol] Returns ------- Vcm : float Critical volume of the mixture, [m^3/mol] Notes ----- All parameters, even if zero, must be given to this function. nu parameters are in cm^3/mol, but are converted to m^3/mol inside the function Examples -------- 1-butanol/benzene 0.4271/0.5729 mixture, Vcm = 268.096 mL/mol. >>> Chueh_Prausnitz_Vc([0.4271, 0.5729], [0.000273, 0.000256], [[0, 5.61847], [5.61847, 0]]) 0.00026620503424517445 References ---------- .. [1] Chueh, P. L., and J. M. Prausnitz. "Vapor-Liquid Equilibria at High Pressures: Calculation of Critical Temperatures, Volumes, and Pressures of Nonpolar Mixtures." AIChE Journal 13, no. 6 (November 1, 1967): 1107-13. doi:10.1002/aic.690130613. .. [2] Najafi, Hamidreza, Babak Maghbooli, and Mohammad Amin Sobati. "Prediction of True Critical Volume of Multi-Component Mixtures: Extending Fast Estimation Methods." Fluid Phase Equilibria 386 (January 25, 2015): 13-29. doi:10.1016/j.fluid.2014.11.008. ''' N = len(zs) denominator_inv = 0.0 zi_Vc_23s = [0.0]*N for i in range(N): v = zs[i]*Vcs[i]**(2.0/3.) zi_Vc_23s[i] = v denominator_inv += v denominator_inv = 1.0/denominator_inv Vcm = 0.0 for i in range(N): Vcm += zi_Vc_23s[i]*Vcs[i] Vcm_tot = 0.0 for j in range(N): Vcm_tot += zi_Vc_23s[i]*zi_Vc_23s[j]*nus[i][j] Vcm += Vcm_tot*1e-6*denominator_inv Vcm *= denominator_inv return Vcm
[docs]def modified_Wilson_Vc(zs, Vcs, Aijs): r'''Calculates critical volume of a mixture according to mixing rules in [1]_ with parameters. Equation .. math:: V_{cm} = \sum_i x_i V_{ci} + C\sum_i x_i \ln \left(x_i + \sum_j x_j A_{ij}\right)V_{ref} For a binary mxiture, this simplifies to: .. math:: V_{cm} = x_1 V_{c1} + x_2 V_{c2} + C[x_1 \ln(x_1 + x_2A_{12}) + x_2\ln(x_2 + x_1 A_{21})] Parameters ---------- zs : float Mole fractions of all components Vcs : float Critical volumes of all components, [m^3/mol] Aijs : matrix Interaction parameters, [cm^3/mol] Returns ------- Vcm : float Critical volume of the mixture, [m^3/mol] Notes ----- The equation and original article has been reviewed. All parameters, even if zero, must be given to this function. C = -2500 All parameters, even if zero, must be given to this function. nu parameters are in cm^3/mol, but are converted to m^3/mol inside the function Examples -------- 1-butanol/benzene 0.4271/0.5729 mixture, Vcm = 268.096 mL/mol. >>> modified_Wilson_Vc([0.4271, 0.5729], [0.000273, 0.000256], ... [[0, 0.6671250], [1.3939900, 0]]) 0.0002664335032706881 References ---------- .. [1] Teja, Amyn S., Kul B. Garg, and Richard L. Smith. "A Method for the Calculation of Gas-Liquid Critical Temperatures and Pressures of Multicomponent Mixtures." Industrial & Engineering Chemistry Process Design and Development 22, no. 4 (1983): 672-76. .. [2] Najafi, Hamidreza, Babak Maghbooli, and Mohammad Amin Sobati. "Prediction of True Critical Temperature of Multi-Component Mixtures: Extending Fast Estimation Methods." Fluid Phase Equilibria 392 (April 25, 2015): 104-26. doi:10.1016/j.fluid.2015.02.001. ''' N = len(zs) Vcm = 0.0 for i in range(N): Vcm += zs[i]*Vcs[i] Vcm_add = 0.0 for i in range(N): tot = 0.0 row = Aijs[i] for j in range(N): tot += zs[j]*row[j] Vcm_add += zs[i]*log(zs[i] + tot) Vcm += -2500.0*Vcm_add*1e-6 return Vcm