From 7fea39d873ef1a91252d34632419ebf7e8f65ce0 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Sun, 27 Dec 2015 17:19:14 +0100 Subject: [PATCH] Discr: use boundary tags --- grudge/discretization.py | 54 +++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/grudge/discretization.py b/grudge/discretization.py index 6a7a4fb4..fe847a3c 100644 --- a/grudge/discretization.py +++ b/grudge/discretization.py @@ -23,11 +23,18 @@ THE SOFTWARE. """ +from pytools import memoize_method + + class Discretization(object): """ .. attribute :: volume_discr - .. attribute :: boundary_discr - .. attribute :: boundary_connection + + .. automethod :: boundary_connection + .. automethod :: boundary_discr + + .. automethod :: interior_faces_connection + .. automethod :: interior_faces_discr .. autoattribute :: cl_context .. autoattribute :: dim @@ -54,18 +61,47 @@ class Discretization(object): self.volume_discr = Discretization(cl_ctx, mesh, PolynomialWarpAndBlendGroupFactory(order=order)) + self.order = order self.quad_min_degrees = quad_min_degrees + @memoize_method + def boundary_connection(self, boundary_tag, quadrature_tag=None): + from meshmode.discretization.poly_element import \ + PolynomialWarpAndBlendGroupFactory + + if quadrature_tag is not None: + raise NotImplementedError("quadrature") + + from meshmode.discretization.connection import make_face_restriction + _, _, boundary_connection = \ + make_face_restriction( + self.volume_discr, + PolynomialWarpAndBlendGroupFactory(order=self.order), + boundary_tag=boundary_tag) + + return self.bounds + + def boundary_discr(self, boundary_tag, quadrature_tag=None): + return self.boundary_connection(boundary_tag, quadrature_tag).to_discr + + @memoize_method + def interior_faces_connection(self, quadrature_tag=None): from meshmode.discretization.poly_element import \ PolynomialWarpAndBlendGroupFactory - import pyopencl as cl - from meshmode.discretization.connection import make_boundary_restriction - with cl.CommandQueue(cl_ctx) as queue: - _, self.boundary_discr, self.boundary_connection = \ - make_boundary_restriction( - queue, self.volume_discr, - PolynomialWarpAndBlendGroupFactory(order=order)) + if quadrature_tag is not None: + raise NotImplementedError("quadrature") + + from meshmode.discretization.connection import make_face_restriction + _, _, boundary_connection = \ + make_face_restriction( + self.volume_discr, + PolynomialWarpAndBlendGroupFactory(order=self.order)) + + return self.bounds + + def interior_faces_discr(self, boundary_tag, quadrature_tag=None): + return self.boundary_connection(boundary_tag, quadrature_tag).to_discr @property def cl_context(self): -- GitLab