Skip to content

๐Ÿงช Python Thermodynamics Databook

PyThermoDB

Downloads PyPI Python Version License Read the Docs

PyThermoDB is a lightweight and user-friendly Python package designed to provide quick access to essential thermodynamic data. Whether you're a student, researcher, or engineer, this package serves as a valuable resource for retrieving thermodynamic properties, equations, and constants from your custom thermodynamic database (csv files).

โœจ Key Features:

  • ๐Ÿ“š Handbook Data: The package sources its data from well-established thermodynamics handbooks, ensuring accuracy and reliability (updated regularly).
  • ๐Ÿ”ง Custom Thermodynamic Database: It is possible to builtin your own thermodynamic databook for your project.
  • ๐Ÿชถ Minimal Dependencies: Built with simplicity in mind, the package has minimal external dependencies, making it easy to integrate into your projects.
  • ๐ŸŒ Open Source: Feel free to explore, contribute, and customize the package according to your needs.

๐Ÿ”ฌ Google Colab Examples

Try PyThermoDB directly in your browser with these interactive examples:

  • ๐Ÿ” Search Database Open In Colab

  • ๐Ÿ“Š COโ‚‚ Thermodynamic Data Open In Colab

  • ๐Ÿ”Ž Check Component Availability Open In Colab

  • ๐Ÿ“˜ Basic Usage 2 Open In Colab

  • ๐Ÿ”ฐ Basic Usage 1 Open In Colab

๐Ÿš€ Streamlit App

Check out PyThermoDB live! ๐Ÿ”— PyThermoDB on Streamlit

๐Ÿ“ฅ Installation

Install PyThermoDB with pip:

import pyThermoDB as ptdb
# check version
print(ptdb.__version__)

๐Ÿ› ๏ธ Usage Examples

  • Databook reference initialization:
# databook reference initialization
tdb = ptdb.init()
  • ๐Ÿ“š DATABOOK LIST:
# databook
db_list = tdb.list_databooks()
print(db_list)
  • ๐Ÿ“‹ TABLE LIST:
# table list
tb_lists = tdb.list_tables(1)
print(tb_lists)
  • โ„น๏ธ TABLE INFO:
# display a table
tb_info = tdb.table_info(1, 2)
print(tb_info)
  • ๐Ÿ“ฅ LOAD TABLES (before building):
# load equation to check
vapor_pressure_tb = tdb.equation_load(1, 4)
pp(vapor_pressure_tb.eq_structure(1))
# load data to check
data_table = tdb.data_load(1, 2)
pp(data_table.data_structure())
  • ๐Ÿ” CHECK COMPONENT AVAILABILITY IN A TABLE:
# check component availability in the databook and table
comp1 = "carbon Dioxide"
# CO2_check_availability = tdb.check_component(comp1, 1, 2)

# load comp data
# comp_data = tdb.get_component_data(comp1, 1, 2, dataframe=True)
# pp(comp_data)
  • ๐Ÿ—๏ธ BUILD DATA OBJECT:
# build data
CO2_data = tdb.build_data(comp1, 1, 2)
pp(CO2_data.data_structure())
pp(CO2_data.get_property(4))
  • ๐Ÿ“ BUILD EQUATION OBJECT:
# build an equation
eq = tdb.build_equation(comp1, 1, 4)
pp(eq.args)
res = eq.cal(T=298.15)
pp(res*1e-5)

๐Ÿงฑ Build ThermoDB for Components

DataTable & EquationTable saved as an object in Carbon Dioxide.pkl

  • ๐Ÿ”จ BUILD THERMODB:
# build a thermodb
thermo_db = ptdb.build_thermodb()
pp(type(thermo_db))

# * add TableData
thermo_db.add_data('general', comp1_data)
# * add TableEquation
thermo_db.add_data('heat-capacity', comp1_eq)
thermo_db.add_data('vapor-pressure', vapor_pressure_eq)
# add string
# thermo_db.add_data('dHf', {'dHf_IG': 152})
# file name
# thermodb_file_path = os.path.join(os.getcwd(), f'{comp1}')
# save
thermo_db.save(
    f'{comp1}', file_path='E:\\Python Projects\\pyThermoDB\\tests')
  • ๐Ÿ” CHECK THERMODB:
# check all properties and functions registered
pp(thermo_db.check_properties())
pp(thermo_db.check_functions())

๐Ÿ“‚ Load a ThermoDB

Carbon Dioxide.pkl can be loaded as:

  • ๐Ÿ“ค LOAD THERMODB FILE:
# ref
thermodb_file = 'Carbon Dioxide.pkl'
thermodb_path = os.path.join(os.getcwd(), thermodb_file)
pp(thermodb_path)
  • ๐Ÿ“ฅ LOAD THERMODB:
# load thermodb
CO2_thermodb = ptdb.load_thermodb(thermodb_path)
pp(type(CO2_thermodb))
  • โœ… CHECK THERMODB:
# check all properties and functions registered
pp(CO2_thermodb.check())

๐Ÿงฎ Custom Integral

  • Step 1:

Modify yml file by adding CUSTOM-INTEGRAL.

  • Step 2:

Add a name for the new integral body.

  • Step 3:

Add a list containing the integral body.

CUSTOM-INTEGRAL:
    Cp/R:
        - A1 = parms['a0']*args['T1']
        - B1 = (parms['a1']/2)*(args['T1']**2)
        - C1 = (parms['a2']/3)*(args['T1']**3)
        - D1 = (parms['a3']/4)*(args['T1']**4)
        - E1 = (parms['a4']/5)*(args['T1']**5)
        - res1 =  A1 + B1 + C1 + D1 + E1
        - A2 = parms['a0']*args['T2']
        - B2 = (parms['a1']/2)*(args['T2']**2)
        - C2 = (parms['a2']/3)*(args['T2']**3)
        - D2 = (parms['a3']/4)*(args['T2']**4)
        - E2 = (parms['a4']/5)*(args['T2']**5)
        - res2 =  A2 + B2 + C2 + D2 + E2
        - res = res2 - res1
  • ๐Ÿ”ฌ CHECK AS:
# check custom integral
pp(comp1_eq.custom_integral)
# check body
pp(comp1_eq.check_custom_integral_equation_body('Cp/R'))

# Cp/R
Cp_cal_custom_integral_Cp__R = comp1_eq.cal_custom_integral(
    'Cp/R', T1=298.15, T2=320)
pp(Cp_cal_custom_integral_Cp__R)

โ“ FAQ

For any question, contact me on LinkedIn

๐Ÿ‘จโ€๐Ÿ’ป Authors