Source code for chemics.liquid

"""
Class for liquid properties.
"""

import pandas as pd
from pathlib import Path


[docs] class Liquid: """ Liquid properties class. Parameters ---------- formula : str Molecular formula of the liquid Attributes ---------- formula : str Molecular formula of the liquid mw : float Molecular weight of the liquid in g/mol """ def __init__(self, formula): self.formula = formula
[docs] def cp_yaws(self, temp, cas=None, disp=False): r""" Liquid heat capacity. Liquid heat capacity as a function of temperature using Yaws' coefficients [1]_. The CAS(Chemical Abstracts Service) number may be required for some species. .. math:: C_p = A + B\,T + C\,T^2 + D\,T^3 + E\,T^4 Parameters ---------- temp : float Temperature of the liquid in Kelvin cas : str, optional CAS number of the liquid, required for some species disp : bool Display information about the calculation such as the CAS number, applicable temperature range in Kelvin, and values for regression coefficients. Raises ------ ValueError If provided CAS number is not found. ValueError If multiple substances found for given formula. ValueError If gas chemical formula not found. ValueError If given temperataure is out of range for calculation. Returns ------- cp : float Heat capacity of the liquid in J/(mol⋅K) Examples -------- >>> liquid = cm.Liquid('CBrF3') >>> liquid.cp_yaws(250) 107.2774... >>> liquid = cm.Liquid('C38H76') >>> liquid.cp_yaws(400, cas='61828-17-9') 1307.0624... References ---------- .. [1] Carl L. Yaws. Heat capacity of liquid Tables 43 and 44 in Yaws' Critical Property Data for Chemical Engineers and Chemists. Published by Knovel, 2014. """ formula = self.formula path = Path(__file__).parent.absolute() df = pd.read_csv(path / "data/liquid-cp-yaws.csv") df.fillna(0.0, inplace=True) if cas: row = df.query(f"CAS == '{cas}'") if len(row) == 0: raise ValueError(f"CAS number {cas} not found") else: row = df.query(f"Formula == '{formula}'") if len(row) > 1: m = f"Multiple substances available for {formula}. Include CAS number with formula." raise ValueError(m) elif len(row) == 0: raise ValueError(f"Formula {formula} not found") formula = row["Formula"].iloc[0] name = row["Name"].iloc[0] cas = row["CAS"].iloc[0] tmin = row["Tmin"].iloc[0] tmax = row["Tmax"].iloc[0] a = row["A"].iloc[0] b = row["B"].iloc[0] c = row["C"].iloc[0] d = row["D"].iloc[0] e = row["E"].iloc[0] cp = a + (b * temp) + (c * temp**2) + (d * temp**3) + (e * temp**4) if temp < tmin or temp > tmax: m = f"Temperature out of range. Applicable values are {tmin}-{tmax} K for {formula}." raise ValueError(m) if disp: print("Formula ", formula) print("Name ", name) print("CAS ", cas) print("Min Temp. (K) ", tmin) print("Max Temp. (K) ", tmax) print("A ", a) print("B ", b) print("C ", c) print("D ", d) print("E ", e) print("Cp (J/mol⋅K) ", cp) return cp