Skip to main content

A Python package and database, developed by the Vlachos Research Group at the University of Delaware implements the First-Principles Semi-Empirical (FPSE) Group Additivity (GA) method for estimating thermodynamic properties of molecules. First introduced by Benson et al. for gas molecules and was later extended by Kua et al. to species adsorbed on catalytic surfaces. GA relies on graph theory defining each molecule as a collection of groups and their frequency of occurrence. The values of GA groups are determined from DFT-calculated thermodynamic properties of a (training) set of molecules by linear regression to minimize the difference of thermodynamic properties of molecules predicted by the GA from those estimated via DFT. This package implements four group additivity schemes in six databases (See below) and will convert a molecule entered as a Simplified Molecular-Input Line-Entry System (SMILES) providing the constituent groups, their frequency of occurrence, and estimated thermodynamic properties for that molecule. pgradd also provides a general GA framework for implementing a custom group additivity scheme from your ab initio data and regression to groups.

https://github.com/VlachosGroup/PythonGroupAdditivity/blob/master/docs/pGrAdd_RGB_github.png
  • Benson’s gas molecule group additivity (BensonGA)

  • Salciccioli et al. (2012) adsorbate on Pt(111) group additivity scheme (SalciccioliGA2012)

  • Gu et al. (2017) solvated adsorbate on Pt(111) group additivity scheme (GuSolventGA2017Aq, GuSolventGA2017Vac)

  • Wittreich (2018) adsorbate on Pt(111). Subset of Gu et al. including only surface species, group values regressed with OLS/GLS (Maximum Likelihood) and DFT data processed with pmutt (GRWSurface2018) Deprecated: Use(PtSurface2023)

  • Wittreich (2018) solvated adsorbate on Pt(111). Subset of Gu et al. including only surface species, group values regressed with OLS/GLS (Maximum Likelihood) and DFT data processed with pmutt (GRWAqueous2018)

  • Xie (2022) Database for hydrocarbon species on Ru(0001) (XieGA2022)

  • Wittreich/Xie (2023) adsorbate on Pt(111). Subset of Gu et al. including only surface species. Update to previous GRWSurface2018 (PtSurface2023)

  • Eccles/Pellizzeri (2026) Extension of Benson’s gas molecule group additivity (BensonGA) for fluorinated species. (PellizzeriGAF2026)

Citing this work

G.R. Wittreich, D.G. Vlachos, Python Group Additivity (pGrAdd) software for estimating species thermochemical properties Comput. Phys. Commun. 273 (2022) 108277 https://doi.org/10.1016/j.cpc.2021.108277

Developers

  • Gerhard R Wittreich, Ph.D., P.E.

  • Geun Ho Gu, Ph.D.

  • Michael Salciccioli, Ph.D.

  • Stephen M. Edie

Required Packages

Getting Started

  1. Install using pip:

    pip install --user pgradd
  2. Run the unit tests. Navigate to the tests directory, input the command shown below, and look for an OK response. (Note: The number of tests/time may change with subsequent versions):

    python -m unittest
    
    ........................................
    ----------------------------------------------------------------------
    Ran 40 tests in 7.849s
    
    OK
  3. Look at examples below

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

If you have a suggestion or find a bug, please post to our Issues page with the enhancement_label or bug_label tag respectively.

Finally, if you would like to add to the body of code, please:

  • fork the development branch

  • make the desired changes

  • write the appropriate unit tests

  • submit a pull request.

Questions

If you are having issues, please post to our Issues page with the help wanted or question tag. We will do our best to assist.

Special Thanks

  • Dr. Jeffrey Frey (pip and conda compatibility)

