def read_reactions(filename, species, species_delimiter='.', reaction_delimiter='>>', raise_error=True, raise_warning=True): """Reads reactions from RING output file. Parameters ---------- filename : str Input filename species : dict Dictionary using the names as keys. If you have a list of species, use pmutt.pmutt_list_to_dict to make a dict. species_delimiter : str, optional Delimiter that separate species. Leading and trailing spaces will be trimmed. Default is '.' reaction_delimiter : str, optional Delimiter that separate states of the reaction. Leading and trailing spaces will be trimmed. Default is '>>' raise_error : bool, optional If True, raises an error if the transition state is not located in species. Default is True raise_warning : bool, optional Only relevant if raise_error is False. Raises a warning if the transition state is not located in species. Default is True Returns ------- reactions : list of :class:`~pmutt.reaction.Reaction` objects Reactions """ rxns = [] with open(filename, 'r') as f_ptr: for line in f_ptr: # Skip lines that do not have a reaction if reaction_delimiter not in line: continue reaction_str = line.replace('\n', '') rxn = Reaction.from_string(reaction_str=reaction_str, species=species, species_delimiter=species_delimiter, reaction_delimiter=reaction_delimiter, raise_error=raise_error, raise_warning=raise_warning) rxns.append(rxn) return Reactions(reactions=rxns)
def test_from_dict(self): self.assertEqual(Reactions.from_dict(self.reactions_dict), self.reactions)
def setUp(self): self.species_dict = { 'H2O': Nasa(name='H2O', T_low=200., T_mid=1000., T_high=3500., elements={ 'H': 2, 'O': 1 }, a_low=[ 4.19864056E+00, -2.03643410E-03, 6.52040211E-06, -5.48797062E-09, 1.77197817E-12, -3.02937267E+04, -8.49032208E-01 ], a_high=[ 3.03399249E+00, 2.17691804E-03, -1.64072518E-07, -9.70419870E-11, 1.68200992E-14, -3.00042971E+04, 4.96677010E+00 ]), 'H2': Nasa(name='H2', T_low=200., T_mid=1000., T_high=3500., elements={'H': 2}, a_low=[ 2.34433112E+00, 7.98052075E-03, -1.94781510E-05, 2.01572094E-08, -7.37611761E-12, -9.17935173E+02, 6.83010238E-01 ], a_high=[ 3.33727920E+00, -4.94024731E-05, 4.99456778E-07, -1.79566394E-10, 2.00255376E-14, -9.50158922E+02, -3.20502331E+00 ]), 'O2': Nasa(name='O2', T_low=200., T_mid=1000., T_high=3500., elements={'O': 2}, a_low=[ 3.78245636E+00, -2.99673416E-03, 9.84730201E-06, -9.68129509E-09, 3.24372837E-12, -1.06394356E+03, 3.65767573E+00 ], a_high=[ 3.28253784E+00, 1.48308754E-03, -7.57966669E-07, 2.09470555E-10, -2.16717794E-14, -1.08845772E+03, 5.45323129E+00 ]), 'O': Nasa(name='O', T_low=200., T_mid=1000., T_high=3500., elements={'O': 1}, a_low=[ 3.16826710E+00, -3.27931884E-03, 6.64306396E-06, -6.12806624E-09, 2.11265971E-12, 2.91222592E+04, 2.05193346E+00 ], a_high=[ 2.56942078E+00, -8.59741137E-05, 4.19484589E-08, -1.00177799E-11, 1.22833691E-15, 2.92175791E+04, 4.78433864E+00 ]), 'H': Nasa(name='H', T_low=200., T_mid=1000., T_high=3500., elements={'H': 1}, a_low=[ 2.50000000E+00, 7.05332819E-13, -1.99591964E-15, 2.30081632E-18, -9.27732332E-22, 2.54736599E+04, -4.46682853E-01 ], a_high=[ 2.50000001E+00, -2.30842973E-11, 1.61561948E-14, -4.73515235E-18, 4.98197357E-22, 2.54736599E+04, -4.46682914E-01 ]), 'OH': Nasa(name='OH', T_low=200., T_mid=1000., T_high=3500., elements={ 'O': 1, 'H': 1 }, a_high=[ 3.09288767E+00, 5.48429716E-04, 1.26505228E-07, -8.79461556E-11, 1.17412376E-14, 3.85865700E+03, 4.47669610E+00 ], a_low=[ 3.99201543E+00, -2.40131752E-03, 4.61793841E-06, -3.88113333E-09, 1.36411470E-12, 3.61508056E+03, -1.03925458E-01 ]) } self.reactions = Reactions(reactions=[ Reaction.from_string('O+2H=H2O', self.species_dict), Reaction.from_string('O+H2=H2O', self.species_dict), Reaction.from_string('OH+H=H2O', self.species_dict), Reaction.from_string('OH+0.5H2=H2O', self.species_dict), Reaction.from_string('0.5O+2H=H2O', self.species_dict), Reaction.from_string('0.5O2+H2=H2O', self.species_dict) ]) self.reactions_dict = { 'class': "<class 'pmutt.reaction.Reactions'>", 'reactions': [{ 'class': "<class 'pmutt.reaction.Reaction'>", 'products': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.03399249, 0.00217691804, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, -30004.2971, 4.9667701 ], 'a_low': [ 4.19864056, -0.0020364341, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, -30293.7267, -0.849032208 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2, 'O': 1 }, 'name': 'H2O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }], 'products_stoich': [1.0], 'reactants': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, 1.22833691e-15, 29217.5791, 4.78433864 ], 'a_low': [ 3.1682671, -0.00327931884, 6.64306396e-06, -6.12806624e-09, 2.11265971e-12, 29122.2592, 2.05193346 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'O': 1 }, 'name': 'O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }, { 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, 4.98197357e-22, 25473.6599, -0.446682914 ], 'a_low': [ 2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, 25473.6599, -0.446682853 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 1 }, 'name': 'H', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }], 'reactants_stoich': [1.0, 2.0], 'transition_state': None, 'transition_state_stoich': None }, { 'class': "<class 'pmutt.reaction.Reaction'>", 'products': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.03399249, 0.00217691804, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, -30004.2971, 4.9667701 ], 'a_low': [ 4.19864056, -0.0020364341, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, -30293.7267, -0.849032208 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2, 'O': 1 }, 'name': 'H2O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }], 'products_stoich': [1.0], 'reactants': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, 1.22833691e-15, 29217.5791, 4.78433864 ], 'a_low': [ 3.1682671, -0.00327931884, 6.64306396e-06, -6.12806624e-09, 2.11265971e-12, 29122.2592, 2.05193346 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'O': 1 }, 'name': 'O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }, { 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, 2.00255376e-14, -950.158922, -3.20502331 ], 'a_low': [ 2.34433112, 0.00798052075, -1.9478151e-05, 2.01572094e-08, -7.37611761e-12, -917.935173, 0.683010238 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2 }, 'name': 'H2', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }], 'reactants_stoich': [1.0, 1.0], 'transition_state': None, 'transition_state_stoich': None }, { 'class': "<class 'pmutt.reaction.Reaction'>", 'products': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.03399249, 0.00217691804, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, -30004.2971, 4.9667701 ], 'a_low': [ 4.19864056, -0.0020364341, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, -30293.7267, -0.849032208 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2, 'O': 1 }, 'name': 'H2O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa' }], 'products_stoich': [1.0], 'reactants': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.09288767, 0.000548429716, 1.26505228e-07, -8.79461556e-11, 1.17412376e-14, 3858.657, 4.4766961 ], 'a_low': [ 3.99201543, -0.00240131752, 4.61793841e-06, -3.88113333e-09, 1.3641147e-12, 3615.08056, -0.103925458 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 1, 'O': 1 }, 'name': 'OH', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }, { 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, 4.98197357e-22, 25473.6599, -0.446682914 ], 'a_low': [ 2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, 25473.6599, -0.446682853 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 1 }, 'name': 'H', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'reactants_stoich': [1.0, 1.0], 'transition_state': None, 'transition_state_stoich': None }, { 'class': "<class 'pmutt.reaction.Reaction'>", 'products': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.03399249, 0.00217691804, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, -30004.2971, 4.9667701 ], 'a_low': [ 4.19864056, -0.0020364341, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, -30293.7267, -0.849032208 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2, 'O': 1 }, 'name': 'H2O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'products_stoich': [1.0], 'reactants': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.09288767, 0.000548429716, 1.26505228e-07, -8.79461556e-11, 1.17412376e-14, 3858.657, 4.4766961 ], 'a_low': [ 3.99201543, -0.00240131752, 4.61793841e-06, -3.88113333e-09, 1.3641147e-12, 3615.08056, -0.103925458 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 1, 'O': 1 }, 'name': 'OH', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }, { 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, 2.00255376e-14, -950.158922, -3.20502331 ], 'a_low': [ 2.34433112, 0.00798052075, -1.9478151e-05, 2.01572094e-08, -7.37611761e-12, -917.935173, 0.683010238 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2 }, 'name': 'H2', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'reactants_stoich': [1.0, 0.5], 'transition_state': None, 'transition_state_stoich': None }, { 'class': "<class 'pmutt.reaction.Reaction'>", 'products': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.03399249, 0.00217691804, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, -30004.2971, 4.9667701 ], 'a_low': [ 4.19864056, -0.0020364341, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, -30293.7267, -0.849032208 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2, 'O': 1 }, 'name': 'H2O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'products_stoich': [1.0], 'reactants': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, 1.22833691e-15, 29217.5791, 4.78433864 ], 'a_low': [ 3.1682671, -0.00327931884, 6.64306396e-06, -6.12806624e-09, 2.11265971e-12, 29122.2592, 2.05193346 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'O': 1 }, 'name': 'O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }, { 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, 4.98197357e-22, 25473.6599, -0.446682914 ], 'a_low': [ 2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, 25473.6599, -0.446682853 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 1 }, 'name': 'H', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'reactants_stoich': [0.5, 2.0], 'transition_state': None, 'transition_state_stoich': None }, { 'class': "<class 'pmutt.reaction.Reaction'>", 'products': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.03399249, 0.00217691804, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, -30004.2971, 4.9667701 ], 'a_low': [ 4.19864056, -0.0020364341, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, -30293.7267, -0.849032208 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2, 'O': 1 }, 'name': 'H2O', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'products_stoich': [1.0], 'reactants': [{ 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.28253784, 0.00148308754, -7.57966669e-07, 2.09470555e-10, -2.16717794e-14, -1088.45772, 5.45323129 ], 'a_low': [ 3.78245636, -0.00299673416, 9.84730201e-06, -9.68129509e-09, 3.24372837e-12, -1063.94356, 3.65767573 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'O': 2 }, 'name': 'O2', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }, { 'T_high': 3500.0, 'T_low': 200.0, 'T_mid': 1000.0, 'a_high': [ 3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, 2.00255376e-14, -950.158922, -3.20502331 ], 'a_low': [ 2.34433112, 0.00798052075, -1.9478151e-05, 2.01572094e-08, -7.37611761e-12, -917.935173, 0.683010238 ], 'class': "<class 'pmutt.empirical.nasa.Nasa'>", 'elements': { 'H': 2 }, 'name': 'H2', 'notes': None, 'phase': None, 'statmech_model': None, 'misc_models': None, 'cat_site': None, 'n_sites': None, 'smiles': None, 'type': 'nasa', }], 'reactants_stoich': [0.5, 1.0], 'transition_state': None, 'transition_state_stoich': None }] } species_pathway = { 'A': StatMech(G=1., **presets['constant']), 'A_TS1': StatMech(G=3., **presets['constant']), 'A_TS2': StatMech(G=2., **presets['constant']), 'B': StatMech(G=-1., **presets['constant']), 'C': StatMech(G=2., **presets['constant']), 'C_TS': StatMech(G=2.5, **presets['constant']), 'D': StatMech(G=0., **presets['constant']), } self.rxn_pathway1 = Reactions(reactions=[ Reaction.from_string('A = A_TS1 = B', species_pathway), Reaction.from_string('B = C', species_pathway), Reaction.from_string('C = C_TS = D', species_pathway) ]) self.rxn_pathway2 = Reactions(reactions=[ Reaction.from_string('A = A_TS2 = B', species_pathway), Reaction.from_string('B = C', species_pathway), Reaction.from_string('C = C_TS = D', species_pathway) ])
from pmutt.io.thermdat import read_thermdat # Find the location of Jupyter notebook # Note that normally Python scripts have a __file__ variable but Jupyter notebook doesn't. # Using pathlib can overcome this limiation notebook_folder = Path().resolve() '''Read the thermdat file and convert it to a dictionary''' NH3_species_list = read_thermdat(os.path.join(notebook_folder, 'thermdat_NH3')) NH3_species = pmutt_list_to_dict(NH3_species_list) '''Initialize the reaction''' rxns = Reactions(reactions=[ Reaction.from_string('0.5N2 + 1.5H2 = 0.5TS4_N2 + 1.5H2 = N(S1) + 1.5H2', NH3_species), Reaction.from_string('N(S1) + 1.5H2 = N(S1) + 3H(S1)', NH3_species), Reaction.from_string('N(S1) + 3H(S1) = TS3_NH + 2H(S1) = NH(S1) + 2H(S1)', NH3_species), Reaction.from_string('NH(S1) + 2H(S1) = TS2_NH2 + H(S1) = NH2(S1) + H(S1)', NH3_species), Reaction.from_string('NH2(S1) + H(S1) = TS1_NH3 = NH3(S1)', NH3_species), Reaction.from_string('NH3(S1) = NH3', NH3_species) ]) '''Plot the reaction coordinate diagram''' # Enthalpy coordinate diagram fig1, ax1 = rxns.plot_coordinate_diagram(method_name='get_H', units='eV', T=300.) # Gibbs energy coordinate diagram on the same plot fig1, ax1 = rxns.plot_coordinate_diagram(method_name='get_G', units='eV', T=300., figure=fig1,
# In[4]: from pmutt import pmutt_list_to_dict from pmutt.reaction import ChemkinReaction, Reactions # Convert list of Nasa polynomials to dictionary of Nasa polynomials species_dict = pmutt_list_to_dict(species) reactions_data = read_excel(io=excel_path, sheet_name='reactions') reactions_list = [] for reaction_data in reactions_data: reaction = ChemkinReaction.from_string(species=species_dict, **reaction_data) reactions_list.append(reaction) reactions = Reactions(reactions=reactions_list) # ## Writing Chemkin files # Now that we have all the required objects, we can write the output files. All outputs can be found in the [./outputs folder](https://github.com/VlachosGroup/pmutt/blob/master/docs/source/examples_jupyter/chemkin_io/outputs). # ### Writing thermdat # In[5]: from pmutt.io.thermdat import write_thermdat write_thermdat(filename='./outputs/thermdat', nasa_species=species) # The thermdat file written in shown below. # ``` # THERMO ALL