Beispiel #1
0
 def test_fitToData(self):
     """
     Test the PDepArrhenius.fitToData() method.
     """
     Tdata = numpy.array([300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500], numpy.float)
     Pdata = numpy.array([1e4,3e4,1e5,3e5,1e6], numpy.float)
     kdata = numpy.zeros([len(Tdata),len(Pdata)], numpy.float)
     for t in range(len(Tdata)):
         for p in range(len(Pdata)):
             kdata[t,p] = self.kinetics.getRateCoefficient(Tdata[t], Pdata[p])
     kinetics = PDepArrhenius().fitToData(Tdata, Pdata, kdata, kunits="s^-1")
     for t in range(len(Tdata)):
         for p in range(len(Pdata)):
             self.assertAlmostEqual(kinetics.getRateCoefficient(Tdata[t], Pdata[p]), kdata[t,p], delta=1e-6*kdata[t,p])
Beispiel #2
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     self.arrhenius0 = Arrhenius(
         A=(1.0e6, "s^-1"),
         n=1.0,
         Ea=(10.0, "kJ/mol"),
         T0=(300.0, "K"),
         Tmin=(300.0, "K"),
         Tmax=(2000.0, "K"),
         comment="""This data is completely made up""",
     )
     self.arrhenius1 = Arrhenius(
         A=(1.0e12, "s^-1"),
         n=1.0,
         Ea=(20.0, "kJ/mol"),
         T0=(300.0, "K"),
         Tmin=(300.0, "K"),
         Tmax=(2000.0, "K"),
         comment="""This data is completely made up""",
     )
     self.pressures = numpy.array([0.1, 10.0])
     self.arrhenius = [self.arrhenius0, self.arrhenius1]
     self.Tmin = 300.0
     self.Tmax = 2000.0
     self.Pmin = 0.1
     self.Pmax = 10.0
     self.comment = """This data is completely made up"""
     self.kinetics = PDepArrhenius(
         pressures=(self.pressures, "bar"),
         arrhenius=self.arrhenius,
         Tmin=(self.Tmin, "K"),
         Tmax=(self.Tmax, "K"),
         Pmin=(self.Pmin, "bar"),
         Pmax=(self.Pmax, "bar"),
         comment=self.comment,
     )
Beispiel #3
0
 def test_fitToData(self):
     """
     Test the PDepArrhenius.fitToData() method.
     """
     Tdata = numpy.array([
         300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400,
         1500
     ], numpy.float)
     Pdata = numpy.array([1e4, 3e4, 1e5, 3e5, 1e6], numpy.float)
     kdata = numpy.zeros([len(Tdata), len(Pdata)], numpy.float)
     for t in range(len(Tdata)):
         for p in range(len(Pdata)):
             kdata[t, p] = self.kinetics.getRateCoefficient(
                 Tdata[t], Pdata[p])
     kinetics = PDepArrhenius().fitToData(Tdata,
                                          Pdata,
                                          kdata,
                                          kunits="s^-1")
     for t in range(len(Tdata)):
         for p in range(len(Pdata)):
             self.assertAlmostEqual(kinetics.getRateCoefficient(
                 Tdata[t], Pdata[p]),
                                    kdata[t, p],
                                    delta=1e-6 * kdata[t, p])
Beispiel #4
0
def get_arrhenius_from_param(params, settings, arrh_type='Arrhenius'):
    """
    Get Arrhenius object given params and settings
    
    Args:
        params (dict) : A dictionary contains the information about
                        A factor, n, Ea, T0 and multiplier
        settings (dict): A dictionary contains the information about
                         variable units, T and P range, description
        arrh_type (str): The type of Arrhenius object to be added,
                         supporting Arrhenius, MultiArrhenius, and
                         PdepArrehnius
    
    Returns:
        (Arrhenius object): The Arrhenius object generated
    """
    args = {}
    if 'Tmin' in settings and settings['Tmin']:
        args['Tmin'] = (settings['Tmin'], settings['T_unit'])
    if 'Tmax' in settings and settings['Tmax']:
        args['Tmax'] = (settings['Tmax'], settings['T_unit'])
    if 'Pmin' in settings and settings['Pmin']:
        args['Pmin'] = (settings['Pmin'], settings['P_unit'])
    if 'Pmax' in settings and settings['Pmax']:
        args['Pmax'] = (settings['Pmax'], settings['P_unit'])
    if 'comment' in settings and settings['comment']:
        args['comment'] = settings['comment']

    if arrh_type == 'Arrhenius':
        args['A'] = (params['A'], settings['A_unit'])
        args['n'] = params['n']
        args['Ea'] = (params['Ea'], settings['E_unit'])
        if 'T0' in params and params['T0']:
            args['T0'] = (params['T0'], settings['T_unit'])
        if 'uncertainty' in params and params['uncertainty']:
            args['uncertainty'] = params['uncertainty']
        return Arrhenius(**args)
    elif arrh_type == 'MultiArrhenius':
        args['arrhenius'] = params['arrhenius']
        return MultiArrhenius(**args)
    elif arrh_type == 'PdepArrhenius':
        args['arrhenius'] = params['arrhenius']
        args['pressures'] = (params['pressures'], settings['P_unit'])
        if 'highPlimit' and params['highPlimit']:
            args['highPlimit'] = params['highPlimit']
        return PDepArrhenius(**args)
Beispiel #5
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     self.arrhenius0 = Arrhenius(
         A=(1.0e6, "s^-1"),
         n=1.0,
         Ea=(10.0, "kJ/mol"),
         T0=(300.0, "K"),
         Tmin=(300.0, "K"),
         Tmax=(2000.0, "K"),
         comment="""This data is completely made up""",
     )
     self.arrhenius1 = Arrhenius(
         A=(1.0e12, "s^-1"),
         n=1.0,
         Ea=(20.0, "kJ/mol"),
         T0=(300.0, "K"),
         Tmin=(300.0, "K"),
         Tmax=(2000.0, "K"),
         comment="""This data is completely made up""",
     )
     self.pressures = numpy.array([0.1, 10.0])
     self.arrhenius = [self.arrhenius0, self.arrhenius1]
     self.Tmin = 300.0
     self.Tmax = 2000.0
     self.Pmin = 0.1
     self.Pmax = 10.0
     self.comment = """This data is completely made up"""
     self.kinetics = PDepArrhenius(
         pressures=(self.pressures, "bar"),
         arrhenius=self.arrhenius,
         Tmin=(self.Tmin, "K"),
         Tmax=(self.Tmax, "K"),
         Pmin=(self.Pmin, "bar"),
         Pmax=(self.Pmax, "bar"),
         comment=self.comment,
     )
Beispiel #6
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     self.Tmin = 350.
     self.Tmax = 1500.
     self.Pmin = 1e-1
     self.Pmax = 1e1
     self.pressures = numpy.array([1e-1, 1e1])
     self.comment = 'CH3 + C2H6 <=> CH4 + C2H5 (Baulch 2005)'
     self.arrhenius = [
         PDepArrhenius(
             pressures=(self.pressures, "bar"),
             arrhenius=[
                 Arrhenius(
                     A=(9.3e-16, "cm^3/(molecule*s)"),
                     n=0.0,
                     Ea=(4740 * constants.R * 0.001, "kJ/mol"),
                     T0=(1, "K"),
                     Tmin=(self.Tmin, "K"),
                     Tmax=(self.Tmax, "K"),
                     comment=self.comment,
                 ),
                 Arrhenius(
                     A=(9.3e-14, "cm^3/(molecule*s)"),
                     n=0.0,
                     Ea=(4740 * constants.R * 0.001, "kJ/mol"),
                     T0=(1, "K"),
                     Tmin=(self.Tmin, "K"),
                     Tmax=(self.Tmax, "K"),
                     comment=self.comment,
                 ),
             ],
             Tmin=(self.Tmin, "K"),
             Tmax=(self.Tmax, "K"),
             Pmin=(self.Pmin, "bar"),
             Pmax=(self.Pmax, "bar"),
             comment=self.comment,
         ),
         PDepArrhenius(
             pressures=(self.pressures, "bar"),
             arrhenius=[
                 Arrhenius(
                     A=(1.4e-11, "cm^3/(molecule*s)"),
                     n=0.0,
                     Ea=(11200 * constants.R * 0.001, "kJ/mol"),
                     T0=(1, "K"),
                     Tmin=(self.Tmin, "K"),
                     Tmax=(self.Tmax, "K"),
                     comment=self.comment,
                 ),
                 Arrhenius(
                     A=(1.4e-9, "cm^3/(molecule*s)"),
                     n=0.0,
                     Ea=(11200 * constants.R * 0.001, "kJ/mol"),
                     T0=(1, "K"),
                     Tmin=(self.Tmin, "K"),
                     Tmax=(self.Tmax, "K"),
                     comment=self.comment,
                 ),
             ],
             Tmin=(self.Tmin, "K"),
             Tmax=(self.Tmax, "K"),
             Pmin=(self.Pmin, "bar"),
             Pmax=(self.Pmax, "bar"),
             comment=self.comment,
         ),
     ]
     self.kinetics = MultiPDepArrhenius(
         arrhenius=self.arrhenius,
         Tmin=(self.Tmin, "K"),
         Tmax=(self.Tmax, "K"),
         Pmin=(self.Pmin, "bar"),
         Pmax=(self.Pmax, "bar"),
         comment=self.comment,
     )
Beispiel #7
0
class TestPDepArrhenius(unittest.TestCase):
    """
    Contains unit tests of the :class:`PDepArrhenius` class.
    """
    def setUp(self):
        """
        A function run before each unit test in this class.
        """
        self.arrhenius0 = Arrhenius(
            A=(1.0e6, "s^-1"),
            n=1.0,
            Ea=(10.0, "kJ/mol"),
            T0=(300.0, "K"),
            Tmin=(300.0, "K"),
            Tmax=(2000.0, "K"),
            comment="""This data is completely made up""",
        )
        self.arrhenius1 = Arrhenius(
            A=(1.0e12, "s^-1"),
            n=1.0,
            Ea=(20.0, "kJ/mol"),
            T0=(300.0, "K"),
            Tmin=(300.0, "K"),
            Tmax=(2000.0, "K"),
            comment="""This data is completely made up""",
        )
        self.pressures = numpy.array([0.1, 10.0])
        self.arrhenius = [self.arrhenius0, self.arrhenius1]
        self.Tmin = 300.0
        self.Tmax = 2000.0
        self.Pmin = 0.1
        self.Pmax = 10.0
        self.comment = """This data is completely made up"""
        self.kinetics = PDepArrhenius(
            pressures=(self.pressures, "bar"),
            arrhenius=self.arrhenius,
            Tmin=(self.Tmin, "K"),
            Tmax=(self.Tmax, "K"),
            Pmin=(self.Pmin, "bar"),
            Pmax=(self.Pmax, "bar"),
            comment=self.comment,
        )

    def test_pressures(self):
        """
        Test that the PDepArrhenius pressures property was properly set.
        """
        self.assertEqual(len(self.kinetics.pressures.value_si), 2)
        for i in range(2):
            self.assertAlmostEqual(self.kinetics.pressures.value_si[i] * 1e-5,
                                   self.pressures[i], 4)

    def test_arrhenius(self):
        """
        Test that the PDepArrhenius arrhenius property was properly set.
        """
        self.assertEqual(len(self.kinetics.arrhenius), 2)
        for i in range(2):
            self.assertAlmostEqual(self.kinetics.arrhenius[i].A.value,
                                   self.arrhenius[i].A.value,
                                   delta=1e0)
            self.assertEqual(self.kinetics.arrhenius[i].A.units,
                             self.arrhenius[i].A.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].n.value,
                                   self.arrhenius[i].n.value, 4)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Ea.value,
                                   self.arrhenius[i].Ea.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Ea.units,
                             self.arrhenius[i].Ea.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].T0.value,
                                   self.arrhenius[i].T0.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].T0.units,
                             self.arrhenius[i].T0.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Tmin.value,
                                   self.arrhenius[i].Tmin.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Tmin.units,
                             self.arrhenius[i].Tmin.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Tmax.value,
                                   self.arrhenius[i].Tmax.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Tmax.units,
                             self.arrhenius[i].Tmax.units)
            self.assertEqual(self.kinetics.arrhenius[i].comment,
                             self.arrhenius[i].comment)

    def test_Tmin(self):
        """
        Test that the PDepArrhenius Tmin property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Tmin.value_si, self.Tmin, 6)

    def test_Tmax(self):
        """
        Test that the PDepArrhenius Tmax property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Tmax.value_si, self.Tmax, 6)

    def test_Pmin(self):
        """
        Test that the PDepArrhenius Pmin property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Pmin.value_si * 1e-5, self.Pmin,
                               6)

    def test_Pmax(self):
        """
        Test that the PDepArrhenius Pmax property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Pmax.value_si * 1e-5, self.Pmax,
                               6)

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

    def test_isPressureDependent(self):
        """
        Test the PDepArrhenius.isPressureDependent() method.
        """
        self.assertTrue(self.kinetics.isPressureDependent())

    def test_getRateCoefficient(self):
        """
        Test the PDepArrhenius.getRateCoefficient() method.
        """
        P = 1e4
        for T in [
                300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300,
                1400, 1500
        ]:
            k0 = self.kinetics.getRateCoefficient(T, P)
            k1 = self.arrhenius0.getRateCoefficient(T)
            self.assertAlmostEqual(k0, k1, delta=1e-6 * k1)
        P = 1e6
        for T in [
                300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300,
                1400, 1500
        ]:
            k0 = self.kinetics.getRateCoefficient(T, P)
            k1 = self.arrhenius1.getRateCoefficient(T)
            self.assertAlmostEqual(k0, k1, delta=1e-6 * k1)
        P = 1e5
        for T in [
                300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300,
                1400, 1500
        ]:
            k0 = self.kinetics.getRateCoefficient(T, P)
            k1 = math.sqrt(
                self.arrhenius0.getRateCoefficient(T) *
                self.arrhenius1.getRateCoefficient(T))
            self.assertAlmostEqual(k0, k1, delta=1e-6 * k1)

    def test_fitToData(self):
        """
        Test the PDepArrhenius.fitToData() method.
        """
        Tdata = numpy.array([
            300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400,
            1500
        ], numpy.float)
        Pdata = numpy.array([1e4, 3e4, 1e5, 3e5, 1e6], numpy.float)
        kdata = numpy.zeros([len(Tdata), len(Pdata)], numpy.float)
        for t in range(len(Tdata)):
            for p in range(len(Pdata)):
                kdata[t, p] = self.kinetics.getRateCoefficient(
                    Tdata[t], Pdata[p])
        kinetics = PDepArrhenius().fitToData(Tdata,
                                             Pdata,
                                             kdata,
                                             kunits="s^-1")
        for t in range(len(Tdata)):
            for p in range(len(Pdata)):
                self.assertAlmostEqual(kinetics.getRateCoefficient(
                    Tdata[t], Pdata[p]),
                                       kdata[t, p],
                                       delta=1e-6 * kdata[t, p])

    def test_pickle(self):
        """
        Test that a PDepArrhenius object can be successfully pickled and
        unpickled with no loss of information.
        """
        import cPickle
        kinetics = cPickle.loads(cPickle.dumps(self.kinetics, -1))
        Narrh = 2
        self.assertEqual(len(self.kinetics.pressures.value), Narrh)
        self.assertEqual(len(kinetics.pressures.value), Narrh)
        self.assertEqual(len(self.kinetics.arrhenius), Narrh)
        self.assertEqual(len(kinetics.arrhenius), Narrh)
        for i in range(Narrh):
            self.assertAlmostEqual(self.kinetics.pressures.value[i],
                                   kinetics.pressures.value[i], 4)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].A.value,
                                   kinetics.arrhenius[i].A.value,
                                   delta=1e0)
            self.assertEqual(self.kinetics.arrhenius[i].A.units,
                             kinetics.arrhenius[i].A.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].n.value,
                                   kinetics.arrhenius[i].n.value)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].T0.value,
                                   kinetics.arrhenius[i].T0.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].T0.units,
                             kinetics.arrhenius[i].T0.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Ea.value,
                                   kinetics.arrhenius[i].Ea.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Ea.units,
                             kinetics.arrhenius[i].Ea.units)
        self.assertAlmostEqual(self.kinetics.Tmin.value, kinetics.Tmin.value,
                               4)
        self.assertEqual(self.kinetics.Tmin.units, kinetics.Tmin.units)
        self.assertAlmostEqual(self.kinetics.Tmax.value, kinetics.Tmax.value,
                               4)
        self.assertEqual(self.kinetics.Tmax.units, kinetics.Tmax.units)
        self.assertAlmostEqual(self.kinetics.Pmin.value, kinetics.Pmin.value,
                               4)
        self.assertEqual(self.kinetics.Pmin.units, kinetics.Pmin.units)
        self.assertAlmostEqual(self.kinetics.Pmax.value, kinetics.Pmax.value,
                               4)
        self.assertEqual(self.kinetics.Pmax.units, kinetics.Pmax.units)
        self.assertEqual(self.kinetics.comment, kinetics.comment)

    def test_repr(self):
        """
        Test that a PDepArrhenius object can be successfully reconstructed
        from its repr() output with no loss of information.
        """
        kinetics = None
        exec('kinetics = {0!r}'.format(self.kinetics))
        Narrh = 2
        self.assertEqual(len(self.kinetics.pressures.value), Narrh)
        self.assertEqual(len(kinetics.pressures.value), Narrh)
        self.assertEqual(len(self.kinetics.arrhenius), Narrh)
        self.assertEqual(len(kinetics.arrhenius), Narrh)
        for i in range(Narrh):
            self.assertAlmostEqual(self.kinetics.pressures.value[i],
                                   kinetics.pressures.value[i], 4)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].A.value,
                                   kinetics.arrhenius[i].A.value,
                                   delta=1e0)
            self.assertEqual(self.kinetics.arrhenius[i].A.units,
                             kinetics.arrhenius[i].A.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].n.value,
                                   kinetics.arrhenius[i].n.value)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].T0.value,
                                   kinetics.arrhenius[i].T0.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].T0.units,
                             kinetics.arrhenius[i].T0.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Ea.value,
                                   kinetics.arrhenius[i].Ea.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Ea.units,
                             kinetics.arrhenius[i].Ea.units)
        self.assertAlmostEqual(self.kinetics.Tmin.value, kinetics.Tmin.value,
                               4)
        self.assertEqual(self.kinetics.Tmin.units, kinetics.Tmin.units)
        self.assertAlmostEqual(self.kinetics.Tmax.value, kinetics.Tmax.value,
                               4)
        self.assertEqual(self.kinetics.Tmax.units, kinetics.Tmax.units)
        self.assertAlmostEqual(self.kinetics.Pmin.value, kinetics.Pmin.value,
                               4)
        self.assertEqual(self.kinetics.Pmin.units, kinetics.Pmin.units)
        self.assertAlmostEqual(self.kinetics.Pmax.value, kinetics.Pmax.value,
                               4)
        self.assertEqual(self.kinetics.Pmax.units, kinetics.Pmax.units)
        self.assertEqual(self.kinetics.comment, kinetics.comment)

    def test_changeRate(self):
        """
        Test the PDepArrhenius.changeRate() method.
        """
        Tlist = numpy.array([
            300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400,
            1500
        ])
        k0list = numpy.array(
            [self.kinetics.getRateCoefficient(T, 1e5) for T in Tlist])
        self.kinetics.changeRate(2)
        for T, kexp in zip(Tlist, k0list):
            kact = self.kinetics.getRateCoefficient(T, 1e5)
            self.assertAlmostEqual(2 * kexp, kact, delta=1e-6 * kexp)
Beispiel #8
0
class TestPDepArrhenius(unittest.TestCase):
    """
    Contains unit tests of the :class:`PDepArrhenius` class.
    """

    def setUp(self):
        """
        A function run before each unit test in this class.
        """
        self.arrhenius0 = Arrhenius(
            A=(1.0e6, "s^-1"),
            n=1.0,
            Ea=(10.0, "kJ/mol"),
            T0=(300.0, "K"),
            Tmin=(300.0, "K"),
            Tmax=(2000.0, "K"),
            comment="""This data is completely made up""",
        )
        self.arrhenius1 = Arrhenius(
            A=(1.0e12, "s^-1"),
            n=1.0,
            Ea=(20.0, "kJ/mol"),
            T0=(300.0, "K"),
            Tmin=(300.0, "K"),
            Tmax=(2000.0, "K"),
            comment="""This data is completely made up""",
        )
        self.pressures = numpy.array([0.1, 10.0])
        self.arrhenius = [self.arrhenius0, self.arrhenius1]
        self.Tmin = 300.0
        self.Tmax = 2000.0
        self.Pmin = 0.1
        self.Pmax = 10.0
        self.comment = """This data is completely made up"""
        self.kinetics = PDepArrhenius(
            pressures=(self.pressures, "bar"),
            arrhenius=self.arrhenius,
            Tmin=(self.Tmin, "K"),
            Tmax=(self.Tmax, "K"),
            Pmin=(self.Pmin, "bar"),
            Pmax=(self.Pmax, "bar"),
            comment=self.comment,
        )

    def test_pressures(self):
        """
        Test that the PDepArrhenius pressures property was properly set.
        """
        self.assertEqual(len(self.kinetics.pressures.value_si), 2)
        for i in range(2):
            self.assertAlmostEqual(self.kinetics.pressures.value_si[i] * 1e-5, self.pressures[i], 4)

    def test_arrhenius(self):
        """
        Test that the PDepArrhenius arrhenius property was properly set.
        """
        self.assertEqual(len(self.kinetics.arrhenius), 2)
        for i in range(2):
            self.assertAlmostEqual(self.kinetics.arrhenius[i].A.value, self.arrhenius[i].A.value, delta=1e0)
            self.assertEqual(self.kinetics.arrhenius[i].A.units, self.arrhenius[i].A.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].n.value, self.arrhenius[i].n.value, 4)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Ea.value, self.arrhenius[i].Ea.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Ea.units, self.arrhenius[i].Ea.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].T0.value, self.arrhenius[i].T0.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].T0.units, self.arrhenius[i].T0.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Tmin.value, self.arrhenius[i].Tmin.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Tmin.units, self.arrhenius[i].Tmin.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Tmax.value, self.arrhenius[i].Tmax.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Tmax.units, self.arrhenius[i].Tmax.units)
            self.assertEqual(self.kinetics.arrhenius[i].comment, self.arrhenius[i].comment)

    def test_Tmin(self):
        """
        Test that the PDepArrhenius Tmin property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Tmin.value_si, self.Tmin, 6)

    def test_Tmax(self):
        """
        Test that the PDepArrhenius Tmax property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Tmax.value_si, self.Tmax, 6)

    def test_Pmin(self):
        """
        Test that the PDepArrhenius Pmin property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Pmin.value_si * 1e-5, self.Pmin, 6)

    def test_Pmax(self):
        """
        Test that the PDepArrhenius Pmax property was properly set.
        """
        self.assertAlmostEqual(self.kinetics.Pmax.value_si * 1e-5, self.Pmax, 6)

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

    def test_isPressureDependent(self):
        """
        Test the PDepArrhenius.isPressureDependent() method.
        """
        self.assertTrue(self.kinetics.isPressureDependent())

    def test_getRateCoefficient(self):
        """
        Test the PDepArrhenius.getRateCoefficient() method.
        """
        P = 1e4
        for T in [300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500]:
            k0 = self.kinetics.getRateCoefficient(T, P)
            k1 = self.arrhenius0.getRateCoefficient(T)
            self.assertAlmostEqual(k0, k1, delta=1e-6 * k1)
        P = 1e6
        for T in [300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500]:
            k0 = self.kinetics.getRateCoefficient(T, P)
            k1 = self.arrhenius1.getRateCoefficient(T)
            self.assertAlmostEqual(k0, k1, delta=1e-6 * k1)
        P = 1e5
        for T in [300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500]:
            k0 = self.kinetics.getRateCoefficient(T, P)
            k1 = math.sqrt(self.arrhenius0.getRateCoefficient(T) * self.arrhenius1.getRateCoefficient(T))
            self.assertAlmostEqual(k0, k1, delta=1e-6 * k1)

    def test_fitToData(self):
        """
        Test the PDepArrhenius.fitToData() method.
        """
        Tdata = numpy.array([300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500], numpy.float)
        Pdata = numpy.array([1e4, 3e4, 1e5, 3e5, 1e6], numpy.float)
        kdata = numpy.zeros([len(Tdata), len(Pdata)], numpy.float)
        for t in range(len(Tdata)):
            for p in range(len(Pdata)):
                kdata[t, p] = self.kinetics.getRateCoefficient(Tdata[t], Pdata[p])
        kinetics = PDepArrhenius().fitToData(Tdata, Pdata, kdata, kunits="s^-1")
        for t in range(len(Tdata)):
            for p in range(len(Pdata)):
                self.assertAlmostEqual(
                    kinetics.getRateCoefficient(Tdata[t], Pdata[p]), kdata[t, p], delta=1e-6 * kdata[t, p]
                )

    def test_pickle(self):
        """
        Test that a PDepArrhenius object can be successfully pickled and
        unpickled with no loss of information.
        """
        import cPickle

        kinetics = cPickle.loads(cPickle.dumps(self.kinetics))
        Narrh = 2
        self.assertEqual(len(self.kinetics.pressures.value), Narrh)
        self.assertEqual(len(kinetics.pressures.value), Narrh)
        self.assertEqual(len(self.kinetics.arrhenius), Narrh)
        self.assertEqual(len(kinetics.arrhenius), Narrh)
        for i in range(Narrh):
            self.assertAlmostEqual(self.kinetics.pressures.value[i], kinetics.pressures.value[i], 4)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].A.value, kinetics.arrhenius[i].A.value, delta=1e0)
            self.assertEqual(self.kinetics.arrhenius[i].A.units, kinetics.arrhenius[i].A.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].n.value, kinetics.arrhenius[i].n.value)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].T0.value, kinetics.arrhenius[i].T0.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].T0.units, kinetics.arrhenius[i].T0.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Ea.value, kinetics.arrhenius[i].Ea.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Ea.units, kinetics.arrhenius[i].Ea.units)
        self.assertAlmostEqual(self.kinetics.Tmin.value, kinetics.Tmin.value, 4)
        self.assertEqual(self.kinetics.Tmin.units, kinetics.Tmin.units)
        self.assertAlmostEqual(self.kinetics.Tmax.value, kinetics.Tmax.value, 4)
        self.assertEqual(self.kinetics.Tmax.units, kinetics.Tmax.units)
        self.assertAlmostEqual(self.kinetics.Pmin.value, kinetics.Pmin.value, 4)
        self.assertEqual(self.kinetics.Pmin.units, kinetics.Pmin.units)
        self.assertAlmostEqual(self.kinetics.Pmax.value, kinetics.Pmax.value, 4)
        self.assertEqual(self.kinetics.Pmax.units, kinetics.Pmax.units)
        self.assertEqual(self.kinetics.comment, kinetics.comment)

    def test_repr(self):
        """
        Test that a PDepArrhenius object can be successfully reconstructed
        from its repr() output with no loss of information.
        """
        kinetics = None
        exec("kinetics = {0!r}".format(self.kinetics))
        Narrh = 2
        self.assertEqual(len(self.kinetics.pressures.value), Narrh)
        self.assertEqual(len(kinetics.pressures.value), Narrh)
        self.assertEqual(len(self.kinetics.arrhenius), Narrh)
        self.assertEqual(len(kinetics.arrhenius), Narrh)
        for i in range(Narrh):
            self.assertAlmostEqual(self.kinetics.pressures.value[i], kinetics.pressures.value[i], 4)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].A.value, kinetics.arrhenius[i].A.value, delta=1e0)
            self.assertEqual(self.kinetics.arrhenius[i].A.units, kinetics.arrhenius[i].A.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].n.value, kinetics.arrhenius[i].n.value)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].T0.value, kinetics.arrhenius[i].T0.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].T0.units, kinetics.arrhenius[i].T0.units)
            self.assertAlmostEqual(self.kinetics.arrhenius[i].Ea.value, kinetics.arrhenius[i].Ea.value, 4)
            self.assertEqual(self.kinetics.arrhenius[i].Ea.units, kinetics.arrhenius[i].Ea.units)
        self.assertAlmostEqual(self.kinetics.Tmin.value, kinetics.Tmin.value, 4)
        self.assertEqual(self.kinetics.Tmin.units, kinetics.Tmin.units)
        self.assertAlmostEqual(self.kinetics.Tmax.value, kinetics.Tmax.value, 4)
        self.assertEqual(self.kinetics.Tmax.units, kinetics.Tmax.units)
        self.assertAlmostEqual(self.kinetics.Pmin.value, kinetics.Pmin.value, 4)
        self.assertEqual(self.kinetics.Pmin.units, kinetics.Pmin.units)
        self.assertAlmostEqual(self.kinetics.Pmax.value, kinetics.Pmax.value, 4)
        self.assertEqual(self.kinetics.Pmax.units, kinetics.Pmax.units)
        self.assertEqual(self.kinetics.comment, kinetics.comment)