Citations

  • Rangarajan et al. “Language-oriented rule-based reaction network generation and analysis: Algorithms of RING”, Comput. Chem. Eng. 2014, 64, 124. https://doi.org/10.1016/j.compchemeng.2014.02.007

  • Rangarajan et al. “Language-oriented rule-based reaction network generation and analysis: Descrpition of RING”, Comput. Chem. Eng. 2012, 45, 114. https://doi.org/10.1016/j.compchemeng.2012.06.008

  • Benson et al. “Additivity rules for the estimation of thermochemical properties.” Chem. Rev., 1969, 69 (3), 279-324

  • Salciccioli et al. “Density Functional Theory-Derived Group Additivity and Linear Scaling Methods for Prediction of Oxygenate Stability on Metal Catalysts: Adsorption of Open-Ring Alcohol and Polyol Dehydrogenation Intermediates on Pt-Based Metals.” J. Phys. Chem. C, 2010, 114 (47) 20155-20166. https://doi.org/10.1021/jp107836a

  • Kua J, Goddard WA (1998) Chemisorption of Organics on Platinum. 2. Chemisorption of C 2 H x and CH x on Pt(111). J Phys Chem B 102:9492–9500. https://doi.org/10.1021/jp982527s

  • Kua J, Faglioni F, Goddard WA (2000) Thermochemistry for hydrocarbon intermediates chemisorbed on metal surfaces: CH(n-m)(CH3)(m) with n = 1, 2, 3 and m ≤ n on Pt, Ir, Os, Pd, Rh, and Ru. J Am Chem Soc 122:2309–2321. https://doi.org/10.1021/ja993336l

  • Salciccioli et al. “Adsorption of Acid, Ester, and Ether Functional Groups on Pt: Fast Prediction of Thermochemical Properties of Adsorbed Oxygenates via DFT-Based Group Additivity Methods.” J. Phys. Chem. C, 2012, 116(2), 1873-1886. https://doi.org/10.1021/jp2091413

  • Vorotnikov et al. “Group Additivity for Estimating Thermochemical Properties of Furanic Compounds on Pd(111).” Ind. Eng. Chem. Res., 2014, 53 (30), 11929-11938. https://doi.org/10.1021/ie502049a

  • Vorotnikov et al. “Group Additivity and Modified Linear Scaling Relations for Estimating Surface Thermochemistry on Transition Metal Surfaces: Application to Furanics.” J. Phys. Chem. C, 2015, 119 (19), 10417-10426. https://doi.org/10.1021/acs.jpcc.5b01696

  • Gu et al. “Group Additivity for Thermochemical Property Estimation of Lignin Monomers on Pt(111).” J. Phys. Chem. C, 2016, 120 (34), 19234-19241. https://doi.org/10.1021/acs.jpcc.6b06430

  • Gu GH, Schweitzer B, Michel C, et al (2017) Group additivity for aqueous phase thermochemical properties of alcohols on Pt(111). J Phys Chem C 121:21510–21519. https://doi.org/10.1021/acs.jpcc.7b07340

  • Xie, T.; Wittreich, G. R.; Vlachos, D. G. Multiscale Modeling of Hydrogenolysis of Ethane and Propane on Ru(0001): Implications for Plastics Recycling. Appl. Catal. B Environ. 2022, 316 (June), 121597. https://doi.org/10.1016/j.apcatb.2022.121597

  • Eccles, S; Pellizzeri, S. Expanded Group Additivity Framework for Thermochemical Prediction of Fluorocarbons and PFAS from Large-Scale DFT Data. J. Phys. Chem. A (2026) 130 (34): 6825–6834. https://doi.org/10.1021/acs.jpca.6c03256

Examples

Benson’s Gas Group Additivity Example:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('BensonGA')
descriptors = lib.GetDescriptors('C1CO1')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_HoRT(298.15))

Out:
defaultdict(int, {'C(C)(H)2(O)': 2, 'O(C)2': 1, 'Oxirane': 1})
-21.09467743150278

Salciccioli et al. J. Phys. Chem. C, 2012, 116 (2), pp 1873-1886 Example:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('SalciccioliGA2012')
descriptors = lib.GetDescriptors('C([Pt])C[Pt]')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_H(298.15, units='kcal/mol'))

Out:
defaultdict(<class 'int'>, {'C(C)(H)2(Pt)': 2, 'surface-ring strain': 0.217})
-11.307743997749277

Gu et al. J. Phys. Chem. C, 2017, 121 pp 21510–21519 Example:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('GuSolventGA2017Aq')
descriptors = lib.GetDescriptors('C(=O)([Pt])O')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_HoRT(500))

Out:
defaultdict(<class 'int'>, {'CO(O)(Pt)+O(CO)(H)': 1.0})
-109.86212002776878

Wittreich Surface Example:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('GRWSurface2018')
descriptors = lib.GetDescriptors('[Pt]C([Pt])C([Pt])([Pt])C=O')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_HoRT(750), '[Dimensionless]')
print(thermochem.get_H(750, 'kcal/mol'), '[kcal/mol]')

Out:
defaultdict(<class 'int'>, {'C(C)(H)(Pt)2': 1, 'C(C)(CO)(Pt)2': 1, 'CO(C)(H)': 1,
                            'CPt2CPt2': 1, 'CCPt2': 1, 'surface-ring strain': 0.392})
-13.423119203382337 [Dimensionless]
-20.005853103142883 [kcal/mol]

Wittreich Solvated Surface Example:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('GRWAqueous2018')
descriptors = lib.GetDescriptors('C(=O)([Pt])O')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_HoRT(500), '[Dimensionless]')
print(thermochem.get_H(500, 'kJ/mol'), '[kJ/mol]')

Out:
defaultdict(<class 'int'>, {'CO(O)(Pt)+O(CO)(H)': 1.0})
-107.57909464133714 [Dimensionless]
-447.23102885789655 [kJ/mol]

