Skip to content

Commit ffce0ff

Browse files
committed
Reworking the Elements blocks in cantera yaml writer.
Basing it on the Chemkin version. For now only evaluate it once, and include everything.
1 parent ff7fe35 commit ffce0ff

File tree

1 file changed

+39
-40
lines changed

1 file changed

+39
-40
lines changed

rmgpy/yaml_cantera.py

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,14 @@ def write_cantera(
6868
result_dict = get_mech_dict_surface(
6969
spcs, rxns, solvent=solvent, solvent_data=solvent_data
7070
)
71-
phases_block, elements_block = get_phases_elements_with_surface(
71+
phases_block = get_phases_with_surface(
7272
spcs, surface_site_density
7373
)
7474
else:
7575
result_dict = get_mech_dict_nonsurface(
7676
spcs, rxns, solvent=solvent, solvent_data=solvent_data
7777
)
78-
phases_block, elements_block = get_phases_elements_gas_only(spcs)
78+
phases_block = get_phases_gas_only(spcs)
7979

8080
with open(path, "w") as f:
8181
# generator line
@@ -92,14 +92,40 @@ def write_cantera(
9292
)
9393

9494
f.write(phases_block)
95-
f.write(elements_block)
9695

97-
yaml.dump(result_dict, stream=f, sort_keys=False)
96+
f.write(ELEMENTS_BLOCK)
9897

98+
yaml.dump(result_dict, stream=f, sort_keys=False)
9999

100-
def get_phases_elements_gas_only(spcs):
100+
def get_elements_block():
101+
"""
102+
Returns the 'elements' section, and elements list for a phase
101103
"""
102-
Returns 'phases' and 'elements' sections for a file
104+
from rmgpy.molecule.element import get_element
105+
elements_list = ['H', 'C', 'O', 'N', 'Ne', 'Ar', 'He', 'Si', 'S',
106+
'F', 'Cl', 'Br', 'I']
107+
isotopes = (('H', 2), ('H', 3), ('C', 13),('O', 18))
108+
elements_block_list = ['', 'elements:']
109+
for symbol, isotope in isotopes:
110+
element = get_element(symbol, isotope=isotope)
111+
chemkin_name = element.chemkin_name
112+
mass = 1000 * element.mass
113+
elements_block_list.append(f"- symbol: {chemkin_name}\n atomic-weight: {mass:f}")
114+
elements_list.append(chemkin_name)
115+
# Surface sites
116+
elements_list.append('X')
117+
elements_block_list.append("- symbol: X\n atomic-weight: 195.083\n\n")
118+
elements_block = '\n'.join(elements_block_list)
119+
elements_line = f"elements: [{', '.join(elements_list)}]"
120+
return elements_block, elements_line
121+
# For now this is not dynamic, and includes everything, so we just evaluate it
122+
# once and use it for all files.
123+
ELEMENTS_BLOCK, ELEMENTS_LINE = get_elements_block()
124+
125+
126+
def get_phases_gas_only(spcs):
127+
"""
128+
Returns 'phases' sections for a file
103129
with only gas-phase species/reactions.
104130
"""
105131
sorted_species = sorted(spcs, key=lambda spcs: spcs.index)
@@ -113,33 +139,20 @@ def get_phases_elements_gas_only(spcs):
113139
phases:
114140
- name: gas
115141
thermo: ideal-gas
116-
elements: [H, D, T, C, Ci, O, Oi, N, Ne, Ar, He, Si, S, F, Cl, Br, I]
142+
{ELEMENTS_LINE}
117143
species: [{', '.join(species_to_write)}]
118144
kinetics: gas
119145
transport: mixture-averaged
120146
state: {{T: 300.0, P: 1 atm}}
121147
"""
148+
return phases_block
122149

123-
elements_block = """
124-
elements:
125-
- symbol: Ci
126-
atomic-weight: 13.003
127-
- symbol: D
128-
atomic-weight: 2.014
129-
- symbol: Oi
130-
atomic-weight: 17.999
131-
- symbol: T
132-
atomic-weight: 3.016
133150

134-
"""
135-
return phases_block, elements_block
136-
137-
138-
def get_phases_elements_with_surface(spcs, surface_site_density):
151+
def get_phases_with_surface(spcs, surface_site_density):
139152
"""
140153
Yaml files with surface species begin with the following blocks of text,
141154
which includes TWO phases instead of just one.
142-
Returns 'phases' and 'elements' sections.
155+
Returns 'phases' sections.
143156
"""
144157
surface_species = []
145158
gas_species = []
@@ -177,7 +190,7 @@ def get_phases_elements_with_surface(spcs, surface_site_density):
177190
phases:
178191
- name: gas
179192
thermo: ideal-gas
180-
elements: [H, D, T, C, Ci, O, Oi, N, Ne, Ar, He, Si, S, F, Cl, Br, I]
193+
{ELEMENTS_LINE}
181194
species: [{', '.join(gas_species_to_write)}]
182195
kinetics: gas
183196
reactions: [gas_reactions]
@@ -187,29 +200,15 @@ def get_phases_elements_with_surface(spcs, surface_site_density):
187200
- name: {surface_species[0].smiles.replace("[","").replace("]","")}_surface
188201
thermo: ideal-surface
189202
adjacent-phases: [gas]
190-
elements: [H, D, T, C, Ci, O, Oi, N, Ne, Ar, He, Si, S, F, Cl, Br, I, X]
203+
{ELEMENTS_LINE}
191204
species: [{', '.join(surface_species_to_write)}]
192205
kinetics: surface
193206
reactions: [surface_reactions]
194207
site-density: {surface_site_density * 1e-4 }
195208
"""
196209
# surface_site_density * 1e-4 #in units of mol/cm^2
197210

198-
elements_block = """
199-
elements:
200-
- symbol: Ci
201-
atomic-weight: 13.003
202-
- symbol: D
203-
atomic-weight: 2.014
204-
- symbol: Oi
205-
atomic-weight: 17.999
206-
- symbol: T
207-
atomic-weight: 3.016
208-
- symbol: X
209-
atomic-weight: 195.083
210-
211-
"""
212-
return phases_block, elements_block
211+
return phases_block
213212

214213

215214
def get_mech_dict_surface(spcs, rxns, solvent="solvent", solvent_data=None):

0 commit comments

Comments
 (0)