Combustion Calculations (chemicals.combustion)

This module contains a series of functions for modeling combustion reactions.

For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker.

Combustion Stoichiometry

chemicals.combustion.combustion_stoichiometry(atoms, MW=None, missing_handling='elemental')[source]

Return a dictionary of stoichiometric coefficients of chemical combustion, given a dictionary of a molecule’s constituent atoms and their counts.

This function is based on the combustion of hydrocarbons; the products for some inorganics can be hard to predict, and no special handling is included here for them. This reaction is the standard one at standard pressure with an excess of oxygen; it does not account for partial combustion or nitrous oxides.

Parameters
atomsdict[str, int]

Dictionary of atoms and their counts, [-]

MWfloat, optional

Molecular weight of chemical, used only if missing_handling is ‘Ash’, [g/mol]

missing_handlingstr, optional

How to handle compounds which do not appear in the stoichiometric reaction below. If ‘elemental’, return those atoms in the monatomic state; if ‘ash’, converts all missing attoms to ‘Ash’ in the output at a MW of 1 g/mol, [-]

Returns
stoichiometrydict[str, float]

Stoichiometric coefficients of combustion. May inlcude the following keys for complete combustion: ‘H2O’, ‘CO2’, ‘SO2’, ‘Br2’, ‘I2’, ‘HCl’, ‘HF’ ‘P4O10’; if missing_handling is ‘elemental’ can include the other elements; if missing_handling is ‘ash’, Ash will be present in the output if the compounds whose reactions are not included here. ‘O2’ is always present, with negative values indicating oxygen is required. [-]

Notes

The stoichiometry is given by:

CcHhOoNnSsBrbIiClxFfPp+kO2>cCO2+b2Br2+i2I+xHCl+fHF+sSO2+n2N2+p4P4O10+h+x+f2H2OC_c H_h O_o N_n S_s Br_b I_i Cl_x F_f P_p + kO_2 -> cCO_2 + \frac{b}{2}Br_2 + \frac{i}{2}I + xHCl + fHF + sSO_2 + \frac{n}{2}N_2 + \frac{p}{4}P_4O_{10} +\frac{h + x + f}{2}H_2O
k=c+s+h4+5P4x+f4o2k = c + s + \frac{h}{4} + \frac{5P}{4} - \frac{x + f}{4} - \frac{o}{2}

Also included in the results is the moles of O2 required per mole of the mixture of the molecule.

HF and HCl are gaseous products in their standard state. P4O10 is a solid in its standard state. Bromine is a liquid as is iodine. Water depends on the chosen definition of heating value. The other products are gases.

Atoms not in [‘C’, ‘H’, ‘N’, ‘O’, ‘S’, ‘Br’, ‘I’, ‘Cl’, ‘F’, ‘P’] are returned as pure species; i.e. sodium hydroxide produces water and pure Na.

Examples

Methane gas burning:

>>> combustion_stoichiometry({'C': 1, 'H':4})
{'CO2': 1, 'O2': -2.0, 'H2O': 2.0}
chemicals.combustion.combustion_products_mixture(atoms_list, zs, reactivities=None, CASs=None, missing_handling='elemental', combustion_stoichiometries=None)[source]

Calculates the combustion products of a mixture of molecules and their, mole fractions; requires a list of dictionaries of each molecule’s constituent atoms and their counts. Products for non-hydrocarbons may not be correct, but are still calculated.

Parameters
atoms_listlist[dict]

List of dictionaries of atoms and their counts, [-]

zslist[float]

Mole fractions of each molecule in the mixture, [-]

reactivitieslist[bool]

Indicators as to whether to combust each molecule, [-]

CASslist[str]

CAS numbers of all compounds; non-reacted products will appear in the products indexed by their CAS number, [-]

missing_handlingstr, optional

How to handle compounds which do not appear in the stoichiometric reaction below. If ‘elemental’, return those atoms in the monatomic state; if ‘Ash’, converts all missing attoms to ‘Ash’ in the output at a MW of 1 g/mol, [-]

combustion_stoichiometrieslist[dict[str, float]]

List of return values from combustion_stoichiometry, can be provided if precomputed [-]

Returns
combustion_producuctsdict

Dictionary of combustion products and their counts, [-]

Notes

Also included in the results is the moles of O2 required per mole of the mixture to be burnt.

Note that if O2 is in the feed, this will be subtracted from the required O2 amount.

HF and HCl are gaseous products in their standard state. P4O10 is a solid in its standard state. Bromine is a liquid as is iodine. Water depends on the chosen definition of heating value. The other products are gases.

Note that if instead of mole fractions, mole flows are given - the results are in terms of mole flows as well!

