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, ())
示例#3
0
 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)
示例#5
0
    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)]))