Skip to content

Commit

Permalink
#546 fix a bunch of unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinsulzer committed Jul 22, 2019
1 parent 2c52b8d commit 0689ee2
Show file tree
Hide file tree
Showing 11 changed files with 72 additions and 37 deletions.
31 changes: 21 additions & 10 deletions pybamm/meshes/meshes.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,34 @@ def __init__(self, geometry, submesh_types, var_pts):
# create submesh_pts from var_pts
submesh_pts = {}
for domain in geometry:
submesh_pts[domain] = {}
if len(list(geometry[domain]["primary"].keys())) > 2:
raise pybamm.GeometryError
for prim_sec in list(geometry[domain].keys()):
# skip over tabs key
if prim_sec != "tabs":
for var in list(geometry[domain][prim_sec].keys()):
if var.id not in var_id_pts.keys():
if var.domain[0] in geometry.keys():
# Zero dimensional submesh case (only one point)
if issubclass(submesh_types[domain], pybamm.SubMesh0D):
submesh_pts[domain] = 1
# other cases
else:
submesh_pts[domain] = {}
if len(list(geometry[domain]["primary"].keys())) > 2:
raise pybamm.GeometryError
for prim_sec in list(geometry[domain].keys()):
# skip over tabs key
if prim_sec != "tabs":
for var in list(geometry[domain][prim_sec].keys()):
# Raise error if the number of points for a particular
# variable haven't been provided, unless that variable doesn't
# appear in the geometry
if (
var.id not in var_id_pts.keys()
and var.domain[0] in geometry.keys()
):
raise KeyError(
"""
Points not given for a variable in domain {}
""".format(
domain
)
)
submesh_pts[domain][var.id] = var_id_pts[var.id]
# Otherwise add to the dictionary of submesh points
submesh_pts[domain][var.id] = var_id_pts[var.id]
self.submesh_pts = submesh_pts

# Input domain order manually
Expand Down
11 changes: 3 additions & 8 deletions pybamm/models/full_battery_models/base_battery_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def default_submesh_types(self):
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

@property
Expand All @@ -98,20 +98,15 @@ def default_spatial_methods(self):
"macroscale": pybamm.FiniteVolume,
"negative particle": pybamm.FiniteVolume,
"positive particle": pybamm.FiniteVolume,
"current collector": pybamm.FiniteVolume,
"current collector": pybamm.ZeroDimensionalMethod,
}

@property
def default_solver(self):
"""
Create and return the default solver for this model
"""
try:
default_solver = pybamm.ScikitsOdeSolver()
except ImportError:
default_solver = pybamm.ScipySolver()

return default_solver
return pybamm.ScipySolver()

@property
def options(self):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ def get_coupled_variables(self, variables):

param = self.param

N_e_diffusion = -(eps_0 ** param.b) * param.D_e(c_e_0) * pybamm.grad(c_e)
N_e_diffusion = -pybamm.outer(
(eps_0 ** param.b) * param.D_e(c_e_0), pybamm.grad(c_e)
)
# N_e_migration = (param.C_e * param.t_plus) / param.gamma_e * i_e
# N_e_convection = c_e * v_box_0

Expand Down
2 changes: 1 addition & 1 deletion tests/shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def get_mesh_for_testing(
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}
if cc_submesh:
submesh_types["current collector"] = cc_submesh
Expand Down
6 changes: 3 additions & 3 deletions tests/unit/test_expression_tree/test_broadcasts.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ def test_broadcast_number(self):
pybamm.Broadcast(b, ["separator"])

def test_broadcast_type(self):
import ipdb

ipdb.set_trace()
a = pybamm.Symbol("a", domain="current collector")
with self.assertRaisesRegex(ValueError, "Variables on the current collector"):
pybamm.Broadcast(a, "electrode")


if __name__ == "__main__":
Expand Down
4 changes: 4 additions & 0 deletions tests/unit/test_geometry/test_geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ def test_combine_geometries(self):
"positive electrode",
"negative particle",
"positive particle",
"current collector",
]
),
)
Expand Down Expand Up @@ -212,6 +213,7 @@ def test_combine_geometries_3D(self):
"positive electrode",
"negative particle",
"positive particle",
"current collector",
]
),
)
Expand All @@ -231,6 +233,7 @@ def test_combine_geometries_strings(self):
"positive electrode",
"negative particle",
"positive particle",
"current collector",
]
),
)
Expand All @@ -244,6 +247,7 @@ def test_combine_geometries_strings(self):
"positive electrode",
"negative particle",
"positive particle",
"current collector",
]
),
)
Expand Down
30 changes: 24 additions & 6 deletions tests/unit/test_meshes/test_meshes.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def test_mesh_creation(self):
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

mesh_type = pybamm.Mesh
Expand All @@ -47,18 +48,29 @@ def test_mesh_creation(self):
mesh["positive electrode"][0].edges[0], mesh["separator"][0].edges[-1]
)
for domain in mesh:
self.assertEqual(len(mesh[domain][0].edges), len(mesh[domain][0].nodes) + 1)
if domain != "current collector":
self.assertEqual(
len(mesh[domain][0].edges), len(mesh[domain][0].nodes) + 1
)