Examples

Mixture of methane and ethane.

>>> combustion_products_mixture([{'H': 4, 'C': 1}, {'H': 6, 'C': 2}, {'Ar': 1}, {'C': 15, 'H': 32}],
... [.9, .05, .04, .01], reactivities=[True, True, True, False],
... CASs=['74-82-8', '74-84-0', '7440-37-1', '629-62-9'])
{'CO2': 1.0, 'O2': -1.975, 'H2O': 1.9500000000000002, 'Ar': 0.04, '629-62-9': 0.01}

Heat of Combustion

chemicals.combustion.HHV_stoichiometry(stoichiometry, Hf, Hf_chemicals=None)[source]

Return the higher heating value [HHV; in J/mol] based on the theoretical combustion stoichiometry and the heat of formation of the chemical.

Parameters
stoichiometrydict[str, float]

Stoichiometric coefficients of combustion. May inlcude the following keys: ‘H2O’, ‘CO2’, ‘SO2’, ‘Br2’, ‘I2’, ‘HCl’, ‘HF’ and ‘P4O10’.

Hffloat

Heat of formation [J/mol].

Hf_chemicalsdict[str, float]

Heat of formation of chemicals present in stoichiometry, [J/mol]

Returns
HHVfloat

Higher heating value [J/mol].

Notes

The combustion reaction is based on the following equation:

CcHhOoNnSsBrbIiClxFfPp+kO2>cCO2+b2Br2+i2I+xHCl+fHF+sSO2+n2N2+p4P4O10+h+x+f2H2OC_c H_h O_o N_n S_s Br_b I_i Cl_x F_f P_p + kO_2 -> cCO_2 + \frac{b}{2}Br_2 + \frac{i}{2}I + xHCl + fHF + sSO_2 + \frac{n}{2}N_2 + \frac{p}{4}P_4O_{10} +\frac{h + x + f}{2}H_2O
k=c+s+h4+5P4x+f4o2k = c + s + \frac{h}{4} + \frac{5P}{4} - \frac{x + f}{4} - \frac{o}{2}

The HHV is calculated as the heat of reaction.

Examples

Burning methane gas:

>>> HHV_stoichiometry({'O2': -2.0, 'CO2': 1, 'H2O': 2.0}, -74520.0)
-890604.0
chemicals.combustion.HHV_modified_Dulong(mass_fractions)[source]

Return higher heating value [HHV; in J/g] based on the modified Dulong’s equation [1].

Parameters
mass_fractionsdict[str, float]

Dictionary of atomic mass fractions [-].

Returns
HHVfloat

Higher heating value [J/mol].

Notes

The heat of combustion in J/mol is given by Dulong’s equation [1]:

Hc(J/mol)=MW(338C+1428(HO/8)+95S)Hc (J/mol) = MW \cdot (338C + 1428(H - O/8)+ 95S)

This equation is only good for <10 wt. % Oxygen content. Variables C, H, O, and S are atom weight fractions.

References

1(1,2)

Green, D. W. Waste management. In Perry`s Chemical Engineers` Handbook, 9 ed.; McGraw-Hill Education, 2018

Examples

Dry bituminous coal:

>>> HHV_modified_Dulong({'C': 0.716, 'H': 0.054, 'S': 0.016, 'N': 0.016, 'O': 0.093, 'Ash': 0.105})
-304.0395
chemicals.combustion.LHV_from_HHV(HHV, N_H2O)[source]

Return the lower heating value [LHV; in J/mol] of a chemical given the higher heating value [HHV; in J/mol] and the number of water molecules formed per molecule burned.

Parameters
HHVfloat

Higher heating value [J/mol].

N_H2Oint

Number of water molecules produced [-].

Returns
LHVfloat

Lower heating value [J/mol].

Notes

The LHV is calculated as follows:

LHV=HHV+HvapH2OLHV = HHV + H_{vap} \cdot H_2O
Hvap=44011.496JmolH2OH_{vap} = 44011.496 \frac{J}{mol H_2O}
H2O=molH2OmolH_2O = \frac{mol H_2O}{mol}

Examples

Methanol lower heat of combustion:

>>> LHV_from_HHV(-726024.0, 2)
-638001.008

Heat of Combustion and Stiochiometry

chemicals.combustion.combustion_data(formula=None, stoichiometry=None, Hf=None, MW=None, method=None, missing_handling='ash')[source]

Return a CombustionData object (a named tuple) that contains the stoichiometry coefficients of the reactants and products, the lower and higher heating values [LHV, HHV; in J/mol], the heat of formation [Hf; in J/mol], and the molecular weight [MW; in g/mol].

Parameters
formulastr, or dict[str, float], optional

