From 267fa878f7b3b93d5b5fe392480a5cd202cd9f9d Mon Sep 17 00:00:00 2001 From: Thomas Gibson <gibsonthomas1120@hotmail.com> Date: Fri, 4 Jun 2021 00:14:15 -0500 Subject: [PATCH] Test non geometric factors --- test/test_dt_utils.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/test_dt_utils.py b/test/test_dt_utils.py index 124ba598..5d00d93f 100644 --- a/test/test_dt_utils.py +++ b/test/test_dt_utils.py @@ -76,6 +76,48 @@ def test_geometric_factors_regular_refinement(actx_factory, name): assert np.all(np.isclose(ratios, 2)) +@pytest.mark.parametrize("name", ["interval", "box2d", "box3d"]) +def test_non_geometric_factors(actx_factory, name): + from grudge.dt_utils import dt_non_geometric_factor, dt_geometric_factors + + actx = actx_factory() + + # {{{ cases + + if name == "interval": + from mesh_data import BoxMeshBuilder + builder = BoxMeshBuilder(ambient_dim=1) + elif name == "box2d": + from mesh_data import BoxMeshBuilder + builder = BoxMeshBuilder(ambient_dim=2) + elif name == "box3d": + from mesh_data import BoxMeshBuilder + builder = BoxMeshBuilder(ambient_dim=3) + else: + raise ValueError("unknown geometry name: %s" % name) + + # }}} + + factors = [] + geom_factors = [] + degrees = list(range(1, 8)) + for degree in degrees: + mesh = builder.get_mesh(1, degree) + dcoll = DiscretizationCollection(actx, mesh, order=degree) + factors.append(dt_non_geometric_factor(dcoll)) + geom_factors.append( + op.nodal_min(dcoll, "vol", dt_geometric_factors(dcoll)) + ) + + # Crude estimate, factors should behave like 1/N**2 + factors = np.asarray(factors) + geom_factors = np.asarray(geom_factors) + lower_bounds = 1/(np.asarray(degrees)**2) + upper_bounds = geom_factors*lower_bounds + + assert lower_bounds.all() <= factors.all() <= upper_bounds.all() + + # You can test individual routines by typing # $ python test_grudge.py 'test_routine()' -- GitLab