Skip to content

Commit d144642

Browse files
committed
FIX: Use scale and magnitude of values to determine tolerance for full-scale tests.
1 parent 2362fc9 commit d144642

File tree

2 files changed

+20
-61
lines changed

2 files changed

+20
-61
lines changed

pylith/testing/FullTestApp.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ def __init__(
7979
Dictionary with default values.
8080
"""
8181
self.tolerance = 1.0e-5
82-
self.zero_tolerance = 1.0e-10
8382
self.scale = scale
8483
self.final_time_only = final_time_only
8584
self.vertex_fields = []
@@ -226,7 +225,7 @@ def checkVertexField(
226225
mesh_entity,
227226
exact_soln,
228227
tolerance,
229-
zero_tolerance,
228+
scale,
230229
final_time_only,
231230
):
232231
self.testcase.assertTrue("vertex_fields" in self.h5.keys())
@@ -246,7 +245,7 @@ def checkVertexField(
246245
mask = None
247246
if "getMask" in dir(exact_soln):
248247
mask = exact_soln.getMask(fieldName, mesh_entity, vertices)
249-
self._checkField(fieldE, field, mask, tolerance, zero_tolerance)
248+
self._checkField(fieldE, field, mask, tolerance, scale)
250249
return
251250

252251
def checkCellField(
@@ -255,7 +254,7 @@ def checkCellField(
255254
mesh_entity,
256255
exact_soln,
257256
tolerance,
258-
zero_tolerance,
257+
scale,
259258
final_time_only,
260259
):
261260
self.testcase.assertTrue(
@@ -274,10 +273,10 @@ def checkCellField(
274273
centroids = self._getCellCentroids()
275274
fieldE = exact_soln.getField(fieldName, mesh_entity, centroids)
276275
mask = None
277-
self._checkField(fieldE, field, mask, tolerance, zero_tolerance)
276+
self._checkField(fieldE, field, mask, tolerance, scale)
278277
return
279278

280-
def _checkField(self, fieldE, field, maskField, tolerance, zero_tolerance):
279+
def _checkField(self, fieldE, field, maskField, tolerance, scale):
281280
(nstepsE, nptsE, ncompsE) = fieldE.shape
282281
(nsteps, npts, ncomps) = field.shape
283282
self.testcase.assertEqual(
@@ -288,9 +287,9 @@ def _checkField(self, fieldE, field, maskField, tolerance, zero_tolerance):
288287
ncompsE, ncomps, msg="Mismatch in number of components"
289288
)
290289

291-
scale = numpy.mean(numpy.abs(fieldE).ravel())
292-
vtolerance = scale * tolerance if scale > zero_tolerance else tolerance
293-
okay = numpy.abs(field - fieldE) < vtolerance
290+
v_scale = max(scale, numpy.mean(numpy.abs(fieldE).ravel()))
291+
v_tolerance = v_scale * tolerance
292+
okay = numpy.abs(field - fieldE) < v_tolerance
294293

295294
if not maskField is None:
296295
okay[:, maskField, :] = True
@@ -305,7 +304,7 @@ def _checkField(self, fieldE, field, maskField, tolerance, zero_tolerance):
305304
msg += [f"Expected values (not okay): {fieldE[~okay]}"]
306305
msg += [f"Computed values (not okay): {field[~okay]}"]
307306
# msg += [f"Coordinates: {pts[~okay, :]}"]
308-
msg += [f"Tolerance: {vtolerance}"]
307+
msg += [f"Tolerance: {v_tolerance}"]
309308
self.testcase.assertEqual(
310309
nsteps * npts * ncomps, numpy.sum(okay), msg="\n".join(msg)
311310
)
@@ -358,19 +357,15 @@ def check_data(testcase, filename, check, mesh_entity, mesh):
358357

359358
checker = HDF5Checker(filename, testcase, mesh)
360359

361-
tolerance = check.tolerance * check.scale
362-
zero_tolerance = check.zero_tolerance * check.scale
363-
final_time_only = check.final_time_only
364-
365360
for field in check.vertex_fields:
366361
with testcase.subTest(vertex_field=field):
367362
checker.checkVertexField(
368363
field,
369364
mesh_entity,
370365
check.exact_soln,
371-
tolerance,
372-
zero_tolerance,
373-
final_time_only,
366+
check.tolerance,
367+
check.scale,
368+
check.final_time_only,
374369
)
375370

376371
for field in check.cell_fields:
@@ -379,9 +374,9 @@ def check_data(testcase, filename, check, mesh_entity, mesh):
379374
field,
380375
mesh_entity,
381376
check.exact_soln,
382-
tolerance,
383-
zero_tolerance,
384-
final_time_only,
377+
check.tolerance,
378+
check.scale,
379+
check.final_time_only,
385380
)
386381
return
387382

tests/fullscale/poroelasticity/faults-2d/TestPressureGradient.py

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,7 @@ def setUp(self):
3030
self.checks = [
3131
Check(
3232
mesh_entities=["domain"],
33-
vertex_fields=["displacement", "trace_strain"],
34-
scale=100.0,
35-
final_time_only=True,
36-
defaults=defaults,
37-
),
38-
Check(
39-
mesh_entities=["domain"],
40-
vertex_fields=["pressure"],
41-
scale=1.0e6,
33+
vertex_fields=["displacement", "trace_strain", "pressure"],
4234
final_time_only=True,
4335
defaults=defaults,
4436
),
@@ -62,17 +54,11 @@ def setUp(self):
6254
mesh_entities=["poroelastic"],
6355
vertex_fields=[
6456
"displacement",
57+
"pressure",
6558
"trace_strain",
6659
"cauchy_strain",
60+
"cauchy_stress",
6761
],
68-
scale=100.0,
69-
final_time_only=True,
70-
defaults=defaults,
71-
),
72-
Check(
73-
mesh_entities=["poroelastic"],
74-
vertex_fields=["pressure", "cauchy_stress"],
75-
scale=1.0e6,
7662
final_time_only=True,
7763
defaults=defaults,
7864
),
@@ -96,22 +82,7 @@ def setUp(self):
9682
"bc_press_xneg",
9783
"bc_press_xpos",
9884
],
99-
vertex_fields=["displacement", "trace_strain"],
100-
scale=100.0,
101-
final_time_only=True,
102-
defaults=defaults,
103-
),
104-
Check(
105-
mesh_entities=[
106-
"bc_disp_xneg",
107-
"bc_disp_xpos",
108-
"bc_disp_yneg",
109-
"bc_disp_ypos",
110-
"bc_press_xneg",
111-
"bc_press_xpos",
112-
],
113-
vertex_fields=["pressure"],
114-
scale=1.0e6,
85+
vertex_fields=["displacement", "trace_strain", "pressure"],
11586
final_time_only=True,
11687
defaults=defaults,
11788
),
@@ -123,14 +94,7 @@ def setUp(self):
12394
),
12495
Check(
12596
mesh_entities=["fault"],
126-
vertex_fields=["slip"],
127-
final_time_only=True,
128-
defaults=defaults,
129-
),
130-
Check(
131-
mesh_entities=["fault"],
132-
vertex_fields=["traction_change"],
133-
scale=1.0e6,
97+
vertex_fields=["slip", "traction_change"],
13498
final_time_only=True,
13599
defaults=defaults,
136100
),

0 commit comments

Comments
 (0)