def test_processed_var_2Dspace_scikit_interpolation(self): var = pybamm.Variable("var", domain=["current collector"]) y = pybamm.SpatialVariable("y", domain=["current collector"]) z = pybamm.SpatialVariable("z", domain=["current collector"]) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) y_sol = disc.process_symbol(y).entries[:, 0] z_sol = disc.process_symbol(z).entries[:, 0] var_sol = disc.process_symbol(var) t_sol = np.array([0]) u_sol = np.ones(var_sol.shape[0])[:, np.newaxis] processed_var = pybamm.ProcessedVariable(var_sol, t_sol, u_sol, mesh=disc.mesh) # 2 vectors np.testing.assert_array_equal( processed_var(t=None, y=y_sol, z=z_sol).shape, (15, 15)) # 1 vector, 1 scalar np.testing.assert_array_equal( processed_var(t=None, y=0.2, z=z_sol).shape, (15, 1)) np.testing.assert_array_equal( processed_var(t=None, y=y_sol, z=0.5).shape, (15, )) # 2 scalars np.testing.assert_array_equal( processed_var(t=None, y=0.2, z=0.2).shape, (1, ))
def test_processed_var_2D_fixed_t_scikit_interpolation(self): var = pybamm.Variable("var", domain=["current collector"]) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) y_sol = disc.mesh["current collector"].edges["y"] z_sol = disc.mesh["current collector"].edges["z"] var_sol = disc.process_symbol(var) var_sol.mesh = disc.mesh["current collector"] t_sol = np.array([0]) u_sol = np.ones(var_sol.shape[0])[:, np.newaxis] var_casadi = to_casadi(var_sol, u_sol) processed_var = pybamm.ProcessedVariable( [var_sol], [var_casadi], pybamm.Solution(t_sol, u_sol, pybamm.BaseModel(), {}), warn=False, ) # 2 vectors np.testing.assert_array_equal( processed_var(y=y_sol, z=z_sol).shape, (15, 15)) # 1 vector, 1 scalar np.testing.assert_array_equal( processed_var(y=0.2, z=z_sol).shape, (15, )) np.testing.assert_array_equal( processed_var(y=y_sol, z=0.5).shape, (15, )) # 2 scalars np.testing.assert_array_equal( processed_var(t=None, y=0.2, z=0.2).shape, ())
def test_solution_too_short(self): t = pybamm.t y = pybamm.StateVector(slice(0, 3)) var = t * y disc = tests.get_2p1d_discretisation_for_testing() var.mesh = disc.mesh["current collector"] t_sol = np.array([1]) y_sol = np.linspace(0, 5)[:, np.newaxis] with self.assertRaisesRegex( pybamm.SolverError, "Solution time vector must have length > 1"): pybamm.ProcessedVariable(var, pybamm.Solution(t_sol, y_sol))
def test_3D_raises_error(self): var = pybamm.Variable( "var", domain=["negative electrode"], auxiliary_domains={"secondary": ["current collector"]}, ) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) var_sol = disc.process_symbol(var) t_sol = np.array([0, 1, 2]) u_sol = np.ones(var_sol.shape[0] * 3)[:, np.newaxis] with self.assertRaisesRegex(NotImplementedError, "Shape not recognized"): pybamm.ProcessedVariable(var_sol, pybamm.Solution(t_sol, u_sol), warn=False)
def test_processed_variable_2D_fixed_t_scikit(self): var = pybamm.Variable("var", domain=["current collector"]) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) y = disc.mesh["current collector"][0].edges["y"] z = disc.mesh["current collector"][0].edges["z"] var_sol = disc.process_symbol(var) t_sol = np.array([0]) u_sol = np.ones(var_sol.shape[0])[:, np.newaxis] processed_var = pybamm.ProcessedVariable(var_sol, pybamm.Solution(t_sol, u_sol)) np.testing.assert_array_equal(processed_var.entries, np.reshape(u_sol, [len(y), len(z)]))
def test_processed_var_3D_scikit_interpolation(self): var = pybamm.Variable("var", domain=["current collector"]) y = pybamm.SpatialVariable("y", domain=["current collector"]) z = pybamm.SpatialVariable("z", domain=["current collector"]) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) y_sol = disc.process_symbol(y).entries[:, 0] z_sol = disc.process_symbol(z).entries[:, 0] var_sol = disc.process_symbol(var) t_sol = np.linspace(0, 1) u_sol = np.ones(var_sol.shape[0])[:, np.newaxis] * np.linspace(0, 5) processed_var = pybamm.ProcessedVariable(var_sol, t_sol, u_sol, mesh=disc.mesh) # 3 vectors np.testing.assert_array_equal( processed_var(t_sol, y=y_sol, z=z_sol).shape, (15, 15, 50)) np.testing.assert_array_equal( processed_var(t_sol, y=y_sol, z=z_sol), np.reshape( u_sol, [len(y_sol), len(z_sol), len(t_sol)]), ) # 2 vectors, 1 scalar np.testing.assert_array_equal( processed_var(0.5, y=y_sol, z=z_sol).shape, (15, 15)) np.testing.assert_array_equal( processed_var(t_sol, y=0.2, z=z_sol).shape, (15, 50)) np.testing.assert_array_equal( processed_var(t_sol, y=y_sol, z=0.5).shape, (15, 50)) # 1 vectors, 2 scalar np.testing.assert_array_equal( processed_var(0.5, y=0.2, z=z_sol).shape, (15, )) np.testing.assert_array_equal( processed_var(0.5, y=y_sol, z=0.5).shape, (15, )) np.testing.assert_array_equal( processed_var(t_sol, y=0.2, z=0.5).shape, (50, )) # 3 scalars np.testing.assert_array_equal( processed_var(0.2, y=0.2, z=0.2).shape, ())
def test_processed_variable_2Dspace_scikit(self): var = pybamm.Variable("var", domain=["current collector"]) y = pybamm.SpatialVariable("y", domain=["current collector"]) z = pybamm.SpatialVariable("z", domain=["current collector"]) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) y_sol = disc.process_symbol(y).entries[:, 0] z_sol = disc.process_symbol(z).entries[:, 0] var_sol = disc.process_symbol(var) t_sol = np.array([0]) u_sol = np.ones(var_sol.shape[0])[:, np.newaxis] processed_var = pybamm.ProcessedVariable(var_sol, t_sol, u_sol, mesh=disc.mesh) np.testing.assert_array_equal( processed_var.entries, np.reshape(u_sol, [len(y_sol), len(z_sol)]))
def test_processed_variable_2D_scikit(self): var = pybamm.Variable("var", domain=["current collector"]) disc = tests.get_2p1d_discretisation_for_testing() disc.set_variable_slices([var]) y = disc.mesh["current collector"].edges["y"] z = disc.mesh["current collector"].edges["z"] var_sol = disc.process_symbol(var) var_sol.mesh = disc.mesh["current collector"] t_sol = np.linspace(0, 1) u_sol = np.ones(var_sol.shape[0])[:, np.newaxis] * np.linspace(0, 5) var_casadi = to_casadi(var_sol, u_sol) processed_var = pybamm.ProcessedVariable( [var_sol], [var_casadi], pybamm.Solution(t_sol, u_sol, pybamm.BaseModel(), {}), warn=False, ) np.testing.assert_array_equal( processed_var.entries, np.reshape(u_sol, [len(y), len(z), len(t_sol)]))