From 8f553da5e62aa9bc90da82f6c6d26a5b6d51f64e Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Mon, 24 May 2021 17:10:33 -0500 Subject: [PATCH] Drop model tests from old symbolic tests --- test/test_grudge_sym_old.py | 300 ------------------------------------ 1 file changed, 300 deletions(-) diff --git a/test/test_grudge_sym_old.py b/test/test_grudge_sym_old.py index f246a895..ed47028f 100644 --- a/test/test_grudge_sym_old.py +++ b/test/test_grudge_sym_old.py @@ -21,7 +21,6 @@ THE SOFTWARE. """ import numpy as np -import numpy.linalg as la from meshmode import _acf # noqa: F401 from meshmode.dof_array import flatten, thaw @@ -651,305 +650,6 @@ def test_surface_divergence_theorem(actx_factory, mesh_name, visualize=False): # }}} -# {{{ models: advection - -@pytest.mark.parametrize(("mesh_name", "mesh_pars"), [ - ("segment", [8, 16, 32]), - ("disk", [0.1, 0.05]), - ("rect2", [4, 8]), - ("rect3", [4, 6]), - ("warped2", [4, 8]), - ]) -@pytest.mark.parametrize("op_type", ["strong", "weak"]) -@pytest.mark.parametrize("flux_type", ["central"]) -@pytest.mark.parametrize("order", [3, 4, 5]) -# test: 'test_convergence_advec(cl._csc, "disk", [0.1, 0.05], "strong", "upwind", 3)' -def test_convergence_advec(actx_factory, mesh_name, mesh_pars, op_type, flux_type, - order, visualize=False): - """Test whether 2D advection actually converges""" - - actx = actx_factory() - - from pytools.convergence import EOCRecorder - eoc_rec = EOCRecorder() - - for mesh_par in mesh_pars: - if mesh_name == "segment": - mesh = mgen.generate_box_mesh( - [np.linspace(-1.0, 1.0, mesh_par)], - order=order) - - dim = 1 - dt_factor = 1.0 - elif mesh_name == "disk": - pytest.importorskip("meshpy") - - from meshpy.geometry import make_circle, GeometryBuilder - from meshpy.triangle import MeshInfo, build - - geob = GeometryBuilder() - geob.add_geometry(*make_circle(1)) - mesh_info = MeshInfo() - geob.set(mesh_info) - - mesh_info = build(mesh_info, max_volume=mesh_par) - - from meshmode.mesh.io import from_meshpy - mesh = from_meshpy(mesh_info, order=1) - dim = 2 - dt_factor = 4 - elif mesh_name.startswith("rect"): - dim = int(mesh_name[-1:]) - mesh = mgen.generate_regular_rect_mesh(a=(-0.5,)*dim, b=(0.5,)*dim, - nelements_per_axis=(mesh_par,)*dim, order=4) - - if dim == 2: - dt_factor = 4 - elif dim == 3: - dt_factor = 2 - else: - raise ValueError("dt_factor not known for %dd" % dim) - elif mesh_name.startswith("warped"): - dim = int(mesh_name[-1:]) - mesh = mgen.generate_warped_rect_mesh(dim, order=order, - nelements_side=mesh_par) - - if dim == 2: - dt_factor = 4 - elif dim == 3: - dt_factor = 2 - else: - raise ValueError("dt_factor not known for %dd" % dim) - else: - raise ValueError("invalid mesh name: " + mesh_name) - - v = np.array([0.27, 0.31, 0.1])[:dim] - norm_v = la.norm(v) - - def f(x): - return sym.sin(10*x) - - def u_analytic(x): - return f( - -v.dot(x)/norm_v - + sym.var("t", dof_desc.DD_SCALAR)*norm_v) - - from grudge.models.advection import ( - StrongAdvectionOperator, WeakAdvectionOperator) - from meshmode.mesh import BTAG_ALL - - discr = DiscretizationCollection(actx, mesh, order=order) - op_class = { - "strong": StrongAdvectionOperator, - "weak": WeakAdvectionOperator, - }[op_type] - op = op_class(v, - inflow_u=u_analytic(sym.nodes(dim, BTAG_ALL)), - flux_type=flux_type) - - bound_op = bind(discr, op.sym_operator()) - - u = bind(discr, u_analytic(sym.nodes(dim)))(actx, t=0) - - def rhs(t, u): - return bound_op(t=t, u=u) - - if dim == 3: - final_time = 0.1 - else: - final_time = 0.2 - - h_max = bind(discr, sym.h_max_from_volume(discr.ambient_dim))(actx) - dt = dt_factor * h_max/order**2 - nsteps = (final_time // dt) + 1 - dt = final_time/nsteps + 1e-15 - - from grudge.shortcuts import set_up_rk4 - dt_stepper = set_up_rk4("u", dt, u, rhs) - - last_u = None - - from grudge.shortcuts import make_visualizer - vis = make_visualizer(discr, vis_order=order) - - step = 0 - - for event in dt_stepper.run(t_end=final_time): - if isinstance(event, dt_stepper.StateComputed): - step += 1 - logger.debug("[%04d] t = %.5f", step, event.t) - - last_t = event.t - last_u = event.state_component - - if visualize: - vis.write_vtk_file("fld-%s-%04d.vtu" % (mesh_par, step), - [("u", event.state_component)]) - - error_l2 = bind(discr, - sym.norm(2, sym.var("u")-u_analytic(sym.nodes(dim))))( - t=last_t, u=last_u) - logger.info("h_max %.5e error %.5e", h_max, error_l2) - eoc_rec.add_data_point(h_max, error_l2) - - logger.info("\n%s", eoc_rec.pretty_print( - abscissa_label="h", - error_label="L2 Error")) - - if mesh_name.startswith("warped"): - # NOTE: curvilinear meshes are hard - assert eoc_rec.order_estimate() > order - 0.5 - else: - assert eoc_rec.order_estimate() > order - -# }}} - - -# {{{ models: maxwell - -@pytest.mark.parametrize("order", [3, 4, 5]) -def test_convergence_maxwell(actx_factory, order): - """Test whether 3D Maxwell's actually converges""" - - actx = actx_factory() - - from pytools.convergence import EOCRecorder - eoc_rec = EOCRecorder() - - dims = 3 - ns = [4, 6, 8] - for n in ns: - mesh = mgen.generate_regular_rect_mesh( - a=(0.0,)*dims, - b=(1.0,)*dims, - nelements_per_axis=(n,)*dims) - - discr = DiscretizationCollection(actx, mesh, order=order) - - epsilon = 1 - mu = 1 - - from grudge.models.em import get_rectangular_cavity_mode - sym_mode = get_rectangular_cavity_mode(1, (1, 2, 2)) - - analytic_sol = bind(discr, sym_mode) - fields = analytic_sol(actx, t=0, epsilon=epsilon, mu=mu) - - from grudge.models.em import MaxwellOperator - op = MaxwellOperator(epsilon, mu, flux_type=0.5, dimensions=dims) - op.check_bc_coverage(mesh) - bound_op = bind(discr, op.sym_operator()) - - def rhs(t, w): - return bound_op(t=t, w=w) - - dt = 0.002 - final_t = dt * 5 - nsteps = int(final_t/dt) - - from grudge.shortcuts import set_up_rk4 - dt_stepper = set_up_rk4("w", dt, fields, rhs) - - logger.info("dt %.5e nsteps %5d", dt, nsteps) - - norm = bind(discr, sym.norm(2, sym.var("u"))) - - step = 0 - for event in dt_stepper.run(t_end=final_t): - if isinstance(event, dt_stepper.StateComputed): - assert event.component_id == "w" - esc = event.state_component - - step += 1 - logger.debug("[%04d] t = %.5e", step, event.t) - - sol = analytic_sol(actx, mu=mu, epsilon=epsilon, t=step * dt) - vals = [norm(u=(esc[i] - sol[i])) / norm(u=sol[i]) for i in range(5)] # noqa E501 - total_error = sum(vals) - eoc_rec.add_data_point(1.0/n, total_error) - - logger.info("\n%s", eoc_rec.pretty_print( - abscissa_label="h", - error_label="L2 Error")) - - assert eoc_rec.order_estimate() > order - -# }}} - - -# {{{ models: variable coefficient advection oversampling - -@pytest.mark.parametrize("order", [2, 3, 4]) -def test_improvement_quadrature(actx_factory, order): - """Test whether quadrature improves things and converges""" - from grudge.models.advection import VariableCoefficientAdvectionOperator - from pytools.convergence import EOCRecorder - from meshmode.discretization.poly_element import QuadratureSimplexGroupFactory - - actx = actx_factory() - - dims = 2 - sym_nds = sym.nodes(dims) - advec_v = flat_obj_array(-1*sym_nds[1], sym_nds[0]) - - flux = "upwind" - op = VariableCoefficientAdvectionOperator(advec_v, 0, flux_type=flux) - - def gaussian_mode(): - source_width = 0.1 - sym_x = sym.nodes(2) - return sym.exp(-np.dot(sym_x, sym_x) / source_width**2) - - def conv_test(descr, use_quad): - logger.info("-" * 75) - logger.info(descr) - logger.info("-" * 75) - eoc_rec = EOCRecorder() - - ns = [20, 25] - for n in ns: - mesh = mgen.generate_regular_rect_mesh( - a=(-0.5,)*dims, - b=(0.5,)*dims, - nelements_per_axis=(n,)*dims, - order=order) - - if use_quad: - discr_tag_to_group_factory = { - "product": QuadratureSimplexGroupFactory(order=4*order) - } - else: - discr_tag_to_group_factory = {"product": None} - - discr = DiscretizationCollection( - actx, mesh, order=order, - discr_tag_to_group_factory=discr_tag_to_group_factory - ) - - bound_op = bind(discr, op.sym_operator()) - fields = bind(discr, gaussian_mode())(actx, t=0) - norm = bind(discr, sym.norm(2, sym.var("u"))) - - esc = bound_op(u=fields) - total_error = norm(u=esc) - eoc_rec.add_data_point(1.0/n, total_error) - - logger.info("\n%s", eoc_rec.pretty_print( - abscissa_label="h", - error_label="L2 Error")) - - return eoc_rec.order_estimate(), np.array([x[1] for x in eoc_rec.history]) - - eoc, errs = conv_test("no quadrature", False) - q_eoc, q_errs = conv_test("with quadrature", True) - - assert q_eoc > eoc - assert (q_errs < errs).all() - assert q_eoc > order - 0.1 - -# }}} - - # {{{ operator collector determinism def test_op_collector_order_determinism(): -- GitLab