From 4bd6d3b0361bb192fafd21fb75afbea1347c6d95 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Wed, 26 May 2021 17:24:42 -0500
Subject: [PATCH] Freeze geometric quantities before memoizing/thaw upon return

---
 grudge/geometry/metrics.py | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/grudge/geometry/metrics.py b/grudge/geometry/metrics.py
index 3f9c971e..fe0030dd 100644
--- a/grudge/geometry/metrics.py
+++ b/grudge/geometry/metrics.py
@@ -59,7 +59,7 @@ THE SOFTWARE.
 import numpy as np
 
 from grudge import DiscretizationCollection
-from arraycontext import thaw, ArrayContext
+from arraycontext import thaw, freeze, ArrayContext
 from meshmode.dof_array import DOFArray
 
 from grudge.dof_desc import (
@@ -403,8 +403,8 @@ def inverse_surface_metric_derivative(
                     actx, dcoll, xyz_axis, d, dd=dd
                 ) for d in range(dim)
             )
-        return imd
-    return _inv_surf_metric_deriv()
+        return freeze(imd, actx)
+    return thaw(_inv_surf_metric_deriv(), actx)
 
 
 def _signed_face_ones(
@@ -498,10 +498,10 @@ def area_element(
                         "area_elements_adim%s_gdim%s"
                         % (dcoll.ambient_dim, dim)))
     def _area_elements():
-        return actx.np.sqrt(
-            pseudoscalar(actx, dcoll, dd=dd).norm_squared()
-        )
-    return _area_elements()
+        return freeze(actx.np.sqrt(
+            pseudoscalar(actx, dcoll, dd=dd).norm_squared()), actx)
+
+    return thaw(_area_elements(), actx)
 
 # }}}
 
-- 
GitLab