diff --git a/README.md b/README.md index f6dbfc0..3fdda2b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +#Updates: April l6 2024 + - Removed CTI dependencies so that this version of PyMARS (DRGEP+SA only) works with Cantera 3 YAML Chemistry Model files. + - Added access to Cantera's adaptive pre-conditioner for constant pressure reactors. + - To do: Revise the rest of the code to ensure full functionality. + + # pyMARS diff --git a/drg.py b/drg.py new file mode 100644 index 0000000..c925487 --- /dev/null +++ b/drg.py @@ -0,0 +1,330 @@ +"""Module containing Directed Relation Graph (DRG) reduction method.""" +import logging +import os +import networkx +import numpy as np +import cantera as ct + +from . import soln2cti +from .sampling import sample, sample_metrics, calculate_error +from .reduce_model import trim, ReducedModel + + +def create_drg_matrix(state, solution): + """Creates DRG adjacency matrix based on direct interaction coefficients + + Parameters + ---------- + state : tuple + Tuple of state with temperature, pressure, and species mass fractions + solution : cantera.Solution + Cantera object of the solution being analyzed + + Returns + ------- + adjacency_matrix : numpy.ndarray + Adjacency matrix based on calculated direct interaction coefficients + + """ + temp, pressure, mass_fractions = state + solution.TPY = temp, pressure, mass_fractions + + net_stoich = solution.product_stoich_coeffs - solution.reactant_stoich_coeffs + flags = np.where(((solution.product_stoich_coeffs != 0) | + (solution.reactant_stoich_coeffs !=0 ) + ), 1, 0) + + # only consider contributions from reactions with nonzero net rates of progress + valid_reactions = np.where(solution.net_rates_of_progress != 0)[0] + if valid_reactions.size: + base_rates = np.abs( + net_stoich[:, valid_reactions] * + solution.net_rates_of_progress[valid_reactions] + ) + denominator = np.sum(base_rates, axis=1)[:, np.newaxis] + + numerator = np.zeros((solution.n_species, solution.n_species)) + for sp_b in range(solution.n_species): + numerator[:, sp_b] += np.sum( + base_rates[:, np.where(flags[sp_b, valid_reactions])[0]], axis=1 + ) + #numerator = np.einsum('ij,kj->ik', base_rates, flags) + + # May get divide by zero if an inert species is present, and denominator + # entry is zero. + with np.errstate(divide='ignore', invalid='ignore'): + adjacency_matrix = np.where(denominator != 0, numerator / denominator, 0) + + else: + adjacency_matrix = np.zeros((solution.n_species, solution.n_species)) + + # set diagonals to zero, to avoid self-directing graph edges + np.fill_diagonal(adjacency_matrix, 0.0) + + return adjacency_matrix + + +def graph_search(graph, target_species): + """Search nodal graph and generate list of species to remove + + Parameters + ---------- + graph : networkx.DiGraph + graph representing reaction system + target_species : list + List of target species to search from + + Returns + ------- + reached_species : list of str + List of species reachable from targets in graph + + """ + reached_species = [] + for target in target_species: + reached_species += list(networkx.dfs_preorder_nodes(graph, target)) + reached_species = list(set(reached_species)) + + return reached_species + + +def trim_drg(matrix, species_names, species_targets, threshold): + """ + + Parameters + ---------- + matrix : np.ndarray + Adjacency matrix representing graph + species_names : list of str + List of all species names + species_targets : list of str + List of target species names + threshold : float + DRG threshold for trimming graph + + Returns + ------ + species_reached : list of str + Names of species reached in graph search + + """ + name_mapping = {i: sp for i, sp in enumerate(species_names)} + graph = networkx.DiGraph(np.where(matrix >= threshold, matrix, 0.0)) + networkx.relabel_nodes(graph, name_mapping, copy=False) + species_reached = graph_search(graph, species_targets) + + return species_reached + + +def reduce_drg(model_file, species_targets, species_safe, threshold, + matrices, ignition_conditions, sampled_metrics, + phase_name='', previous_model=None, threshold_upper=None, + num_threads=1, path='' + ): + """Given a threshold and DRG matrix, reduce the model and determine the error. + + Parameters + ---------- + model_file : str + Filename for model being reduced + species_targets : list of str + List of target species names + species_safe : list of str + List of species to always be retained + threshold : float + DRG threshold for trimming graph + matrices : list of numpy.ndarray + List of DRG adjacency matrices determined from thermochemical state data + ignition_conditions : list of InputIgnition + List of autoignition initial conditions. + sampled_metrics: numpy.ndarray + Global metrics from original model used to evaluate error + phase_name : str, optional + Optional name for phase to load from CTI file (e.g., 'gas'). + previous_model : ReducedModel, optional + Model produced at previous threshold level; used to avoid repeated work. + threshold_upper : float, optional + Optional upper threshold (epsilon^star) used to identify species for + further sensitivity analysis + num_threads : int, optional + Number of CPU threads to use for performing simulations in parallel. + Optional; default = 1, in which the multiprocessing module is not used. + If 0, then use the available number of cores minus one. Otherwise, + use the specified number of threads. + path : str, optional + Optional path for writing files + + Returns + ------- + ReducedModel + Return reduced model and associated metadata + + """ + solution = ct.Solution(model_file, phase_name) + + species_retained = [] + for matrix in matrices: + species_retained += trim_drg(matrix, solution.species_names, species_targets, threshold) + + # want to ensure retained species are the set of those reachable for each state + species_retained = list(set(species_retained)) + + if previous_model and len(species_retained) == previous_model.model.n_species: + return previous_model + + species_removed = [sp for sp in solution.species_names + if sp not in (species_retained + species_safe) + ] + + # Cut the exclusion list from the model. + reduced_model = trim( + model_file, species_removed, f'reduced_{model_file}', phase_name=phase_name + ) + reduced_model_filename = soln2cti.write( + reduced_model, f'reduced_{reduced_model.n_species}.yaml', path=path + ) + + reduced_model_metrics = sample_metrics( + reduced_model_filename, ignition_conditions, phase_name=phase_name, + num_threads=num_threads, path=path + ) + error = calculate_error(sampled_metrics, reduced_model_metrics) + + # If desired, now identify limbo species for future sensitivity analysis + limbo_species = [] + if threshold_upper: + species_retained += trim_drg( + matrix, solution.species_names, species_targets, threshold_upper + ) + limbo_species = [ + sp for sp in solution.species_names + if sp not in (species_retained + species_safe + species_removed) + ] + + return ReducedModel( + model=reduced_model, filename=reduced_model_filename, + error=error, limbo_species=limbo_species + ) + + +def run_drg(model_file, ignition_conditions, psr_conditions, flame_conditions, + error_limit, species_targets, species_safe, phase_name='', + threshold_upper=None, num_threads=1, path='' + ): + """Main function for running DRG reduction. + + Parameters + ---------- + model_file : str + Original model file + ignition_conditions : list of InputIgnition + List of autoignition initial conditions. + psr_conditions : list of InputPSR, optional + List of PSR simulation conditions. + flame_conditions : list of InputLaminarFlame, optional + List of laminar flame simulation conditions. + error_limit : float + Maximum allowable error level for reduced model + species_targets : list of str + List of target species names + species_safe : list of str + List of species names to always be retained + phase_name : str, optional + Optional name for phase to load from CTI file (e.g., 'gas'). + threshold_upper: float, optional + Upper threshold (epsilon^*) to identify limbo species for sensitivity analysis + num_threads : int, optional + Number of CPU threads to use for performing simulations in parallel. + Optional; default = 1, in which the multiprocessing module is not used. + If 0, then use the available number of cores minus one. Otherwise, + use the specified number of threads. + path : str, optional + Optional path for writing files + + Returns + ------- + ReducedModel + Return reduced model and associated metadata + + """ + solution = ct.Solution(model_file, phase_name) + + assert species_targets, 'Need to specify at least one target species.' + + # first, sample thermochemical data and generate metrics for measuring error + # (e.g, ignition delays). Also produce adjacency matrices for graphs, which + # will be used to produce graphs for any threshold value. + sampled_metrics, sampled_data = sample( + model_file, ignition_conditions, phase_name=phase_name, num_threads=num_threads, path=path + ) + + matrices = [] + for state in sampled_data: + matrices.append(create_drg_matrix((state[0], state[1], state[2:]), solution)) + + # begin reduction iterations + logging.info('Beginning DRG reduction loop') + logging.info(45 * '-') + logging.info('Threshold | Number of species | Max error (%)') + + # start with detailed (starting) model + previous_model = ReducedModel(model=solution, filename=model_file, error=0.0) + + first = True + error_current = 0.0 + threshold = 0.01 + threshold_increment = 0.01 + while error_current <= error_limit: + reduced_model = reduce_drg( + model_file, species_targets, species_safe, threshold, matrices, + ignition_conditions, sampled_metrics, + phase_name=phase_name, previous_model=previous_model, + threshold_upper=threshold_upper, num_threads=num_threads, path=path + ) + error_current = reduced_model.error + num_species = reduced_model.model.n_species + + # reduce threshold if past error limit on first iteration + if first and error_current > error_limit: + error_current = 0.0 + threshold /= 10 + threshold_increment /= 10 + if threshold <= 1e-5: + raise SystemExit( + 'Threshold value dropped below 1e-5 without producing viable reduced model' + ) + logging.info('Threshold value too high, reducing by factor of 10') + continue + + logging.info(f'{threshold:^9.2e} | {num_species:^17} | {error_current:^.2f}') + + threshold += threshold_increment + first = False + + # cleanup files + if previous_model.model.n_species != reduced_model.model.n_species: + os.remove(reduced_model.filename) + + previous_model = ReducedModel( + model=reduced_model.model, filename=reduced_model.filename, + error=reduced_model.error, limbo_species=reduced_model.limbo_species + ) + + if error_current > error_limit: + threshold -= (2 * threshold_increment) + reduced_model = reduce_drg( + model_file, species_targets, species_safe, threshold, matrices, + ignition_conditions, sampled_metrics, phase_name=phase_name, + threshold_upper=threshold_upper, num_threads=num_threads, path=path + ) + else: + soln2cti.write(reduced_model, f'reduced_{reduced_model.model.n_species}.yaml', path=path) + + logging.info(45 * '-') + logging.info('DRG reduction complete.') + logging.info(f'Skeletal model: {reduced_model.model.n_species} species and ' + f'{reduced_model.model.n_reactions} reactions.' + ) + logging.info(f'Maximum error: {reduced_model.error:.2f}%') + logging.info('Final reduced model saved as ' + reduced_model.filename) + return reduced_model diff --git a/grimech30.yaml b/grimech30.yaml new file mode 100644 index 0000000..764c7b4 --- /dev/null +++ b/grimech30.yaml @@ -0,0 +1,1775 @@ +description: |- + GRI-Mech Version 3.0 7/30/99 CHEMKIN-II format + See README30 file at anonymous FTP site unix.sri.com, directory gri; + WorldWideWeb home page http://www.me.berkeley.edu/gri_mech/ or + through http://www.gri.org , under 'Basic Research', + for additional information, contacts, and disclaimer + +generator: ck2yaml +input-files: [grimech30.dat, thermo30.dat, transport.dat] +cantera-version: 3.0.0 +date: Tue, 16 Apr 2024 15:13:25 -0400 + +units: {length: cm, time: s, quantity: mol, activation-energy: cal/mol} + +phases: +- name: gas + thermo: ideal-gas + elements: [O, H, C, N, Ar] + species: [H2, H, O, O2, OH, H2O, HO2, H2O2, C, CH, CH2, CH2(S), CH3, CH4, + CO, CO2, HCO, CH2O, CH2OH, CH3O, CH3OH, C2H, C2H2, C2H3, C2H4, C2H5, + C2H6, HCCO, CH2CO, HCCOH, N, NH, NH2, NH3, NNH, NO, NO2, N2O, HNO, CN, + HCN, H2CN, HCNN, HCNO, HOCN, HNCO, NCO, N2, AR, C3H7, C3H8, CH2CHO, + CH3CHO] + kinetics: gas + transport: mixture-averaged + state: {T: 300.0, P: 1 atm} + +species: +- name: H2 + composition: {H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.34433112, 7.98052075e-03, -1.9478151e-05, 2.01572094e-08, -7.37611761e-12, + -917.935173, 0.683010238] + - [3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, 2.00255376e-14, + -950.158922, -3.20502331] + note: TPIS78 + transport: + model: gas + geometry: linear + well-depth: 38.0 + diameter: 2.92 + polarizability: 0.79 + rotational-relaxation: 280.0 +- name: H + composition: {H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, + 2.54736599e+04, -0.446682853] + - [2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, 4.98197357e-22, + 2.54736599e+04, -0.446682914] + note: L 7/88 + transport: + model: gas + geometry: atom + well-depth: 145.0 + diameter: 2.05 +- name: O + composition: {O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.1682671, -3.27931884e-03, 6.64306396e-06, -6.12806624e-09, 2.11265971e-12, + 2.91222592e+04, 2.05193346] + - [2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, 1.22833691e-15, + 2.92175791e+04, 4.78433864] + note: |- + L 1/90 + GRI-Mech Version 3.0 Thermodynamics released 7/30/99 + NASA Polynomial format for CHEMKIN-II + see README file for disclaimer + transport: + model: gas + geometry: atom + well-depth: 80.0 + diameter: 2.75 +- name: O2 + composition: {O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.78245636, -2.99673416e-03, 9.84730201e-06, -9.68129509e-09, 3.24372837e-12, + -1063.94356, 3.65767573] + - [3.28253784, 1.48308754e-03, -7.57966669e-07, 2.09470555e-10, -2.16717794e-14, + -1088.45772, 5.45323129] + note: TPIS89 + transport: + model: gas + geometry: linear + well-depth: 107.4 + diameter: 3.458 + polarizability: 1.6 + rotational-relaxation: 3.8 +- name: OH + composition: {O: 1, H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.99201543, -2.40131752e-03, 4.61793841e-06, -3.88113333e-09, 1.3641147e-12, + 3615.08056, -0.103925458] + - [3.09288767, 5.48429716e-04, 1.26505228e-07, -8.79461556e-11, 1.17412376e-14, + 3858.657, 4.4766961] + note: RUS 78 + transport: + model: gas + geometry: linear + well-depth: 80.0 + diameter: 2.75 +- name: H2O + composition: {H: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19864056, -2.0364341e-03, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, + -3.02937267e+04, -0.849032208] + - [3.03399249, 2.17691804e-03, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, + -3.00042971e+04, 4.9667701] + note: L 8/89 + transport: + model: gas + geometry: nonlinear + well-depth: 572.4 + diameter: 2.605 + dipole: 1.844 + rotational-relaxation: 4.0 +- name: HO2 + composition: {H: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30179801, -4.74912051e-03, 2.11582891e-05, -2.42763894e-08, 9.29225124e-12, + 294.80804, 3.71666245] + - [4.0172109, 2.23982013e-03, -6.3365815e-07, 1.1424637e-10, -1.07908535e-14, + 111.856713, 3.78510215] + note: L 5/89 + transport: + model: gas + geometry: nonlinear + well-depth: 107.4 + diameter: 3.458 + rotational-relaxation: 1.0 + note: '*' +- name: H2O2 + composition: {H: 2, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.27611269, -5.42822417e-04, 1.67335701e-05, -2.15770813e-08, 8.62454363e-12, + -1.77025821e+04, 3.43505074] + - [4.16500285, 4.90831694e-03, -1.90139225e-06, 3.71185986e-10, -2.87908305e-14, + -1.78617877e+04, 2.91615662] + note: L 7/88 + transport: + model: gas + geometry: nonlinear + well-depth: 107.4 + diameter: 3.458 + rotational-relaxation: 3.8 +- name: C + composition: {C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.55423955, -3.21537724e-04, 7.33792245e-07, -7.32234889e-10, 2.66521446e-13, + 8.54438832e+04, 4.53130848] + - [2.49266888, 4.79889284e-05, -7.2433502e-08, 3.74291029e-11, -4.87277893e-15, + 8.54512953e+04, 4.80150373] + note: L11/88 + transport: + model: gas + geometry: atom + well-depth: 71.4 + diameter: 3.298 + note: '*' +- name: CH + composition: {C: 1, H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.48981665, 3.23835541e-04, -1.68899065e-06, 3.16217327e-09, -1.40609067e-12, + 7.07972934e+04, 2.08401108] + - [2.87846473, 9.70913681e-04, 1.44445655e-07, -1.30687849e-10, 1.76079383e-14, + 7.10124364e+04, 5.48497999] + note: TPIS79 + transport: + model: gas + geometry: linear + well-depth: 80.0 + diameter: 2.75 +- name: CH2 + composition: {C: 1, H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.76267867, 9.68872143e-04, 2.79489841e-06, -3.85091153e-09, 1.68741719e-12, + 4.60040401e+04, 1.56253185] + - [2.87410113, 3.65639292e-03, -1.40894597e-06, 2.60179549e-10, -1.87727567e-14, + 4.6263604e+04, 6.17119324] + note: L S/93 + transport: + model: gas + geometry: linear + well-depth: 144.0 + diameter: 3.8 +- name: CH2(S) + composition: {C: 1, H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19860411, -2.36661419e-03, 8.2329622e-06, -6.68815981e-09, 1.94314737e-12, + 5.04968163e+04, -0.769118967] + - [2.29203842, 4.65588637e-03, -2.01191947e-06, 4.17906e-10, -3.39716365e-14, + 5.09259997e+04, 8.62650169] + note: L S/93 + transport: + model: gas + geometry: linear + well-depth: 144.0 + diameter: 3.8 +- name: CH3 + composition: {C: 1, H: 3} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.6735904, 2.01095175e-03, 5.73021856e-06, -6.87117425e-09, 2.54385734e-12, + 1.64449988e+04, 1.60456433] + - [2.28571772, 7.23990037e-03, -2.98714348e-06, 5.95684644e-10, -4.67154394e-14, + 1.67755843e+04, 8.48007179] + note: L11/89 + transport: + model: gas + geometry: linear + well-depth: 144.0 + diameter: 3.8 +- name: CH4 + composition: {C: 1, H: 4} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.14987613, -0.0136709788, 4.91800599e-05, -4.84743026e-08, 1.66693956e-11, + -1.02466476e+04, -4.64130376] + - [0.074851495, 0.0133909467, -5.73285809e-06, 1.22292535e-09, -1.0181523e-13, + -9468.34459, 18.437318] + note: L 8/88 + transport: + model: gas + geometry: nonlinear + well-depth: 141.4 + diameter: 3.746 + polarizability: 2.6 + rotational-relaxation: 13.0 +- name: CO + composition: {C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.57953347, -6.1035368e-04, 1.01681433e-06, 9.07005884e-10, -9.04424499e-13, + -1.4344086e+04, 3.50840928] + - [2.71518561, 2.06252743e-03, -9.98825771e-07, 2.30053008e-10, -2.03647716e-14, + -1.41518724e+04, 7.81868772] + note: TPIS79 + transport: + model: gas + geometry: linear + well-depth: 98.1 + diameter: 3.65 + polarizability: 1.95 + rotational-relaxation: 1.8 +- name: CO2 + composition: {C: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.35677352, 8.98459677e-03, -7.12356269e-06, 2.45919022e-09, -1.43699548e-13, + -4.83719697e+04, 9.90105222] + - [3.85746029, 4.41437026e-03, -2.21481404e-06, 5.23490188e-10, -4.72084164e-14, + -4.8759166e+04, 2.27163806] + note: L 7/88 + transport: + model: gas + geometry: linear + well-depth: 244.0 + diameter: 3.763 + polarizability: 2.65 + rotational-relaxation: 2.1 +- name: HCO + composition: {H: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.22118584, -3.24392532e-03, 1.37799446e-05, -1.33144093e-08, 4.33768865e-12, + 3839.56496, 3.39437243] + - [2.77217438, 4.95695526e-03, -2.48445613e-06, 5.89161778e-10, -5.33508711e-14, + 4011.91815, 9.79834492] + note: L12/89 + transport: + model: gas + geometry: nonlinear + well-depth: 498.0 + diameter: 3.59 +- name: CH2O + composition: {H: 2, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.79372315, -9.90833369e-03, 3.73220008e-05, -3.79285261e-08, 1.31772652e-11, + -1.43089567e+04, 0.6028129] + - [1.76069008, 9.20000082e-03, -4.42258813e-06, 1.00641212e-09, -8.8385564e-14, + -1.39958323e+04, 13.656323] + note: L 8/88 + transport: + model: gas + geometry: nonlinear + well-depth: 498.0 + diameter: 3.59 + rotational-relaxation: 2.0 +- name: CH2OH + composition: {C: 1, H: 3, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.86388918, 5.59672304e-03, 5.93271791e-06, -1.04532012e-08, 4.36967278e-12, + -3193.91367, 5.47302243] + - [3.69266569, 8.64576797e-03, -3.7510112e-06, 7.87234636e-10, -6.48554201e-14, + -3242.50627, 5.81043215] + note: GUNL93 + transport: + model: gas + geometry: nonlinear + well-depth: 417.0 + diameter: 3.69 + dipole: 1.7 + rotational-relaxation: 2.0 +- name: CH3O + composition: {C: 1, H: 3, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [2.106204, 7.216595e-03, 5.338472e-06, -7.377636e-09, 2.07561e-12, + 978.6011, 13.152177] + - [3.770799, 7.871497e-03, -2.656384e-06, 3.944431e-10, -2.112616e-14, + 127.83252, 2.929575] + note: '121686' + transport: + model: gas + geometry: nonlinear + well-depth: 417.0 + diameter: 3.69 + dipole: 1.7 + rotational-relaxation: 2.0 +- name: CH3OH + composition: {C: 1, H: 4, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.71539582, -0.0152309129, 6.52441155e-05, -7.10806889e-08, 2.61352698e-11, + -2.56427656e+04, -1.50409823] + - [1.78970791, 0.0140938292, -6.36500835e-06, 1.38171085e-09, -1.1706022e-13, + -2.53748747e+04, 14.5023623] + note: L 8/88 + transport: + model: gas + geometry: nonlinear + well-depth: 481.8 + diameter: 3.626 + rotational-relaxation: 1.0 + note: SVE +- name: C2H + composition: {C: 2, H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.88965733, 0.0134099611, -2.84769501e-05, 2.94791045e-08, -1.09331511e-11, + 6.68393932e+04, 6.22296438] + - [3.16780652, 4.75221902e-03, -1.83787077e-06, 3.04190252e-10, -1.7723277e-14, + 6.7121065e+04, 6.63589475] + note: L 1/91 + transport: + model: gas + geometry: linear + well-depth: 209.0 + diameter: 4.1 + rotational-relaxation: 2.5 +- name: C2H2 + composition: {C: 2, H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [0.808681094, 0.0233615629, -3.55171815e-05, 2.80152437e-08, -8.50072974e-12, + 2.64289807e+04, 13.9397051] + - [4.14756964, 5.96166664e-03, -2.37294852e-06, 4.67412171e-10, -3.61235213e-14, + 2.59359992e+04, -1.23028121] + note: L 1/91 + transport: + model: gas + geometry: linear + well-depth: 209.0 + diameter: 4.1 + rotational-relaxation: 2.5 +- name: C2H3 + composition: {C: 2, H: 3} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.21246645, 1.51479162e-03, 2.59209412e-05, -3.57657847e-08, 1.47150873e-11, + 3.48598468e+04, 8.51054025] + - [3.016724, 0.0103302292, -4.68082349e-06, 1.01763288e-09, -8.62607041e-14, + 3.46128739e+04, 7.78732378] + note: L 2/92 + transport: + model: gas + geometry: nonlinear + well-depth: 209.0 + diameter: 4.1 + rotational-relaxation: 1.0 + note: '*' +- name: C2H4 + composition: {C: 2, H: 4} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.95920148, -7.57052247e-03, 5.70990292e-05, -6.91588753e-08, 2.69884373e-11, + 5089.77593, 4.09733096] + - [2.03611116, 0.0146454151, -6.71077915e-06, 1.47222923e-09, -1.25706061e-13, + 4939.88614, 10.3053693] + note: L 1/91 + transport: + model: gas + geometry: nonlinear + well-depth: 280.8 + diameter: 3.971 + rotational-relaxation: 1.5 +- name: C2H5 + composition: {C: 2, H: 5} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30646568, -4.18658892e-03, 4.97142807e-05, -5.99126606e-08, 2.30509004e-11, + 1.28416265e+04, 4.70720924] + - [1.95465642, 0.0173972722, -7.98206668e-06, 1.75217689e-09, -1.49641576e-13, + 1.285752e+04, 13.4624343] + note: L12/92 + transport: + model: gas + geometry: nonlinear + well-depth: 252.3 + diameter: 4.302 + rotational-relaxation: 1.5 +- name: C2H6 + composition: {C: 2, H: 6} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.29142492, -5.5015427e-03, 5.99438288e-05, -7.08466285e-08, 2.68685771e-11, + -1.15222055e+04, 2.66682316] + - [1.0718815, 0.0216852677, -1.00256067e-05, 2.21412001e-09, -1.9000289e-13, + -1.14263932e+04, 15.1156107] + note: L 8/88 + transport: + model: gas + geometry: nonlinear + well-depth: 252.3 + diameter: 4.302 + rotational-relaxation: 1.5 +- name: HCCO + composition: {H: 1, C: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 4000.0] + data: + - [2.2517214, 0.017655021, -2.3729101e-05, 1.7275759e-08, -5.0664811e-12, + 2.0059449e+04, 12.490417] + - [5.6282058, 4.0853401e-03, -1.5934547e-06, 2.8626052e-10, -1.9407832e-14, + 1.9327215e+04, -3.9302595] + note: SRIC91 + transport: + model: gas + geometry: nonlinear + well-depth: 150.0 + diameter: 2.5 + rotational-relaxation: 1.0 + note: '*' +- name: CH2CO + composition: {C: 2, H: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.1358363, 0.0181188721, -1.73947474e-05, 9.34397568e-09, -2.01457615e-12, + -7042.91804, 12.215648] + - [4.51129732, 9.00359745e-03, -4.16939635e-06, 9.23345882e-10, -7.94838201e-14, + -7551.05311, 0.632247205] + note: L 5/90 + transport: + model: gas + geometry: nonlinear + well-depth: 436.0 + diameter: 3.97 + rotational-relaxation: 2.0 +- name: HCCOH + composition: {C: 2, O: 1, H: 2} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [1.2423733, 0.031072201, -5.0866864e-05, 4.3137131e-08, -1.4014594e-11, + 8031.6143, 13.874319] + - [5.9238291, 6.79236e-03, -2.5658564e-06, 4.4987841e-10, -2.9940101e-14, + 7264.626, -7.6017742] + note: SRI91 + transport: + model: gas + geometry: nonlinear + well-depth: 436.0 + diameter: 3.97 + rotational-relaxation: 2.0 +- name: N + composition: {N: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [2.5, 0.0, 0.0, 0.0, 0.0, 5.6104637e+04, 4.1939087] + - [2.4159429, 1.7489065e-04, -1.1902369e-07, 3.0226245e-11, -2.0360982e-15, + 5.6133773e+04, 4.6496096] + note: L 6/88 + transport: + model: gas + geometry: atom + well-depth: 71.4 + diameter: 3.298 + note: '*' +- name: NH + composition: {N: 1, H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [3.4929085, 3.1179198e-04, -1.4890484e-06, 2.4816442e-09, -1.0356967e-12, + 4.1880629e+04, 1.8483278] + - [2.7836928, 1.329843e-03, -4.2478047e-07, 7.8348501e-11, -5.504447e-15, + 4.2120848e+04, 5.7407799] + note: And94 + transport: + model: gas + geometry: linear + well-depth: 80.0 + diameter: 2.65 + rotational-relaxation: 4.0 +- name: NH2 + composition: {N: 1, H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.2040029, -2.1061385e-03, 7.1068348e-06, -5.6115197e-09, 1.6440717e-12, + 2.188591e+04, -0.14184248] + - [2.8347421, 3.2073082e-03, -9.3390804e-07, 1.3702953e-10, -7.9206144e-15, + 2.2171957e+04, 6.5204163] + note: And89 + transport: + model: gas + geometry: nonlinear + well-depth: 80.0 + diameter: 2.65 + polarizability: 2.26 + rotational-relaxation: 4.0 +- name: NH3 + composition: {N: 1, H: 3} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.2860274, -4.660523e-03, 2.1718513e-05, -2.2808887e-08, 8.2638046e-12, + -6741.7285, -0.62537277] + - [2.6344521, 5.666256e-03, -1.7278676e-06, 2.3867161e-10, -1.2578786e-14, + -6544.6958, 6.5662928] + note: J 6/77 + transport: + model: gas + geometry: nonlinear + well-depth: 481.0 + diameter: 2.92 + dipole: 1.47 + rotational-relaxation: 10.0 +- name: NNH + composition: {N: 2, H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.3446927, -4.8497072e-03, 2.0059459e-05, -2.1726464e-08, 7.9469539e-12, + 2.8791973e+04, 2.977941] + - [3.7667544, 2.8915082e-03, -1.041662e-06, 1.6842594e-10, -1.0091896e-14, + 2.8650697e+04, 4.4705067] + note: T07/93 + transport: + model: gas + geometry: nonlinear + well-depth: 71.4 + diameter: 3.798 + rotational-relaxation: 1.0 + note: '*' +- name: NO + composition: {N: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.2184763, -4.638976e-03, 1.1041022e-05, -9.3361354e-09, 2.803577e-12, + 9844.623, 2.2808464] + - [3.2606056, 1.1911043e-03, -4.2917048e-07, 6.9457669e-11, -4.0336099e-15, + 9920.9746, 6.3693027] + note: RUS 78 + transport: + model: gas + geometry: linear + well-depth: 97.53 + diameter: 3.621 + polarizability: 1.76 + rotational-relaxation: 4.0 +- name: NO2 + composition: {N: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [3.9440312, -1.585429e-03, 1.6657812e-05, -2.0475426e-08, 7.8350564e-12, + 2896.6179, 6.3119917] + - [4.8847542, 2.1723956e-03, -8.2806906e-07, 1.574751e-10, -1.0510895e-14, + 2316.4983, -0.11741695] + note: L 7/88 + transport: + model: gas + geometry: nonlinear + well-depth: 200.0 + diameter: 3.5 + rotational-relaxation: 1.0 + note: '*' +- name: N2O + composition: {N: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [2.2571502, 0.011304728, -1.3671319e-05, 9.6819806e-09, -2.9307182e-12, + 8741.7744, 10.757992] + - [4.8230729, 2.6270251e-03, -9.5850874e-07, 1.6000712e-10, -9.7752303e-15, + 8073.4048, -2.2017207] + note: L 7/88 + transport: + model: gas + geometry: linear + well-depth: 232.4 + diameter: 3.828 + rotational-relaxation: 1.0 + note: '*' +- name: HNO + composition: {H: 1, N: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.5334916, -5.6696171e-03, 1.8473207e-05, -1.7137094e-08, 5.5454573e-12, + 1.1548297e+04, 1.7498417] + - [2.9792509, 3.4944059e-03, -7.8549778e-07, 5.7479594e-11, -1.9335916e-16, + 1.1750582e+04, 8.6063728] + note: And93 + transport: + model: gas + geometry: nonlinear + well-depth: 116.7 + diameter: 3.492 + rotational-relaxation: 1.0 + note: '*' +- name: CN + composition: {C: 1, N: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [3.6129351, -9.5551327e-04, 2.1442977e-06, -3.1516323e-10, -4.6430356e-13, + 5.170834e+04, 3.9804995] + - [3.7459805, 4.3450775e-05, 2.9705984e-07, -6.8651806e-11, 4.4134173e-15, + 5.1536188e+04, 2.7867601] + note: HBH92 + transport: + model: gas + geometry: linear + well-depth: 75.0 + diameter: 3.856 + rotational-relaxation: 1.0 + note: OIS +- name: HCN + composition: {H: 1, C: 1, N: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [2.2589886, 0.01005117, -1.3351763e-05, 1.0092349e-08, -3.0089028e-12, + 1.4712633e+04, 8.9164419] + - [3.8022392, 3.1464228e-03, -1.0632185e-06, 1.6619757e-10, -9.799757e-15, + 1.4407292e+04, 1.5754601] + note: GRI/98 + transport: + model: gas + geometry: linear + well-depth: 569.0 + diameter: 3.63 + rotational-relaxation: 1.0 + note: OIS +- name: H2CN + composition: {H: 2, C: 1, N: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 4000.0] + data: + - [2.851661, 5.6952331e-03, 1.07114e-06, -1.622612e-09, -2.3511081e-13, + 2.863782e+04, 8.9927511] + - [5.209703, 2.9692911e-03, -2.8555891e-07, -1.63555e-10, 3.0432589e-14, + 2.7677109e+04, -4.444478] + note: '41687' + transport: + model: gas + geometry: linear + well-depth: 569.0 + diameter: 3.63 + rotational-relaxation: 1.0 + note: os/jm +- name: HCNN + composition: {C: 1, N: 2, H: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [2.5243194, 0.015960619, -1.8816354e-05, 1.212554e-08, -3.2357378e-12, + 5.4261984e+04, 11.67587] + - [5.8946362, 3.9895959e-03, -1.598238e-06, 2.9249395e-10, -2.0094686e-14, + 5.3452941e+04, -5.1030502] + note: SRI/94 + transport: + model: gas + geometry: nonlinear + well-depth: 150.0 + diameter: 2.5 + rotational-relaxation: 1.0 + note: '*' +- name: HCNO + composition: {H: 1, N: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1382.0, 5000.0] + data: + - [2.64727989, 0.0127505342, -1.04794236e-05, 4.41432836e-09, -7.57521466e-13, + 1.92990252e+04, 10.7332972] + - [6.59860456, 3.02778626e-03, -1.07704346e-06, 1.71666528e-10, -1.01439391e-14, + 1.79661339e+04, -10.3306599] + note: BDEA94 + transport: + model: gas + geometry: nonlinear + well-depth: 232.4 + diameter: 3.828 + rotational-relaxation: 1.0 + note: JAM +- name: HOCN + composition: {H: 1, N: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1368.0, 5000.0] + data: + - [3.78604952, 6.88667922e-03, -3.21487864e-06, 5.17195767e-10, 1.19360788e-14, + -2826.984, 5.63292162] + - [5.89784885, 3.16789393e-03, -1.11801064e-06, 1.77243144e-10, -1.04339177e-14, + -3706.53331, -6.18167825] + note: BDEA94 + transport: + model: gas + geometry: nonlinear + well-depth: 232.4 + diameter: 3.828 + rotational-relaxation: 1.0 + note: JAM +- name: HNCO + composition: {H: 1, N: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1478.0, 5000.0] + data: + - [3.63096317, 7.30282357e-03, -2.28050003e-06, -6.61271298e-10, 3.62235752e-13, + -1.55873636e+04, 6.19457727] + - [6.22395134, 3.17864004e-03, -1.09378755e-06, 1.70735163e-10, -9.95021955e-15, + -1.66599344e+04, -8.38224741] + note: BDEA94 + transport: + model: gas + geometry: nonlinear + well-depth: 232.4 + diameter: 3.828 + rotational-relaxation: 1.0 + note: OIS +- name: NCO + composition: {N: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [2.8269308, 8.8051688e-03, -8.3866134e-06, 4.8016964e-09, -1.3313595e-12, + 1.4682477e+04, 9.5504646] + - [5.1521845, 2.3051761e-03, -8.8033153e-07, 1.4789098e-10, -9.0977996e-15, + 1.4004123e+04, -2.544266] + note: EA 93 + transport: + model: gas + geometry: linear + well-depth: 232.4 + diameter: 3.828 + rotational-relaxation: 1.0 + note: OIS +- name: N2 + composition: {N: 2} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.298677, 1.4082404e-03, -3.963222e-06, 5.641515e-09, -2.444854e-12, + -1020.8999, 3.950372] + - [2.92664, 1.4879768e-03, -5.68476e-07, 1.0097038e-10, -6.753351e-15, + -922.7977, 5.980528] + note: '121286' + transport: + model: gas + geometry: linear + well-depth: 97.53 + diameter: 3.621 + polarizability: 1.76 + rotational-relaxation: 4.0 +- name: AR + composition: {Ar: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 5000.0] + data: + - [2.5, 0.0, 0.0, 0.0, 0.0, -745.375, 4.366] + note: '120186' + transport: + model: gas + geometry: atom + well-depth: 136.5 + diameter: 3.33 +- name: C3H7 + composition: {C: 3, H: 7} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [1.0515518, 0.02599198, 2.380054e-06, -1.9609569e-08, 9.373247e-12, + 1.0631863e+04, 21.122559] + - [7.7026987, 0.016044203, -5.283322e-06, 7.629859e-10, -3.9392284e-14, + 8298.4336, -15.48018] + note: L 9/84 + transport: + model: gas + geometry: nonlinear + well-depth: 266.8 + diameter: 4.982 + rotational-relaxation: 1.0 +- name: C3H8 + composition: {C: 3, H: 8} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [0.93355381, 0.026424579, 6.1059727e-06, -2.1977499e-08, 9.5149253e-12, + -1.395852e+04, 19.201691] + - [7.5341368, 0.018872239, -6.2718491e-06, 9.1475649e-10, -4.7838069e-14, + -1.6467516e+04, -17.892349] + note: L 4/85 + transport: + model: gas + geometry: nonlinear + well-depth: 266.8 + diameter: 4.982 + rotational-relaxation: 1.0 +- name: CH2CHO + composition: {O: 1, H: 3, C: 2} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.409062, 0.010738574, 1.891492e-06, -7.158583e-09, 2.867385e-12, + 1521.4766, 9.55829] + - [5.97567, 8.130591e-03, -2.743624e-06, 4.070304e-10, -2.176017e-14, + 490.3218, -5.045251] + note: SAND86 + transport: + model: gas + geometry: nonlinear + well-depth: 436.0 + diameter: 3.97 + rotational-relaxation: 2.0 +- name: CH3CHO + composition: {C: 2, H: 4, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.7294595, -3.1932858e-03, 4.7534921e-05, -5.7458611e-08, 2.1931112e-11, + -2.1572878e+04, 4.1030159] + - [5.4041108, 0.011723059, -4.2263137e-06, 6.8372451e-10, -4.0984863e-14, + -2.2593122e+04, -3.4807917] + note: L 8/88 + transport: + model: gas + geometry: nonlinear + well-depth: 436.0 + diameter: 3.97 + rotational-relaxation: 2.0 + +reactions: +- equation: 2 O + M <=> O2 + M # Reaction 1 + type: three-body + rate-constant: {A: 1.2e+17, b: -1.0, Ea: 0.0} + efficiencies: {H2: 2.4, H2O: 15.4, CH4: 2.0, CO: 1.75, CO2: 3.6, C2H6: 3.0, + AR: 0.83} +- equation: O + H + M <=> OH + M # Reaction 2 + type: three-body + rate-constant: {A: 5.0e+17, b: -1.0, Ea: 0.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: O + H2 <=> H + OH # Reaction 3 + rate-constant: {A: 3.87e+04, b: 2.7, Ea: 6260.0} +- equation: O + HO2 <=> OH + O2 # Reaction 4 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: O + H2O2 <=> OH + HO2 # Reaction 5 + rate-constant: {A: 9.63e+06, b: 2.0, Ea: 4000.0} +- equation: O + CH <=> H + CO # Reaction 6 + rate-constant: {A: 5.7e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2 <=> H + HCO # Reaction 7 + rate-constant: {A: 8.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2(S) <=> H2 + CO # Reaction 8 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2(S) <=> H + HCO # Reaction 9 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3 <=> H + CH2O # Reaction 10 + rate-constant: {A: 5.06e+13, b: 0.0, Ea: 0.0} +- equation: O + CH4 <=> OH + CH3 # Reaction 11 + rate-constant: {A: 1.02e+09, b: 1.5, Ea: 8600.0} +- equation: O + CO (+M) <=> CO2 (+M) # Reaction 12 + type: falloff + low-P-rate-constant: {A: 6.02e+14, b: 0.0, Ea: 3000.0} + high-P-rate-constant: {A: 1.8e+10, b: 0.0, Ea: 2385.0} + efficiencies: {H2: 2.0, O2: 6.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 3.5, + C2H6: 3.0, AR: 0.5} +- equation: O + HCO <=> OH + CO # Reaction 13 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + HCO <=> H + CO2 # Reaction 14 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2O <=> OH + HCO # Reaction 15 + rate-constant: {A: 3.9e+13, b: 0.0, Ea: 3540.0} +- equation: O + CH2OH <=> OH + CH2O # Reaction 16 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3O <=> OH + CH2O # Reaction 17 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3OH <=> OH + CH2OH # Reaction 18 + rate-constant: {A: 3.88e+05, b: 2.5, Ea: 3100.0} +- equation: O + CH3OH <=> OH + CH3O # Reaction 19 + rate-constant: {A: 1.3e+05, b: 2.5, Ea: 5000.0} +- equation: O + C2H <=> CH + CO # Reaction 20 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H2 <=> H + HCCO # Reaction 21 + rate-constant: {A: 1.35e+07, b: 2.0, Ea: 1900.0} +- equation: O + C2H2 <=> OH + C2H # Reaction 22 + rate-constant: {A: 4.6e+19, b: -1.41, Ea: 2.895e+04} +- equation: O + C2H2 <=> CO + CH2 # Reaction 23 + rate-constant: {A: 6.94e+06, b: 2.0, Ea: 1900.0} +- equation: O + C2H3 <=> H + CH2CO # Reaction 24 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H4 <=> CH3 + HCO # Reaction 25 + rate-constant: {A: 1.25e+07, b: 1.83, Ea: 220.0} +- equation: O + C2H5 <=> CH3 + CH2O # Reaction 26 + rate-constant: {A: 2.24e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H6 <=> OH + C2H5 # Reaction 27 + rate-constant: {A: 8.98e+07, b: 1.92, Ea: 5690.0} +- equation: O + HCCO <=> H + 2 CO # Reaction 28 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: O + CH2CO <=> OH + HCCO # Reaction 29 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 8000.0} +- equation: O + CH2CO <=> CH2 + CO2 # Reaction 30 + rate-constant: {A: 1.75e+12, b: 0.0, Ea: 1350.0} +- equation: O2 + CO <=> O + CO2 # Reaction 31 + rate-constant: {A: 2.5e+12, b: 0.0, Ea: 4.78e+04} +- equation: O2 + CH2O <=> HO2 + HCO # Reaction 32 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 4.0e+04} +- equation: H + O2 + M <=> HO2 + M # Reaction 33 + type: three-body + rate-constant: {A: 2.8e+18, b: -0.86, Ea: 0.0} + efficiencies: {O2: 0.0, H2O: 0.0, CO: 0.75, CO2: 1.5, C2H6: 1.5, N2: 0.0, + AR: 0.0} +- equation: H + 2 O2 <=> HO2 + O2 # Reaction 34 + rate-constant: {A: 2.08e+19, b: -1.24, Ea: 0.0} +- equation: H + O2 + H2O <=> HO2 + H2O # Reaction 35 + rate-constant: {A: 1.126e+19, b: -0.76, Ea: 0.0} +- equation: H + O2 + N2 <=> HO2 + N2 # Reaction 36 + rate-constant: {A: 2.6e+19, b: -1.24, Ea: 0.0} +- equation: H + O2 + AR <=> HO2 + AR # Reaction 37 + rate-constant: {A: 7.0e+17, b: -0.8, Ea: 0.0} +- equation: H + O2 <=> O + OH # Reaction 38 + rate-constant: {A: 2.65e+16, b: -0.6707, Ea: 1.7041e+04} +- equation: 2 H + M <=> H2 + M # Reaction 39 + type: three-body + rate-constant: {A: 1.0e+18, b: -1.0, Ea: 0.0} + efficiencies: {H2: 0.0, H2O: 0.0, CH4: 2.0, CO2: 0.0, C2H6: 3.0, AR: 0.63} +- equation: 2 H + H2 <=> 2 H2 # Reaction 40 + rate-constant: {A: 9.0e+16, b: -0.6, Ea: 0.0} +- equation: 2 H + H2O <=> H2 + H2O # Reaction 41 + rate-constant: {A: 6.0e+19, b: -1.25, Ea: 0.0} +- equation: 2 H + CO2 <=> H2 + CO2 # Reaction 42 + rate-constant: {A: 5.5e+20, b: -2.0, Ea: 0.0} +- equation: H + OH + M <=> H2O + M # Reaction 43 + type: three-body + rate-constant: {A: 2.2e+22, b: -2.0, Ea: 0.0} + efficiencies: {H2: 0.73, H2O: 3.65, CH4: 2.0, C2H6: 3.0, AR: 0.38} +- equation: H + HO2 <=> O + H2O # Reaction 44 + rate-constant: {A: 3.97e+12, b: 0.0, Ea: 671.0} +- equation: H + HO2 <=> O2 + H2 # Reaction 45 + rate-constant: {A: 4.48e+13, b: 0.0, Ea: 1068.0} +- equation: H + HO2 <=> 2 OH # Reaction 46 + rate-constant: {A: 8.4e+13, b: 0.0, Ea: 635.0} +- equation: H + H2O2 <=> HO2 + H2 # Reaction 47 + rate-constant: {A: 1.21e+07, b: 2.0, Ea: 5200.0} +- equation: H + H2O2 <=> OH + H2O # Reaction 48 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 3600.0} +- equation: H + CH <=> C + H2 # Reaction 49 + rate-constant: {A: 1.65e+14, b: 0.0, Ea: 0.0} +- equation: H + CH2 (+M) <=> CH3 (+M) # Reaction 50 + type: falloff + low-P-rate-constant: {A: 1.04e+26, b: -2.76, Ea: 1600.0} + high-P-rate-constant: {A: 6.0e+14, b: 0.0, Ea: 0.0} + Troe: {A: 0.562, T3: 91.0, T1: 5836.0, T2: 8552.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + CH2(S) <=> CH + H2 # Reaction 51 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: H + CH3 (+M) <=> CH4 (+M) # Reaction 52 + type: falloff + low-P-rate-constant: {A: 2.62e+33, b: -4.76, Ea: 2440.0} + high-P-rate-constant: {A: 1.39e+16, b: -0.534, Ea: 536.0} + Troe: {A: 0.783, T3: 74.0, T1: 2941.0, T2: 6964.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 3.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + CH4 <=> CH3 + H2 # Reaction 53 + rate-constant: {A: 6.6e+08, b: 1.62, Ea: 1.084e+04} +- equation: H + HCO (+M) <=> CH2O (+M) # Reaction 54 + type: falloff + low-P-rate-constant: {A: 2.47e+24, b: -2.57, Ea: 425.0} + high-P-rate-constant: {A: 1.09e+12, b: 0.48, Ea: -260.0} + Troe: {A: 0.7824, T3: 271.0, T1: 2755.0, T2: 6570.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + HCO <=> H2 + CO # Reaction 55 + rate-constant: {A: 7.34e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2O (+M) <=> CH2OH (+M) # Reaction 56 + type: falloff + low-P-rate-constant: {A: 1.27e+32, b: -4.82, Ea: 6530.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 3600.0} + Troe: {A: 0.7187, T3: 103.0, T1: 1291.0, T2: 4160.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: H + CH2O (+M) <=> CH3O (+M) # Reaction 57 + type: falloff + low-P-rate-constant: {A: 2.2e+30, b: -4.8, Ea: 5560.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 2600.0} + Troe: {A: 0.758, T3: 94.0, T1: 1555.0, T2: 4200.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: H + CH2O <=> HCO + H2 # Reaction 58 + rate-constant: {A: 5.74e+07, b: 1.9, Ea: 2742.0} +- equation: H + CH2OH (+M) <=> CH3OH (+M) # Reaction 59 + type: falloff + low-P-rate-constant: {A: 4.36e+31, b: -4.65, Ea: 5080.0} + high-P-rate-constant: {A: 1.055e+12, b: 0.5, Ea: 86.0} + Troe: {A: 0.6, T3: 100.0, T1: 9.0e+04, T2: 1.0e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: H + CH2OH <=> H2 + CH2O # Reaction 60 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2OH <=> OH + CH3 # Reaction 61 + rate-constant: {A: 1.65e+11, b: 0.65, Ea: -284.0} +- equation: H + CH2OH <=> CH2(S) + H2O # Reaction 62 + rate-constant: {A: 3.28e+13, b: -0.09, Ea: 610.0} +- equation: H + CH3O (+M) <=> CH3OH (+M) # Reaction 63 + type: falloff + low-P-rate-constant: {A: 4.66e+41, b: -7.44, Ea: 1.408e+04} + high-P-rate-constant: {A: 2.43e+12, b: 0.515, Ea: 50.0} + Troe: {A: 0.7, T3: 100.0, T1: 9.0e+04, T2: 1.0e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: H + CH3O <=> H + CH2OH # Reaction 64 + rate-constant: {A: 4.15e+07, b: 1.63, Ea: 1924.0} +- equation: H + CH3O <=> H2 + CH2O # Reaction 65 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: H + CH3O <=> OH + CH3 # Reaction 66 + rate-constant: {A: 1.5e+12, b: 0.5, Ea: -110.0} +- equation: H + CH3O <=> CH2(S) + H2O # Reaction 67 + rate-constant: {A: 2.62e+14, b: -0.23, Ea: 1070.0} +- equation: H + CH3OH <=> CH2OH + H2 # Reaction 68 + rate-constant: {A: 1.7e+07, b: 2.1, Ea: 4870.0} +- equation: H + CH3OH <=> CH3O + H2 # Reaction 69 + rate-constant: {A: 4.2e+06, b: 2.1, Ea: 4870.0} +- equation: H + C2H (+M) <=> C2H2 (+M) # Reaction 70 + type: falloff + low-P-rate-constant: {A: 3.75e+33, b: -4.8, Ea: 1900.0} + high-P-rate-constant: {A: 1.0e+17, b: -1.0, Ea: 0.0} + Troe: {A: 0.6464, T3: 132.0, T1: 1315.0, T2: 5566.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H2 (+M) <=> C2H3 (+M) # Reaction 71 + type: falloff + low-P-rate-constant: {A: 3.8e+40, b: -7.27, Ea: 7220.0} + high-P-rate-constant: {A: 5.6e+12, b: 0.0, Ea: 2400.0} + Troe: {A: 0.7507, T3: 98.5, T1: 1302.0, T2: 4167.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H3 (+M) <=> C2H4 (+M) # Reaction 72 + type: falloff + low-P-rate-constant: {A: 1.4e+30, b: -3.86, Ea: 3320.0} + high-P-rate-constant: {A: 6.08e+12, b: 0.27, Ea: 280.0} + Troe: {A: 0.782, T3: 207.5, T1: 2663.0, T2: 6095.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H3 <=> H2 + C2H2 # Reaction 73 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: H + C2H4 (+M) <=> C2H5 (+M) # Reaction 74 + type: falloff + low-P-rate-constant: {A: 6.0e+41, b: -7.62, Ea: 6970.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 1820.0} + Troe: {A: 0.9753, T3: 210.0, T1: 984.0, T2: 4374.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H4 <=> C2H3 + H2 # Reaction 75 + rate-constant: {A: 1.325e+06, b: 2.53, Ea: 1.224e+04} +- equation: H + C2H5 (+M) <=> C2H6 (+M) # Reaction 76 + type: falloff + low-P-rate-constant: {A: 1.99e+41, b: -7.08, Ea: 6685.0} + high-P-rate-constant: {A: 5.21e+17, b: -0.99, Ea: 1580.0} + Troe: {A: 0.8422, T3: 125.0, T1: 2219.0, T2: 6882.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H5 <=> H2 + C2H4 # Reaction 77 + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 0.0} +- equation: H + C2H6 <=> C2H5 + H2 # Reaction 78 + rate-constant: {A: 1.15e+08, b: 1.9, Ea: 7530.0} +- equation: H + HCCO <=> CH2(S) + CO # Reaction 79 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: H + CH2CO <=> HCCO + H2 # Reaction 80 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 8000.0} +- equation: H + CH2CO <=> CH3 + CO # Reaction 81 + rate-constant: {A: 1.13e+13, b: 0.0, Ea: 3428.0} +- equation: H + HCCOH <=> H + CH2CO # Reaction 82 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: H2 + CO (+M) <=> CH2O (+M) # Reaction 83 + type: falloff + low-P-rate-constant: {A: 5.07e+27, b: -3.42, Ea: 8.435e+04} + high-P-rate-constant: {A: 4.3e+07, b: 1.5, Ea: 7.96e+04} + Troe: {A: 0.932, T3: 197.0, T1: 1540.0, T2: 1.03e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: OH + H2 <=> H + H2O # Reaction 84 + rate-constant: {A: 2.16e+08, b: 1.51, Ea: 3430.0} +- equation: 2 OH (+M) <=> H2O2 (+M) # Reaction 85 + type: falloff + low-P-rate-constant: {A: 2.3e+18, b: -0.9, Ea: -1700.0} + high-P-rate-constant: {A: 7.4e+13, b: -0.37, Ea: 0.0} + Troe: {A: 0.7346, T3: 94.0, T1: 1756.0, T2: 5182.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: 2 OH <=> O + H2O # Reaction 86 + rate-constant: {A: 3.57e+04, b: 2.4, Ea: -2110.0} +- equation: OH + HO2 <=> O2 + H2O # Reaction 87 + duplicate: true + rate-constant: {A: 1.45e+13, b: 0.0, Ea: -500.0} +- equation: OH + H2O2 <=> HO2 + H2O # Reaction 88 + duplicate: true + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 427.0} +- equation: OH + H2O2 <=> HO2 + H2O # Reaction 89 + duplicate: true + rate-constant: {A: 1.7e+18, b: 0.0, Ea: 2.941e+04} +- equation: OH + C <=> H + CO # Reaction 90 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH <=> H + HCO # Reaction 91 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2 <=> H + CH2O # Reaction 92 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2 <=> CH + H2O # Reaction 93 + rate-constant: {A: 1.13e+07, b: 2.0, Ea: 3000.0} +- equation: OH + CH2(S) <=> H + CH2O # Reaction 94 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH3 (+M) <=> CH3OH (+M) # Reaction 95 + type: falloff + low-P-rate-constant: {A: 4.0e+36, b: -5.92, Ea: 3140.0} + high-P-rate-constant: {A: 2.79e+18, b: -1.43, Ea: 1330.0} + Troe: {A: 0.412, T3: 195.0, T1: 5900.0, T2: 6394.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: OH + CH3 <=> CH2 + H2O # Reaction 96 + rate-constant: {A: 5.6e+07, b: 1.6, Ea: 5420.0} +- equation: OH + CH3 <=> CH2(S) + H2O # Reaction 97 + rate-constant: {A: 6.44e+17, b: -1.34, Ea: 1417.0} +- equation: OH + CH4 <=> CH3 + H2O # Reaction 98 + rate-constant: {A: 1.0e+08, b: 1.6, Ea: 3120.0} +- equation: OH + CO <=> H + CO2 # Reaction 99 + rate-constant: {A: 4.76e+07, b: 1.228, Ea: 70.0} +- equation: OH + HCO <=> H2O + CO # Reaction 100 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2O <=> HCO + H2O # Reaction 101 + rate-constant: {A: 3.43e+09, b: 1.18, Ea: -447.0} +- equation: OH + CH2OH <=> H2O + CH2O # Reaction 102 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: OH + CH3O <=> H2O + CH2O # Reaction 103 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: OH + CH3OH <=> CH2OH + H2O # Reaction 104 + rate-constant: {A: 1.44e+06, b: 2.0, Ea: -840.0} +- equation: OH + CH3OH <=> CH3O + H2O # Reaction 105 + rate-constant: {A: 6.3e+06, b: 2.0, Ea: 1500.0} +- equation: OH + C2H <=> H + HCCO # Reaction 106 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + C2H2 <=> H + CH2CO # Reaction 107 + rate-constant: {A: 2.18e-04, b: 4.5, Ea: -1000.0} +- equation: OH + C2H2 <=> H + HCCOH # Reaction 108 + rate-constant: {A: 5.04e+05, b: 2.3, Ea: 1.35e+04} +- equation: OH + C2H2 <=> C2H + H2O # Reaction 109 + rate-constant: {A: 3.37e+07, b: 2.0, Ea: 1.4e+04} +- equation: OH + C2H2 <=> CH3 + CO # Reaction 110 + rate-constant: {A: 4.83e-04, b: 4.0, Ea: -2000.0} +- equation: OH + C2H3 <=> H2O + C2H2 # Reaction 111 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: OH + C2H4 <=> C2H3 + H2O # Reaction 112 + rate-constant: {A: 3.6e+06, b: 2.0, Ea: 2500.0} +- equation: OH + C2H6 <=> C2H5 + H2O # Reaction 113 + rate-constant: {A: 3.54e+06, b: 2.12, Ea: 870.0} +- equation: OH + CH2CO <=> HCCO + H2O # Reaction 114 + rate-constant: {A: 7.5e+12, b: 0.0, Ea: 2000.0} +- equation: 2 HO2 <=> O2 + H2O2 # Reaction 115 + duplicate: true + rate-constant: {A: 1.3e+11, b: 0.0, Ea: -1630.0} +- equation: 2 HO2 <=> O2 + H2O2 # Reaction 116 + duplicate: true + rate-constant: {A: 4.2e+14, b: 0.0, Ea: 1.2e+04} +- equation: HO2 + CH2 <=> OH + CH2O # Reaction 117 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + CH3 <=> O2 + CH4 # Reaction 118 + rate-constant: {A: 1.0e+12, b: 0.0, Ea: 0.0} +- equation: HO2 + CH3 <=> OH + CH3O # Reaction 119 + rate-constant: {A: 3.78e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + CO <=> OH + CO2 # Reaction 120 + rate-constant: {A: 1.5e+14, b: 0.0, Ea: 2.36e+04} +- equation: HO2 + CH2O <=> HCO + H2O2 # Reaction 121 + rate-constant: {A: 5.6e+06, b: 2.0, Ea: 1.2e+04} +- equation: C + O2 <=> O + CO # Reaction 122 + rate-constant: {A: 5.8e+13, b: 0.0, Ea: 576.0} +- equation: C + CH2 <=> H + C2H # Reaction 123 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: C + CH3 <=> H + C2H2 # Reaction 124 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + O2 <=> O + HCO # Reaction 125 + rate-constant: {A: 6.71e+13, b: 0.0, Ea: 0.0} +- equation: CH + H2 <=> H + CH2 # Reaction 126 + rate-constant: {A: 1.08e+14, b: 0.0, Ea: 3110.0} +- equation: CH + H2O <=> H + CH2O # Reaction 127 + rate-constant: {A: 5.71e+12, b: 0.0, Ea: -755.0} +- equation: CH + CH2 <=> H + C2H2 # Reaction 128 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + CH3 <=> H + C2H3 # Reaction 129 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + CH4 <=> H + C2H4 # Reaction 130 + rate-constant: {A: 6.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + CO (+M) <=> HCCO (+M) # Reaction 131 + type: falloff + low-P-rate-constant: {A: 2.69e+28, b: -3.74, Ea: 1936.0} + high-P-rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} + Troe: {A: 0.5757, T3: 237.0, T1: 1652.0, T2: 5069.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: CH + CO2 <=> HCO + CO # Reaction 132 + rate-constant: {A: 1.9e+14, b: 0.0, Ea: 1.5792e+04} +- equation: CH + CH2O <=> H + CH2CO # Reaction 133 + rate-constant: {A: 9.46e+13, b: 0.0, Ea: -515.0} +- equation: CH + HCCO <=> CO + C2H2 # Reaction 134 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2 + O2 => OH + H + CO # Reaction 135 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 1500.0} +- equation: CH2 + H2 <=> H + CH3 # Reaction 136 + rate-constant: {A: 5.0e+05, b: 2.0, Ea: 7230.0} +- equation: 2 CH2 <=> H2 + C2H2 # Reaction 137 + rate-constant: {A: 1.6e+15, b: 0.0, Ea: 1.1944e+04} +- equation: CH2 + CH3 <=> H + C2H4 # Reaction 138 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2 + CH4 <=> 2 CH3 # Reaction 139 + rate-constant: {A: 2.46e+06, b: 2.0, Ea: 8270.0} +- equation: CH2 + CO (+M) <=> CH2CO (+M) # Reaction 140 + type: falloff + low-P-rate-constant: {A: 2.69e+33, b: -5.11, Ea: 7095.0} + high-P-rate-constant: {A: 8.1e+11, b: 0.5, Ea: 4510.0} + Troe: {A: 0.5907, T3: 275.0, T1: 1226.0, T2: 5185.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: CH2 + HCCO <=> C2H3 + CO # Reaction 141 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + N2 <=> CH2 + N2 # Reaction 142 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 600.0} +- equation: CH2(S) + AR <=> CH2 + AR # Reaction 143 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 600.0} +- equation: CH2(S) + O2 <=> H + OH + CO # Reaction 144 + rate-constant: {A: 2.8e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + O2 <=> CO + H2O # Reaction 145 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + H2 <=> CH3 + H # Reaction 146 + rate-constant: {A: 7.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + H2O (+M) <=> CH3OH (+M) # Reaction 147 + type: falloff + low-P-rate-constant: {A: 1.88e+38, b: -6.36, Ea: 5040.0} + high-P-rate-constant: {A: 4.82e+17, b: -1.16, Ea: 1145.0} + Troe: {A: 0.6027, T3: 208.0, T1: 3922.0, T2: 1.018e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: CH2(S) + H2O <=> CH2 + H2O # Reaction 148 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CH3 <=> H + C2H4 # Reaction 149 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: -570.0} +- equation: CH2(S) + CH4 <=> 2 CH3 # Reaction 150 + rate-constant: {A: 1.6e+13, b: 0.0, Ea: -570.0} +- equation: CH2(S) + CO <=> CH2 + CO # Reaction 151 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CO2 <=> CH2 + CO2 # Reaction 152 + rate-constant: {A: 7.0e+12, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CO2 <=> CO + CH2O # Reaction 153 + rate-constant: {A: 1.4e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + C2H6 <=> CH3 + C2H5 # Reaction 154 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: -550.0} +- equation: CH3 + O2 <=> O + CH3O # Reaction 155 + rate-constant: {A: 3.56e+13, b: 0.0, Ea: 3.048e+04} +- equation: CH3 + O2 <=> OH + CH2O # Reaction 156 + rate-constant: {A: 2.31e+12, b: 0.0, Ea: 2.0315e+04} +- equation: CH3 + H2O2 <=> HO2 + CH4 # Reaction 157 + rate-constant: {A: 2.45e+04, b: 2.47, Ea: 5180.0} +- equation: 2 CH3 (+M) <=> C2H6 (+M) # Reaction 158 + type: falloff + low-P-rate-constant: {A: 3.4e+41, b: -7.03, Ea: 2762.0} + high-P-rate-constant: {A: 6.77e+16, b: -1.18, Ea: 654.0} + Troe: {A: 0.619, T3: 73.2, T1: 1180.0, T2: 9999.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: 2 CH3 <=> H + C2H5 # Reaction 159 + rate-constant: {A: 6.84e+12, b: 0.1, Ea: 1.06e+04} +- equation: CH3 + HCO <=> CH4 + CO # Reaction 160 + rate-constant: {A: 2.648e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + CH2O <=> HCO + CH4 # Reaction 161 + rate-constant: {A: 3320.0, b: 2.81, Ea: 5860.0} +- equation: CH3 + CH3OH <=> CH2OH + CH4 # Reaction 162 + rate-constant: {A: 3.0e+07, b: 1.5, Ea: 9940.0} +- equation: CH3 + CH3OH <=> CH3O + CH4 # Reaction 163 + rate-constant: {A: 1.0e+07, b: 1.5, Ea: 9940.0} +- equation: CH3 + C2H4 <=> C2H3 + CH4 # Reaction 164 + rate-constant: {A: 2.27e+05, b: 2.0, Ea: 9200.0} +- equation: CH3 + C2H6 <=> C2H5 + CH4 # Reaction 165 + rate-constant: {A: 6.14e+06, b: 1.74, Ea: 1.045e+04} +- equation: HCO + H2O <=> H + CO + H2O # Reaction 166 + rate-constant: {A: 1.5e+18, b: -1.0, Ea: 1.7e+04} +- equation: HCO + M <=> H + CO + M # Reaction 167 + type: three-body + rate-constant: {A: 1.87e+17, b: -1.0, Ea: 1.7e+04} + efficiencies: {H2: 2.0, H2O: 0.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: HCO + O2 <=> HO2 + CO # Reaction 168 + rate-constant: {A: 1.345e+13, b: 0.0, Ea: 400.0} +- equation: CH2OH + O2 <=> HO2 + CH2O # Reaction 169 + rate-constant: {A: 1.8e+13, b: 0.0, Ea: 900.0} +- equation: CH3O + O2 <=> HO2 + CH2O # Reaction 170 + rate-constant: {A: 4.28e-13, b: 7.6, Ea: -3530.0} +- equation: C2H + O2 <=> HCO + CO # Reaction 171 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: -755.0} +- equation: C2H + H2 <=> H + C2H2 # Reaction 172 + rate-constant: {A: 5.68e+10, b: 0.9, Ea: 1993.0} +- equation: C2H3 + O2 <=> HCO + CH2O # Reaction 173 + rate-constant: {A: 4.58e+16, b: -1.39, Ea: 1015.0} +- equation: C2H4 (+M) <=> H2 + C2H2 (+M) # Reaction 174 + type: falloff + low-P-rate-constant: {A: 1.58e+51, b: -9.3, Ea: 9.78e+04} + high-P-rate-constant: {A: 8.0e+12, b: 0.44, Ea: 8.677e+04} + Troe: {A: 0.7345, T3: 180.0, T1: 1035.0, T2: 5417.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: C2H5 + O2 <=> HO2 + C2H4 # Reaction 175 + rate-constant: {A: 8.4e+11, b: 0.0, Ea: 3875.0} +- equation: HCCO + O2 <=> OH + 2 CO # Reaction 176 + rate-constant: {A: 3.2e+12, b: 0.0, Ea: 854.0} +- equation: 2 HCCO <=> 2 CO + C2H2 # Reaction 177 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: N + NO <=> N2 + O # Reaction 178 + rate-constant: {A: 2.7e+13, b: 0.0, Ea: 355.0} +- equation: N + O2 <=> NO + O # Reaction 179 + rate-constant: {A: 9.0e+09, b: 1.0, Ea: 6500.0} +- equation: N + OH <=> NO + H # Reaction 180 + rate-constant: {A: 3.36e+13, b: 0.0, Ea: 385.0} +- equation: N2O + O <=> N2 + O2 # Reaction 181 + rate-constant: {A: 1.4e+12, b: 0.0, Ea: 1.081e+04} +- equation: N2O + O <=> 2 NO # Reaction 182 + rate-constant: {A: 2.9e+13, b: 0.0, Ea: 2.315e+04} +- equation: N2O + H <=> N2 + OH # Reaction 183 + rate-constant: {A: 3.87e+14, b: 0.0, Ea: 1.888e+04} +- equation: N2O + OH <=> N2 + HO2 # Reaction 184 + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 2.106e+04} +- equation: N2O (+M) <=> N2 + O (+M) # Reaction 185 + type: falloff + low-P-rate-constant: {A: 6.37e+14, b: 0.0, Ea: 5.664e+04} + high-P-rate-constant: {A: 7.91e+10, b: 0.0, Ea: 5.602e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.625} +- equation: HO2 + NO <=> NO2 + OH # Reaction 186 + rate-constant: {A: 2.11e+12, b: 0.0, Ea: -480.0} +- equation: NO + O + M <=> NO2 + M # Reaction 187 + type: three-body + rate-constant: {A: 1.06e+20, b: -1.41, Ea: 0.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: NO2 + O <=> NO + O2 # Reaction 188 + rate-constant: {A: 3.9e+12, b: 0.0, Ea: -240.0} +- equation: NO2 + H <=> NO + OH # Reaction 189 + rate-constant: {A: 1.32e+14, b: 0.0, Ea: 360.0} +- equation: NH + O <=> NO + H # Reaction 190 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: NH + H <=> N + H2 # Reaction 191 + rate-constant: {A: 3.2e+13, b: 0.0, Ea: 330.0} +- equation: NH + OH <=> HNO + H # Reaction 192 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: NH + OH <=> N + H2O # Reaction 193 + rate-constant: {A: 2.0e+09, b: 1.2, Ea: 0.0} +- equation: NH + O2 <=> HNO + O # Reaction 194 + rate-constant: {A: 4.61e+05, b: 2.0, Ea: 6500.0} +- equation: NH + O2 <=> NO + OH # Reaction 195 + rate-constant: {A: 1.28e+06, b: 1.5, Ea: 100.0} +- equation: NH + N <=> N2 + H # Reaction 196 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 0.0} +- equation: NH + H2O <=> HNO + H2 # Reaction 197 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 1.385e+04} +- equation: NH + NO <=> N2 + OH # Reaction 198 + rate-constant: {A: 2.16e+13, b: -0.23, Ea: 0.0} +- equation: NH + NO <=> N2O + H # Reaction 199 + rate-constant: {A: 3.65e+14, b: -0.45, Ea: 0.0} +- equation: NH2 + O <=> OH + NH # Reaction 200 + rate-constant: {A: 3.0e+12, b: 0.0, Ea: 0.0} +- equation: NH2 + O <=> H + HNO # Reaction 201 + rate-constant: {A: 3.9e+13, b: 0.0, Ea: 0.0} +- equation: NH2 + H <=> NH + H2 # Reaction 202 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 3650.0} +- equation: NH2 + OH <=> NH + H2O # Reaction 203 + rate-constant: {A: 9.0e+07, b: 1.5, Ea: -460.0} +- equation: NNH <=> N2 + H # Reaction 204 + rate-constant: {A: 3.3e+08, b: 0.0, Ea: 0.0} +- equation: NNH + M <=> N2 + H + M # Reaction 205 + type: three-body + rate-constant: {A: 1.3e+14, b: -0.11, Ea: 4980.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: NNH + O2 <=> HO2 + N2 # Reaction 206 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: NNH + O <=> OH + N2 # Reaction 207 + rate-constant: {A: 2.5e+13, b: 0.0, Ea: 0.0} +- equation: NNH + O <=> NH + NO # Reaction 208 + rate-constant: {A: 7.0e+13, b: 0.0, Ea: 0.0} +- equation: NNH + H <=> H2 + N2 # Reaction 209 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: NNH + OH <=> H2O + N2 # Reaction 210 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: NNH + CH3 <=> CH4 + N2 # Reaction 211 + rate-constant: {A: 2.5e+13, b: 0.0, Ea: 0.0} +- equation: H + NO + M <=> HNO + M # Reaction 212 + type: three-body + rate-constant: {A: 4.48e+19, b: -1.32, Ea: 740.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: HNO + O <=> NO + OH # Reaction 213 + rate-constant: {A: 2.5e+13, b: 0.0, Ea: 0.0} +- equation: HNO + H <=> H2 + NO # Reaction 214 + rate-constant: {A: 9.0e+11, b: 0.72, Ea: 660.0} +- equation: HNO + OH <=> NO + H2O # Reaction 215 + rate-constant: {A: 1.3e+07, b: 1.9, Ea: -950.0} +- equation: HNO + O2 <=> HO2 + NO # Reaction 216 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 1.3e+04} +- equation: CN + O <=> CO + N # Reaction 217 + rate-constant: {A: 7.7e+13, b: 0.0, Ea: 0.0} +- equation: CN + OH <=> NCO + H # Reaction 218 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: CN + H2O <=> HCN + OH # Reaction 219 + rate-constant: {A: 8.0e+12, b: 0.0, Ea: 7460.0} +- equation: CN + O2 <=> NCO + O # Reaction 220 + rate-constant: {A: 6.14e+12, b: 0.0, Ea: -440.0} +- equation: CN + H2 <=> HCN + H # Reaction 221 + rate-constant: {A: 2.95e+05, b: 2.45, Ea: 2240.0} +- equation: NCO + O <=> NO + CO # Reaction 222 + rate-constant: {A: 2.35e+13, b: 0.0, Ea: 0.0} +- equation: NCO + H <=> NH + CO # Reaction 223 + rate-constant: {A: 5.4e+13, b: 0.0, Ea: 0.0} +- equation: NCO + OH <=> NO + H + CO # Reaction 224 + rate-constant: {A: 2.5e+12, b: 0.0, Ea: 0.0} +- equation: NCO + N <=> N2 + CO # Reaction 225 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: NCO + O2 <=> NO + CO2 # Reaction 226 + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 2.0e+04} +- equation: NCO + M <=> N + CO + M # Reaction 227 + type: three-body + rate-constant: {A: 3.1e+14, b: 0.0, Ea: 5.405e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: NCO + NO <=> N2O + CO # Reaction 228 + rate-constant: {A: 1.9e+17, b: -1.52, Ea: 740.0} +- equation: NCO + NO <=> N2 + CO2 # Reaction 229 + rate-constant: {A: 3.8e+18, b: -2.0, Ea: 800.0} +- equation: HCN + M <=> H + CN + M # Reaction 230 + type: three-body + rate-constant: {A: 1.04e+29, b: -3.3, Ea: 1.266e+05} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: HCN + O <=> NCO + H # Reaction 231 + rate-constant: {A: 2.03e+04, b: 2.64, Ea: 4980.0} +- equation: HCN + O <=> NH + CO # Reaction 232 + rate-constant: {A: 5070.0, b: 2.64, Ea: 4980.0} +- equation: HCN + O <=> CN + OH # Reaction 233 + rate-constant: {A: 3.91e+09, b: 1.58, Ea: 2.66e+04} +- equation: HCN + OH <=> HOCN + H # Reaction 234 + rate-constant: {A: 1.1e+06, b: 2.03, Ea: 1.337e+04} +- equation: HCN + OH <=> HNCO + H # Reaction 235 + rate-constant: {A: 4400.0, b: 2.26, Ea: 6400.0} +- equation: HCN + OH <=> NH2 + CO # Reaction 236 + rate-constant: {A: 160.0, b: 2.56, Ea: 9000.0} +- equation: H + HCN (+M) <=> H2CN (+M) # Reaction 237 + type: falloff + low-P-rate-constant: {A: 1.4e+26, b: -3.4, Ea: 1900.0} + high-P-rate-constant: {A: 3.3e+13, b: 0.0, Ea: 0.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H2CN + N <=> N2 + CH2 # Reaction 238 + rate-constant: {A: 6.0e+13, b: 0.0, Ea: 400.0} +- equation: C + N2 <=> CN + N # Reaction 239 + rate-constant: {A: 6.3e+13, b: 0.0, Ea: 4.602e+04} +- equation: CH + N2 <=> HCN + N # Reaction 240 + rate-constant: {A: 3.12e+09, b: 0.88, Ea: 2.013e+04} +- equation: CH + N2 (+M) <=> HCNN (+M) # Reaction 241 + type: falloff + low-P-rate-constant: {A: 1.3e+25, b: -3.16, Ea: 740.0} + high-P-rate-constant: {A: 3.1e+12, b: 0.15, Ea: 0.0} + Troe: {A: 0.667, T3: 235.0, T1: 2117.0, T2: 4536.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 1.0} +- equation: CH2 + N2 <=> HCN + NH # Reaction 242 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 7.4e+04} +- equation: CH2(S) + N2 <=> NH + HCN # Reaction 243 + rate-constant: {A: 1.0e+11, b: 0.0, Ea: 6.5e+04} +- equation: C + NO <=> CN + O # Reaction 244 + rate-constant: {A: 1.9e+13, b: 0.0, Ea: 0.0} +- equation: C + NO <=> CO + N # Reaction 245 + rate-constant: {A: 2.9e+13, b: 0.0, Ea: 0.0} +- equation: CH + NO <=> HCN + O # Reaction 246 + rate-constant: {A: 4.1e+13, b: 0.0, Ea: 0.0} +- equation: CH + NO <=> H + NCO # Reaction 247 + rate-constant: {A: 1.62e+13, b: 0.0, Ea: 0.0} +- equation: CH + NO <=> N + HCO # Reaction 248 + rate-constant: {A: 2.46e+13, b: 0.0, Ea: 0.0} +- equation: CH2 + NO <=> H + HNCO # Reaction 249 + rate-constant: {A: 3.1e+17, b: -1.38, Ea: 1270.0} +- equation: CH2 + NO <=> OH + HCN # Reaction 250 + rate-constant: {A: 2.9e+14, b: -0.69, Ea: 760.0} +- equation: CH2 + NO <=> H + HCNO # Reaction 251 + rate-constant: {A: 3.8e+13, b: -0.36, Ea: 580.0} +- equation: CH2(S) + NO <=> H + HNCO # Reaction 252 + rate-constant: {A: 3.1e+17, b: -1.38, Ea: 1270.0} +- equation: CH2(S) + NO <=> OH + HCN # Reaction 253 + rate-constant: {A: 2.9e+14, b: -0.69, Ea: 760.0} +- equation: CH2(S) + NO <=> H + HCNO # Reaction 254 + rate-constant: {A: 3.8e+13, b: -0.36, Ea: 580.0} +- equation: CH3 + NO <=> HCN + H2O # Reaction 255 + rate-constant: {A: 9.6e+13, b: 0.0, Ea: 2.88e+04} +- equation: CH3 + NO <=> H2CN + OH # Reaction 256 + rate-constant: {A: 1.0e+12, b: 0.0, Ea: 2.175e+04} +- equation: HCNN + O <=> CO + H + N2 # Reaction 257 + rate-constant: {A: 2.2e+13, b: 0.0, Ea: 0.0} +- equation: HCNN + O <=> HCN + NO # Reaction 258 + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 0.0} +- equation: HCNN + O2 <=> O + HCO + N2 # Reaction 259 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: HCNN + OH <=> H + HCO + N2 # Reaction 260 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: HCNN + H <=> CH2 + N2 # Reaction 261 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: HNCO + O <=> NH + CO2 # Reaction 262 + rate-constant: {A: 9.8e+07, b: 1.41, Ea: 8500.0} +- equation: HNCO + O <=> HNO + CO # Reaction 263 + rate-constant: {A: 1.5e+08, b: 1.57, Ea: 4.4e+04} +- equation: HNCO + O <=> NCO + OH # Reaction 264 + rate-constant: {A: 2.2e+06, b: 2.11, Ea: 1.14e+04} +- equation: HNCO + H <=> NH2 + CO # Reaction 265 + rate-constant: {A: 2.25e+07, b: 1.7, Ea: 3800.0} +- equation: HNCO + H <=> H2 + NCO # Reaction 266 + rate-constant: {A: 1.05e+05, b: 2.5, Ea: 1.33e+04} +- equation: HNCO + OH <=> NCO + H2O # Reaction 267 + rate-constant: {A: 3.3e+07, b: 1.5, Ea: 3600.0} +- equation: HNCO + OH <=> NH2 + CO2 # Reaction 268 + rate-constant: {A: 3.3e+06, b: 1.5, Ea: 3600.0} +- equation: HNCO + M <=> NH + CO + M # Reaction 269 + type: three-body + rate-constant: {A: 1.18e+16, b: 0.0, Ea: 8.472e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: HCNO + H <=> H + HNCO # Reaction 270 + rate-constant: {A: 2.1e+15, b: -0.69, Ea: 2850.0} +- equation: HCNO + H <=> OH + HCN # Reaction 271 + rate-constant: {A: 2.7e+11, b: 0.18, Ea: 2120.0} +- equation: HCNO + H <=> NH2 + CO # Reaction 272 + rate-constant: {A: 1.7e+14, b: -0.75, Ea: 2890.0} +- equation: HOCN + H <=> H + HNCO # Reaction 273 + rate-constant: {A: 2.0e+07, b: 2.0, Ea: 2000.0} +- equation: HCCO + NO <=> HCNO + CO # Reaction 274 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 0.0} +- equation: CH3 + N <=> H2CN + H # Reaction 275 + rate-constant: {A: 6.1e+14, b: -0.31, Ea: 290.0} +- equation: CH3 + N <=> HCN + H2 # Reaction 276 + rate-constant: {A: 3.7e+12, b: 0.15, Ea: -90.0} +- equation: NH3 + H <=> NH2 + H2 # Reaction 277 + rate-constant: {A: 5.4e+05, b: 2.4, Ea: 9915.0} +- equation: NH3 + OH <=> NH2 + H2O # Reaction 278 + rate-constant: {A: 5.0e+07, b: 1.6, Ea: 955.0} +- equation: NH3 + O <=> NH2 + OH # Reaction 279 + rate-constant: {A: 9.4e+06, b: 1.94, Ea: 6460.0} +- equation: NH + CO2 <=> HNO + CO # Reaction 280 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 1.435e+04} +- equation: CN + NO2 <=> NCO + NO # Reaction 281 + rate-constant: {A: 6.16e+15, b: -0.752, Ea: 345.0} +- equation: NCO + NO2 <=> N2O + CO2 # Reaction 282 + rate-constant: {A: 3.25e+12, b: 0.0, Ea: -705.0} +- equation: N + CO2 <=> NO + CO # Reaction 283 + rate-constant: {A: 3.0e+12, b: 0.0, Ea: 1.13e+04} +- equation: O + CH3 => H + H2 + CO # Reaction 284 + rate-constant: {A: 3.37e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H4 <=> H + CH2CHO # Reaction 285 + rate-constant: {A: 6.7e+06, b: 1.83, Ea: 220.0} +- equation: O + C2H5 <=> H + CH3CHO # Reaction 286 + rate-constant: {A: 1.096e+14, b: 0.0, Ea: 0.0} +- equation: OH + HO2 <=> O2 + H2O # Reaction 287 + duplicate: true + rate-constant: {A: 5.0e+15, b: 0.0, Ea: 1.733e+04} +- equation: OH + CH3 => H2 + CH2O # Reaction 288 + rate-constant: {A: 8.0e+09, b: 0.5, Ea: -1755.0} +- equation: CH + H2 (+M) <=> CH3 (+M) # Reaction 289 + type: falloff + low-P-rate-constant: {A: 4.82e+25, b: -2.8, Ea: 590.0} + high-P-rate-constant: {A: 1.97e+12, b: 0.43, Ea: -370.0} + Troe: {A: 0.578, T3: 122.0, T1: 2535.0, T2: 9365.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: CH2 + O2 => 2 H + CO2 # Reaction 290 + rate-constant: {A: 5.8e+12, b: 0.0, Ea: 1500.0} +- equation: CH2 + O2 <=> O + CH2O # Reaction 291 + rate-constant: {A: 2.4e+12, b: 0.0, Ea: 1500.0} +- equation: CH2 + CH2 => 2 H + C2H2 # Reaction 292 + rate-constant: {A: 2.0e+14, b: 0.0, Ea: 1.0989e+04} +- equation: CH2(S) + H2O => H2 + CH2O # Reaction 293 + rate-constant: {A: 6.82e+10, b: 0.25, Ea: -935.0} +- equation: C2H3 + O2 <=> O + CH2CHO # Reaction 294 + rate-constant: {A: 3.03e+11, b: 0.29, Ea: 11.0} +- equation: C2H3 + O2 <=> HO2 + C2H2 # Reaction 295 + rate-constant: {A: 1.337e+06, b: 1.61, Ea: -384.0} +- equation: O + CH3CHO <=> OH + CH2CHO # Reaction 296 + rate-constant: {A: 2.92e+12, b: 0.0, Ea: 1808.0} +- equation: O + CH3CHO => OH + CH3 + CO # Reaction 297 + rate-constant: {A: 2.92e+12, b: 0.0, Ea: 1808.0} +- equation: O2 + CH3CHO => HO2 + CH3 + CO # Reaction 298 + rate-constant: {A: 3.01e+13, b: 0.0, Ea: 3.915e+04} +- equation: H + CH3CHO <=> CH2CHO + H2 # Reaction 299 + rate-constant: {A: 2.05e+09, b: 1.16, Ea: 2405.0} +- equation: H + CH3CHO => CH3 + H2 + CO # Reaction 300 + rate-constant: {A: 2.05e+09, b: 1.16, Ea: 2405.0} +- equation: OH + CH3CHO => CH3 + H2O + CO # Reaction 301 + rate-constant: {A: 2.343e+10, b: 0.73, Ea: -1113.0} +- equation: HO2 + CH3CHO => CH3 + H2O2 + CO # Reaction 302 + rate-constant: {A: 3.01e+12, b: 0.0, Ea: 1.1923e+04} +- equation: CH3 + CH3CHO => CH3 + CH4 + CO # Reaction 303 + rate-constant: {A: 2.72e+06, b: 1.77, Ea: 5920.0} +- equation: H + CH2CO (+M) <=> CH2CHO (+M) # Reaction 304 + type: falloff + low-P-rate-constant: {A: 1.012e+42, b: -7.63, Ea: 3854.0} + high-P-rate-constant: {A: 4.865e+11, b: 0.422, Ea: -1755.0} + Troe: {A: 0.465, T3: 201.0, T1: 1773.0, T2: 5333.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: O + CH2CHO => H + CH2 + CO2 # Reaction 305 + rate-constant: {A: 1.5e+14, b: 0.0, Ea: 0.0} +- equation: O2 + CH2CHO => OH + CO + CH2O # Reaction 306 + rate-constant: {A: 1.81e+10, b: 0.0, Ea: 0.0} +- equation: O2 + CH2CHO => OH + 2 HCO # Reaction 307 + rate-constant: {A: 2.35e+10, b: 0.0, Ea: 0.0} +- equation: H + CH2CHO <=> CH3 + HCO # Reaction 308 + rate-constant: {A: 2.2e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2CHO <=> CH2CO + H2 # Reaction 309 + rate-constant: {A: 1.1e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2CHO <=> H2O + CH2CO # Reaction 310 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2CHO <=> HCO + CH2OH # Reaction 311 + rate-constant: {A: 3.01e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + C2H5 (+M) <=> C3H8 (+M) # Reaction 312 + type: falloff + low-P-rate-constant: {A: 2.71e+74, b: -16.82, Ea: 1.3065e+04} + high-P-rate-constant: {A: 9.43e+12, b: 0.0, Ea: 0.0} + Troe: {A: 0.1527, T3: 291.0, T1: 2742.0, T2: 7748.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: O + C3H8 <=> OH + C3H7 # Reaction 313 + rate-constant: {A: 1.93e+05, b: 2.68, Ea: 3716.0} +- equation: H + C3H8 <=> C3H7 + H2 # Reaction 314 + rate-constant: {A: 1.32e+06, b: 2.54, Ea: 6756.0} +- equation: OH + C3H8 <=> C3H7 + H2O # Reaction 315 + rate-constant: {A: 3.16e+07, b: 1.8, Ea: 934.0} +- equation: C3H7 + H2O2 <=> HO2 + C3H8 # Reaction 316 + rate-constant: {A: 378.0, b: 2.72, Ea: 1500.0} +- equation: CH3 + C3H8 <=> C3H7 + CH4 # Reaction 317 + rate-constant: {A: 0.903, b: 3.65, Ea: 7154.0} +- equation: CH3 + C2H4 (+M) <=> C3H7 (+M) # Reaction 318 + type: falloff + low-P-rate-constant: {A: 3.0e+63, b: -14.6, Ea: 1.817e+04} + high-P-rate-constant: {A: 2.55e+06, b: 1.6, Ea: 5700.0} + Troe: {A: 0.1894, T3: 277.0, T1: 8748.0, T2: 7891.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: O + C3H7 <=> C2H5 + CH2O # Reaction 319 + rate-constant: {A: 9.64e+13, b: 0.0, Ea: 0.0} +- equation: H + C3H7 (+M) <=> C3H8 (+M) # Reaction 320 + type: falloff + low-P-rate-constant: {A: 4.42e+61, b: -13.545, Ea: 1.1357e+04} + high-P-rate-constant: {A: 3.613e+13, b: 0.0, Ea: 0.0} + Troe: {A: 0.315, T3: 369.0, T1: 3285.0, T2: 6667.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C3H7 <=> CH3 + C2H5 # Reaction 321 + rate-constant: {A: 4.06e+06, b: 2.19, Ea: 890.0} +- equation: OH + C3H7 <=> C2H5 + CH2OH # Reaction 322 + rate-constant: {A: 2.41e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + C3H7 <=> O2 + C3H8 # Reaction 323 + rate-constant: {A: 2.55e+10, b: 0.255, Ea: -943.0} +- equation: HO2 + C3H7 => OH + C2H5 + CH2O # Reaction 324 + rate-constant: {A: 2.41e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + C3H7 <=> 2 C2H5 # Reaction 325 + rate-constant: {A: 1.927e+13, b: -0.32, Ea: 0.0} diff --git a/image_2024-04-16_230827603.png b/image_2024-04-16_230827603.png new file mode 100644 index 0000000..6acbcb7 Binary files /dev/null and b/image_2024-04-16_230827603.png differ diff --git a/pymars/drg.py b/pymars/drg.py index 5f3534c..c925487 100644 --- a/pymars/drg.py +++ b/pymars/drg.py @@ -29,9 +29,9 @@ def create_drg_matrix(state, solution): temp, pressure, mass_fractions = state solution.TPY = temp, pressure, mass_fractions - net_stoich = solution.product_stoich_coeffs() - solution.reactant_stoich_coeffs() - flags = np.where(((solution.product_stoich_coeffs() != 0) | - (solution.reactant_stoich_coeffs() !=0 ) + net_stoich = solution.product_stoich_coeffs - solution.reactant_stoich_coeffs + flags = np.where(((solution.product_stoich_coeffs != 0) | + (solution.reactant_stoich_coeffs !=0 ) ), 1, 0) # only consider contributions from reactions with nonzero net rates of progress @@ -181,7 +181,7 @@ def reduce_drg(model_file, species_targets, species_safe, threshold, model_file, species_removed, f'reduced_{model_file}', phase_name=phase_name ) reduced_model_filename = soln2cti.write( - reduced_model, f'reduced_{reduced_model.n_species}.cti', path=path + reduced_model, f'reduced_{reduced_model.n_species}.yaml', path=path ) reduced_model_metrics = sample_metrics( @@ -193,12 +193,13 @@ def reduce_drg(model_file, species_targets, species_safe, threshold, # If desired, now identify limbo species for future sensitivity analysis limbo_species = [] if threshold_upper: - species_retained = [] - for matrix in matrices: - species_retained += trim_drg( - matrix, solution.species_names, species_targets, threshold_upper - ) - limbo_species = list(set(species_retained)) + species_retained += trim_drg( + matrix, solution.species_names, species_targets, threshold_upper + ) + limbo_species = [ + sp for sp in solution.species_names + if sp not in (species_retained + species_safe + species_removed) + ] return ReducedModel( model=reduced_model, filename=reduced_model_filename, @@ -317,7 +318,7 @@ def run_drg(model_file, ignition_conditions, psr_conditions, flame_conditions, threshold_upper=threshold_upper, num_threads=num_threads, path=path ) else: - soln2cti.write(reduced_model, f'reduced_{reduced_model.model.n_species}.cti', path=path) + soln2cti.write(reduced_model, f'reduced_{reduced_model.model.n_species}.yaml', path=path) logging.info(45 * '-') logging.info('DRG reduction complete.') diff --git a/pymars/drgep.py b/pymars/drgep.py index 4edb0bc..823e357 100644 --- a/pymars/drgep.py +++ b/pymars/drgep.py @@ -171,9 +171,9 @@ def create_drgep_matrix(state, solution): temp, pressure, mass_fractions = state solution.TPY = temp, pressure, mass_fractions - net_stoich = solution.product_stoich_coeffs() - solution.reactant_stoich_coeffs() - flags = np.where(((solution.product_stoich_coeffs() != 0) | - (solution.reactant_stoich_coeffs() !=0 ) + net_stoich = solution.product_stoich_coeffs - solution.reactant_stoich_coeffs + flags = np.where(((solution.product_stoich_coeffs != 0) | + (solution.reactant_stoich_coeffs !=0 ) ), 1, 0) # only consider contributions from reactions with nonzero net rates of progress @@ -323,7 +323,7 @@ def reduce_drgep(model_file, species_safe, threshold, importance_coeffs, ignitio model_file, species_removed, f'reduced_{model_file}', phase_name=phase_name ) reduced_model_filename = soln2cti.write( - reduced_model, f'reduced_{reduced_model.n_species}.cti', path=path + reduced_model, f'reduced_{reduced_model.n_species}.yaml','' ) reduced_model_metrics = sample_metrics( @@ -451,7 +451,7 @@ def run_drgep(model_file, ignition_conditions, psr_conditions, flame_conditions, sampled_metrics, phase_name=phase_name, num_threads=num_threads, path=path ) else: - soln2cti.write(reduced_model, f'reduced_{reduced_model.model.n_species}.cti', path=path) + solution.write_yaml(f'reduced_{reduced_model.n_species}.yaml',reduced_model) if threshold_upper: for sp in reduced_model.model.species_names: diff --git a/pymars/pymars.py b/pymars/pymars.py index aedc347..5c5cee1 100644 --- a/pymars/pymars.py +++ b/pymars/pymars.py @@ -5,7 +5,7 @@ from argparse import ArgumentParser from typing import List, Dict, NamedTuple -import ruamel_yaml as yaml +import yaml import cantera as ct # local imports @@ -33,7 +33,7 @@ class ReductionInputs(NamedTuple): target_species: List[str] safe_species: List[str] = [] sensitivity_analysis: bool = False - upper_threshold: float = 0.4 + upper_threshold: float = 0.1 sensitivity_type: str = 'greedy' phase_name: str = '' @@ -73,10 +73,7 @@ def parse_inputs(input_dict): 'At least one "target" species must be specified for graph-based reduction methods.' ) - upper_threshold = input_dict.get('upper-threshold', None) - if not upper_threshold and sensitivity_analysis: - logging.info('Warning: using default upper threshold value (0.1)') - upper_threshold = 0.1 + upper_threshold = input_dict.get('upper-threshold', 0.1) sensitivity_type = input_dict.get('sensitivity-type', 'initial') safe_species = input_dict.get('retained-species', []) @@ -308,7 +305,7 @@ def pymars(argv): inputs = parse_inputs(input_dict) # Check for Chemkin format and convert if needed - if os.path.splitext(inputs.model)[1] != '.cti': + if os.path.splitext(inputs.model)[1] != '.yaml': logging.info('Chemkin file detected; converting before reduction.') inputs.model = convert(inputs.model, args.thermo, args.transport, args.path) diff --git a/pymars/reduce_model.py b/pymars/reduce_model.py index 817ff7f..4a38066 100644 --- a/pymars/reduce_model.py +++ b/pymars/reduce_model.py @@ -43,18 +43,18 @@ def trim(initial_model_file, exclusion_list, new_model_file, phase_name=''): final_reactions = [] for reaction in solution.reactions(): # remove reactions with an explicit third body that has been removed - if hasattr(reaction, 'efficiencies') and not getattr(reaction, 'default_efficiency', 1.0): - if (len(reaction.efficiencies) == 1 and - list(reaction.efficiencies.keys())[0] in exclusion_list + if hasattr(reaction.third_body, 'efficiencies') and not getattr(reaction.third_body, 'default_efficiency', 1.0): + if (len(reaction.third_body.efficiencies) == 1 and + list(reaction.third_body.efficiencies.keys())[0] in exclusion_list ): continue reaction_species = list(reaction.products.keys()) + list(reaction.reactants.keys()) if all([sp in final_species_names for sp in reaction_species]): # remove any eliminated species from third-body efficiencies - if hasattr(reaction, 'efficiencies'): - reaction.efficiencies = { - sp:val for sp, val in reaction.efficiencies.items() + if hasattr(reaction.third_body, 'efficiencies'): + reaction.third_body.efficiencies = { + sp:val for sp, val in reaction.third_body.efficiencies.items() if sp in final_species_names } final_reactions.append(reaction) diff --git a/pymars/soln2cti.py b/pymars/soln2cti.py index 45e694b..dc43856 100644 --- a/pymars/soln2cti.py +++ b/pymars/soln2cti.py @@ -35,171 +35,7 @@ ] -def section_break(section_title): - """Return string with break and new section title - - Parameters - ---------- - section_title : str - title string for next section break - - Returns - ------- - str - String with section title and breaks - - """ - return('#' + '-' * 75 + '\n' + - f'# {section_title}\n' + - '#' + '-' * 75 + '\n\n' - ) - - -def build_arrhenius(rate, reaction_order, reaction_type): - """Builds Arrhenius coefficient string based on reaction type. - - Parameters - ---------- - rate : cantera.Arrhenius - Arrhenius-form reaction rate coefficient - reaction_order : int or float - Order of reaction (sum of reactant stoichiometric coefficients) - reaction_type : {cantera.ElementaryReaction, cantera.ThreeBodyReaction, cantera.PlogReaction} - Type of reaction - - Returns - ------- - str - String with Arrhenius coefficients - - """ - if reaction_type in [ct.ElementaryReaction, ct.PlogReaction]: - pre_exponential_factor = rate.pre_exponential_factor * 1e3**(reaction_order - 1) - - elif reaction_type == ct.ThreeBodyReaction: - pre_exponential_factor = rate.pre_exponential_factor * 1e3**reaction_order - - elif reaction_type in [ct.FalloffReaction, ct.ChemicallyActivatedReaction]: - raise ValueError('Function does not support falloff or chemically activated reactions') - else: - raise NotImplementedError('Reaction type not supported: ', reaction_type) - - arrhenius = [f'{pre_exponential_factor:.6e}', - str(rate.temperature_exponent), - str(rate.activation_energy / CALORIES_CONSTANT) - ] - return ', '.join(arrhenius) - - -def build_falloff_arrhenius(rate, reaction_order, reaction_type, pressure_limit): - """Builds Arrhenius coefficient strings for falloff and chemically-activated reactions. - - Parameters - ---------- - rate : cantera.Arrhenius - Arrhenius-form reaction rate coefficient - reaction_order : int or float - Order of reaction (sum of reactant stoichiometric coefficients) - reaction_type : {ct.FalloffReaction, ct.ChemicallyActivatedReaction} - Type of reaction - pressure_limit : {'high', 'low'} - string designating pressure limit - - Returns - ------- - str - Arrhenius coefficient string - - """ - assert pressure_limit in ['low', 'high'], 'Pressure range needs to be high or low' - - # Each needs more complicated handling due if high- or low-pressure limit - if reaction_type == ct.FalloffReaction: - if pressure_limit == 'low': - pre_exponential_factor = rate.pre_exponential_factor * 1e3**(reaction_order) - elif pressure_limit == 'high': - pre_exponential_factor = rate.pre_exponential_factor * 1e3**(reaction_order - 1) - - elif reaction_type == ct.ChemicallyActivatedReaction: - if pressure_limit == 'low': - pre_exponential_factor = rate.pre_exponential_factor * 1e3**(reaction_order - 1) - elif pressure_limit == 'high': - pre_exponential_factor = rate.pre_exponential_factor * 1e3**(reaction_order - 2) - else: - raise ValueError('Reaction type not supported: ', reaction_type) - - arrhenius = [f'{pre_exponential_factor:.6E}', - str(rate.temperature_exponent), - str(rate.activation_energy / CALORIES_CONSTANT) - ] - return '[' + ', '.join(arrhenius) + ']' - - -def build_falloff(parameters, falloff_function): - """Creates falloff reaction Troe parameter string - - Parameters - ---------- - parameters : numpy.ndarray - Array of falloff parameters; length varies based on ``falloff_function`` - falloff_function : {'Troe', 'SRI'} - Type of falloff function - - Returns - ------- - falloff_string : str - String of falloff parameters - - """ - if falloff_function == 'Troe': - falloff_string = ('Troe(' + - f'A = {parameters[0]}' + - f', T3 = {parameters[1]}' + - f', T1 = {parameters[2]}' + - f', T2 = {parameters[3]})' - ) - elif falloff_function == 'SRI': - falloff_string = ('SRI(' + - f'A = {parameters[0]}' + - f', B = {parameters[1]}' + - f', C = {parameters[2]}' + - f', D = {parameters[3]}' + - f', E = {parameters[4]})' - ) - else: - raise NotImplementedError(f'Falloff function not supported: {falloff_function}') - - return falloff_string - - -def build_efficiencies(efficiencies, species_names, default_efficiency=1.0): - """Creates line with list of third-body species efficiencies. - - Parameters - ---------- - efficiencies : dict - Dictionary of species efficiencies - species_names : dict of str - List of all species names - default_efficiency : float, optional - Default efficiency for all species; will be 0.0 for reactions with explicit third body - - Returns - ------- - str - Line with list of efficiencies - - """ - # Reactions with a default_efficiency of 0 and a single entry in the efficiencies dict - # have an explicit third body specified. - if len(efficiencies) == 1 and not default_efficiency: - return '' - - reduced_efficiencies = {s:efficiencies[s] for s in efficiencies if s in species_names} - return ' '.join([f'{s}:{v}' for s, v in reduced_efficiencies.items()]) - - -def write(solution, output_filename='', path=''): +def write(solution, output_filename='',path=''): """Function to write cantera solution object to cti file. Parameters @@ -226,215 +62,12 @@ def write(solution, output_filename='', path=''): if output_filename: output_filename = os.path.join(path, output_filename) else: - output_filename = os.path.join(path, f'{solution.name}.cti') + output_filename = os.path.join(path, f'{solution.name}.yaml') if os.path.isfile(output_filename): os.remove(output_filename) - - with open(output_filename, 'w') as the_file: - - # Write title block to file - the_file.write(section_break('CTI file converted from solution object')) - the_file.write('units(length = "cm", time = "s",' + - ' quantity = "mol", act_energy = "cal/mol")' + - '\n\n' - ) - - # Write Phase definition to file - element_names = ' '.join(solution.element_names) - species_names = fill( - ' '.join(solution.species_names), - width=55, - subsequent_indent=19*' ', - break_long_words=False, - break_on_hyphens=False - ) - - the_file.write( - f'ideal_gas(name = "{os.path.splitext(os.path.basename(output_filename))[0]}", \n' + - indent[5] + f'elements = "{element_names}", \n' + - indent[5] + f'species = """ {species_names} """, \n' + - indent[5] + f'reactions = "all", \n' + - indent[5] + f'initial_state = state(temperature = {solution.T}, ' + - f'pressure = {solution.P}) )\n\n' - ) - - # Write species data to file - the_file.write(section_break('Species data')) - for species in solution.species(): - # build strings with low- and high-temperature 7 NASA coefficients - nasa_range_low = f'[{species.thermo.min_temp}, {species.thermo.coeffs[0]}]' - nasa_coeffs_low = [f'{c:.9e}' for c in species.thermo.coeffs[8:15]] - nasa_coeffs_low = fill( - '[' + ', '.join(nasa_coeffs_low) + ']', - width=50, - subsequent_indent=16*' ', - break_long_words=False, - break_on_hyphens=False - ) - - nasa_range_high = f'[{species.thermo.coeffs[0]}, {species.thermo.max_temp}]' - nasa_coeffs_high = [f'{c:.9e}' for c in species.thermo.coeffs[1:8]] - nasa_coeffs_high = fill( - '[' + ', '.join(nasa_coeffs_high) + ']', - width=50, - subsequent_indent=16*' ', - break_long_words=False, - break_on_hyphens=False - ) - - composition = ', '.join([f'{s}:{int(v)}' for s, v in species.composition.items()]) - - # start writing composition and thermo data - species_string = ( - f'species(name = "{species.name}",\n' + - f'{indent[4]}atoms = "{composition}", \n' + - f'{indent[4]}thermo = (\n' + - f'{indent[7]}NASA( {nasa_range_low}, {nasa_coeffs_low} ),\n' + - f'{indent[7]}NASA( {nasa_range_high}, {nasa_coeffs_high} )\n' + - f'{indent[15]}),\n' - ) - - #check if species has defined transport data, and write that if so - if species.transport: - species_string += ( - f' transport = gas_transport(\n' + - indent[15] + f'geom = "{species.transport.geometry}",\n' + - indent[15] + f'diam = {species.transport.diameter * 1e10}, \n' + - indent[15] + f'well_depth = {species.transport.well_depth / ct.boltzmann}, \n' + - indent[15] + f'polar = {species.transport.polarizability * 1e30}, \n' + - indent[15] + f'rot_relax = {species.transport.rotational_relaxation}' - ) - if species.transport.dipole != 0: - dipole = species.transport.dipole / DEBEYE_CONVERSION - species_string += ', \n' + indent[15] + f'dipole= {dipole}' - species_string += ')\n' - - species_string += ' )\n\n' - the_file.write(species_string) - - # Write reactions to file - the_file.write(section_break('Reactions')) - - # write data for each reaction - for idx, reaction in enumerate(solution.reactions()): + solution.write_yaml(output_filename,solution) - reaction_string = f'# Reaction {idx + 1}\n' - - if type(reaction) == ct.ElementaryReaction: - arrhenius = build_arrhenius(reaction.rate, - sum(reaction.reactants.values()), - ct.ElementaryReaction - ) - reaction_string += f'reaction( "{reaction.equation}", [{arrhenius}]' - - elif type(reaction) == ct.ThreeBodyReaction: - arrhenius = build_arrhenius(reaction.rate, - sum(reaction.reactants.values()), - ct.ThreeBodyReaction - ) - reaction_string += f'three_body_reaction( "{reaction.equation}", [{arrhenius}]' - - # potentially trimmed efficiencies list - efficiencies_str = build_efficiencies(reaction.efficiencies, solution.species_names) - if efficiencies_str: - reaction_string += f',\n{indent[9]}efficiencies = "{efficiencies_str}"' - - elif type(reaction) == ct.FalloffReaction: - arrhenius_high = build_falloff_arrhenius( - reaction.high_rate, sum(reaction.reactants.values()), - ct.FalloffReaction, 'high' - ) - arrhenius_low = build_falloff_arrhenius( - reaction.low_rate, sum(reaction.reactants.values()), - ct.FalloffReaction, 'low' - ) - - reaction_string += (f'falloff_reaction( "{reaction.equation}",\n' + - f'{indent[9]}kf = {arrhenius_high},\n' + - f'{indent[9]}kf0 = {arrhenius_low}' - ) - - # need to print additional falloff parameters if present - if reaction.falloff.parameters.size > 0: - falloff_str = build_falloff(reaction.falloff.parameters, reaction.falloff.type) - reaction_string += ',\n' + indent[9] + 'falloff = ' + falloff_str - - # potentially trimmed efficiencies list - efficiencies_str = build_efficiencies( - reaction.efficiencies, solution.species_names, reaction.default_efficiency - ) - if efficiencies_str: - reaction_string += f',\n{indent[9]}efficiencies = "{efficiencies_str}"' - - elif type(reaction) == ct.ChemicallyActivatedReaction: - arrhenius_high = build_falloff_arrhenius( - reaction.high_rate, sum(reaction.reactants.values()), - ct.ChemicallyActivatedReaction, 'high' - ) - arrhenius_low = build_falloff_arrhenius( - reaction.low_rate, sum(reaction.reactants.values()), - ct.ChemicallyActivatedReaction, 'low' - ) - - reaction_string += (f'chemically_activated_reaction( "{reaction.equation}",\n' + - f'{indent[15]} kLow = {arrhenius_low},\n' + - f'{indent[15]} kHigh = {arrhenius_high}' - ) - - # need to print additional falloff parameters if present - if reaction.falloff.parameters.size > 0: - falloff_str = build_falloff(reaction.falloff.parameters, reaction.falloff.type) - reaction_string += ',\n' + indent[9] + 'falloff = ' + falloff_str - - # potentially trimmed efficiencies list - efficiencies_str = build_efficiencies( - reaction.efficiencies, solution.species_names, reaction.default_efficiency - ) - if efficiencies_str: - reaction_string += f',\n{indent[8]} efficiencies = "{efficiencies_str}"' - - elif type(reaction) == ct.PlogReaction: - reaction_string += f'pdep_arrhenius( "{reaction.equation}",\n' - - rates = [] - for rate in reaction.rates: - pressure = f'{rate[0] / ct.one_atm}' - arrhenius = build_arrhenius(rate[1], - sum(reaction.reactants.values()), - ct.PlogReaction - ) - rates.append(f'{indent[15]}[({pressure}, "atm"), {arrhenius}]') - # want to get the list of rates with a comma and newline between each entry, - # but not at the end. - reaction_string += ',\n'.join(rates) - - elif type(reaction) == ct.ChebyshevReaction: - reaction_string += f'chebyshev_reaction( "{reaction.equation}",\n' - - # need to modify first coefficient - coeffs = reaction.coeffs[:] - coeffs[0][0] -= math.log10(1e-3 ** (sum(reaction.reactants.values()) - 1)) - - coeffs_strings = [] - for coeff_row in coeffs: - coeffs_strings.append('[' + ', '.join([f'{c:.6e}' for c in coeff_row]) + ']') - coeffs_string = f',\n{indent[15] + indent[9]}'.join(coeffs_strings) - - reaction_string += ( - f'{indent[15]} Tmin={reaction.Tmin}, Tmax={reaction.Tmax},\n' + - f'{indent[15]} Pmin=({reaction.Pmin / ct.one_atm}, "atm"), Pmax=({reaction.Pmax / ct.one_atm}, "atm"),\n' + - f'{indent[15]} coeffs=[{coeffs_string}]' - ) - - else: - raise NotImplementedError(f'Unsupported reaction type: {type(reaction)}') - - if reaction.duplicate: - reaction_string += ',\n' + indent[8] + 'options = "duplicate"' - - reaction_string += ')\n\n' - the_file.write(reaction_string) - + return output_filename diff --git a/pymars/tools.py b/pymars/tools.py index 73f6aa5..27fb66b 100644 --- a/pymars/tools.py +++ b/pymars/tools.py @@ -6,8 +6,9 @@ import numpy as np import cantera as ct -from cantera import ck2cti - +#from cantera import ck2cti +from cantera import ck2yaml +from cantera import yaml2ck from . import soln2ck @@ -217,20 +218,20 @@ def convert(model_file, thermo_file=None, transport_file=None, path=''): # Chemkin files can have multiple extensions, so easier to check if Cantera if extension == '.cti': # Convert from Cantera to Chemkin format. - logging.info('Converter detected Cantera input model: ' + model_file) - logging.info('Converting to Chemkin format.') + print('Converter detected CTI Cantera input model: ' + model_file) + print('Converting to Chemkin format.') solution = ct.Solution(model_file) converted_files = soln2ck.write(solution, basename + '.inp', path=path) return converted_files else: # Convert from Chemkin to Cantera format. - logging.info('Converter detected Chemkin input model: ' + model_file) - logging.info('Converting to Cantera format.') + print('Converter detected Chemkin input model: ' + model_file) + print('Converting to Cantera format.') - converted_file = os.path.join(path, basename + '.cti') + converted_file = os.path.join(path, basename + '.yaml') - # calls ck2cti based on given files + # calls ck2yaml based on given files args = [f'--input={model_file}'] if thermo_file: args.append(f'--thermo={thermo_file}') @@ -241,5 +242,5 @@ def convert(model_file, thermo_file=None, transport_file=None, path=''): # generally Chemkin files have issues (redundant species, etc.) that require this argument args.append('--permissive') - ck2cti.main(args) - return converted_file + ck2yaml.main(args) + return converted_file \ No newline at end of file diff --git a/reduction_input.yaml b/reduction_input.yaml new file mode 100644 index 0000000..2e83b7a --- /dev/null +++ b/reduction_input.yaml @@ -0,0 +1,88 @@ +model: grimech30.yaml +targets: + - CH4 + - O2 +retained-species: + - N2 +method: DRGEP +error: 10.0 +sensitivity-analysis: False +autoignition-conditions: + - kind: constant pressure + pressure: 1.0 + temperature: 700.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 1.0 + - kind: constant pressure + pressure: 1.0 + temperature: 1000.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 1.0 + + - kind: constant pressure + pressure: 1.0 + temperature: 1200.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 0.5 + + - kind: constant pressure + pressure: 1.0 + temperature: 1600.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 0.5 +#10 bar + - kind: constant pressure + pressure: 10.0 + temperature: 700.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 1.0 + + - kind: constant pressure + pressure: 10.0 + temperature: 1000.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 1.0 + + - kind: constant pressure + pressure: 10.0 + temperature: 1200.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 0.5 + + - kind: constant pressure + pressure: 10.0 + temperature: 1600.0 + fuel: + CH4: 1.0 + oxidizer: + O2: 1.0 + N2: 3.76 + equivalence-ratio: 0.5 \ No newline at end of file diff --git a/simulation.py b/simulation.py new file mode 100644 index 0000000..7520e95 --- /dev/null +++ b/simulation.py @@ -0,0 +1,324 @@ +"""Autoignition simulation module + +.. moduleauthor:: Kyle Niemeyer +""" + +# Standard libraries +import os +import logging + +# Related modules +import numpy as np +import tables +import cantera as ct + + +ct.suppress_thermo_warnings() + +class Simulation(object): + """Class for ignition delay simulations + + Parameters + ---------- + idx : int + Identifer index for case + properties : InputIgnition + Object with initial conditions for simulation + model : str + Filename for Cantera-format model to be used + phase_name : str, optional + Optional name for phase to load from CTI file (e.g., 'gas'). + path : str, optional + Path for location of output files + + """ + def __init__(self, idx, properties, model, phase_name='gas', path=''): + self.idx = idx + self.properties = properties + self.model = model + self.phase_name = phase_name + self.path = path + + def setup_case(self): + """Initialize simulation case. + """ + self.gas = ct.Solution(self.model, self.phase_name) + + # Default maximum number of steps + self.max_steps = 10000000000 + if self.properties.max_steps: + self.max_steps = self.properties.max_steps + + # By default, simulations will run to steady state, with the maximum number of steps + # given by ``self.max_steps``. Alternatively, an end time (in seconds) can be + # given in cases where something specific is needed (e.g., longer than normal) + self.time_end = 0.0 + if self.properties.end_time: + self.time_end = self.properties.end_time + + self.gas.TP = ( + self.properties.temperature, self.properties.pressure * ct.one_atm + ) + # set initial composition using either equivalence ratio or general reactant composition + if self.properties.equivalence_ratio: + self.gas.set_equivalence_ratio( + self.properties.equivalence_ratio, + self.properties.fuel, + self.properties.oxidizer + ) + else: + if self.properties.composition_type == 'mole': + self.gas.TPX = ( + self.properties.temperature, self.properties.pressure * ct.one_atm, + self.properties.reactants + ) + else: + self.gas.TPY = ( + self.properties.temperature, self.properties.pressure * ct.one_atm, + self.properties.reactants + ) + + if self.properties.kind == 'constant pressure': + self.reac = ct.IdealGasConstPressureMoleReactor(self.gas) + + else: + self.reac = ct.IdealGasReactor(self.gas) + + # Create ``ReactorNet`` newtork + self.sim = ct.ReactorNet([self.reac]) + self.sim.derivative_settings = {"skip-third-bodies":True, "skip-falloff":True} + self.sim.preconditioner = ct.AdaptivePreconditioner() + + # Set file for later data file + self.save_file = os.path.join(self.path, str(self.idx) + '.h5') + self.sample_points = [] + + self.ignition_delay = 0.0 + + def run_case(self, stop_at_ignition=False, restart=False): + """Run simulation case set up ``setup_case``. + + If no end time is specified for the integration, the function integrates + to steady state (or a maximum of 10,000 steps, by default). This is done + by checking whether the system state changes below a certain threshold, + with the residual computed using feature checking. This is blatantly stolen + from Cantera's :meth:`cantera.ReactorNet.advance_to_steady_state` method. + + Parameters + ---------- + stop_at_ignition : bool + If ``True``, stop integration at ignition point, don't save data. + restart : bool + If ``True``, skip if results file exists. + + Returns + ------- + self.ignition_delay : float + Computed ignition delay in seconds + + """ + + if restart and os.path.isfile(self.save_file): + print('Skipped existing case ', self.idx) + return + + # Save simulation results in hdf5 table format. + table_def = {'time': tables.Float64Col(pos=0), + 'temperature': tables.Float64Col(pos=1), + 'pressure': tables.Float64Col(pos=2), + 'mass_fractions': tables.Float64Col( + shape=(self.reac.thermo.n_species), pos=3 + ), + } + + with tables.open_file(self.save_file, mode='w', + title=str(self.idx) + ) as h5file: + + table = h5file.create_table(where=h5file.root, + name='simulation', + description=table_def + ) + # Row instance to save timestep information to + timestep = table.row + # Save initial conditions + timestep['time'] = self.sim.time + timestep['temperature'] = self.reac.T + timestep['pressure'] = self.reac.thermo.P + timestep['mass_fractions'] = self.reac.Y + # Add ``timestep`` to table + timestep.append() + + ignition_flag = False + + # Main time integration loop + if self.time_end: + # if end time specified, continue integration until reaching that time + while self.sim.time < self.time_end: + self.sim.step() + + # Save new timestep information + timestep['time'] = self.sim.time + timestep['temperature'] = self.reac.T + timestep['pressure'] = self.reac.thermo.P + timestep['mass_fractions'] = self.reac.Y + + if self.reac.T >= self.properties.temperature + 400.0 and not ignition_flag: + self.ignition_delay = self.sim.time + ignition_flag = True + + if stop_at_ignition: + break + + # Add ``timestep`` to table + timestep.append() + + else: + # otherwise, integrate until steady state, or maximum number of steps reached + self.sim.reinitialize() + max_state_values = self.sim.get_state() + residual_threshold = 10. * self.sim.rtol + absolute_tolerance = self.sim.atol + + for step in range(self.max_steps): + previous_state = self.sim.get_state() + + self.sim.step() + + # Save new timestep information + timestep['time'] = self.sim.time + timestep['temperature'] = self.reac.T + timestep['pressure'] = self.reac.thermo.P + timestep['mass_fractions'] = self.reac.Y + + if self.reac.T >= self.properties.temperature + 400.0 and not ignition_flag: + self.ignition_delay = self.sim.time + ignition_flag = True + + if stop_at_ignition: + break + + # Add ``timestep`` to table + timestep.append() + + state = self.sim.get_state() + max_state_values = np.maximum(max_state_values, state) + residual = np.linalg.norm( + (state - previous_state) / (max_state_values + absolute_tolerance) + ) / np.sqrt(self.sim.n_vars) + + if residual < residual_threshold: + break + + if step == self.max_steps - 1: + logging.error( + 'Maximum number of steps reached before ' + f'convergence for ignition case {self.idx}' + ) + raise RuntimeError( + 'Maximum number of steps reached before ' + f'convergence for ignition case {self.idx}' + ) + + # Write ``table`` to disk + table.flush() + + if not ignition_flag: + logging.error(f'No ignition detected for ignition case {self.idx}') + raise RuntimeError(f'No ignition detected for ignition case {self.idx}') + + return self.ignition_delay + + def calculate_ignition(self): + """Run simulation case set up ``setup_case``, just for ignition delay. + """ + # Main time integration loop + if self.time_end: + # if end time specified, continue integration until reaching that time + while self.sim.time < self.time_end: + self.sim.step() + if self.reac.T >= self.properties.temperature + 400.0: + self.ignition_delay = self.sim.time + break + if not self.ignition_delay: + logging.warning( + f'No ignition detected before end time for ignition case {self.idx}' + ) + else: + # otherwise, integrate until steady state, or maximum number of steps reached + for step in range(self.max_steps): + self.sim.step() + if self.reac.T >= self.properties.temperature + 400.0: + self.ignition_delay = self.sim.time + break + if step == self.max_steps - 1: + logging.warning( + 'Maximum number of steps reached before ' + f'convergence for ignition case {self.idx}' + ) + + return self.ignition_delay + + def process_results(self, skip_data=False): + """Process integration results to sample data + + Parameters + ---------- + skip_data : bool + Flag to skip sampling thermochemical data + + Returns + ------- + tuple of float, numpy.ndarray or float + Ignition delay, or ignition delay and sampled data + + """ + delta = 0.05 + deltas = np.arange(delta, 1 + delta, delta) + + # Load saved integration results + self.save_file = os.path.join(self.path, str(self.idx) + '.h5') + with tables.open_file(self.save_file, 'r') as h5file: + # Load Table with Group name simulation + table = h5file.root.simulation + + times = table.col('time') + temperatures = table.col('temperature') + pressures = table.col('pressure') + mass_fractions = table.col('mass_fractions') + + temperature_initial = temperatures[0] + temperature_max = temperatures[len(temperatures)-1] + temperature_diff = temperature_max - temperature_initial + + sampled_data = np.zeros((len(deltas), 2 + mass_fractions.shape[1])) + + # need to add processing to get the 20 data points here + self.ignition_delay = 0.0 + ignition_flag = False + idx = 0 + for time, temp, pres, mass in zip( + times, temperatures, pressures, mass_fractions + ): + if temp >= temperature_initial + 400.0 and not ignition_flag: + self.ignition_delay = time + ignition_flag = True + if skip_data: + return self.ignition_delay + + if temp >= temperature_initial + (deltas[idx] * temperature_diff): + sampled_data[idx, 0:2] = [temp, pres] + sampled_data[idx, 2:] = mass + + idx += 1 + if idx == 20: + self.sampled_data = sampled_data + return self.ignition_delay, sampled_data + + def clean(self): + """Delete HDF5 file with full integration data. + """ + try: + os.remove(self.save_file) + except OSError: + pass