From 38c62d75f291aee1251773ea35460f56faee769d Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Wed, 24 Oct 2018 11:43:33 +0200
Subject: [PATCH] Avoid visiting No-op integrals

I have a case where visiting has a side effect that I want to avoid.
Also spares work.
---
 python/dune/perftool/pdelab/localoperator.py | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index f4e90c6a..6d9c1dde 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -401,9 +401,6 @@ def generate_accumulation_instruction(expr, visitor):
     accumvar = name_accumulation_variable(test_lfs.get_restriction() + ansatz_lfs.get_restriction())
 
     predicates = boundary_predicates(visitor.measure, visitor.subdomain_id)
-    if False in predicates:
-        return
-
     rank = 1 if ansatz_lfs.lfs is None else 2
 
     from dune.perftool.pdelab.argument import PDELabAccumulationFunction
@@ -448,6 +445,11 @@ def visit_integral(integral):
     measure = integral.integral_type()
     subdomain_id = integral.subdomain_id()
 
+    # Avoid even visiting the integral, if it is noop
+    predicates = boundary_predicates(measure, subdomain_id)
+    if False in predicates:
+        return
+
     # Start the visiting process!
     visitor = get_visitor(measure, subdomain_id)
     visitor.accumulate(integrand)
-- 
GitLab