Computes Cp(T), H°(T), S°(T) from NASA polynomial coefficients stored in a SQLite database, converted from FORTRAN thermo.inp files.
Author: Dr. Reginaldo G. Leão Jr. — prof.reginaldo.leao@gmail.com
📖 Documentation: profleao.github.io/pyglenn
- Parse NASA-format
thermo.inp(FORTRAN Appendix C) → SQLite3 database - Query species by name, phase, molecular weight
- Calculate Cp(T), H°(T), S°(T) at any valid temperature
- Enthalpy of formation lookup
- Enthalpy change between two temperatures
- Command-line interface
- 2,035 species, 3,779 temperature intervals
pip install pyglenngit clone https://github.com/ProfLeao/pyglenn.git
cd pyglenn
pip install .conda install conda-forge::pyglennThe database is bundled with the package — no manual build step needed.
from pyglenn import ThermochemicalCalculator
# No need to specify a DB file — uses the bundled thermo.db
calc = ThermochemicalCalculator()
calc.connect()
# Find O2 (exact match — returns only O2, not Be3N2 or Al2O2)
species = calc.get_available_species('O2', exact_match=True)
o2 = species[0]
# Calculate properties at 1000 K
props = calc.calculate_properties(o2.id, 1000.0)
print(f"Cp = {props.cp:.2f} J/(mol·K)")
print(f"H° = {props.h_relative:.1f} J/mol")
print(f"S° = {props.s:.3f} J/(mol·K)")
calc.close()Or use the context manager for automatic cleanup:
from pyglenn import ThermochemicalCalculator
with ThermochemicalCalculator() as calc:
# exact_match=True guarantees the correct species (case-insensitive)
species = calc.get_available_species('CH4', exact_match=True)
props = calc.calculate_properties(species[0].id, 500.0)
print(f"Cp = {props.cp:.2f} J/(mol·K)")pyglenn query -s O2Only needed if the database is corrupted or you modify thermo.inp manually:
pyglenn build -i thermo.inp -o thermo.db| Table | Description |
|---|---|
species |
Chemical species (name, formula, phase, MW, ΔH°f) |
temperature_intervals |
Valid T ranges per species |
coefficients |
NASA-7 polynomial coefficients (a1–a7, b1, b2) |
file_metadata |
Global file metadata |
metadata |
Dataset metadata, including its reference gas constant |
R_UNIVERSAL = 8.31446261815324 J/(mol·K) is the universal CODATA value and
remains available through the compatibility alias R. NASA Glenn/CEA
polynomials in newly built databases declare their fitted reference constant as
R_GLENN = 8.314510 J/(mol·K) in SQLite metadata. The calculator reads that
value automatically when it connects; legacy databases fall back to
R_UNIVERSAL until explicitly migrated.
If you use pyglenn in your research, please cite it as:
@software{goncalves_leao_junior_2026_21324586,
author = {Gonçalves Leão Junior, Reginaldo},
title = {pyglenn: A Python Toolkit for Thermochemical
Properties Calculation from NASA Polynomials},
month = jul,
year = 2026,
publisher = {Zenodo},
doi = {10.5281/zenodo.21324586},
url = {https://doi.org/10.5281/zenodo.21324586},
}- Python ≥ 3.9
- SQLite3 (stdlib)
MIT — see LICENSE file.