From 461446a050b29bca6c3e7476a07e0de16c1cb283 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sat, 9 Jan 2016 15:56:45 -0600
Subject: [PATCH] Allow integral() to work on surfaces

---
 grudge/symbolic/operators.py | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/grudge/symbolic/operators.py b/grudge/symbolic/operators.py
index a1396ff..e1e9091 100644
--- a/grudge/symbolic/operators.py
+++ b/grudge/symbolic/operators.py
@@ -475,11 +475,18 @@ def stiffness_t(dim):
 
 
 def integral(arg, dd=None):
+    sym = _sym()
+
     if dd is None:
-        dd = _sym().DD_VOLUME
+        dd = sym.DD_VOLUME
 
-    from grudge import sym
-    return sym.NodalSum(dd)(sym.MassOperator()(sym.Ones(dd))*arg)
+    dd = sym.as_dofdesc(dd)
+
+    return sym.NodalSum(dd)(
+            arg * sym.cse(
+                sym.MassOperator(dd_in=dd)(sym.Ones(dd)),
+                "mass_quad_weights",
+                sym.cse_scope.DISCRETIZATION))
 
 
 def norm(p, arg, dd=None):
@@ -489,7 +496,9 @@ def norm(p, arg, dd=None):
     sym = _sym()
 
     if dd is None:
-        dd = _sym().DD_VOLUME
+        dd = sym.DD_VOLUME
+
+    dd = sym.as_dofdesc(dd)
 
     if p == 2:
         norm_squared = sym.NodalSum(dd_in=dd)(
-- 
GitLab