Skip to content

Commit

Permalink
#692 added tests for discretization
Browse files Browse the repository at this point in the history
  • Loading branch information
Scottmar93 committed Nov 12, 2019
1 parent 270d207 commit 832940a
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 3 deletions.
8 changes: 7 additions & 1 deletion pybamm/models/base_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,13 @@ def check_variables(self):
)
var_ids_in_keys = set()

for var in {**self.rhs, **self.algebraic}.keys():
model_and_external_variables = (
list(self.rhs.keys())
+ list(self.algebraic.keys())
+ self.external_variables
)

for var in model_and_external_variables:
if isinstance(var, pybamm.Variable):
var_ids_in_keys.add(var.id)
# Key can be a concatenation
Expand Down
43 changes: 41 additions & 2 deletions tests/unit/test_discretisations/test_discretisation.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def test_add_internal_boundary_conditions(self):
for child in c_e.children:
self.assertTrue(child.id in disc.bcs.keys())

def test_adding_external_variables(self):
def test_adding_0D_external_variable(self):
model = pybamm.BaseModel()
a = pybamm.Variable("a")
b = pybamm.Variable("b")
Expand All @@ -79,9 +79,48 @@ def test_adding_external_variables(self):
disc = pybamm.Discretisation()
disc.process_model(model)

model
self.assertEqual(len(model.y_slices), 2)
self.assertEqual(model.y_slices[b.id][0], slice(1, 2, None))

def test_adding_1D_external_variable(self):
model = pybamm.BaseModel()

a = pybamm.Variable("a", domain=["test"])
b = pybamm.Variable("b", domain=["test"])

model.rhs = {a: a * b}
model.boundary_conditions = {
a: {"left": (0, "Dirichlet"), "right": (0, "Dirichlet")}
}
model.initial_conditions = {a: 0}
model.external_variables = [b]
model.variables = {"a": a, "b": b, "c": a * b, "grad b": pybamm.grad(b), "div grad b": pybamm.div(pybamm.grad(b))}

x = pybamm.SpatialVariable("x", domain="test", coord_sys="cartesian")
geometry = {
"test": {"primary": {x: {"min": pybamm.Scalar(0), "max": pybamm.Scalar(1)}}}
}

submesh_types = {"test": pybamm.MeshGenerator(pybamm.Uniform1DSubMesh)}
var_pts = {x: 10}
mesh = pybamm.Mesh(geometry, submesh_types, var_pts)

spatial_methods = {"test": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
disc.process_model(model)

self.assertEqual(len(model.y_slices), 2)
self.assertEqual(model.y_slices[a.id][0], slice(0, 10, None))
self.assertEqual(model.y_slices[b.id][0], slice(10, 20, None))

# check that b is added to the boundary conditions
model.bcs[b.id]["left"]
model.bcs[b.id]["right"]

# check that grad and div(grad ) produce the correct shapes
self.assertEqual(model.variables["b"].shape_for_testing, (10, 1))
self.assertEqual(model.variables["grad b"].shape_for_testing, (11, 1))
self.assertEqual(model.variables["div grad b"].shape_for_testing, (10, 1))

def test_discretise_slicing(self):
# create discretisation
Expand Down

0 comments on commit 832940a

Please sign in to comment.