From d5ebf724e5297de47aeaf88ea0f0839ca7268e45 Mon Sep 17 00:00:00 2001
From: Matthew Smith <mjsmith6@illinois.edu>
Date: Thu, 3 Dec 2020 11:12:42 -0600
Subject: [PATCH] add mass operator to EagerDGDiscretization

---
 grudge/eager.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/grudge/eager.py b/grudge/eager.py
index 92378f99..affefcbd 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")),
-- 
GitLab