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)
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()
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()
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)
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))
def test__setattr__(self): param = pybamm.ElectricalParameters() self.assertEqual(param.I_typ.print_name, r"I^{typ}")