Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update diamond.cti and diamond_cvd.py #630

Merged
merged 1 commit into from
Aug 5, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 59 additions & 48 deletions data/inputs/diamond.cti
Original file line number Diff line number Diff line change
@@ -1,96 +1,107 @@
# simplified version of Harris and Goodwin diamond (100) growth
# mechanism, J. Phys. Chem., 1993.

# Trough mechanism from 'S. J. Harris and D. G. Goodwin, 'Growth on
# the reconstructed diamond (100) surface, 'J. Phys. Chem. vol. 97,
# 23-28 (1993). reactions a - t are taken directly from Table II,
# with thermochemistry from Table IV. Reaction u is added here.


units(length = 'cm', quantity = 'mol', act_energy = 'kcal/mol')

#------------- the gas -------------------------------------

ideal_gas(name = 'gas',
elements = 'H C',
species = 'gri30: H H2 CH3 CH4',
initial_state = state(temperature = 1200.0,
pressure = 1.0e3,
mole_fractions = 'H:0.002, H2:1, CH4:0.01, CH3:0.0002'))
initial_state = state(
temperature = 1200.0,
pressure = 20.0 * OneAtm / 760.0,
mole_fractions = 'H:0.002, H2:0.988, CH3:0.0002, CH4:0.01',
)
)

#------------- bulk diamond -------------------------------------

stoichiometric_solid(name = 'diamond',
elements = 'C',
density = (3.52, 'g/cm3'),
species = 'C(d)')
elements = 'C',
density = (3.52, 'g/cm3'),
species = 'C(d)')

species(name = 'C(d)',
atoms = 'C:1') # no thermo needed (reaction is irreversible)

#------------- the diamond surface -------------------------------------

ideal_interface(name = 'diamond_100',
elements = 'H C',
species = 'c6HH c6H* c6*H c6** c6HM c6HM* c6*M c6B ',
reactions = 'all',
phases = 'gas diamond',
site_density = (3.0e-9, 'mol/cm2'),
site_density = (3.0E-9, 'mol/cm2'),
initial_state = state(temperature = 1200.0,
coverages = 'c6H*:0.1, c6HH:0.9'))

species(name = 'C(d)',
atoms = 'C:1',
thermo = const_cp() )

# an empty surface site
species(name = 'c6H*',
atoms = 'H:1',
thermo = const_cp(h0 = (51.7, 'kcal/mol'), s0 = (19.5, 'cal/mol/K') ) )
thermo = const_cp(h0 = (51.7, 'kcal/mol'),
s0 = (19.5, 'cal/mol/K')))

species(name = 'c6*H',
atoms = 'H:1',
thermo = const_cp(h0 = (46.1, 'kcal/mol'), s0 = (19.9, 'cal/mol/K') ) )
thermo = const_cp(h0 = (46.1, 'kcal/mol'),
s0 = (19.9, 'cal/mol/K')))

# a hydrogen-terminated site
species(name = 'c6HH',
atoms = 'H:2',
thermo = const_cp(t0 = 1200.0, h0 = (11.4, 'kcal/mol'),
s0 = (21.0, 'cal/mol/K'))
)
thermo = const_cp(h0 = (11.4, 'kcal/mol'),
s0 = (21.0, 'cal/mol/K')))

species(name = 'c6HM',
atoms = 'C:1 H:4',
thermo = const_cp(h0 = (26.9, 'kcal/mol'),
s0 = (40.3, 'cal/mol/K') )
)
s0 = (40.3, 'cal/mol/K')))

species(name = 'c6HM*',
atoms = 'C:1 H:3',
thermo = const_cp(h0 = (65.8, 'kcal/mol'),
s0 = (40.1, 'cal/mol/K') )
)
s0 = (40.1, 'cal/mol/K')))

species(name = 'c6*M',
atoms = 'C:1 H:3',
thermo = const_cp(h0 = (53.3, 'kcal/mol'),
s0 = (38.9, 'cal/mol/K') )
)
s0 = (38.9, 'cal/mol/K')))