Xie Ru(0001) Surface Example 1:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('XieGA2022')
descriptors = lib.GetDescriptors('[Ru]C([Ru])C([Ru])([Ru])C')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_HoRT(500), '[Dimensionless]')
print(thermochem.get_H(500, 'kJ/mol'), '[kJ/mol]')

Out:
defaultdict(<class 'int'>, {'C(C)(H)(Ru)2': 1, 'C(C)2(Ru)2': 1, 'C(C)(H)3': 1, 'CRu2CRu2': 1})
 -35.040312149773726 [Dimensionless]
-145.6706333743726   [kJ/mol]

Xie Ru(0001) Surface Example 2:

 In:
 from pgradd.GroupAdd.Library import GroupLibrary
 import pgradd.ThermoChem
 lib = GroupLibrary.Load('XieGA2022')
 descriptors = lib.GetDescriptors('CCC')
 print(descriptors)
 thermochem = lib.Estimate(descriptors,'thermochem')
 print(thermochem.get_HoRT(500), '[Dimensionless]')
 print(thermochem.get_H(500, 'kJ/mol'), '[kJ/mol]')

 Out:
 defaultdict(<class 'int'>, {'C(C)(H)3': 2, 'C(C)2(H)2': 1})
 -41.49969417868688 [Dimensionless]
-172.52376948049303 [kJ/mol]

Eccles and Pellizzeri J. Phys. Chem. A 27 August 2026; 130 (34): 6825–6834. Example:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('PellizzeriGAF2026')
descriptors = lib.GetDescriptors('C(F)(F)(F)C(F)(F)C(=O)O')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_HoRT(298.15))
print(thermochem.get_H(500, 'kJ/mol'), '[kJ/mol]')

Out:
defaultdict(<class 'int'>, {'C(C[d])(F)2(O)': 1, 'F(C)': 2, 'O(C)(H)': 2, 'C[d](C)(O)(O[d])': 1, 'O[d](C[d])': 1})
-407.6827446197806 [Dimensionless]
-985.3759086950399 [kJ/mol]

Free Energy of Formation by including Entropy of the Elements:

In:
from pgradd.GroupAdd.Library import GroupLibrary
import pgradd.ThermoChem
lib = GroupLibrary.Load('BensonGA')
descriptors = lib.GetDescriptors('CCCCCC')
print(descriptors)
thermochem = lib.Estimate(descriptors,'thermochem')
print(thermochem.get_GoRT(T=298.15, S_elements=True), '[Dimensionless]')
print(thermochem.get_G(T=298.15, units='kJ/mol', S_elements=True), '[kJ/mol]')

Out:
defaultdict(<class 'int'>, {'C(C)(H)3': 2, 'C(C)2(H)2': 4})
-3.1192349163716244 [Dimensionless]
-7.732446702038452  [kJ/mol]

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pgradd-2.9.14.tar.gz (250.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pgradd-2.9.14-py3-none-any.whl (282.6 kB view details)

Uploaded Python 3

File details

Details for the file pgradd-2.9.14.tar.gz.

File metadata

  • Download URL: pgradd-2.9.14.tar.gz
  • Upload date:
  • Size: 250.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.20

File hashes

Hashes for pgradd-2.9.14.tar.gz
Algorithm Hash digest
SHA256 12680a7decaf5518508c5e49a0050582900ddc4a8e276c0b182f6602f5e692dc
MD5 c6f4cabda2c3174200035757fbbfb6b1
BLAKE2b-256 8828d0468bb42edb21602614fbd0d2e8804e6b248e021ce773bba499314cd677

See more details on using hashes here.

File details

Details for the file pgradd-2.9.14-py3-none-any.whl.

File metadata

  • Download URL: pgradd-2.9.14-py3-none-any.whl
  • Upload date:
  • Size: 282.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.20

File hashes

Hashes for pgradd-2.9.14-py3-none-any.whl
Algorithm Hash digest
SHA256 0954d3a1a5f5ad595f3ae1e0bea0218d494a2c8f79cc9dc9622fe18e04394562
MD5 d97f07cae02e16f7ad7395ac6ed8bd47
BLAKE2b-256 3b01f15263e22615f486ddd75cdb033443ae6f68ff8e731b760289dedf98e2ee

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.9.14 This release

2 files

2.9.13

2 files

2.9.12

2 files

2.9.11

2 files

2.9.10

2 files

2.9.9

2 files

2.9.8

2 files

2.9.7

2 files

2.9.6

2 files

2.9.5

2 files

2.9

2 files

2.8

2 files

2.7

2 files

2.6

2 files

2.5

2 files

2.4

1 file

2.3

1 file

2.2

1 file

2.1

2 files

1.7

2 files

1.6

2 files

1.5

2 files

1.4

2 files

1.3.8

2 files

1.3.7

2 files

1.3.5

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page