Beispiel #1
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     self.H298 = -32.9725
     self.S298 = 27.5727
     self.Tdata = np.array([300, 400, 500, 600, 800, 1000, 1500])
     self.Cpdata = np.array([6.3827, 7.80327, 9.22175, 10.5528, 12.8323, 14.6013, 17.4089])
     self.Cp0 = 4.0
     self.CpInf = 21.5
     self.Tmin = 100.
     self.Tmax = 3000.
     self.E0 = -782292.
     self.comment = 'C2H6'
     self.thermodata = ThermoData(
         Tdata=(self.Tdata, "K"),
         Cpdata=(self.Cpdata * constants.R, "J/(mol*K)"),
         H298=(self.H298 * 0.001 * constants.R * 298., "kJ/mol"),
         S298=(self.S298 * constants.R, "J/(mol*K)"),
         Cp0=(self.Cp0 * constants.R, "J/(mol*K)"),
         CpInf=(self.CpInf * constants.R, "J/(mol*K)"),
         Tmin=(self.Tmin, "K"),
         Tmax=(self.Tmax, "K"),
         E0=(self.E0, 'J/mol'),
         comment=self.comment,
     )
Beispiel #2
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     self.H298 = -32.9725
     self.S298 = 27.5727
     self.Tdata = numpy.array([300,400,500,600,800,1000,1500])
     self.Cpdata = numpy.array([6.3827,7.80327,9.22175,10.5528,12.8323,14.6013,17.4089])
     self.Cp0 = 4.0
     self.CpInf = 21.5 
     self.Tmin = 100.
     self.Tmax = 3000.
     self.E0 = -782292.
     self.comment = 'C2H6'
     self.thermodata = ThermoData(
         Tdata = (self.Tdata,"K"),
         Cpdata = (self.Cpdata*constants.R,"J/(mol*K)"),
         H298 = (self.H298*0.001*constants.R*298.,"kJ/mol"),
         S298 = (self.S298*constants.R,"J/(mol*K)"),
         Cp0 = (self.Cp0*constants.R,"J/(mol*K)"),
         CpInf = (self.CpInf*constants.R,"J/(mol*K)"),
         Tmin = (self.Tmin,"K"),
         Tmax = (self.Tmax,"K"),
         E0 = (self.E0,'J/mol'),
         comment = self.comment,
     )
Beispiel #3
0
class TestThermoData(unittest.TestCase):
    """
    Contains unit tests of the :class:`ThermoData` class.
    """
    
    def setUp(self):
        """
        A function run before each unit test in this class.
        """
        self.H298 = -32.9725
        self.S298 = 27.5727
        self.Tdata = numpy.array([300,400,500,600,800,1000,1500])
        self.Cpdata = numpy.array([6.3827,7.80327,9.22175,10.5528,12.8323,14.6013,17.4089])
        self.Cp0 = 4.0
        self.CpInf = 21.5 
        self.Tmin = 100.
        self.Tmax = 3000.
        self.E0 = -782292.
        self.comment = 'C2H6'
        self.thermodata = ThermoData(
            Tdata = (self.Tdata,"K"),
            Cpdata = (self.Cpdata*constants.R,"J/(mol*K)"),
            H298 = (self.H298*0.001*constants.R*298.,"kJ/mol"),
            S298 = (self.S298*constants.R,"J/(mol*K)"),
            Cp0 = (self.Cp0*constants.R,"J/(mol*K)"),
            CpInf = (self.CpInf*constants.R,"J/(mol*K)"),
            Tmin = (self.Tmin,"K"),
            Tmax = (self.Tmax,"K"),
            E0 = (self.E0,'J/mol'),
            comment = self.comment,
        )
    
    def test_Tdata(self):
        """
        Test that the ThermoData Tdata property was properly set.
        """
        self.assertEqual(self.thermodata.Tdata.value_si.shape, self.Tdata.shape)
        for T, T0 in zip(self.thermodata.Tdata.value_si, self.Tdata):
            self.assertAlmostEqual(T, T0, 4)
    
    def test_Cpdata(self):
        """
        Test that the ThermoData Cpdata property was properly set.
        """
        self.assertEqual(self.thermodata.Cpdata.value_si.shape, self.Cpdata.shape)
        for Cp, Cp0 in zip(self.thermodata.Cpdata.value_si / constants.R, self.Cpdata):
            self.assertAlmostEqual(Cp, Cp0, 4)
    
    def test_H298(self):
        """
        Test that the ThermoData H298 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.H298.value_si / constants.R / 298., self.H298, 4)
    
    def test_S298(self):
        """
        Test that the ThermoData S298 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.S298.value_si / constants.R, self.S298, 4)
    
    def test_Cp0(self):
        """
        Test that the ThermoData Cp0 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.Cp0.value_si / constants.R, self.Cp0, 4)
    
    def test_CpInf(self):
        """
        Test that the ThermoData CpInf property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.CpInf.value_si / constants.R, self.CpInf, 4)
        
    def test_Tmin(self):
        """
        Test that the ThermoData Tmin property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.Tmin.value_si, self.Tmin, 6)
    
    def test_Tmax(self):
        """
        Test that the ThermoData Tmax property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.Tmax.value_si, self.Tmax, 6)

    def test_E0(self):
        """
        Test that the ThermoData E0 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.E0.value_si, self.E0, 6)
    
    def test_Comment(self):
        """
        Test that the ThermoData comment property was properly set.
        """
        self.assertEqual(self.thermodata.comment, self.comment)
    
    def test_isTemperatureValid(self):
        """
        Test the ThermoData.isTemperatureValid() method.
        """
        Tdata = [200,400,600,800,1000,1200,1400,1600,1800,2000]
        validdata = [True,True,True,True,True,True,True,True,True,True]
        for T, valid in zip(Tdata, validdata):
            valid0 = self.thermodata.isTemperatureValid(T)
            self.assertEqual(valid0, valid)
        
    def test_getHeatCapacity(self):
        """
        Test the ThermoData.getHeatCapacity() method.
        """
        Tlist = numpy.array([200,400,600,800,1000,1200,1400,1600,1800,2000])
        Cpexplist = numpy.array([4.96208, 7.80327, 10.5528, 12.8323, 14.6013, 15.7243, 16.8473, 17.9704, 19.0934, 20.2165]) * constants.R
        for T, Cpexp in zip(Tlist, Cpexplist):
            Cpact = self.thermodata.getHeatCapacity(T)
            self.assertAlmostEqual(Cpexp, Cpact, 2)

    def test_getEnthalpy(self):
        """
        Test the ThermoData.getEnthalpy() method.
        """
        Tlist = numpy.array([200,400,600,800,1000,1200,1400,1600,1800,2000])
        Hexplist = numpy.array([-51.9015, -22.7594, -12.1063, -6.15660, -2.18192, 0.708869, 2.93415, 4.74350, 6.27555, 7.61349]) * constants.R * Tlist
        for T, Hexp in zip(Tlist, Hexplist):
            Hact = self.thermodata.getEnthalpy(T)
            self.assertAlmostEqual(Hexp, Hact, delta=1e0)
        
    def test_getEntropy(self):
        """
        Test the ThermoData.getEntropy() method.
        """
        Tlist = numpy.array([200,400,600,800,1000,1200,1400,1600,1800,2000])
        Sexplist = numpy.array([25.3347, 29.6460, 33.3386, 36.6867, 39.7402, 42.5016, 45.0098, 47.3328, 49.5142, 51.5841]) * constants.R
        for T, Sexp in zip(Tlist, Sexplist):
            Sact = self.thermodata.getEntropy(T)
            self.assertAlmostEqual(Sexp, Sact, 3)
            
    def test_getFreeEnergy(self):
        """
        Test the ThermoData.getFreeEnergy() method.
        """
        Tlist = numpy.array([200,400,600,800,1000,1200,1400,1600,1800,2000])
        for T in Tlist:
            Gexp = self.thermodata.getEnthalpy(T) - T * self.thermodata.getEntropy(T)
            Gact = self.thermodata.getFreeEnergy(T)
            self.assertAlmostEqual(Gexp, Gact, 3)
    
    def test_pickle(self):
        """
        Test that a ThermoData object can be successfully pickled and
        unpickled with no loss of information.
        """
        import cPickle
        thermodata = cPickle.loads(cPickle.dumps(self.thermodata))
        self.assertEqual(self.thermodata.Tdata.value.shape, thermodata.Tdata.value.shape)
        for T, T0 in zip(self.thermodata.Tdata.value, thermodata.Tdata.value):
            self.assertAlmostEqual(T, T0, 4)
        self.assertEqual(self.thermodata.Tdata.units, thermodata.Tdata.units)
        self.assertEqual(self.thermodata.Cpdata.value.shape, thermodata.Cpdata.value.shape)
        for Cp, Cp0 in zip(self.thermodata.Cpdata.value, thermodata.Cpdata.value):
            self.assertAlmostEqual(Cp, Cp0, 3)
        self.assertEqual(self.thermodata.Cpdata.units, thermodata.Cpdata.units)
        self.assertAlmostEqual(self.thermodata.H298.value, thermodata.H298.value, 4)
        self.assertEqual(self.thermodata.H298.units, thermodata.H298.units)
        self.assertAlmostEqual(self.thermodata.S298.value, thermodata.S298.value, 2)
        self.assertEqual(self.thermodata.S298.units, thermodata.S298.units)
        self.assertAlmostEqual(self.thermodata.Cp0.value, thermodata.Cp0.value, 4)
        self.assertEqual(self.thermodata.Cp0.units, thermodata.Cp0.units)
        self.assertAlmostEqual(self.thermodata.CpInf.value, thermodata.CpInf.value, 3)
        self.assertEqual(self.thermodata.CpInf.units, thermodata.CpInf.units)
        self.assertAlmostEqual(self.thermodata.Tmin.value, thermodata.Tmin.value, 4)
        self.assertEqual(self.thermodata.Tmin.units, thermodata.Tmin.units)
        self.assertAlmostEqual(self.thermodata.Tmax.value, thermodata.Tmax.value, 4)
        self.assertEqual(self.thermodata.Tmax.units, thermodata.Tmax.units)
        self.assertAlmostEqual(self.thermodata.E0.value, thermodata.E0.value, 4)
        self.assertEqual(self.thermodata.E0.units, thermodata.E0.units)
        self.assertEqual(self.thermodata.comment, thermodata.comment)
    
    def test_repr(self):
        """
        Test that a ThermoData object can be successfully reconstructed from its
        repr() output with no loss of information.
        """
        thermodata = None
        exec('thermodata = {0!r}'.format(self.thermodata))
        self.assertEqual(self.thermodata.Tdata.value.shape, thermodata.Tdata.value.shape)
        for T, T0 in zip(self.thermodata.Tdata.value, thermodata.Tdata.value):
            self.assertAlmostEqual(T, T0, 4)
        self.assertEqual(self.thermodata.Tdata.units, thermodata.Tdata.units)
        self.assertEqual(self.thermodata.Cpdata.value.shape, thermodata.Cpdata.value.shape)
        for Cp, Cp0 in zip(self.thermodata.Cpdata.value, thermodata.Cpdata.value):
            self.assertAlmostEqual(Cp, Cp0, 3)
        self.assertEqual(self.thermodata.Cpdata.units, thermodata.Cpdata.units)
        self.assertAlmostEqual(self.thermodata.H298.value, thermodata.H298.value, 4)
        self.assertEqual(self.thermodata.H298.units, thermodata.H298.units)
        self.assertAlmostEqual(self.thermodata.S298.value, thermodata.S298.value, 2)
        self.assertEqual(self.thermodata.S298.units, thermodata.S298.units)
        self.assertAlmostEqual(self.thermodata.Cp0.value, thermodata.Cp0.value, 4)
        self.assertEqual(self.thermodata.Cp0.units, thermodata.Cp0.units)
        self.assertAlmostEqual(self.thermodata.CpInf.value, thermodata.CpInf.value, 3)
        self.assertEqual(self.thermodata.CpInf.units, thermodata.CpInf.units)
        self.assertAlmostEqual(self.thermodata.Tmin.value, thermodata.Tmin.value, 4)
        self.assertEqual(self.thermodata.Tmin.units, thermodata.Tmin.units)
        self.assertAlmostEqual(self.thermodata.Tmax.value, thermodata.Tmax.value, 4)
        self.assertEqual(self.thermodata.Tmax.units, thermodata.Tmax.units)
        self.assertAlmostEqual(self.thermodata.E0.value, thermodata.E0.value, 4)
        self.assertEqual(self.thermodata.E0.units, thermodata.E0.units)
        self.assertEqual(self.thermodata.comment, thermodata.comment)
Beispiel #4
0
class TestThermoData(unittest.TestCase):
    """
    Contains unit tests of the :class:`ThermoData` class.
    """

    def setUp(self):
        """
        A function run before each unit test in this class.
        """
        self.H298 = -32.9725
        self.S298 = 27.5727
        self.Tdata = np.array([300, 400, 500, 600, 800, 1000, 1500])
        self.Cpdata = np.array([6.3827, 7.80327, 9.22175, 10.5528, 12.8323, 14.6013, 17.4089])
        self.Cp0 = 4.0
        self.CpInf = 21.5
        self.Tmin = 100.
        self.Tmax = 3000.
        self.E0 = -782292.
        self.comment = 'C2H6'
        self.thermodata = ThermoData(
            Tdata=(self.Tdata, "K"),
            Cpdata=(self.Cpdata * constants.R, "J/(mol*K)"),
            H298=(self.H298 * 0.001 * constants.R * 298., "kJ/mol"),
            S298=(self.S298 * constants.R, "J/(mol*K)"),
            Cp0=(self.Cp0 * constants.R, "J/(mol*K)"),
            CpInf=(self.CpInf * constants.R, "J/(mol*K)"),
            Tmin=(self.Tmin, "K"),
            Tmax=(self.Tmax, "K"),
            E0=(self.E0, 'J/mol'),
            comment=self.comment,
        )

    def test_temperature_data(self):
        """
        Test that the ThermoData Tdata property was properly set.
        """
        self.assertEqual(self.thermodata.Tdata.value_si.shape, self.Tdata.shape)
        for T, T0 in zip(self.thermodata.Tdata.value_si, self.Tdata):
            self.assertAlmostEqual(T, T0, 4)

    def test_cp_data(self):
        """
        Test that the ThermoData Cpdata property was properly set.
        """
        self.assertEqual(self.thermodata.Cpdata.value_si.shape, self.Cpdata.shape)
        for Cp, Cp0 in zip(self.thermodata.Cpdata.value_si / constants.R, self.Cpdata):
            self.assertAlmostEqual(Cp, Cp0, 4)

    def test_h298(self):
        """
        Test that the ThermoData H298 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.H298.value_si / constants.R / 298., self.H298, 4)

    def test_s298(self):
        """
        Test that the ThermoData S298 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.S298.value_si / constants.R, self.S298, 4)

    def test_cp0(self):
        """
        Test that the ThermoData Cp0 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.Cp0.value_si / constants.R, self.Cp0, 4)

    def test_cp_inf(self):
        """
        Test that the ThermoData CpInf property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.CpInf.value_si / constants.R, self.CpInf, 4)

    def test_temperature_min(self):
        """
        Test that the ThermoData Tmin property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.Tmin.value_si, self.Tmin, 6)

    def test_temperature_max(self):
        """
        Test that the ThermoData Tmax property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.Tmax.value_si, self.Tmax, 6)

    def test_e0(self):
        """
        Test that the ThermoData E0 property was properly set.
        """
        self.assertAlmostEqual(self.thermodata.E0.value_si, self.E0, 6)

    def test_comment(self):
        """
        Test that the ThermoData comment property was properly set.
        """
        self.assertEqual(self.thermodata.comment, self.comment)

    def test_is_temperature_valid(self):
        """
        Test the ThermoData.is_temperature_valid() method.
        """
        Tdata = [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]
        valid_data = [True, True, True, True, True, True, True, True, True, True]
        for T, valid in zip(Tdata, valid_data):
            valid0 = self.thermodata.is_temperature_valid(T)
            self.assertEqual(valid0, valid)

    def test_get_heat_capacity(self):
        """
        Test the ThermoData.get_heat_capacity() method.
        """
        Tlist = np.array([200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000])
        cp_exp_list = np.array([4.96208, 7.80327, 10.5528, 12.8323, 14.6013,
                                15.7243, 16.8473, 17.9704, 19.0934, 20.2165]) * constants.R
        for T, cp_exp in zip(Tlist, cp_exp_list):
            cp_act = self.thermodata.get_heat_capacity(T)
            self.assertAlmostEqual(cp_exp, cp_act, 2)

    def test_get_enthalpy(self):
        """
        Test the ThermoData.get_enthalpy() method.
        """
        Tlist = np.array([200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000])
        h_exp_list = np.array([-51.9015, -22.7594, -12.1063, -6.15660, -2.18192,
                               0.708869, 2.93415, 4.74350, 6.27555, 7.61349]) * constants.R * Tlist
        for T, h_exp in zip(Tlist, h_exp_list):
            h_act = self.thermodata.get_enthalpy(T)
            self.assertAlmostEqual(h_exp, h_act, delta=1e0)

    def test_get_entropy(self):
        """
        Test the ThermoData.get_entropy() method.
        """
        Tlist = np.array([200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000])
        s_exp_list = np.array([25.3347, 29.6460, 33.3386, 36.6867, 39.7402,
                               42.5016, 45.0098, 47.3328, 49.5142, 51.5841]) * constants.R
        for T, s_exp in zip(Tlist, s_exp_list):
            s_act = self.thermodata.get_entropy(T)
            self.assertAlmostEqual(s_exp, s_act, 3)

    def test_get_free_energy(self):
        """
        Test the ThermoData.get_free_energy() method.
        """
        Tlist = np.array([200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000])
        for T in Tlist:
            g_exp = self.thermodata.get_enthalpy(T) - T * self.thermodata.get_entropy(T)
            g_act = self.thermodata.get_free_energy(T)
            self.assertAlmostEqual(g_exp, g_act, 3)

    def test_pickle(self):
        """
        Test that a ThermoData object can be successfully pickled and
        unpickled with no loss of information.
        """
        import pickle
        thermodata = pickle.loads(pickle.dumps(self.thermodata))
        self.assertEqual(self.thermodata.Tdata.value.shape, thermodata.Tdata.value.shape)
        for T, T0 in zip(self.thermodata.Tdata.value, thermodata.Tdata.value):
            self.assertAlmostEqual(T, T0, 4)
        self.assertEqual(self.thermodata.Tdata.units, thermodata.Tdata.units)
        self.assertEqual(self.thermodata.Cpdata.value.shape, thermodata.Cpdata.value.shape)
        for Cp, Cp0 in zip(self.thermodata.Cpdata.value, thermodata.Cpdata.value):
            self.assertAlmostEqual(Cp, Cp0, 3)
        self.assertEqual(self.thermodata.Cpdata.units, thermodata.Cpdata.units)
        self.assertAlmostEqual(self.thermodata.H298.value, thermodata.H298.value, 4)
        self.assertEqual(self.thermodata.H298.units, thermodata.H298.units)
        self.assertAlmostEqual(self.thermodata.S298.value, thermodata.S298.value, 2)
        self.assertEqual(self.thermodata.S298.units, thermodata.S298.units)
        self.assertAlmostEqual(self.thermodata.Cp0.value, thermodata.Cp0.value, 4)
        self.assertEqual(self.thermodata.Cp0.units, thermodata.Cp0.units)
        self.assertAlmostEqual(self.thermodata.CpInf.value, thermodata.CpInf.value, 3)
        self.assertEqual(self.thermodata.CpInf.units, thermodata.CpInf.units)
        self.assertAlmostEqual(self.thermodata.Tmin.value, thermodata.Tmin.value, 4)
        self.assertEqual(self.thermodata.Tmin.units, thermodata.Tmin.units)
        self.assertAlmostEqual(self.thermodata.Tmax.value, thermodata.Tmax.value, 4)
        self.assertEqual(self.thermodata.Tmax.units, thermodata.Tmax.units)
        self.assertAlmostEqual(self.thermodata.E0.value, thermodata.E0.value, 4)
        self.assertEqual(self.thermodata.E0.units, thermodata.E0.units)
        self.assertEqual(self.thermodata.label, thermodata.label)
        self.assertEqual(self.thermodata.comment, thermodata.comment)

    def test_repr(self):
        """
        Test that a ThermoData object can be successfully reconstructed from its
        repr() output with no loss of information.
        """
        namespace = {}
        exec('thermodata = {0!r}'.format(self.thermodata), globals(), namespace)
        self.assertIn('thermodata', namespace)
        thermodata = namespace['thermodata']
        self.assertEqual(self.thermodata.Tdata.value.shape, thermodata.Tdata.value.shape)
        for T, T0 in zip(self.thermodata.Tdata.value, thermodata.Tdata.value):
            self.assertAlmostEqual(T, T0, 4)
        self.assertEqual(self.thermodata.Tdata.units, thermodata.Tdata.units)
        self.assertEqual(self.thermodata.Cpdata.value.shape, thermodata.Cpdata.value.shape)
        for Cp, Cp0 in zip(self.thermodata.Cpdata.value, thermodata.Cpdata.value):
            self.assertAlmostEqual(Cp, Cp0, 3)
        self.assertEqual(self.thermodata.Cpdata.units, thermodata.Cpdata.units)
        self.assertAlmostEqual(self.thermodata.H298.value, thermodata.H298.value, 4)
        self.assertEqual(self.thermodata.H298.units, thermodata.H298.units)
        self.assertAlmostEqual(self.thermodata.S298.value, thermodata.S298.value, 2)
        self.assertEqual(self.thermodata.S298.units, thermodata.S298.units)
        self.assertAlmostEqual(self.thermodata.Cp0.value, thermodata.Cp0.value, 4)
        self.assertEqual(self.thermodata.Cp0.units, thermodata.Cp0.units)
        self.assertAlmostEqual(self.thermodata.CpInf.value, thermodata.CpInf.value, 3)
        self.assertEqual(self.thermodata.CpInf.units, thermodata.CpInf.units)
        self.assertAlmostEqual(self.thermodata.Tmin.value, thermodata.Tmin.value, 4)
        self.assertEqual(self.thermodata.Tmin.units, thermodata.Tmin.units)
        self.assertAlmostEqual(self.thermodata.Tmax.value, thermodata.Tmax.value, 4)
        self.assertEqual(self.thermodata.Tmax.units, thermodata.Tmax.units)
        self.assertAlmostEqual(self.thermodata.E0.value, thermodata.E0.value, 4)
        self.assertEqual(self.thermodata.E0.units, thermodata.E0.units)
        self.assertEqual(self.thermodata.label, thermodata.label)
        self.assertEqual(self.thermodata.comment, thermodata.comment)
Beispiel #5
0
 def test_is_all_zeros(self):
     """Test whether a ThermoData object has all zero values"""
     td1 = ThermoData(
         Tdata=([300, 400, 500, 600, 800, 1000, 1500], "K"),
         Cpdata=([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "J/(mol*K)"),
         H298=(0.0, "kJ/mol"),
         S298=(0.0, "J/(mol*K)"),
     )
     td2 = ThermoData(
         Tdata=([300, 400, 500, 600, 800, 1000, 1500], "K"),
         Cpdata=([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "J/(mol*K)"),
         H298=(3.0, "kJ/mol"),
         S298=(0.0, "J/(mol*K)"),
     )
     td3 = ThermoData(
         Tdata=([300, 400, 500, 600, 800, 1000, 1500], "K"),
         Cpdata=([0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0], "J/(mol*K)"),
         H298=(0.0, "kJ/mol"),
         S298=(0.0, "J/(mol*K)"),
     )
     td4 = ThermoData(
         Tdata=([300, 400, 500, 600, 800, 1000, 1500], "K"),
         Cpdata=([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "J/(mol*K)"),
         H298=(0.0, "kJ/mol"),
         S298=(5.0, "J/(mol*K)"),
     )
     td5 = ThermoData(
         Tdata=([300, 400, 500, 600, 800, 1000, 1500], "K"),
         Cpdata=([0.0, 78.0, 0.0, 0.0, 0.0, 0.0, 0.0], "J/(mol*K)"),
         H298=(3.0, "kJ/mol"),
         S298=(7.0, "J/(mol*K)"),
     )
     self.assertTrue(td1.is_all_zeros())
     self.assertFalse(td2.is_all_zeros())
     self.assertFalse(td3.is_all_zeros())
     self.assertFalse(td4.is_all_zeros())
     self.assertFalse(td5.is_all_zeros())