Chemical formula as a string or a dictionary of atoms and their counts.

stoichiometrydict[str, float], optional

Stoichiometry of combustion reaction.

Hffloat, optional

Heat of formation of given chemical [J/mol]. Required if method is “Stoichiometry”.

MWfloat, optional

Molecular weight of chemical [g/mol].

method“Stoichiometry” or “Dulong”, optional

Method to estimate LHV and HHV.

missing_handlingstr, optional

How to handle compounds which do not appear in the stoichiometric reaction below. If ‘elemental’, return those atoms in the monatomic state; if ‘Ash’, converts all missing attoms to ‘Ash’ in the output at a MW of 1 g/mol, [-]

Returns
combustion_dataCombustionData

A combustion data object with the stoichiometric coefficients of combustion, higher heating value, heat of formation, and molecular weight as attributes named stoichiomery, HHV, Hf, and MW, respectively.

Notes

The combustion reaction is based on the following equation:

CcHhOoNnSsBrbIiClxFfPp+kO2>cCO2+b2Br2+i2I+xHCl+fHF+sSO2+n2N2+p4P4O10+h+x+f2H2OC_c H_h O_o N_n S_s Br_b I_i Cl_x F_f P_p + kO_2 -> cCO_2 + \frac{b}{2}Br_2 + \frac{i}{2}I + xHCl + fHF + sSO_2 + \frac{n}{2}N_2 + \frac{p}{4}P_4O_{10} +\frac{h + x + f}{2}H_2O
k=c+s+h4+5P4x+f4o2k = c + s + \frac{h}{4} + \frac{5P}{4} - \frac{x + f}{4} - \frac{o}{2}

If the method is “Stoichiometry”, the HHV is found using through an energy balance on the reaction (i.e. heat of reaction). If the method is “Dulong”, Dulong’s equation is used [1]:

Hc(J/mol)=MW(338C+1428(HO/8)+95S)Hc (J/mol) = MW \cdot (338C + 1428(H - O/8)+ 95S)

The LHV is calculated as follows:

LHV=HHV+HvapH2OLHV = HHV + H_{vap} \cdot H_2O
Hvap=44011.496JmolH2OH_{vap} = 44011.496 \frac{J}{mol H_2O}
H2O=molH2OmolH_2O = \frac{mol H_2O}{mol}

References

1

Green, D. W. Waste management. In Perry`s Chemical Engineers` Handbook, 9 ed.; McGraw-Hill Education, 2018

Examples

Liquid methanol burning:

>>> combustion_data({'H': 4, 'C': 1, 'O': 1}, Hf=-239100)
CombustionData(stoichiometry={'CO2': 1, 'O2': -1.5, 'H2O': 2.0}, HHV=-726024.0, Hf=-239100, MW=32.04186)
class chemicals.combustion.CombustionData(stoichiometry, HHV, Hf, MW)[source]

Return a CombustionData object (a named tuple) that contains the stoichiometry coefficients of the reactants and products, the lower and higher heating values [LHV, HHV; in J/mol], the heat of formation [Hf; in J/mol], and the molecular weight [MW; in g/mol].

Parameters
stoichiometrydict[str, float]

Stoichiometric coefficients of the reactants and products.

HHVfloat

Higher heating value [J/mol].

Hffloat

Heat of formation [J/mol].

MWfloat

Molecular weight [g/mol].

Attributes
LHV

Lower heating value [LHV; in J/mol]

Basic Combustion Spec Solvers

chemicals.combustion.fuel_air_spec_solver(zs_air, zs_fuel, CASs, atomss, n_fuel=None, n_air=None, n_out=None, O2_excess=None, frac_out_O2=None, frac_out_O2_dry=None, ratio=None, Vm_air=None, Vm_fuel=None, MW_air=None, MW_fuel=None, ratio_basis='mass', reactivities=None, combustion_stoichiometries=None)[source]

Solves the system of equations describing a flow of air mixing with a flow of combustibles and burning completely. All calculated variables are returned as a dictionary.

Supports solving with any 2 of the extensive variables, or one extensive and one intensive variable:

Extensive variables:

  • n_air

  • n_fuel

  • n_out

Intensive variables:

  • O2_excess

  • frac_out_O2

  • frac_out_O2_dry

  • ratio

The variables Vm_air, Vm_fuel, MW_air, and MW_fuel are only required when an air-fuel ratio is given. Howver, the ratios cannot be calculated for the other solve options without them.

Parameters
zs_airlist[float]

Mole fractions of the air; most not contain any combustibles, [-]

zs_fuellist[float]

Mole fractions of the fuel; can contain inerts and/or oxygen as well, [-]

