# Elementary Reaction / Mechanism¶

ElementaryReaction class allows to define reversible and/or irreversible elementary steps for adsorption of molecules on surface sites, desorption from there, diffusion from one site to a neighboring site, or reactions between adsorbed particles and gas species. ElementaryReaction class has a one-to-one relation with the sections steps and reversible_step in Zacros’ input files.

For our example (see use case system), we need to create three irreversible events:

1. Non-dissociative adsorption of CO: CO(g) + * 🠒 CO*
2. Dissociative adsorption of O2: O2(g) + * + * 🠒 O* + O*
3. Fast reaction between an O adatom and a CO adsorbate to produce CO2: O* + CO* 🠒 * + * + CO2(g)

This can be achieved by using the lines 1-10 of following code:

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # Elementary Reactions CO_ads = pz.ElementaryReaction( initial=[s0, CO_g], final=[CO_s], reversible=False, pre_expon=10.0, label="CO_adsorption" ) O2_ads = pz.ElementaryReaction( initial=[s0, s0, O2_g], final=[O_s, O_s], neighboring=[(0,1)], reversible=False, pre_expon=2.5, label="O2_adsorption" ) CO_oxi = pz.ElementaryReaction( initial=[CO_s, O_s], final=[s0, s0, CO2_g], neighboring=[(0,1)], reversible=False, pre_expon=1.0e+20, label="CO_oxidation") mech = pz.Mechanism([O2_ads, CO_ads, CO_oxi]) print(mech) 

Here, we have also introduced the class Mechanism, which is formally a list of ElementaryReaction objects (see line 16). But, it allows looking at the Zacros code that will be generated by using the print() function (see line 18). The execution of the previous lines show the following on the standard output:

mechanism

gas_reacs_prods O2 -1
sites 2
neighboring 1-2
initial
1 * 1
2 * 1
final
1 O* 1
2 O* 1
site_types 1 1
pre_expon  2.50000e+00
activ_eng  0.00000e+00
end_step

gas_reacs_prods CO -1
sites 1
initial
1 * 1
final
1 CO* 1
site_types 1
pre_expon  1.00000e+01
activ_eng  0.00000e+00
end_step

step CO_oxidation
gas_reacs_prods CO2 1
sites 2
neighboring 1-2
initial
1 CO* 1
2 O* 1
final
1 * 1
2 * 1
site_types 1 1
pre_expon  1.00000e+20
activ_eng  0.00000e+00
end_step

end_mechanism


Please consult Zacros’ user guide (\$AMSHOME/scripting/scm/pyzacros/doc/ZacrosManual.pdf) for more details about the specific meaning of the keywords used in the previous lines.

## API¶

class ElementaryReaction(initial, final, site_types=None, initial_entity_number=None, final_entity_number=None, neighboring=None, reversible=True, pre_expon=0.0, pe_ratio=0.0, activation_energy=0.0, label=None)

Creates a new ElementaryReaction object

• initial – List of species bound to the sites in the initial state, e.g. [ Species("H*",1), Species("H*",1) ]. Gas species have to be added at the end of the list.
• final – Same as initial but for the final state.
• site_types – Specifies the name of the sites in the graph pattern, e.g. ['fcc','hcp']. Notice that the order is essential and it should agree with the initial and final options.
• initial_entity_number – List of the molecular entities ids bound to each site. For example, if a bidentate species is bound to sites 1 and 2 ( species=[ Species("H**",2), Species("H**",2) ] ), both of these sites will have the same entity numbers, i.e. entity_number=[0,0]. By default, the list of entity numbers is created by assuming that species with the same symbol belong to the same entity.
• final_entity_number – Same as initial_entity_number but for the final state.
• neighboring – Specifies the neighboring between sites, if more than one sites appear in the graph pattern, e.g. [ (0,1) ]
• reversible – Sets the reaction as a reversible step.
• pre_expon – Specifies the pre-exponential in the Arrhenius formula giving the rate constant of that elementary step. Units: 1/s or Hz.
• pe_ratio – Sets the ratio of forward over reverse pre-exponential terms if the reaction is reversible.
• activation_energy – Sets the activation energy at the zero coverage limit. Units eV.
• label – If None, a unique label is generated based on the label of its initial and final states.
label()

Returns the label of the cluster

site_types_set()

Returns the set of the sites types

replace_site_types_names(site_types_old, site_types_new)

Replaces the site types names

• site_types_old – List of strings containing the old site_types to be replaced
• site_types_new – List of strings containing the new site_types which would replace old site_types_old.
class Mechanism(data=[])

Creates a new Mechanism object

• data
append(item)

Append item to the end of the sequence

extend(other)

Extend sequence by appending elements from the iterable

insert(i, item)

Insert value before index

surface_species()

Returns the surface species list.

gas_species()

Returns the gas species list.

species()

site_types_set()
replace_site_types_names(site_types_old, site_types_new)
• site_types_old – List of strings containing the old site_types to be replaced
• site_types_new – List of strings containing the new site_types which would replace old site_types_old.