class TestReferences(unittest.TestCase): def setUp(self): unittest.TestCase.setUp(self) H2_thermo = Reference(name='H2', phase='G', elements={'H': 2}, T_ref=c.T0('K'), HoRT_ref=0., model=StatMech, trans_model=trans.FreeTrans, n_degrees=3, vib_model=vib.HarmonicVib, elec_model=elec.GroundStateElec, rot_model=rot.RigidRotor, vib_wavenumbers=np.array([4306.1793]), potentialenergy=-6.7598, geometry='linear', symmetrynumber=2, spin=0, atoms=molecule('H2')) H2O_thermo = Reference( name='H2O', phase='G', elements={ 'H': 2, 'O': 1 }, T_ref=c.T0('K'), HoRT_ref=-241.826 / (c.R('kJ/mol/K') * c.T0('K')), model=StatMech, trans_model=trans.FreeTrans, n_degrees=3, vib_model=vib.HarmonicVib, elec_model=elec.GroundStateElec, rot_model=rot.RigidRotor, vib_wavenumbers=np.array([3825.434, 3710.264, 1582.432]), potentialenergy=-14.2209, geometry='nonlinear', symmetrynumber=2, spin=0, atoms=molecule('H2O')) O2_thermo = Reference(name='H2O', phase='G', elements={'O': 2}, T_ref=c.T0('K'), HoRT_ref=0., model=StatMech, trans_model=trans.FreeTrans, n_degrees=3, vib_model=vib.HarmonicVib, elec_model=elec.GroundStateElec, rot_model=rot.RigidRotor, vib_wavenumbers=np.array([2205.]), potentialenergy=-9.86, geometry='linear', symmetrynumber=2, spin=1, atoms=molecule('O2')) self.references = References( references=[H2_thermo, H2O_thermo, O2_thermo]) def test_get_descriptors(self): self.assertEqual(self.references.get_descriptors(), ('H', 'O')) def test_get_elements_matrix(self): elements_matrix = np.array([[2, 0], [2, 1], [0, 2]]) np.testing.assert_array_equal(self.references.get_descriptors_matrix(), elements_matrix) def test_calc_offset(self): expected_element_offset = {'H': -123.10868373, 'O': -186.72503046} calculated_element_offset = self.references.offset # Assess whether the keys are the same self.assertSetEqual(set(expected_element_offset.keys()), set(calculated_element_offset.keys())) # Assess whether the values assigned to the keys are the close for element in expected_element_offset.keys(): self.assertAlmostEqual(expected_element_offset[element], calculated_element_offset[element]) def test_get_HoRT(self): elements = {'H': 2, 'O': 2} self.assertAlmostEqual(self.references.get_HoRT(descriptors=elements), 619.6674284923677) with self.assertWarns(RuntimeWarning): self.assertEqual( self.references.get_HoRT( descriptors={'non-referenced element': 1}), 0.)
def setUp(self): unittest.TestCase.setUp(self) H2_thermo = Reference(name='H2', phase='G', elements={'H': 2}, T_ref=c.T0('K'), HoRT_ref=0., model=StatMech, trans_model=trans.FreeTrans, n_degrees=3, vib_model=vib.HarmonicVib, elec_model=elec.GroundStateElec, rot_model=rot.RigidRotor, vib_wavenumbers=np.array([4306.1793]), potentialenergy=-6.7598, geometry='linear', symmetrynumber=2, spin=0, atoms=molecule('H2')) H2O_thermo = Reference( name='H2O', phase='G', elements={ 'H': 2, 'O': 1 }, T_ref=c.T0('K'), HoRT_ref=-241.826 / (c.R('kJ/mol/K') * c.T0('K')), model=StatMech, trans_model=trans.FreeTrans, n_degrees=3, vib_model=vib.HarmonicVib, elec_model=elec.GroundStateElec, rot_model=rot.RigidRotor, vib_wavenumbers=np.array([3825.434, 3710.264, 1582.432]), potentialenergy=-14.2209, geometry='nonlinear', symmetrynumber=2, spin=0, atoms=molecule('H2O')) O2_thermo = Reference(name='H2O', phase='G', elements={'O': 2}, T_ref=c.T0('K'), HoRT_ref=0., model=StatMech, trans_model=trans.FreeTrans, n_degrees=3, vib_model=vib.HarmonicVib, elec_model=elec.GroundStateElec, rot_model=rot.RigidRotor, vib_wavenumbers=np.array([2205.]), potentialenergy=-9.86, geometry='linear', symmetrynumber=2, spin=1, atoms=molecule('O2')) self.references = References( references=[H2_thermo, H2O_thermo, O2_thermo])
3027.6062, 2984.8436, 2966.1692, 2963.4684, 2959.7431, 1462.5683, 1457.4221, 1446.858, 1442.0357, 1438.7871, 1369.6901, 1352.6287, 1316.215, 1273.9426, 1170.4456, 1140.9699, 1049.3866, 902.8507, 885.3209, 865.5958, 735.1924, 362.7372, 266.3928, 221.4547], symmetrynumber=2, potentialenergy=-57.0864, spin=0, T_ref=298.15, HoRT_ref=-42.2333, **idealgas_defaults) refs = References(references=[ethane_ref, propane_ref]) print(refs.offset) # Passing the ``References`` object when we make our ``Nasa`` object produces a value closer to the one listed above. # In[10]: butane_nasa_ref = Nasa.from_statmech(name='butane', statmech_model=butane_statmech, T_low=298., T_high=800., elements={'C': 4, 'H': 10}, references=refs) H_nasa_ref = butane_nasa_ref.get_H(T=298., units='kJ/mol')
H2O_ref = Reference(name='H2O', elements={ 'H': 2, 'O': 1 }, potentialenergy=-14.2209, symmetrynumber=2, spin=0., atoms=molecule('H2O'), vib_wavenumbers=[3825.434, 3710.2642, 1582.432], T_ref=298., HoRT_ref=-97.60604334, **presets['idealgas']) refs = References(references=[H2_ref, H2O_ref]) H2O_statmech = StatMech(name='H2O', phase='G', atoms=molecule('H2O'), potentialenergy=-14.2209, symmetrynumber=2, spin=0, references=refs, vib_wavenumbers=[3825.434, 3710.264, 1582.432], **presets['idealgas']) H2O_TS_statmech = StatMech(name='H2O', elements={ 'H': 2, 'O': 1
# Print the properties of the catalyst site pprint(cat_site.to_dict()) # ### Reading reference species # In[2]: from pmutt.empirical.references import Reference, References references_data = read_excel(io=excel_path, sheet_name='refs') # Convert data to Reference objects and put them in a list refs_list = [Reference(**ref_data) for ref_data in references_data] # Assign the Reference objects to a References object so offsets can be calculated refs = References(references=refs_list) # Print out the offsets calculated print(refs.offset) # ### Reading species # In[3]: from pmutt.empirical.nasa import Nasa # Range of data to fit the Nasa polynomials T_low = 298. # K T_high = 800. # K species_data = read_excel(io=excel_path, sheet_name='species')
from pathlib import Path from pmutt.io.excel import read_excel from pmutt.empirical.references import Reference, References # 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_path = Path().resolve() notebook_path = os.path.dirname(__file__) os.chdir(notebook_path) input_path = './inputs/NH3_Input_Data.xlsx' refs_data = read_excel(io=input_path, sheet_name='refs') refs = [Reference(**ref_data) for ref_data in refs_data] refs = References(references=refs) # ### Reading Species # In[3]: from pmutt.empirical.nasa import Nasa # Lower and higher temperatures T_low = 298. # K T_high = 800. # K species_data = read_excel(io=input_path, sheet_name='species') species = [] species_phases = {} for ind_species_data in species_data:
# In[2]: refs_input = read_excel(io='references.xlsx') pprint(refs_input) # Now that we've imported the data, we can make a ``References`` object, which is made of ``Reference`` objects using the following syntax. # In[3]: from pmutt.empirical.references import Reference, References refs = References(descriptor='elements', references=[Reference(**ref_input) for ref_input in refs_input]) print(refs.offset) # The ``References`` object calculated the offset between C, H, and O. # ## Initialize the Nasa objects # The ``from_statmech`` method allows us to initialize the Nasa objects from the data. # In[4]: from pmutt.empirical.nasa import Nasa T_low = 300. # K