CASslist[str]

CAS numbers of all compounds, [-]

atomsslist[dict[float]]

List of dictionaries of elements and their counts for all molecules in the mixtures, [-]

n_fuelfloat, optional

Flow rate of fuel, [mol/s]

n_airfloat, optional

Flow rate of air, [mol/s]

n_outfloat, optional

Flow rate of combustion products, remaining oxygen, and inerts, [mol/s]

O2_excessfloat, optional

The excess oxygen coming out; (O2 in)/(O2 required) - 1, [-]

frac_out_O2float, optional

The mole fraction of oxygen out, [-]

frac_out_O2_dryfloat, optional

The mole fraction of oxygen out on a dry basis, [-]

ratiofloat, optional

Air-fuel ratio, in the specified basis, [-]

Vm_airfloat, optional

Molar volume of air, [m^3/mol]

Vm_fuelfloat, optional

Molar volume of fuel, [m^3/mol]

MW_airfloat, optional

Molecular weight of air, [g/mol]

MW_fuelfloat, optional

Molecular weight of fuel, [g/mol]

ratio_basisstr, optional

One of ‘mass’, ‘mole’, or ‘volume’, [-]

reactivitieslist[bool], optional

Optional list which can be used to mark otherwise combustible compounds as incombustible and which will leave unreacted, [-]

combustion_stoichiometrieslist[dict[str, float]]

List of return values from combustion_stoichiometry, can be provided if precomputed [-]

Returns
resultsdict
  • n_fuel : Flow rate of fuel, [mol/s]

  • n_air : Flow rate of air, [mol/s]

  • n_out : Flow rate of combustion products, remaining oxygen, and inerts, [mol/s]

  • O2_excess : The excess oxygen coming out; (O2 in)/(O2 required) - 1, [-]

  • frac_out_O2 : The mole fraction of oxygen out, [-]

  • frac_out_O2_dry : The mole fraction of oxygen out on a dry basis, [-]

  • mole_ratio : Air-fuel mole ratio, [-]

  • mass_ratio : Air-fuel mass ratio, [-]

  • volume_ratio : Air-fuel volume ratio, [-]

  • ns_out : Mole flow rates out, [mol/s]

  • zs_out : Mole fractions out, [-]

Notes

Combustion products themselves cannot be set as unreactive.

The function works so long as the flow rates, molar volumes, and molecular weights are in a consistent basis.

The function may also be used to obtain the other ratios, even if both flow rates are known.

Be careful to use standard volumes if the ratio known is at standard conditions!

Examples

>>> zs_air = [0.79, 0.205, 0, 0, 0, 0.0045, 0.0005]
>>> zs_fuel = [0.025, 0.025, 0.85, 0.07, 0.029, 0.0005, 0.0005]
>>> CASs = ['7727-37-9', '7782-44-7', '74-82-8', '74-84-0', '74-98-6', '7732-18-5', '124-38-9']
>>> atomss = [{'N': 2}, {'O': 2}, {'H': 4, 'C': 1}, {'H': 6, 'C': 2}, {'H': 8, 'C': 3}, {'H': 2, 'O': 1}, {'C': 1, 'O': 2}]
>>> ans = fuel_air_spec_solver(zs_air=zs_air, zs_fuel=zs_fuel, CASs=CASs, atomss=atomss, n_fuel=5.0, O2_excess=0.3, Vm_air=0.02493, Vm_fuel=0.02488, MW_air=28.79341351, MW_fuel=18.55158039)
>>> [round(i, 5) for i in ans['ns_out']]
[51.99524, 3.135, 0.0, 0.0, 0.0, 10.42796, 5.42033]
>>> [round(i, 5) for i in ans['zs_out']]
[0.73255, 0.04417, 0.0, 0.0, 0.0, 0.14692, 0.07637]
>>> ans['frac_out_O2'], ans['frac_out_O2_dry']
(0.04416828172034148, 0.051774902132807)
>>> ans['mole_ratio'], ans['mass_ratio'], ans['volume_ratio']
(13.131707317073175, 20.381372957130615, 13.15809740412517)
>>> ans['n_air']
65.65853658536588
chemicals.combustion.combustion_spec_solver(zs_air, zs_fuel, zs_third, CASs, atomss, n_third, n_fuel=None, n_air=None, n_out=None, O2_excess=None, frac_out_O2=None, frac_out_O2_dry=None, ratio=None, Vm_air=None, Vm_fuel=None, Vm_third=None, MW_air=None, MW_fuel=None, MW_third=None, ratio_basis='mass', reactivities=None, combustion_stoichiometries=None)[source]

