Skip to content
Snippets Groups Projects
Commit 01ffdaa5 authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Evaluate boundary predicates to discard silly conditions like 1 == 0

parent ebe7b92a
No related branches found
No related tags found
No related merge requests found
......@@ -281,7 +281,7 @@ def determine_accumulation_space(info, number):
def boundary_predicates(expr, measure, subdomain_id):
predicates = frozenset([])
predicates = []
if subdomain_id not in ['everywhere', 'otherwise']:
# Get the original form and inspect the present measures
......@@ -301,9 +301,18 @@ def boundary_predicates(expr, measure, subdomain_id):
visitor = get_visitor(measure, subdomain_id)
subdomain_data = visitor(subdomain_data, do_predicates=True)
predicates = predicates.union([prim.Comparison(subdomain_data, '==', subdomain_id)])
p = prim.Comparison(subdomain_data, '==', subdomain_id)
return predicates
# Try to find conditions that are always 0 or always 1
from pymbolic.mapper.evaluator import evaluate
try:
eval = evaluate(p)
if not eval:
predicates.append(False)
except:
predicates.append(p)
return frozenset(predicates)
class PDELabAccumulationInfo(ImmutableRecord):
......@@ -392,6 +401,8 @@ def generate_accumulation_instruction(expr, visitor):
accumvar = name_accumulation_variable(test_lfs.get_restriction() + ansatz_lfs.get_restriction())
predicates = boundary_predicates(expr, visitor.measure, visitor.subdomain_id)
if False in predicates:
return
rank = 1 if ansatz_lfs.lfs is None else 2
......
......@@ -402,6 +402,8 @@ def generate_accumulation_instruction(expr, visitor):
visitor.measure,
visitor.subdomain_id,
)
if False in predicates:
return
insn_dep = None
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment