예제 #1
0
 def test_constant_current(self):
     # test simplify
     param = pybamm.ElectricalParameters()
     current = param.current_with_time
     parameter_values = pybamm.ParameterValues({
         "Typical current [A]": 2,
         "Typical timescale [s]": 1,
         "Current function [A]": 2,
     })
     processed_current = parameter_values.process_symbol(current)
     self.assertIsInstance(processed_current.simplify(), pybamm.Scalar)
예제 #2
0
    def __init__(self):

        # Get geometric, electrical and thermal parameters
        self.geo = pybamm.GeometricParameters()
        self.elec = pybamm.ElectricalParameters()
        self.therm = pybamm.ThermalParameters()

        # Set parameters and scales
        self._set_dimensional_parameters()
        self._set_scales()
        self._set_dimensionless_parameters()

        # Set input current
        self._set_input_current()
예제 #3
0
    def test_get_current_data(self):
        # test process parameters
        param = pybamm.ElectricalParameters()
        dimensional_current = param.dimensional_current_with_time
        parameter_values = pybamm.ParameterValues({
            "Typical current [A]":
            2,
            "Typical timescale [s]":
            1,
            "Current function [A]":
            "[current data]car_current",
        })
        dimensional_current_eval = parameter_values.process_symbol(
            dimensional_current)

        def current(t):
            return dimensional_current_eval.evaluate(t=t)

        standard_tests = StandardCurrentFunctionTests([current],
                                                      always_array=True)
        standard_tests.test_all()
예제 #4
0
    def test_current_functions(self):
        # create current functions
        param = pybamm.ElectricalParameters()
        dimensional_current = param.dimensional_current_with_time
        dimensional_current_density = param.dimensional_current_density_with_time
        dimensionless_current = param.current_with_time
        dimensionless_current_density = param.current_with_time

        # process
        parameter_values = pybamm.ParameterValues(
            {
                "Electrode height [m]": 0.1,
                "Electrode width [m]": 0.1,
                "Number of electrodes connected in parallel to make a cell": 8,
                "Typical current [A]": 2,
                "Typical timescale [s]": 60,
                "Current function [A]": 2,
            }
        )
        dimensional_current_eval = parameter_values.process_symbol(dimensional_current)
        dimensional_current_density_eval = parameter_values.process_symbol(
            dimensional_current_density
        )
        dimensionless_current_eval = parameter_values.process_symbol(
            dimensionless_current
        )
        dimensionless_current_density_eval = parameter_values.process_symbol(
            dimensionless_current_density
        )

        # check current
        self.assertEqual(dimensional_current_eval.evaluate(t=3), 2)
        self.assertEqual(dimensionless_current_eval.evaluate(t=3), 1)

        # check current density
        self.assertAlmostEqual(
            dimensional_current_density_eval.evaluate(t=3), 2 / (8 * 0.1 * 0.1)
        )
        self.assertAlmostEqual(dimensionless_current_density_eval.evaluate(t=3), 1)
예제 #5
0
    def test_user_current(self):
        # create user-defined sin function
        def my_fun(t, A, omega):
            return A * pybamm.sin(2 * np.pi * omega * t)

        # choose amplitude and frequency
        param = pybamm.ElectricalParameters()
        A = param.I_typ
        omega = pybamm.Parameter("omega")

        def current(t):
            return my_fun(t, A, omega)

        # set and process parameters
        parameter_values = pybamm.ParameterValues({
            "Typical current [A]":
            2,
            "Typical timescale [s]":
            1,
            "omega":
            3,
            "Current function [A]":
            current,
        })
        dimensional_current = param.dimensional_current_with_time
        dimensional_current_eval = parameter_values.process_symbol(
            dimensional_current)

        def user_current(t):
            return dimensional_current_eval.evaluate(t=t)

        # check output types
        standard_tests = StandardCurrentFunctionTests([user_current])
        standard_tests.test_all()

        # check output correct value
        time = np.linspace(0, 3600, 600)
        np.testing.assert_array_almost_equal(user_current(time),
                                             2 * np.sin(2 * np.pi * 3 * time))
예제 #6
0
 def test__setattr__(self):
     param = pybamm.ElectricalParameters()
     self.assertEqual(param.I_typ.print_name, r"I^{typ}")