Solves the system of equations describing a flow of air mixing with two flow of combustibles, one fixed and one potentially variable, and burning completely. All calculated variables are returned as a dictionary.

The variables Vm_air, Vm_fuel, Vm_third, MW_air, MW_fuel and MW_third are only required when an air-fuel ratio is given. Howver, the ratios cannot be calculated for the other solve options without them.

Parameters
zs_airlist[float]

Mole fractions of the air; most not contain any combustibles, [-]

zs_fuellist[float]

Mole fractions of the fuel; can contain inerts and/or oxygen as well, [-]

zs_thirdlist[float]
Mole fractions of the fixed fuel flow; can contain inerts and/or oxygen

as well, [-]

CASslist[str]

CAS numbers of all compounds, [-]

atomsslist[dict[float]]

List of dictionaries of elements and their counts for all molecules in the mixtures, [-]

n_thirdfloat, optional

Flow rate of third stream, (fixed) fuel flow rate, [mol/s]

n_fuelfloat, optional

Flow rate of fuel, [mol/s]

n_airfloat, optional

Flow rate of air, [mol/s]

n_outfloat, optional

Flow rate of combustion products, remaining oxygen, and inerts, [mol/s]

O2_excessfloat, optional

The excess oxygen coming out; (O2 in)/(O2 required) - 1, [-]

frac_out_O2float, optional

The mole fraction of oxygen out, [-]

frac_out_O2_dryfloat, optional

The mole fraction of oxygen out on a dry basis, [-]

ratiofloat, optional

Air-fuel ratio, in the specified basis, [-]

Vm_airfloat, optional

Molar volume of air, [m^3/mol]

Vm_fuelfloat, optional

Molar volume of fuel, [m^3/mol]

Vm_thirdfloat, optional

Molar volume of second fuel stream, [m^3/mol]

MW_airfloat, optional

Molecular weight of air, [g/mol]

MW_fuelfloat, optional

Molecular weight of fuel, [g/mol]

MW_thirdfloat, optional

Molecular weight of second fuel stream, [g/mol]

ratio_basisstr, optional

One of ‘mass’, ‘mole’, or ‘volume’, [-]

reactivitieslist[bool], optional

Optional list which can be used to mark otherwise combustible compounds as incombustible and which will leave unreacted, [-]

combustion_stoichiometrieslist[dict[str, float]]

List of return values from combustion_stoichiometry, can be provided if precomputed [-]

Returns
resultsdict
  • n_fuel : Flow rate of fuel, [mol/s]

  • n_air : Flow rate of air, [mol/s]

  • n_out : Flow rate of combustion products, remaining oxygen, and inerts, [mol/s]

  • O2_excess : The excess oxygen coming out; (O2 in)/(O2 required) - 1, [-]

  • frac_out_O2 : The mole fraction of oxygen out, [-]

  • frac_out_O2_dry : The mole fraction of oxygen out on a dry basis, [-]

  • mole_ratio : Air-fuel mole ratio, [-]

  • mass_ratio : Air-fuel mass ratio, [-]

  • volume_ratio : Air-fuel volume ratio, [-]

  • ns_out : Mole flow rates out, [mol/s]

  • zs_out : Mole fractions out, [-]

Notes

Combustion products themselves cannot be set as unreactive.

The function works so long as the flow rates, molar volumes, and molecular weights are in a consistent basis.

Handling the case of the air feed containing combustibles is not implemented.

Examples

>>> zs_air = [0.79, 0.205, 0, 0, 0, 0.0045, 0.0005]
>>> zs_fuel = [0.025, 0.025, 0.85, 0.07, 0.029, 0.0005, 0.0005]
>>> zs_third = [0.1, 0.005, 0.5, 0.39, 0, 0.005, 0]
>>> CASs = ['7727-37-9', '7782-44-7', '74-82-8', '74-84-0', '74-98-6', '7732-18-5', '124-38-9']
>>> atomss = [{'N': 2}, {'O': 2}, {'H': 4, 'C': 1}, {'H': 6, 'C': 2}, {'H': 8, 'C': 3}, {'H': 2, 'O': 1}, {'C': 1, 'O': 2}]
>>> combustion_stoichiometries = [combustion_stoichiometry(atoms) for atoms in atomss]
>>> ans = combustion_spec_solver(zs_air=zs_air, zs_fuel=zs_fuel, zs_third=zs_third, CASs=CASs, atomss=atomss, n_third=1.0, n_fuel=5.0, O2_excess=0.3, Vm_air=0.02493, Vm_fuel=0.02488, Vm_third=.024, MW_air=28.79341351, MW_fuel=18.55158039, MW_third=22.0)
>>> ans['n_air']
80.6317073170732
chemicals.combustion.air_fuel_ratio_solver(ratio, Vm_air, Vm_fuel, MW_air, MW_fuel, n_air=None, n_fuel=None, basis='mass')[source]

Calculates molar flow rate of air or fuel from the other, using a specified air-fuel ratio. Supports ‘mole’, ‘mass’, and ‘volume’.

bases for the ratio variable. The ratio must be of the same units - i.e. kg/kg instead of lb/kg.

The mole, mass, and volume air-fuel ratios are calculated in the process and returned as well.

Parameters
ratiofloat

Air-fuel ratio, in the specified basis, [-]

Vm_airfloat

Molar volume of air, [m^3/mol]

Vm_fuelfloat

Molar volume of fuel, [m^3/mol]

MW_airfloat

Molecular weight of air, [g/mol]

MW_fuelfloat

Molecular weight of fuel, [g/mol]

n_airfloat, optional

Molar flow rate of air, [mol/s]

n_fuelfloat, optional

Molar flow rate of fuel, [mol/s]

basisstr, optional

One of ‘mass’, ‘mole’, or ‘volume’, [-]

Returns
n_airfloat

Molar flow rate of air, [mol/s]

n_fuelfloat

Molar flow rate of fuel, [mol/s]

mole_ratiofloat

Air-fuel mole ratio, [-]

mass_ratiofloat

Air-fuel mass ratio, [-]

volume_ratiofloat

Air-fuel volume ratio, [-]

Notes

The function works so long as the flow rates, molar volumes, and molecular weights are in a consistent basis.

The function may also be used to obtain the other ratios, even if both flow rates are known.

Be careful to use standard volumes if the ratio known is at standard conditions!

This function has no provision for mixed units like mass/mole or volume/mass.

Examples

>>> Vm_air = 0.024936627188566596
>>> Vm_fuel = 0.024880983160354486
>>> MW_air = 28.850334
>>> MW_fuel = 17.86651
>>> n_fuel = 5.0
>>> n_air = 25.0
>>> air_fuel_ratio_solver(ratio=5.0, Vm_air=Vm_air, Vm_fuel=Vm_fuel,
... MW_air=MW_air, MW_fuel=MW_fuel, n_air=n_air,
... n_fuel=n_fuel, basis='mole')
(25.0, 5.0, 5.0, 8.073858296891782, 5.011182039683378)

Engine Combustion

chemicals.combustion.Perez_Boehman_RON_from_ignition_delay(ignition_delay)[source]

Esimates the research octane number (RON) from a known ignition delay, as shown in [1].

RON=120.77425.48τID\text{RON} = 120.77 - \frac{425.48}{\tau_{ID}}

In the above equation, ignition delay is in ms.

Parameters
ignition_delayfloat

The ignition delay, [s]

Returns
RONfloat

Research Octane Number [-]

Notes

The correlation was developed using 20 components, for a range of approximately 3.6 ms to 67 ms.

References

1

Perez, Peter L., and André L. Boehman. “Experimental Investigation of the Autoignition Behavior of Surrogate Gasoline Fuels in a Constant-Volume Combustion Bomb Apparatus and Its Relevance to HCCI Combustion.” Energy & Fuels 26, no. 10 (October 18, 2012): 6106-17. https://doi.org/10.1021/ef300503b.

Examples

>>> Perez_Boehman_RON_from_ignition_delay(1/150)
56.948
chemicals.combustion.Perez_Boehman_MON_from_ignition_delay(ignition_delay)[source]

Esimates the motor octane number (MON) from a known ignition delay, as shown in [1].

MON=109.93374.73τID\text{MON} = 109.93 - \frac{374.73}{\tau_{ID}}

In the above equation, ignition delay is in ms.

Parameters
ignition_delayfloat

The ignition delay, [s]

Returns
MONfloat

Motor Octane Number [-]

Notes

The correlation was developed using 20 components, for a range of approximately 3.6 ms to 67 ms.

References

1

Perez, Peter L., and André L. Boehman. “Experimental Investigation of the Autoignition Behavior of Surrogate Gasoline Fuels in a Constant-Volume Combustion Bomb Apparatus and Its Relevance to HCCI Combustion.” Energy & Fuels 26, no. 10 (October 18, 2012): 6106-17. https://doi.org/10.1021/ef300503b.

Examples

>>> Perez_Boehman_MON_from_ignition_delay(1/150)
53.7205
chemicals.combustion.octane_sensitivity(RON, MON)[source]

This function calculates the octane sensitivity of a fuel [1].

OS=RONMON\text{OS} = \text{RON} - \text{MON}
Parameters
RONfloat

Research octane number, [-]

