Esempio n. 1
0
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.)
Esempio n. 2
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])
Esempio n. 3
0
                                         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')
Esempio n. 4
0
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
Esempio n. 5
0
# 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')
Esempio n. 6
0
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:
Esempio n. 7
0
# 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