From 3791dfba57fdfc12727dcbf72b19e4b1ed50f01e Mon Sep 17 00:00:00 2001 From: bjkreitz Date: Tue, 29 Aug 2023 16:16:40 -0400 Subject: [PATCH 1/4] correcting bidentate adsorption rate constant --- rmgpy/reaction.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/rmgpy/reaction.py b/rmgpy/reaction.py index 886ed5c7c4..60e843e5f8 100644 --- a/rmgpy/reaction.py +++ b/rmgpy/reaction.py @@ -792,7 +792,15 @@ def get_surface_rate_coefficient(self, T, surface_site_density): # molecular_weight_kg in kg per molecule rate_coefficient *= math.sqrt(constants.kB * T / (2 * math.pi * molecular_weight_kg)) - # ToDo: missing the sigma terms for bidentate species. only works for single site adsorption + # Multidentate adsorption requires multiplication of the sticking coefficient + # with the number of binding sites**stoichiometric coefficient of the product (it is 1 for monodentates) + + for p in self.products: + if p.contains_surface_site(): + sigma_nu = len(p.molecule[0].get_surface_sites())**self.get_stoichiometric_coefficient(p) + + rate_coefficient *= sigma_nu + return rate_coefficient if isinstance(self.kinetics, SurfaceArrhenius): From 4f28f5f7344b4d08ed69aa23e3adeb86d4addb49 Mon Sep 17 00:00:00 2001 From: Bjarne Kreitz Date: Wed, 11 Oct 2023 16:16:55 -0400 Subject: [PATCH 2/4] make code more efficient --- rmgpy/reaction.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/rmgpy/reaction.py b/rmgpy/reaction.py index 60e843e5f8..ef3e27bc01 100644 --- a/rmgpy/reaction.py +++ b/rmgpy/reaction.py @@ -793,13 +793,11 @@ def get_surface_rate_coefficient(self, T, surface_site_density): rate_coefficient *= math.sqrt(constants.kB * T / (2 * math.pi * molecular_weight_kg)) # Multidentate adsorption requires multiplication of the sticking coefficient - # with the number of binding sites**stoichiometric coefficient of the product (it is 1 for monodentates) - + # with the number of binding sites**stoichiometric coefficients (it is 1 for monodentates) for p in self.products: - if p.contains_surface_site(): - sigma_nu = len(p.molecule[0].get_surface_sites())**self.get_stoichiometric_coefficient(p) - - rate_coefficient *= sigma_nu + sites = p.number_of_surface_sites() + if sites > 1: + rate_coefficient *= sites return rate_coefficient From 7fe175c499ae0131dc3277f7e6f4d370e52c9baf Mon Sep 17 00:00:00 2001 From: Bjarne Kreitz Date: Wed, 11 Oct 2023 16:17:33 -0400 Subject: [PATCH 3/4] consider Eley Rideal reactions --- rmgpy/reaction.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rmgpy/reaction.py b/rmgpy/reaction.py index ef3e27bc01..f1a9c517ad 100644 --- a/rmgpy/reaction.py +++ b/rmgpy/reaction.py @@ -794,6 +794,11 @@ def get_surface_rate_coefficient(self, T, surface_site_density): # Multidentate adsorption requires multiplication of the sticking coefficient # with the number of binding sites**stoichiometric coefficients (it is 1 for monodentates) + for r in self.reactants: + sites = r.number_of_surface_sites() + if sites > 1: + rate_coefficient /= sites + for p in self.products: sites = p.number_of_surface_sites() if sites > 1: From e1c0f4eca7153256641b1466194167a8029a98cf Mon Sep 17 00:00:00 2001 From: Bjarne Kreitz Date: Wed, 11 Oct 2023 16:24:48 -0400 Subject: [PATCH 4/4] simplify reactant loop --- rmgpy/reaction.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rmgpy/reaction.py b/rmgpy/reaction.py index f1a9c517ad..7484f70d43 100644 --- a/rmgpy/reaction.py +++ b/rmgpy/reaction.py @@ -777,6 +777,9 @@ def get_surface_rate_coefficient(self, T, surface_site_density): for r in self.reactants: if r.contains_surface_site(): rate_coefficient /= surface_site_density + sites = r.number_of_surface_sites() + if sites > 1: + rate_coefficient /= sites else: if adsorbate is None: adsorbate = r @@ -794,11 +797,7 @@ def get_surface_rate_coefficient(self, T, surface_site_density): # Multidentate adsorption requires multiplication of the sticking coefficient # with the number of binding sites**stoichiometric coefficients (it is 1 for monodentates) - for r in self.reactants: - sites = r.number_of_surface_sites() - if sites > 1: - rate_coefficient /= sites - + # Integrated in the loop above for reactants for p in self.products: sites = p.number_of_surface_sites() if sites > 1: