cfgoldsmith / RMG-Py

Python version of the amazing Reaction Mechanism Generator (RMG).
http://reactionmechanismgenerator.github.io/RMG-Py/
Other
1 stars 4 forks source link

new bidentate families to consider #8

Open cfgoldsmith opened 8 years ago

cfgoldsmith commented 8 years ago

I have not expanded the bidentate family set much, because we still haven't worked out how to handle them in the thermo tree. Once we do, here are two families to add:

DoubleBond_to_Bidentate:

If the binding atom has a double bond, form a new surface bond with a vacant site:

 1=2  <-->  1-2
 |         || |
 X X       X  X

recipe(actions=[
    ['FORM_BOND', '*2', 'S', '*4'],
    ['CHANGE_BOND', '*1', '-1', '*2'],
    ['CHANGE_BOND', '*1', '1', '*3'],
])
where: *3 is the bonded site, and *4 is the vacant site

This could be useful for something like *CH=O + * --> *CH*O. Note: adsorbed vinyl would be another example, except that we don't have thermo for that species.

And another form of bond dissociation,

name? (previously Bidentate_Dissociation, but I think that name is better used elsewhere):

If the binding atom has a double bond, and that double-bond has a single bond, break that single bond:

RC=CHR  <-->  RC-CH + R
 |             | |    |
 X X X         X X    X

recipe(actions=[
    ['FORM_BOND', '*2', 'S', '*5'],
    ['FORM_BOND', '*3', 'S', '*6'],
    ['BREAK_BOND', '*2', 'S', '*3'],
    ['CHANGE_BOND', '*1', '-1', '*2'],
])
where *1 is the bound carbon, *2 is the unbound carbon,
*3 is the R on C2, *4 is the bonded site,
and *5 and *6 are the vacant sites.

EDIT: because this is third order, I would de-emphasize it in the short term.

rwest commented 5 years ago

From discussion on another PR.;

1. Surface_DoubleBond_to_Bidentate

1=2       1-2
|    <=> || |
X X       X X

where 1=2 can be a double or triple bond which, with the bond order increase, does preserve the octet rule.

Worth doing.

2. Surface_PiBond_to_DiSigma

Then, additionally, the pi- to -di-sigma would be: (not eley-rideal; should be in other issue?)

(1=2)            1-2
  :    +  <=>    | |
  X    X         X X

where (1=2) indicates a vdW structure

Worth doing.

cfgoldsmith commented 5 years ago

Reaction 1 and DoubleBond_to_Bidentate are the same, so I modified the original post. I would call reaction 2 "PiBond_to_DiSigma"

cfgoldsmith commented 5 years ago

Here is another reaction involving bidentate species:

Surface_Bidentate_Dissociation (or Association_to_Bidentate in reverse):

For disigma species that contain a single bond, break that bond and increase the bond order with the surface:

 1-2  <-->  1      2
 | |       ||  +  ||
 X X        X      X

recipe(actions=[
    ['BREAK_BOND', '*1', 'S', '*2'],
    ['CHANGE_BOND', '*1', '1', '*3'],
    ['CHANGE_BOND', '*2', '1', '*4'],
])
where: *3 is the bonded site for *1, and *4 is the bonded site for *2

Note that the bonds between *1-*3 and *2-*4 don't have to be single. The only requirement is that the bond between *1-*2 be single.

This could be useful for something like *CH2 + *CH2 --> *CH2*CH2, or *CH2 + O* --> *CH2*O.

cfgoldsmith commented 5 years ago

Regarding yesterday’s weekly telecon, one of Katrin’s action items it to check out how we’re estimating the thermo for bidentate species. As a pre-requisite, we need to turn on reactions that form bidentate species. Currently, we have two in the development branch: Surface_Adsorption_Bidentate and Surface_Bidentate_Dissociation. I have a few thoughts.

First, I think that these two reactions are not going to be the most important in terms of generating bidentate species.

The second reaction family (which I probably added?), Surface_Bidentate_Dissociation, is third order overall and second order in vacant sites. Furthermore, I think that particular name is better suited for a different reaction.

I propose that we add the following reaction families in this order:

Surface_Bidentate_Dissociation

A bidentate species with a single bond dissociates. The reverse reaction is when two adsorbates, each with double-bonds or higher to the surface, come together and form a single bond between them, thereby reducing the bond orders to the surface.

Surface_DoubleBond_to_Bidentate

If an adsorbate has an internal double bond, then it can fall over onto a vacant site, creating a bidentate.

Surface_PiBond_to_DiSigma

If a vdW species has a double bond, then convert it to a bidentate with singe bonds.

rwest commented 5 years ago

Those three sound good. I edited the comments above this to get the names consistent.
I like the first reaction because otherwise if all a bi-dentate species can do is become mono-dentate again, then there's little point (besides a change in thermochemistry)

kblondal commented 5 years ago

Regarding how the thermo is estimated for bidentate species, the current approach is to use double the binding site area in the partition function calculation. So now the translational partition function is calculated by: Q_trans[i] = (2 pi m kB T/h^2) area sites, where "area" is a ninth of the DFT unit cell area (because nine Pt atoms per sheet in one unit cell), and "sites" is 1 for adsorbates with a single binding site and 2 for bidentate species. Apart from the translational Q the thermo is estimated the same way as for monodentate species.

I added the three bidentate reaction families to a new branch bidentate_families with made up activation energies and approximated pre-exponentials. I now have the last one defined in the reverse reaction, Surface_DiSigma_to_PiBond. Does it matter which direction it is defined in if the reactions are reversible? Perhaps depending on the kinetic parameters? I tried running this in RMG and it does not give errors but only Surface_Bidentate_Dissociation reactions get included in the mechanism edge for the tests I have made (catalytic combustion of methane, both with and without coupling with gas-phase reactions). Any recommendations for seeing if I can get them to be included and if they work as they are supposed to? Maybe increase the pre-exponential/activation energies in rules.py for the reaction families just for testing?

kblondal commented 5 years ago

Update regarding the DoubleBond_to_Bidentate family: I ran a test where a part of the surface is initially covered by *CHO for that and it seems to work correctly, as it can do the following:

*CHO + * => *=CH*O However, I got an error after this caused by the following Surface_Dissociation reaction:

*=CH*O + *=> *O + **=CH such that the second product adsorbate has two Pt sites bound to the carbon atom. The thermo estimation for that species unsurprisingly proved to be problematic for RMG and it threw up an error. I did not do anything to change the Surface_Dissociation family, so I was wondering if there is something wrong with the product formed by the Surface_DoubleBond_to_Bidentate family that I am testing, since I believe it should not undergo this kind of reaction.

kblondal commented 5 years ago

Update regarding the DiSigma_to_PiBond family: it seems to work as it should. At least so far I have seen that it was able to make pi-bonded O2 from bidentate O2. However I understand that it is preferable to define the reaction families in the exothermic direction, so I should rather have it as PiBond_to_DiSigma. In that case, how should I define the pi-bonded species in the entry in groups.py? More specifically I need to know if the surface site should be Xv or Xo, and if I should leave that site without a bond edge to the adsorbate.

rwest commented 5 years ago

For the comment (two above) about DoubleBond_to_Bidentate it is trying to do this

HC--O   -->   HC   O
    |          |   |
 X  X          X   X

but doesn't realize the C is already bonded and is doing this

 HC--O   -->   HC   O
  |  |         /\   |
X X  X         X X  X