@@ -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):
113139phases:
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):
177190phases:
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
215214def get_mech_dict_surface (spcs , rxns , solvent = "solvent" , solvent_data = None ):
0 commit comments