species(name = 'c6**',
atoms = 'C:0',
thermo = const_cp(h0 = (90.0, 'kcal/mol'),
s0 = (18.4, 'cal/mol/K') )
)
s0 = (18.4, 'cal/mol/K')))

species(name = 'c6B',
atoms = 'H:2 C:1',
thermo = const_cp(h0 = (40.9, 'kcal/mol'),
s0 = (26.9, 'cal/mol/K') ) )

surface_reaction('c6HH + H <=> c6H* + H2', [1.3e14, 0.0, 7.3]) # a
surface_reaction('c6H* + H <=> c6HH', [1.0e13, 0.0, 0.0]) # b
surface_reaction('c6H* + CH3 <=> c6HM', [5.0e12, 0.0, 0.0]) # c
surface_reaction('c6HM + H <=> c6*M + H2', [1.3e14, 0.0, 7.3]) # d
surface_reaction('c6*M + H <=> c6HM', [1.0e13, 0.0, 0.0]) # e
surface_reaction('c6HM + H <=> c6HM* + H2', [2.8e7, 2.0, 7.7]) # f
surface_reaction('c6HM* + H <=> c6HM', [1.0e13, 0.0, 0.0]) # g
surface_reaction('c6HM* <=> c6*M', [1.0e8, 0.0, 0.0]) # h
surface_reaction('c6HM* + H <=> c6H* + CH3', [3.0e13, 0.0, 0.0]) # i
surface_reaction('c6HM* + H <=> c6B + H2', [1.3e14, 0.0, 7.3]) # k
surface_reaction('c6*M + H <=> c6B + H2', [2.8e7, 2.0, 7.7]) # l
surface_reaction('c6HH + H <=> c6*H + H2', [1.3e14, 0.0, 7.3]) # m
surface_reaction('c6*H + H <=> c6HH', [1.0e13, 0.0, 0.0]) # n
surface_reaction('c6H* + H <=> c6** + H2', [1.3e14, 0.0, 7.3]) # o
surface_reaction('c6** + H <=> c6H*', [1.0e13, 0.0, 0.0]) # p
surface_reaction('c6*H + H <=> c6** + H2', [4.5e6, 2.0, 5.0]) # q
surface_reaction('c6** + H <=> c6*H', [1.0e13, 0.0, 0.0]) # r
surface_reaction('c6** + CH3 <=> c6*M', [5.0e12, 0.0, 0.0]) # s
surface_reaction('c6H* <=> c6*H', [1.0e8, 0.0, 0.0]) # t
surface_reaction('c6B => c6HH + C(d)', [1.0e9, 0.0, 0.0])
s0 = (26.9, 'cal/mol/K')))

surface_reaction('c6HH + H <=> c6H* + H2', [1.3E14, 0.0, 7.3]) # a
surface_reaction('c6H* + H <=> c6HH', [1.0E13, 0.0, 0.0]) # b
surface_reaction('c6H* + CH3 <=> c6HM', [5.0E12, 0.0, 0.0]) # c
surface_reaction('c6HM + H <=> c6*M + H2', [1.3E14, 0.0, 7.3]) # d
surface_reaction('c6*M + H <=> c6HM', [1.0E13, 0.0, 0.0]) # e
surface_reaction('c6HM + H <=> c6HM* + H2', [2.8E7, 2.0, 7.7]) # f
surface_reaction('c6HM* + H <=> c6HM', [1.0E13, 0.0, 0.0]) # g
surface_reaction('c6HM* <=> c6*M', [1.0E8, 0.0, 0.0]) # h
surface_reaction('c6HM* + H <=> c6H* + CH3', [3.0E13, 0.0, 0.0]) # i
surface_reaction('c6HM* + H <=> c6B + H2', [1.3E14, 0.0, 7.3]) # k
surface_reaction('c6*M + H <=> c6B + H2', [2.8E7, 2.0, 7.7]) # l
surface_reaction('c6HH + H <=> c6*H + H2', [1.3E14, 0.0, 7.3]) # m
surface_reaction('c6*H + H <=> c6HH', [1.0E13, 0.0, 0.0]) # m
surface_reaction('c6H* + H <=> c6** + H2', [1.3E14, 0.0, 7.3]) # o
surface_reaction('c6** + H <=> c6H*', [1.0E13, 0.0, 0.0]) # p
surface_reaction('c6*H + H <=> c6** + H2', [4.5E6, 2.0, 5.0]) # q
surface_reaction('c6** + H <=> c6*H', [1.0E13, 0.0, 0.0]) # r
surface_reaction('c6** + CH3 <=> c6*M', [5.0E12, 0.0, 0.0]) # s
surface_reaction('c6H* <=> c6*H', [1.0E8, 0.0, 0.0]) # t

