Database#
Combustion Toolbox generates its own databases taking into account the NASA-9 polynomials fitting to evaluate the dimensionless thermodynamic functions of the species for the specific heat, enthalpy, and entropy as function of temperature, namely
where \(a_i\) from \(i=1, \dots, 7\) are the temperature coefficients and \(i =8, 9\) are the integration constants, respectively. Depending of the species the polynomials fit up to 20000 K [1]. These values are available in the source code and can be also obtained from NASA’s thermo build website.
To compute the dimensionless Gibbs energy, \(g_i^\circ (T) / RT\), from NASA’s polynomials we use the next expression
or equivalently
This data is collected and formatted into a more accessible structure. We can distinguish from:
DB_master
: structured database from NASA’s thermo file.DB
: structured database with piecewise cubic Hermite interpolating polynomials and linear extrapolation for faster data access.
The use of piecewise cubic Hermite interpolating polynomials increments the performance of Combustion Toolbox in approximate 200% as shown in Figure 1 obtaining the same results as seen in Figure 2. To evaluate the thermodynamic functions, e.g., the Gibbs energy [kJ/mol] function, or the thermal enthalpy [kJ/mol] of \(\text{CO}_2\) at \(T = 2000 \text{ K}\) is as simple as using these callbacks
>> g0_CO2 = species_g0('CO2', 2000, DB)
>> DhT_CO2 = species_DhT('CO2', 2000, DB)
Figure 1: Performance test, execution times for over $10^5$ calculations of the specific heat at constant pressure, enthalpy, Gibbs energy, and entropy, denoted as $c_p$, $h_0$, $g_0$, and $s_0$, respectively, using the NASA’s 9 coefficient polynomials (dark blue) and the piecewise cubic Hermite interpolating polynomials (teal). The test has been carried out with an Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz. Note: lower is better.
Figure 2: Comparison of entropy [kJ/(mol-K)] as a function of temperature [K] obtained using the piecewise cubic Hermite interpolating polynomials (lines) and using the NASA’s 9 coefficient polynomials (symbols) for a set of species.
Another important parameter comes from the conservation of mass, which is the stoichiometric matrix \(A_0\), by generalizing this constraint condition we have
or in matricial form
where \(a_{ij}\) are the stoichiometric coefficients of the species, which represent the number of atoms of element \(i\) per mole of species \(j\). The number of moles and the total number of atoms of the \(j\) species and \(i\) element reads \(n_j\) and \(b_i\), respectively. This is computed during the initialization of the variable self
. Using one of the predefined list of species, e.g., soot formation
, this can be initializate as
self = App('soot formation')
A simple test can be performed by considering the global exothermic reaction of hydrogen bromide with \(n_j\) moles
which have only three species involve. The system obtained is
A quick check using Combustion Toolbox:
>> self = App({'H2', 'Br2', 'HBr'});
>> print_stoichiometric_matrix(self, 'transpose')
Transpose stoichiometric matrix:
H2 Br2 HBr
__ ___ ___
BR 0 2 1
H 2 0 1
Routines
- FullName2name(species)#
Get full name of the given species
- Parameters
species (
str
) – Chemical species- Returns
name (str) – Full name of the given species
- check_DB(self, DB_master, DB, varargin)#
Include not defined species in database from master database
- Parameters
self (
struct
) – struct with elements dataDB_master (
struct
) – Database with the thermodynamic data of the chemical speciesDB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Optional Args:
LS_check (cell)
- Returns
Tuple containing –
DB (struct): Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
E (struct): Elements data
S (struct): Slements data
C (struct): Constant data
- compute_change_moles_gas_reaction(element_matrix, swtCondensed)#
In order to compute the internal energy of formation from the enthalpy of formation of a given species, we must determine the change in moles of gases during the formation reaction of a mole of that species starting from the elements in their reference state.
Notes: The only elements that are stable as diatomic gases are elements 1 (H), 8 (N), 9 (O), 10 (F), and 18 (Cl). The remaining elements that are stable as (monoatomic) gases are the noble gases He (3), Ne (11), Ar (19), Kr (37), Xe (55), and Rn (87), which do not form any compound.
- Parameters
element_matrix (
float
) – Element matrix of the speciesswtCondensed (
float
) – 0 or 1 indicating gas or condensed species
- Returns
Delta_n (float) – Change in moles of gases during the formation reaction of a mole of that species starting from the elements in their reference state
- compute_interval_NASA(species, T, DB, tRange, ctTInt)#
Compute interval NASA polynomials
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fitstRange (
cell
) – Ranges of temperatures [K]ctTInt (
float
) – Number of intervals of temperatures
- Returns
tInterval (float) – Index of the interval of temperatures
- detect_location_of_phase_specifier(species)#
Detect the location of the opening pharenthesis of the phase identifier (if any)
- Parameters
species (
str
) – Chemical species- Returns
n_open_parenthesis (float) – Index of the location of the open parenthesis
- generate_DB(DB_master)#
Generate Database (DB) with thermochemical interpolation curves for the species contained in DB_master
- Parameters
DB_master (
struct
) – Database with the thermodynamic data of the chemical species- Returns
DB (struct) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- generate_DB_Theo()#
Generate database for theoretical computation of the jump conditions of a diatomic species only considering dissociation.
- Returns
DB_Theo (struct) – Database with quantum data of several diatomic species
- generate_DB_master(varargin)#
Generate Mater Database (DB_master) with the thermodynamic data of the chemical species
- Optional args:
reducedDB (flag): Flag indicating reduced database
thermoFile (file): File with NASA’s thermodynamic database
- Returns
DB_master (struct) – Database with the thermodynamic data of the chemical species
- generate_DB_master_reduced(DB_master)#
Generate Reduced Mater Database (DB_master_reduced) with the thermodynamic data of the chemical species
- Parameters
DB_master (
struct
) – Database with the thermodynamic data of the chemical species- Returns
DB_master_reduced (struct) – Reduced database with the thermodynamic data of the chemical species
- get_g0(self, species, T, DB)#
Compute Compute Gibbs energy [kJ/mol] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
self (
str
) – Data of the mixture, conditions, and databasesspecies (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
g0 (float) – Gibbs energy [kJ/mol]
- get_interval(species, T, DB)#
Get interval of the NASA’s polynomials from the Database (DB) for the given species and temperature [K].
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
tInterval (float) – Index of the interval of temperatures
- get_reference_elements_with_T_intervals()#
Get list with reference form of elements and its temperature intervals
- Returns
list (cell) – List with reference form of elements and its temperature intervals
- get_speciesProperties(DB, species, T, MassOrMolar, echo)#
Calculates the thermodynamic properties of any species included in the NASA database
- Parameters
DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fitsspecies (
str
) – Chemical speciesT (
float
) – Temperature [K]MassOrMolar (
str
) – Label indicating mass [kg] or molar [mol] unitsecho (
float
) – 0 or 1 indicating species not found
- Returns
Tuple containing
txFormula (str): Chemical formula
mm (float): Molar weight [g/mol]
cP0 (float): Specific heat at constant pressure [J/(mol-k)]
cV0 (float): Specific heat at constant volume [J/(mol-k)]
hf0 (float): Enthalpy of formation [J/mol]
h0 (float): Enthalpy [J/mol]
ef0 (float): Internal energy of formation [J/mol]
e0 (float): Enthalpy [J/mol]
s0 (float): Entropy [J/(mol-k)]
Dg0 (float): Gibbs energy [J/mol]
- isRefElm(reference_elements, species, T)#
Check if the given species is a reference element
- Parameters
reference_elements (
cell
) – List of reference elements with temperature intervals [K]species (
str
) – Chemical speciesT (
float
) – Temperature
- Returns
name (str) – Full name of the given species
- name_with_parenthesis(species)#
Update the name of the given string with parenthesis. The character b if comes in pair represents parenthesis in the NASA’s database
- Parameters
species (
str
) – Chemical species in NASA’s Database format- Returns
species_with (str) – Chemical species with parenthesis
- set_element_matrix(txFormula, elements)#
Compute element matrix of the given species
- Parameters
txFormula (
str
) – Chemical formula- Returns
element_matrix(float) – Element matrix
Example
For CO2
element_matrix = [7, 9; 1, 2]
That is, the species contains 1 atom of element 7 (C) and 2 atoms of element 9 (O)
- set_g0(LS, T, DB)#
Function that computes the vector of gibbs free energy for the given set of species [J/mol]
- Parameters
LS (
cell
) – List of speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
g0 (float) – Gibbs energy [J/mol]
- set_h0(LS, T, DB)#
Function that computes the vector of enthalpies for the given set of species [J/mol]
- Parameters
LS (
cell
) – List of speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
h0 (float) – Gibbs energy [J/mol]
- set_reference_form_of_elements#
Get list with reference form of elements
- Returns
list (cell) – List with reference form of elements
- set_reference_form_of_elements_with_T_intervals#
Get list with reference form of elements and its temperature intervals
- Returns
list (cell) – List with reference form of elements and its temperature intervals
- species_DeT(species, T, DB)#
Compute thermal internal energy [kJ/mol] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
DeT (float) – Thermal internal energy [kJ/mol]
- species_DeT_NASA(species, temperature, DB)#
Compute thermal internal energy [kJ/mol] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
DeT (float) – Thermal internal energy [kJ/mol]
- species_DhT(species, T, DB)#
Compute thermal enthalpy [kJ/mol] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
DhT (float) – Thermal enthalpy [kJ/mol]
- species_DhT_NASA(species, temperature, DB)#
Compute thermal enthalpy [kJ/mol] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
DhT (float) – Thermal enthalpy [kJ/mol]
- species_cP(species, T, DB)#
Compute specific heat at constant pressure [J/(mol-K)] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
cP (float) – Specific heat at constant pressure [J/(mol-K)]
- species_cP_NASA(species, temperature, DB)#
Compute specific heats at constant pressure and at constant volume [J/(mol-K)] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
Tuple containing
cP (float): Specific heat at constant pressure [J/(mol-K)]
cV (float): Specific heat at constant volume [J/(mol-K)]
- species_cV(species, T, DB)#
Compute specific heat at constant volume [J/(mol-K)] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
cV (float) – Specific heat at constant volume [J/(mol-K)]
- species_cV_NASA(species, temperature, DB)#
Compute specific heat at constant volume [J/(mol-K)] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
cV (float) – Specific heat at constant volume [J/(mol-K)]
- species_e0_NASA(species, temperature, DB)#
Compute internal energy and the thermal internal energy [kJ/mol] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
Tuple containing
e0 (float): Internal energy [kJ/mol]
DeT (float): Thermal internal energy [kJ/mol]
- species_g0(species, T, DB)#
Compute Gibbs energy [kJ/mol] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
g0 (float) – Gibbs energy [kJ/mol]
- species_g0_NASA(species, temperature, DB)#
Compute Compute Gibbs energy [kJ/mol] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
g0 (float) – Gibbs energy [kJ/mol]
- species_h0(species, T, DB)#
Compute enthalpy [kJ/mol] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
h0 (float) – enthalpy [kJ/mol]
- species_h0_NASA(species, temperature, DB)#
Compute enthalpy and thermal enthalpy [kJ/mol] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
Tuple containing
h0 (float): Enthalpy [kJ/mol]
DhT (float): Thermal enthalpy [kJ/mol]
- species_s0(species, T, DB)#
Compute entropy [kJ/(mol-K)] of the species at the given temperature [K] using piecewise cubic Hermite interpolating polynomials and linear extrapolation
- Parameters
species (
str
) – Chemical speciesT (
float
) – Temperature [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
s0 (float) – Entropy [kJ/(mol-K)]
- species_s0_NASA(species, temperature, DB)#
Compute entropy [kJ/(mol-K)] of the species at the given temperature [K] using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
s0 (float) – Entropy [kJ/(mol-K)]
- species_thermo_NASA(species, temperature, DB)#
Compute thermodynamic function using NASA’s 9 polynomials
- Parameters
species (
str
) – Chemical speciestemperature (
float
) – Range of temperatures to evaluate [K]DB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
Tuple containing
cP (float): Specific heat at constant pressure [J/(mol-K)]
cV (float): Specific heat at constant volume [J/(mol-K)]
h0 (float): Enthalpy [kJ/mol]
DhT (float): Thermal enthalpy [kJ/mol]
e0 (float): Internal energy [kJ/mol]
DeT (float): Thermal internal energy [kJ/mol]
s0 (float): Entropy [J/(mol-K)]
g0 (float): Gibbs energy [kJ/mol]
- unpack_NASA_coefficients(species, DB)#
Unpack NASA’s polynomials coefficients from database
- Parameters
species (
str
) – Chemical speciesDB (
struct
) – Database with custom thermodynamic polynomials functions generated from NASAs 9 polynomials fits
- Returns
Tuple containing
a (cell): Temperature coefficients
b (cell): Integration constants
tRange (cell): Ranges of temperatures [K]
tExponents (cell): Exponent coefficients
ctTInt (float): Number of intervals of temperatures
txFormula (str): Chemical formula
swtCondensed (float): 0 or 1 indicating gas or condensed phase, respectively
McBride, Bonnie J. NASA Glenn coefficients for calculating thermodynamic properties of individual species. National Aeronautics and Space Administration, John H. Glenn Research Center at Lewis Field, 2002.