diff --git a/meshmode/discretization/__init__.py b/meshmode/discretization/__init__.py index 45fdc22e4b64f93dfd8c04f34d0e5d29cbecf7a6..6da392cae8b58022cf3efd72b3e710fd980b57f5 100644 --- a/meshmode/discretization/__init__.py +++ b/meshmode/discretization/__init__.py @@ -37,6 +37,10 @@ __doc__ = """ # {{{ element group base +class NoninterpolatoryElementGroupError(TypeError): + pass + + class ElementGroupBase(object): """Container for the :class:`Discretization` data corresponding to one :class:`meshmode.mesh.MeshElementGroup`. diff --git a/meshmode/discretization/connection/__init__.py b/meshmode/discretization/connection/__init__.py index c0b622d0afbbf1d2647e218ab45808ad5c291898..bdb0f5250256ad6e8a67a10d9b735c3ff085da4b 100644 --- a/meshmode/discretization/connection/__init__.py +++ b/meshmode/discretization/connection/__init__.py @@ -156,7 +156,7 @@ class DiscretizationConnectionElementGroup(object): # }}} -# {{{ connection class +# {{{ connection classes class DiscretizationConnection(object): """Abstract interface for transporting a DOF vector from one @@ -266,6 +266,14 @@ class DirectDiscretizationConnection(DiscretizationConnection): ibatch = self.groups[to_group_index].batches[ibatch_index] from_grp = self.from_discr.groups[ibatch.from_group_index] + if len(from_grp.basis()) != from_grp.unit_nodes.shape[1]: + from meshmode.discretization import NoninterpolatoryElementGroupError + raise NoninterpolatoryElementGroupError( + "%s does not support interpolation because it is not " + "unisolvent (its unit node count does not match its " + "number of basis functions). Using connections requires " + "the ability to interpolate." % type(from_grp).__name__) + result = mp.resampling_matrix( from_grp.basis(), ibatch.result_unit_nodes, from_grp.unit_nodes) diff --git a/meshmode/discretization/poly_element.py b/meshmode/discretization/poly_element.py index 54aaabef97ac5f9bfc97b642ebe1a476608e0603..f509a911bdaca5d8a07b4c4a4585da89fc403cd0 100644 --- a/meshmode/discretization/poly_element.py +++ b/meshmode/discretization/poly_element.py @@ -80,6 +80,14 @@ class PolynomialSimplexElementGroupBase(ElementGroupBase): @memoize_method def diff_matrices(self): + if len(self.basis()) != self.unit_nodes.shape[1]: + from meshmode.discretization import NoninterpolatoryElementGroupError + raise NoninterpolatoryElementGroupError( + "%s does not support interpolation because it is not " + "unisolvent (its unit node count does not match its " + "number of basis functions). Differentiation requires " + "the ability to interpolate." % type(self).__name__) + result = mp.differentiation_matrices( self.basis(), self.grad_basis(),