Skip to content

Commit c18ea21

Browse files
authored
test: refactor shared 2D mesh helper into pytest fixture (#5342)
1 parent 5f72158 commit c18ea21

File tree

10 files changed

+157
-165
lines changed

10 files changed

+157
-165
lines changed

tests/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
from .shared import (
2626
DummyDiscretisationClass,
2727
get_mesh_for_testing,
28-
get_mesh_for_testing_2d,
2928
get_3d_mesh_for_testing,
3029
get_unit_3d_mesh_for_testing,
3130
get_mesh_for_testing_symbolic,

tests/conftest.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import pytest
2+
3+
import pybamm
4+
5+
6+
@pytest.fixture
7+
def mesh_2d():
8+
param = pybamm.ParameterValues(
9+
values={
10+
"Electrode height [m]": 1,
11+
"Negative electrode thickness [m]": 0.3333333333333333,
12+
"Separator thickness [m]": 0.3333333333333333,
13+
"Positive electrode thickness [m]": 0.3333333333333334,
14+
"Negative particle radius [m]": 0.5,
15+
"Positive particle radius [m]": 0.5,
16+
}
17+
)
18+
19+
x = pybamm.SpatialVariable(
20+
"x", ["negative electrode", "separator", "positive electrode"], direction="lr"
21+
)
22+
z = pybamm.SpatialVariable(
23+
"z", ["negative electrode", "separator", "positive electrode"], direction="tb"
24+
)
25+
r_n = pybamm.SpatialVariable("r_n", ["negative particle"])
26+
r_p = pybamm.SpatialVariable("r_p", ["positive particle"])
27+
28+
geometry = {
29+
"negative electrode": {
30+
x: {
31+
"min": pybamm.Scalar(0),
32+
"max": pybamm.Parameter("Negative electrode thickness [m]"),
33+
},
34+
z: {
35+
"min": pybamm.Scalar(0),
36+
"max": pybamm.Parameter("Electrode height [m]"),
37+
},
38+
},
39+
"separator": {
40+
x: {
41+
"min": pybamm.Parameter("Negative electrode thickness [m]"),
42+
"max": pybamm.Parameter("Separator thickness [m]")
43+
+ pybamm.Parameter("Negative electrode thickness [m]"),
44+
},
45+
z: {
46+
"min": pybamm.Scalar(0),
47+
"max": pybamm.Parameter("Electrode height [m]"),
48+
},
49+
},
50+
"positive electrode": {
51+
x: {
52+
"min": pybamm.Parameter("Separator thickness [m]")
53+
+ pybamm.Parameter("Negative electrode thickness [m]"),
54+
"max": pybamm.Parameter("Positive electrode thickness [m]")
55+
+ pybamm.Parameter("Separator thickness [m]")
56+
+ pybamm.Parameter("Negative electrode thickness [m]"),
57+
},
58+
z: {
59+
"min": pybamm.Scalar(0),
60+
"max": pybamm.Parameter("Electrode height [m]"),
61+
},
62+
},
63+
"negative particle": {
64+
r_n: {
65+
"min": pybamm.Scalar(0),
66+
"max": pybamm.Scalar(1),
67+
},
68+
},
69+
"positive particle": {
70+
r_p: {
71+
"min": pybamm.Scalar(0),
72+
"max": pybamm.Scalar(1),
73+
},
74+
},
75+
}
76+
77+
param.process_geometry(geometry)
78+
79+
submesh_types = {
80+
"negative electrode": pybamm.Uniform2DSubMesh,
81+
"separator": pybamm.Uniform2DSubMesh,
82+
"positive electrode": pybamm.Uniform2DSubMesh,
83+
"negative particle": pybamm.Uniform1DSubMesh,
84+
"positive particle": pybamm.Uniform1DSubMesh,
85+
}
86+
87+
var_pts = {
88+
x: 40,
89+
z: 15,
90+
r_n: 10,
91+
r_p: 10,
92+
}
93+
94+
return pybamm.Mesh(geometry, submesh_types, var_pts)

tests/shared.py

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -120,104 +120,6 @@ def get_mesh_for_testing(
120120
return pybamm.Mesh(geometry, submesh_types, var_pts)
121121

122122

123-
def get_mesh_for_testing_2d(
124-
xpts=None,
125-
rpts=10,
126-
Rpts=10,
127-
ypts=15,
128-
zpts=15,
129-
):
130-
param = pybamm.ParameterValues(
131-
values={
132-
"Electrode height [m]": 1,
133-
"Negative electrode thickness [m]": 0.3333333333333333,
134-
"Separator thickness [m]": 0.3333333333333333,
135-
"Positive electrode thickness [m]": 0.3333333333333334,
136-
"Negative particle radius [m]": 0.5,
137-
"Positive particle radius [m]": 0.5,
138-
}
139-
)
140-
141-
x = pybamm.SpatialVariable(
142-
"x", ["negative electrode", "separator", "positive electrode"], direction="lr"
143-
)
144-
z = pybamm.SpatialVariable(
145-
"z", ["negative electrode", "separator", "positive electrode"], direction="tb"
146-
)
147-
r_n = pybamm.SpatialVariable("r_n", ["negative particle"])
148-
r_p = pybamm.SpatialVariable("r_p", ["positive particle"])
149-
150-
geometry = {
151-
"negative electrode": {
152-
x: {
153-
"min": pybamm.Scalar(0),
154-
"max": pybamm.Parameter("Negative electrode thickness [m]"),
155-
},
156-
z: {
157-
"min": pybamm.Scalar(0),
158-
"max": pybamm.Parameter("Electrode height [m]"),
159-
},
160-
},
161-
"separator": {
162-
x: {
163-
"min": pybamm.Parameter("Negative electrode thickness [m]"),
164-
"max": pybamm.Parameter("Separator thickness [m]")
165-
+ pybamm.Parameter("Negative electrode thickness [m]"),
166-
},
167-
z: {
168-
"min": pybamm.Scalar(0),
169-
"max": pybamm.Parameter("Electrode height [m]"),
170-
},
171-
},
172-
"positive electrode": {
173-
x: {
174-
"min": pybamm.Parameter("Separator thickness [m]")
175-
+ pybamm.Parameter("Negative electrode thickness [m]"),
176-
"max": pybamm.Parameter("Positive electrode thickness [m]")
177-
+ pybamm.Parameter("Separator thickness [m]")
178-
+ pybamm.Parameter("Negative electrode thickness [m]"),
179-
},
180-
z: {
181-
"min": pybamm.Scalar(0),
182-
"max": pybamm.Parameter("Electrode height [m]"),
183-
},
184-
},
185-
"negative particle": {
186-
r_n: {
187-
"min": pybamm.Scalar(0),
188-
"max": pybamm.Scalar(1),
189-
},
190-
},
191-
"positive particle": {
192-
r_p: {
193-
"min": pybamm.Scalar(0),
194-
"max": pybamm.Scalar(1),
195-
},
196-
},
197-
}
198-
param.process_geometry(geometry)
199-
200-
submesh_types = {
201-
"negative electrode": pybamm.Uniform2DSubMesh,
202-
"separator": pybamm.Uniform2DSubMesh,
203-
"positive electrode": pybamm.Uniform2DSubMesh,
204-
"negative particle": pybamm.Uniform1DSubMesh,
205-
"positive particle": pybamm.Uniform1DSubMesh,
206-
}
207-
208-
if xpts is None:
209-
xn_pts = 40
210-
else:
211-
xn_pts = xpts
212-
var_pts = {
213-
x: xn_pts,
214-
z: zpts,
215-
r_n: rpts,
216-
r_p: rpts,
217-
}
218-
return pybamm.Mesh(geometry, submesh_types, var_pts)
219-
220-
221123
def get_unit_3d_mesh_for_testing(geom_type="pouch", **geom_params):
222124
if geom_type == "pouch":
223125
x = pybamm.SpatialVariable("x", ["current collector"])

tests/unit/test_expression_tree/test_vector_field_and_magnitude.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import pytest
22

33
import pybamm
4-
from tests.shared import get_mesh_for_testing_2d
54

65

76
class TestVectorFieldAndMagnitude:
8-
def test_vector_field_and_magnitude(self):
9-
mesh = get_mesh_for_testing_2d()
7+
def test_vector_field_and_magnitude(self, mesh_2d):
8+
mesh = mesh_2d
109
spatial_methods = {
1110
"macroscale": pybamm.FiniteVolume2D(),
1211
}

tests/unit/test_solvers/test_processed_variable.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import pybamm
77
import tests
8-
from tests.shared import get_mesh_for_testing_2d
98

109
_hermite_args = [True, False]
1110

@@ -374,9 +373,9 @@ def test_processed_variable_2D_x_r(self, hermite_interp):
374373
var, r, x, disc=disc, hermite_interp=hermite_interp
375374
)
376375

377-
def test_processed_variable_2D_fvm(self):
376+
def test_processed_variable_2D_fvm(self, mesh_2d):
378377
var = pybamm.Variable("var", domain=["negative electrode"])
379-
mesh = get_mesh_for_testing_2d()
378+
mesh = mesh_2d
380379
fin_vol = pybamm.FiniteVolume2D()
381380
disc = pybamm.Discretisation(mesh, {"negative electrode": fin_vol})
382381
disc.set_variable_slices([var])

tests/unit/test_spatial_methods/test_finite_volume_2d/test_2d_finite_volume_integration.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
import pytest
77

88
import pybamm
9-
from tests.shared import get_mesh_for_testing_2d
109

1110

1211
class TestFiniteVolumeIntegration:
13-
def test_indefinite_integral(self):
14-
mesh = get_mesh_for_testing_2d()
12+
def test_indefinite_integral(self, mesh_2d):
13+
mesh = mesh_2d
1514
spatial_methods = {"macroscale": pybamm.FiniteVolume2D()}
1615
disc = pybamm.Discretisation(mesh, spatial_methods)
1716
var = pybamm.Variable(
@@ -36,9 +35,9 @@ def test_indefinite_integral(self):
3635
"negative electrode", "left"
3736
)
3837

39-
def test_definite_integral(self):
38+
def test_definite_integral(self, mesh_2d):
4039
# create discretisation
41-
mesh = get_mesh_for_testing_2d()
40+
mesh = mesh_2d
4241
spatial_methods = {
4342
"negative electrode": pybamm.FiniteVolume2D(),
4443
"separator": pybamm.FiniteVolume2D(),
@@ -110,8 +109,8 @@ def test_definite_integral(self):
110109
):
111110
spatial_method.definite_integral_matrix(child)
112111

113-
def test_area_integral(self):
114-
mesh = get_mesh_for_testing_2d()
112+
def test_area_integral(self, mesh_2d):
113+
mesh = mesh_2d
115114
spatial_methods = {"macroscale": pybamm.FiniteVolume2D()}
116115
disc = pybamm.Discretisation(mesh, spatial_methods)
117116
var = pybamm.Variable(
@@ -158,9 +157,9 @@ def test_area_integral(self):
158157
):
159158
disc.process_symbol(pybamm.Integral(var, [x, x]))
160159

161-
def test_boundary_integral(self):
160+
def test_boundary_integral(self, mesh_2d):
162161
# create discretisation
163-
mesh = get_mesh_for_testing_2d()
162+
mesh = mesh_2d
164163
spatial_methods = {
165164
"negative electrode": pybamm.FiniteVolume2D(),
166165
"separator": pybamm.FiniteVolume2D(),
@@ -266,8 +265,8 @@ def test_boundary_integral(self):
266265
)
267266
np.testing.assert_allclose(result_left, 0.0, atol=1e-6)
268267

269-
def test_one_dimensional_integral(self):
270-
mesh = get_mesh_for_testing_2d()
268+
def test_one_dimensional_integral(self, mesh_2d):
269+
mesh = mesh_2d
271270
spatial_methods = {"macroscale": pybamm.FiniteVolume2D()}
272271
disc = pybamm.Discretisation(mesh, spatial_methods)
273272
var = pybamm.Variable(

tests/unit/test_spatial_methods/test_finite_volume_2d/test_extrapolation.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@
22
import pytest
33

44
import pybamm
5-
from tests.shared import get_mesh_for_testing_2d
65

76

87
class TestExtrapolationFiniteVolume2D:
98
@pytest.mark.parametrize("use_bcs", [True, False])
109
@pytest.mark.parametrize("order", ["linear", "quadratic"])
11-
def test_boundary_value_finite_volume_2d(self, use_bcs, order):
10+
def test_boundary_value_finite_volume_2d(self, use_bcs, order, mesh_2d):
1211
if order == "quadratic" and use_bcs:
1312
# Not implemented
1413
return
1514
if order == "constant" and use_bcs:
1615
# Constant extrapolation doesn't use boundary conditions
1716
return
1817
# Create discretisation
19-
mesh = get_mesh_for_testing_2d()
18+
mesh = mesh_2d
2019
spatial_methods = {
2120
"macroscale": pybamm.FiniteVolume2D(
2221
{
@@ -171,9 +170,9 @@ def test_boundary_value_finite_volume_2d(self, use_bcs, order):
171170

172171
@pytest.mark.parametrize("use_bcs", [True, False])
173172
@pytest.mark.parametrize("order", ["linear", "quadratic"])
174-
def test_boundary_gradient_finite_volume_2d(self, use_bcs, order):
173+
def test_boundary_gradient_finite_volume_2d(self, use_bcs, order, mesh_2d):
175174
# Create discretisation
176-
mesh = get_mesh_for_testing_2d()
175+
mesh = mesh_2d
177176
spatial_methods = {
178177
"macroscale": pybamm.FiniteVolume2D(
179178
{
@@ -323,8 +322,8 @@ def test_boundary_gradient_finite_volume_2d(self, use_bcs, order):
323322
"bottom-right",
324323
],
325324
)
326-
def test_cubic_not_implemented(self, use_bcs, direction):
327-
mesh = get_mesh_for_testing_2d()
325+
def test_cubic_not_implemented(self, use_bcs, direction, mesh_2d):
326+
mesh = mesh_2d
328327
spatial_methods = {
329328
"macroscale": pybamm.FiniteVolume2D(
330329
{
@@ -344,9 +343,11 @@ def test_cubic_not_implemented(self, use_bcs, direction):
344343
disc.process_symbol(pybamm.BoundaryValue(var, direction))
345344

346345
@pytest.mark.parametrize("use_bcs", [True, False])
347-
def test_boundary_gradient_quadratic_function_finite_volume_2d(self, use_bcs):
346+
def test_boundary_gradient_quadratic_function_finite_volume_2d(
347+
self, use_bcs, mesh_2d
348+
):
348349
# Create discretisation with quadratic gradient extrapolation
349-
mesh = get_mesh_for_testing_2d()
350+
mesh = mesh_2d
350351
spatial_methods = {
351352
"macroscale": pybamm.FiniteVolume2D(
352353
{
@@ -455,10 +456,10 @@ def test_boundary_gradient_quadratic_function_finite_volume_2d(self, use_bcs):
455456
atol=1e-5,
456457
)
457458

458-
def test_boundary_value_constant_extrapolation(self):
459+
def test_boundary_value_constant_extrapolation(self, mesh_2d):
459460
"""Test constant extrapolation for left and right boundaries."""
460461
# Create discretisation with constant extrapolation
461-
mesh = get_mesh_for_testing_2d()
462+
mesh = mesh_2d
462463
spatial_methods = {
463464
"macroscale": pybamm.FiniteVolume2D(
464465
{

0 commit comments

Comments
 (0)