From 66aea3086bb7760b3b255d774430bf4ec4db5a5a Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Fri, 22 Sep 2017 17:01:18 -0500 Subject: [PATCH] Implement PointsDiscretization abomination --- grudge/discretization.py | 33 ++++++++++++++++++++++++++++++++- test/test_grudge.py | 16 ++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/grudge/discretization.py b/grudge/discretization.py index 8cbacd8..50e112d 100644 --- a/grudge/discretization.py +++ b/grudge/discretization.py @@ -27,7 +27,11 @@ from pytools import memoize_method from grudge import sym -class Discretization(object): +class DiscretizationBase(object): + pass + + +class Discretization(DiscretizationBase): """ .. attribute :: volume_discr @@ -220,4 +224,31 @@ class Discretization(object): or where == sym.VTAG_ALL) +class PointsDiscretization(DiscretizationBase): + """Implements just enough of the discretization interface to be + able to smuggle some points into :func:`bind`. + """ + + def __init__(self, nodes): + self._nodes = nodes + + def ambient_dim(self): + return self._nodes.shape[0] + + @property + def mesh(self): + return self + + @property + def nnodes(self): + return self._nodes.shape[-1] + + def nodes(self): + return self._nodes + + @property + def volume_discr(self): + return self + + # vim: foldmethod=marker diff --git a/test/test_grudge.py b/test/test_grudge.py index 0ceaf8f..bd47f82 100644 --- a/test/test_grudge.py +++ b/test/test_grudge.py @@ -333,6 +333,22 @@ def test_convergence_advec(ctx_factory, mesh_name, mesh_pars, op_type, flux_type assert eoc_rec.order_estimate() > order +def test_foreign_points(ctx_factory): + pytest.importorskip("sumpy") + import sumpy.point_calculus as pc + + cl_ctx = cl.create_some_context() + queue = cl.CommandQueue(cl_ctx) + + dim = 2 + cp = pc.CalculusPatch(np.zeros(dim)) + + from grudge.discretization import PointsDiscretization + pdiscr = PointsDiscretization(cl.array.to_device(queue, cp.points)) + + bind(pdiscr, sym.nodes(dim)**2)(queue) + + # You can test individual routines by typing # $ python test_grudge.py 'test_routine()' -- GitLab