MONfloat

Motor octane number, [-]

Returns
OSfloat

Octane sensitivity, [-]

References

1

Lehn, Florian vom, Liming Cai, Rupali Tripathi, Rafal Broda, and Heinz Pitsch. “A Property Database of Fuel Compounds with Emphasis on Spark-Ignition Engine Applications.” Applications in Energy and Combustion Science 5 (March 1, 2021): 100018. https://doi.org/10.1016/j.jaecs.2020.100018.

Examples

>>> octane_sensitivity(RON=90, MON=74)
16
chemicals.combustion.AKI(RON, MON)[source]

This function calculates the anti knock index (AKI) of a fuel, also known as (R+M)/2 and by DON [1].

AKI=0.5RON+0.5MON\text{AKI} = 0.5\text{RON} + 0.5\text{MON}
Parameters
RONfloat

Research octane number, [-]

MONfloat

Motor octane number, [-]

Returns
AKIfloat

Average of RON and MON, [-]

Notes

This is the number displayed at the gas pumps in North America; in Europe and Asia the RON is displayed.

References

1

McKinsey. “Octane.” Accessed April 18, 2022. http://www.mckinseyenergyinsights.com/resources/refinery-reference-desk/octane/.

Examples

>>> AKI(RON=90, MON=74)
82.0
chemicals.combustion.IDT_to_DCN(IDT)[source]

This function converts the ignition delay time [1] into a derived cetane number.

If the ignition delay time is between 3.1 and 6.5 ms:

DCN=4.46+186.6IDT\text{DCN} = 4.46 + \frac{186.6}{\text{IDT}}

Otherwise:

DCN=(83.99(IDT1.512)0.658)+3.547\text{DCN} = \left(83.99(\text{IDT} - 1.512)^{-0.658} \right) + 3.547
Parameters
IDTfloat

Ignition delay time, [s]

Returns
DCNfloat

Derived cetane number, [-]

Notes

This conversion is described in D6890-168.

References

1

Al Ibrahim, Emad, and Aamir Farooq. “Prediction of the Derived Cetane Number and Carbon/Hydrogen Ratio from Infrared Spectroscopic Data.” Energy & Fuels 35, no. 9 (May 6, 2021): 8141-52. https://doi.org/10.1021/acs.energyfuels.0c03899.

2

Dahmen, Manuel, and Wolfgang Marquardt. “A Novel Group Contribution Method for the Prediction of the Derived Cetane Number of Oxygenated Hydrocarbons.” Energy & Fuels 29, no. 9 (September 17, 2015): 5781-5801. https://doi.org/10.1021/acs.energyfuels.5b01032.

Examples

>>> IDT_to_DCN(4e-3)
51.11

Lookup Functions

chemicals.combustion.RON(CASRN, method=None)[source]

This function handles the retrieval of a chemical’s research octane number (RON). 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 1400 chemicals.

Parameters
CASRNstr

CASRN [-]

Returns
RONfloat

Research octane number, [-]

Other Parameters
methodstr, optional

A string for the method name to use, as defined by constants in RON_methods

Notes

The available sources are as follows:

  • ‘FLORIAN_LIMING’, the experimental values compiled in [1].

  • ‘FLORIAN_LIMING_ANN’, a set of predicted values using a QSPR-ANN model developed in the author’s earlier publication [3], from 260 comonents.

  • ‘COMBUSTDB’, a compilation of values from various sources [2].

  • ‘COMBUSTDB_PREDICTIONS’, a set of predicted values developed by the author of CombustDB (Travis Kessler) using the tool [4].

References

1

Lehn, Florian vom, Liming Cai, Rupali Tripathi, Rafal Broda, and Heinz Pitsch. “A Property Database of Fuel Compounds with Emphasis on Spark-Ignition Engine Applications.” Applications in Energy and Combustion Science 5 (March 1, 2021): 100018. https://doi.org/10.1016/j.jaecs.2020.100018.

2

Kessler, Travis. CombustDB. Python. 2019. UMass Lowell Energy and Combustion Research Laboratory, 2021. https://github.com/ecrl/combustdb.

3

Lehn, Florian vom, Benedict Brosius, Rafal Broda, Liming Cai, and Heinz Pitsch. “Using Machine Learning with Target-Specific Feature Sets for Structure-Property Relationship Modeling of Octane Numbers and Octane Sensitivity.” Fuel 281 (December 1, 2020): 118772. https://doi.org/10.1016/j.fuel.2020.118772.

4

Kessler, Travis, and John Hunter Mack. “ECNet: Large Scale Machine Learning Projects for Fuel Property Prediction.” Journal of Open Source Software 2, no. 17 (2017): 401.