# reaction to add new carbon atom to bulk and regenerate a new site
#
surface_reaction('c6B => c6HH + C(d)', [1.0E9, 0.0, 0.0]) # u
64 changes: 43 additions & 21 deletions interfaces/cython/cantera/examples/surface_chemistry/diamond_cvd.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import csv
import cantera as ct
import pandas as pd

print('\n****** CVD Diamond Example ******\n')

Expand All @@ -21,7 +22,6 @@
# import the model for the diamond (100) surface
d = ct.Interface('diamond.cti', 'diamond_100', [g, dbulk])

ns = d.n_species
mw = dbulk.molecular_weights[0]

t = 1200.0
Expand All @@ -32,23 +32,45 @@
ih = g.species_index('H')

xh0 = x[ih]
f = open('diamond.csv', 'w')
writer = csv.writer(f)
writer.writerow(['H mole Fraction', 'Growth Rate (microns/hour)'] +
d.species_names)

iC = d.kinetics_species_index(dbulk.species_index('C(d)'), 1)

for n in range(20):
x[ih] /= 1.4
g.TPX = t, p, x
d.advance_coverages(10.0) # integrate the coverages to steady state
carbon_dot = d.net_production_rates[iC]
mdot = mw * carbon_dot
rate = mdot / dbulk.density
writer.writerow([x[ih], rate * 1.0e6 * 3600.0] + list(d.coverages))

f.close()

print('H concentration, growth rate, and surface coverages '
'written to file diamond.csv')

with open('diamond.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['H mole Fraction', 'Growth Rate (microns/hour)'] +
d.species_names)

iC = d.kinetics_species_index(dbulk.species_index('C(d)'), 1)

for n in range(20):
x[ih] /= 1.4
g.TPX = t, p, x
d.advance_coverages(10.0) # integrate the coverages to steady state
carbon_dot = d.net_production_rates[iC]
mdot = mw * carbon_dot
rate = mdot / dbulk.density
writer.writerow([x[ih], rate * 1.0e6 * 3600.0] + list(d.coverages))

print('H concentration, growth rate, and surface coverages '
'written to file diamond.csv')

try:
import matplotlib.pyplot as plt
data = pd.read_csv('diamond.csv')

plt.figure()
plt.plot(data['H mole Fraction'], data['Growth Rate (microns/hour)'])
plt.xlabel('H Mole Fraction')
plt.ylabel('Growth Rate (microns/hr)')
plt.show()

plt.figure()
for name in data:
if name.startswith('H mole') or name.startswith('Growth'):
continue
plt.plot(data['H mole Fraction'], data[name], label=name)

plt.legend()
plt.xlabel('H Mole Fraction')
plt.ylabel('Coverage')
plt.show()
except ImportError:
print("Install matplotlib to plot the outputs")
1 change: 1 addition & 0 deletions interfaces/cython/cantera/test/test_reactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -983,6 +983,7 @@ def make_reactors(self):
self.solid = ct.Solution('diamond.xml', 'diamond')
self.interface = ct.Interface('diamond.xml', 'diamond_100',
(self.gas, self.solid))
self.gas.TPX = None, 1.0e3, 'H:0.002, H2:1, CH4:0.01, CH3:0.0002'
self.r1 = ct.IdealGasReactor(self.gas)
self.r1.volume = 0.01
self.net.add_reactor(self.r1)
Expand Down
107 changes: 0 additions & 107 deletions test_problems/diamondSurf/diamond.cti

This file was deleted.

Loading