diff --git a/grudge/eager.py b/grudge/eager.py index 92378f993df51d0fca3fc8170308595e15cd3d18..affefcbdb24db25cb31785a83365b6a420ebff51 100644 --- a/grudge/eager.py +++ b/grudge/eager.py @@ -58,6 +58,7 @@ class EagerDGDiscretization(DGDiscretizationWithBoundaries): .. automethod:: weak_div .. automethod:: normal + .. automethod:: mass .. automethod:: inverse_mass .. automethod:: face_mass @@ -265,6 +266,26 @@ class EagerDGDiscretization(DGDiscretizationWithBoundaries): local_only=True) (array_context=actx)) + @memoize_method + def _bound_mass(self, dd): + return bind(self, sym.MassOperator(dd_in=dd)(sym.Variable("u", dd)), + local_only=True) + + def mass(self, *args): + if len(args) == 1: + vec, = args + dd = sym.DOFDesc("vol", sym.QTAG_NONE) + elif len(args) == 2: + dd, vec = args + else: + raise TypeError("invalid number of arguments") + + if isinstance(vec, np.ndarray): + return obj_array_vectorize( + lambda el: self.mass(dd, el), vec) + + return self._bound_mass(dd)(u=vec) + @memoize_method def _bound_inverse_mass(self): return bind(self, sym.InverseMassOperator()(sym.Variable("u")),