Examples

>>> RON(CASRN='64-17-5')
108.6
chemicals.combustion.RON_methods(CASRN)[source]

Return all methods available to obtain the research octane number (RON) for the desired chemical.

Parameters
CASRNstr

CASRN, [-]

Returns
methodslist[str]

Methods which can be used to obtain the RON with the given inputs.

See also

RON
chemicals.combustion.RON_all_methods = ('FLORIAN_LIMING', 'COMBUSTDB', 'FLORIAN_LIMING_ANN', 'COMBUSTDB_PREDICTIONS')

Tuple of method name keys. See the RON for the actual references

chemicals.combustion.MON(CASRN, method=None)[source]

This function handles the retrieval of a chemical’s motor octane number (MON). 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 1400 chemicals.

Parameters
CASRNstr

CASRN [-]

Returns
MONfloat

Research octane number, [-]

Other Parameters
methodstr, optional

A string for the method name to use, as defined by constants in MON_methods

Notes

The available sources are as follows:

  • ‘FLORIAN_LIMING’, the experimental values compiled in [1].

  • ‘FLORIAN_LIMING_ANN’, a set of predicted values using a QSPR-ANN model developed in the author’s earlier publication [3], from 260 comonents.

  • ‘COMBUSTDB’, a compilation of values from various sources [2].

  • ‘COMBUSTDB_PREDICTIONS’, a set of predicted values developed by the author of CombustDB (Travis Kessler) using the tool [4].

References

1

Lehn, Florian vom, Liming Cai, Rupali Tripathi, Rafal Broda, and Heinz Pitsch. “A Property Database of Fuel Compounds with Emphasis on Spark-Ignition Engine Applications.” Applications in Energy and Combustion Science 5 (March 1, 2021): 100018. https://doi.org/10.1016/j.jaecs.2020.100018.

2

Kessler, Travis. CombustDB. Python. 2019. UMass Lowell Energy and Combustion Research Laboratory, 2021. https://github.com/ecrl/combustdb.

3

Lehn, Florian vom, Benedict Brosius, Rafal Broda, Liming Cai, and Heinz Pitsch. “Using Machine Learning with Target-Specific Feature Sets for Structure-Property Relationship Modeling of Octane Numbers and Octane Sensitivity.” Fuel 281 (December 1, 2020): 118772. https://doi.org/10.1016/j.fuel.2020.118772.

4

Kessler, Travis, and John Hunter Mack. “ECNet: Large Scale Machine Learning Projects for Fuel Property Prediction.” Journal of Open Source Software 2, no. 17 (2017): 401.

Examples

>>> MON(CASRN='64-17-5')
89.7
chemicals.combustion.MON_methods(CASRN)[source]

Return all methods available to obtain the motor octane number (MON) for the desired chemical.

Parameters
CASRNstr

CASRN, [-]

Returns
methodslist[str]

Methods which can be used to obtain the MON with the given inputs.

See also

MON
chemicals.combustion.MON_all_methods = ('FLORIAN_LIMING', 'COMBUSTDB', 'FLORIAN_LIMING_ANN', 'COMBUSTDB_PREDICTIONS')

Tuple of method name keys. See the MON for the actual references

chemicals.combustion.ignition_delay(CASRN, method=None)[source]

This function handles the retrieval of a chemical’s ignition delay time (IDT). 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 60 chemicals.

Parameters
CASRNstr

CASRN [-]

Returns
ignition_delayfloat

Ignition delay time, [s]

Other Parameters
methodstr, optional

A string for the method name to use, as defined by constants in ignition_delay_all_methods

Notes

The available sources are as follows:

  • ‘DAHMEN_MARQUARDT’, the experimental values compiled in [1]; all timings come from the IQT tester device

Note that different measurement devices can give different results.

References

1

Dahmen, Manuel, and Wolfgang Marquardt. “A Novel Group Contribution Method for the Prediction of the Derived Cetane Number of Oxygenated Hydrocarbons.” Energy & Fuels 29, no. 9 (September 17, 2015): 5781-5801. https://doi.org/10.1021/acs.energyfuels.5b01032.

Examples

>>> ignition_delay(CASRN='110-54-3')
0.0043
chemicals.combustion.ignition_delay_methods(CASRN)[source]

Return all methods available to obtain the ignition delay time (IDT) for the desired chemical.

Parameters
CASRNstr

CASRN, [-]

Returns
methodslist[str]

Methods which can be used to obtain the IDT with the given inputs.

See also

ignition_delay
chemicals.combustion.ignition_delay_all_methods = ('DAHMEN_MARQUARDT',)

Tuple of method name keys. See the ignition_delay for the actual references