def test_init_failure(self):
geometry = pybamm.Geometry1DMacro()
with self.assertRaises(KeyError):
pybamm.Mesh(geometry, None, {})
submesh_types = {
"negative electrode": pybamm.Uniform1DSubMesh,
"separator": pybamm.Uniform1DSubMesh,
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}
with self.assertRaisesRegex(KeyError, "Points not given"):
pybamm.Mesh(geometry, submesh_types, {})

var = pybamm.standard_spatial_vars
var_pts = {var.x_n: 10, var.x_s: 10, var.x_p: 12}
geometry = pybamm.Geometry1p1DMicro()
with self.assertRaises(KeyError):
pybamm.Mesh(geometry, None, var_pts)
with self.assertRaisesRegex(KeyError, "Points not given"):
pybamm.Mesh(geometry, submesh_types, var_pts)

def test_mesh_sizes(self):
param = pybamm.ParameterValues(
Expand All @@ -81,6 +93,7 @@ def test_mesh_sizes(self):
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

mesh_type = pybamm.Mesh
Expand Down Expand Up @@ -123,6 +136,7 @@ def test_combine_submeshes(self):
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

mesh_type = pybamm.Mesh
Expand Down Expand Up @@ -185,6 +199,7 @@ def test_ghost_cells(self):
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

mesh_type = pybamm.Mesh
Expand Down Expand Up @@ -224,6 +239,7 @@ def test_multiple_meshes(self):
submesh_types = {
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

mesh = pybamm.Mesh(geometry, submesh_types, var_pts)
Expand Down Expand Up @@ -308,6 +324,7 @@ def test_mesh_coord_sys(self):
"positive electrode": pybamm.Uniform1DSubMesh,
"negative particle": pybamm.Uniform1DSubMesh,
"positive particle": pybamm.Uniform1DSubMesh,
"current collector": pybamm.SubMesh0D,
}

mesh_type = pybamm.Mesh
Expand All @@ -317,7 +334,8 @@ def test_mesh_coord_sys(self):

for submeshlist in mesh.values():
for submesh in submeshlist:
self.assertTrue(submesh.coord_sys in pybamm.KNOWN_COORD_SYS)
if not isinstance(submesh, pybamm.SubMesh0D):
self.assertTrue(submesh.coord_sys in pybamm.KNOWN_COORD_SYS)

def test_unimplemented_meshes(self):
var = pybamm.standard_spatial_vars
Expand Down
10 changes: 8 additions & 2 deletions tests/unit/test_meshes/test_scikit_fem_submesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,20 @@ def test_mesh_creation(self):
)

def test_init_failure(self):
submesh_types = {
"negative electrode": pybamm.Uniform1DSubMesh,
"separator": pybamm.Uniform1DSubMesh,
"positive electrode": pybamm.Uniform1DSubMesh,
"current collector": pybamm.Scikit2DSubMesh,
}
geometry = pybamm.Geometryxp1DMacro(cc_dimension=2)
with self.assertRaises(KeyError):
pybamm.Mesh(geometry, None, {})
pybamm.Mesh(geometry, submesh_types, {})

var = pybamm.standard_spatial_vars
var_pts = {var.x_n: 10, var.x_s: 10, var.x_p: 10, var.y: 10, var.z: 10}
with self.assertRaises(TypeError):
pybamm.Mesh(geometry, None, var_pts)
pybamm.Mesh(geometry, submesh_types, var_pts)

lims = {var.x_n: {"min": pybamm.Scalar(0), "max": pybamm.Scalar(1)}}
with self.assertRaises(pybamm.GeometryError):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def test_varying_surface_area(self):

def test_incompatible_options(self):
options = {"side reactions": ["something"]}
with self.assertRaises(pybamm.ModelError):
with self.assertRaises(pybamm.OptionError):
pybamm.lead_acid.Composite(options)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ def test_default_geometry(self):
options = {"thermal": None}
model = pybamm.lead_acid.LOQS(options)
self.assertIsInstance(model.default_geometry, pybamm.Geometry)
self.assertTrue("negative particle" not in model.default_geometry)
self.assertNotIn("negative particle", model.default_geometry)

def test_default_spatial_methods(self):
options = {"thermal": None}
model = pybamm.lead_acid.LOQS(options)
self.assertIsInstance(model.default_spatial_methods, dict)
self.assertTrue("negative particle" not in model.default_geometry)
self.assertNotIn("negative particle", model.default_geometry)

def test_incompatible_options(self):
options = {"bc_options": {"dimensionality": 1}}
Expand Down Expand Up @@ -94,7 +94,7 @@ def test_default_solver(self):
def test_default_geometry(self):
options = {"surface form": "differential"}
model = pybamm.lead_acid.LOQS(options)
self.assertNotIn("current collector", model.default_geometry)
self.assertIn("current collector", model.default_geometry)
options["bc_options"] = {"dimensionality": 1}
model = pybamm.lead_acid.LOQS(options)
self.assertIn("current collector", model.default_geometry)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ def test_default_geometry(self):
options = {"thermal": None}
model = pybamm.lithium_ion.SPM(options)
self.assertIsInstance(model.default_geometry, pybamm.Geometry)
self.assertTrue("negative particle" in model.default_geometry)
self.assertNotIn("current collector", model.default_geometry)
self.assertIn("negative particle", model.default_geometry)

# Shape tests needs debugging for 2plus1D -- model works ok, but shape
# test not right
Expand Down

0 comments on commit 0689ee2

Please sign in to comment.