From a7dc8f8b6b315cac63db5b4c6d383b4725ca1126 Mon Sep 17 00:00:00 2001
From: Alexandru Fikl <alexfikl@gmail.com>
Date: Wed, 17 Jun 2020 19:41:14 -0500
Subject: [PATCH] use ArrayContext as a code cache in execution

---
 grudge/execution.py | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/grudge/execution.py b/grudge/execution.py
index 0104584e..3d5f430d 100644
--- a/grudge/execution.py
+++ b/grudge/execution.py
@@ -118,7 +118,8 @@ class ExecutionMapper(mappers.Evaluator,
     # {{{ elementwise reductions
 
     def _map_elementwise_reduction(self, op_name, field_expr, dd):
-        @memoize_in(self, "elementwise_%s_prg" % op_name)
+        @memoize_in(self.array_context,
+                (ExecutionMapper, "elementwise_%s_prg" % op_name))
         def prg():
             return make_loopy_program(
                 "{[iel, idof, jdof]: 0<=iel<nelements and 0<=idof, jdof<ndofs}",
@@ -235,7 +236,7 @@ class ExecutionMapper(mappers.Evaluator,
             raise TypeError(
                 "Expected 'else' to be of type np.number or DOFArray")
 
-        @memoize_in(self.bound_op, "map_if_knl")
+        @memoize_in(self.array_context, (ExecutionMapper, "map_if_knl"))
         def knl(sym_then, sym_else):
             return make_loopy_program(
                 "{[iel, idof]: 0<=iel<nelements and 0<=idof<nunit_dofs}",
@@ -265,7 +266,7 @@ class ExecutionMapper(mappers.Evaluator,
         if is_zero(field):
             return 0
 
-        @memoize_in(self.bound_op, "elwise_linear_knl")
+        @memoize_in(self.array_context, (ExecutionMapper, "elwise_linear_knl"))
         def prg():
             result = make_loopy_program(
                 """{[iel, idof, j]:
@@ -329,7 +330,7 @@ class ExecutionMapper(mappers.Evaluator,
         if is_zero(field):
             return 0
 
-        @memoize_in(self.bound_op, "face_mass_knl")
+        @memoize_in(self.array_context, (ExecutionMapper, "face_mass_knl"))
         def prg():
             return make_loopy_program(
                 """{[iel,idof,f,j]:
@@ -496,7 +497,8 @@ class ExecutionMapper(mappers.Evaluator,
 
         assert repr_op.dd_in.domain_tag == repr_op.dd_out.domain_tag
 
-        @memoize_in(self.discrwb, "reference_derivative_prg")
+        @memoize_in(self.array_context,
+                (ExecutionMapper, "reference_derivative_prg"))
         def prg(nmatrices):
             result = make_loopy_program(
                 """{[imatrix, iel, idof, j]:
-- 
GitLab