En af mange

Kommentarer om alt og ingenting

Et Generaliseret Reaktionsdata Værktøj

Forskning er mange ting, men en stor del af forskning handler ofte om databogholderi og gentagen udførsel af næsten de samme opgaver. Lige præcis den slags opgaver som computere er super gode til - og mennesker er dårlige til.

Reaktionskinetik handler om at analysere hastigheden af reaktionsforløb. Reaktionsforløb foregår typisk i flere trin (og ad flere reaktionsveje). F.eks. sker forbrændingesreaktionen hvor metan (CH4) reagerer med ilt og bliver til kulmonooxid (CO) og hydrogen (H2) ikke hvis man blot blander ilt og metan. Til gengæld kan reaktionsforløbet foregå langt hurtigere hvis man introducerer en overflade der kan hjælpe med at splitte metan (typisk ved stærk binding af kul til overfladen). Samtidig skal overfladen også frigive reaktionsprodukterne igen, hvilket gør at den ikke må binde for stærkt. Så den optimale katalysator er et komprimis der gør det let at splitte sine reaktanter på overfladen og frigive dem igem som reaktions produkter.

Reaktions energier

Et typisk reaktionsforløb vises nedenfor - der er både reaktionsbarrierer (stærk indflydelse på kinetikken) og energetiske barrier i reaktionsforløbet.

"Reaction energetics and barriers for a reaction pathway on an SOFC anode" [alt]

For at regne på kinetikken af sådanne reaktionsforløb ud, kræver det at man har reaktionsenergien af alle intermediære reaktioner, og de vigtigste barrierer mellem reaktionstrinnene.

Typisk ligger alle ens data i et regneark, hvor man vil have energien af forskellige delkomponenter. Samle dem, lave temperatur og dækningskorrektioner. Altsammen noget der er besværligt at holde styr på - men i princippet super enkelt.

I stedet kom jeg på den ide at ligge data i en database og lave en generaliseret evaluator, hvor jeg blot kunne sige

1
E('CH4:g + 2* -> CH3* + H* // CH3-H_TS*')

der basalt set udregner energi og relaterede egenskaber for metan der reagerer med en overflade, og går over et barriere bestemt af CH3-H_TS. Evaluatoren kan filtrere på materialer, lave brugerdefinerede korrektioner mm. Ovenstående giver så de energetiske informationer der skal indgå i den kinetiske model.

Kinetik

Den kinetiske model, kan tage flere mulige ratebegrænsende trin (RDS). Typisk vil man bruge en eller to - i simple tilfælde er rateligningerne enkle at skrive op, men igen lette at lave fejl i. Derfor lavede matrix baseret analytisk metode der var i stand til mindst at tage hensyn til to rate begrænsende trin. (Se her for detaljer om modellen).

Dette gjorde at det var meget let at analysere reaktionsforløb - nedenstående viser hvordan jeg typisk ville regne en reaktionsrate ud for et reaktionsforløb - og i et let forståeligt sprog.

Nedenfor ses et eksempel på hvor både energetik og kinetik beregnes for reaktionen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
R=Reactions.Reactions()
R.add_databases('E_DFT', 'lin_rel', 'BEP_rel', 'shomate_rel', 'vib_data')

# information used to evaluate the shomate relations and the vibrational data
R.add_info('p', {'CH4':1, 'H2':1})
R.add_info('T', 900)

# Now add information about the reaction process
# First dehydrogenation of methane on the surface - here we have all the transition station
R.add('1', 'CH4:g + 2* -> CH3* + H* // CH3-H_TS*')
R.add('2', 'CH3* + * -> CH2* + H* // CH2-H_TS*')
R.add('3', 'CH2* + * -> CH2 + H* // CH-H_TS*')
R.add('4', 'CH* + * -> CH + H* // C-H_TS*')
# Water gets dehydroganeted too - however, in this case we neglect their transition states
R.add('5', 'H2O:g + 2* -> OH* + H*')
R.add('6', 'OH* + * -> O* + H*')

# From the oxygen and carbon we produce CO in gas form
R.add('7', 'C* + O* -> CO* +* // C-O_TS*')
R.add('8', 'CO* -> CO:g + *')

# Finally we let hydrogen evolve from the surface
R.add('9', 'H* + H* -> H2:g + 2*')
R.add('10', 'H* + H* -> H2:g + 2*')
R.add('11', 'H* + H* -> H2:g + 2*')

# Only consider the 111 surface
R.filter_by('surf', '111')

# we now collect and calculate all relevant information needed in the kinetic and energetic calculations 
# for all the reaction steps above
R.collect('$lin_rel', '$G=$lin_rel+$TD_col', '$Gstan=$lin_rel+$TD_col-$TD_p-$ZPE')
R.process()

# Now we feed the calculated energetic properties into the kinetic model - where we set the rate determinant step to be reaction 1 and 7
kin_mod = Kinetics(R, RDS='1,7')
kin_mod.set(C_b=-6.4, O_b=-4)
# get the reaction rate, coverages etc, where the binding energy of carbon is -6.4 and oxygen binding energy is -4 (close to Ni)
kin_mod.summary()