@@ -68,14 +68,14 @@ def write_cantera(
68
68
result_dict = get_mech_dict_surface (
69
69
spcs , rxns , solvent = solvent , solvent_data = solvent_data
70
70
)
71
- phases_block , elements_block = get_phases_elements_with_surface (
71
+ phases_block = get_phases_with_surface (
72
72
spcs , surface_site_density
73
73
)
74
74
else :
75
75
result_dict = get_mech_dict_nonsurface (
76
76
spcs , rxns , solvent = solvent , solvent_data = solvent_data
77
77
)
78
- phases_block , elements_block = get_phases_elements_gas_only (spcs )
78
+ phases_block = get_phases_gas_only (spcs )
79
79
80
80
with open (path , "w" ) as f :
81
81
# generator line
@@ -92,14 +92,40 @@ def write_cantera(
92
92
)
93
93
94
94
f .write (phases_block )
95
- f .write (elements_block )
96
95
97
- yaml . dump ( result_dict , stream = f , sort_keys = False )
96
+ f . write ( ELEMENTS_BLOCK )
98
97
98
+ yaml .dump (result_dict , stream = f , sort_keys = False )
99
99
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
101
103
"""
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
103
129
with only gas-phase species/reactions.
104
130
"""
105
131
sorted_species = sorted (spcs , key = lambda spcs : spcs .index )
@@ -113,33 +139,20 @@ def get_phases_elements_gas_only(spcs):
113
139
phases:
114
140
- name: gas
115
141
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 }
117
143
species: [{ ', ' .join (species_to_write )} ]
118
144
kinetics: gas
119
145
transport: mixture-averaged
120
146
state: {{T: 300.0, P: 1 atm}}
121
147
"""
148
+ return phases_block
122
149
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
133
150
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 ):
139
152
"""
140
153
Yaml files with surface species begin with the following blocks of text,
141
154
which includes TWO phases instead of just one.
142
- Returns 'phases' and 'elements' sections.
155
+ Returns 'phases' sections.
143
156
"""
144
157
surface_species = []
145
158
gas_species = []
@@ -177,7 +190,7 @@ def get_phases_elements_with_surface(spcs, surface_site_density):
177
190
phases:
178
191
- name: gas
179
192
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 }
181
194
species: [{ ', ' .join (gas_species_to_write )} ]
182
195
kinetics: gas
183
196
reactions: [gas_reactions]
@@ -187,29 +200,15 @@ def get_phases_elements_with_surface(spcs, surface_site_density):
187
200
- name: { surface_species [0 ].smiles .replace ("[" ,"" ).replace ("]" ,"" )} _surface
188
201
thermo: ideal-surface
189
202
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 }
191
204
species: [{ ', ' .join (surface_species_to_write )} ]
192
205
kinetics: surface
193
206
reactions: [surface_reactions]
194
207
site-density: { surface_site_density * 1e-4 }
195
208
"""
196
209
# surface_site_density * 1e-4 #in units of mol/cm^2
197
210
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
213
212
214
213
215
214
def get_mech_dict_surface (spcs , rxns , solvent = "solvent" , solvent_data = None ):
0 commit comments