From b069d92a1eced867b7992893c2550cc012c0389b Mon Sep 17 00:00:00 2001 From: Matthew Smith <mjsmith6@illinois.edu> Date: Mon, 29 Mar 2021 16:34:31 -0500 Subject: [PATCH] add constant handling in interior_trace_pair and cross_rank_trace_pairs --- grudge/eager.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/grudge/eager.py b/grudge/eager.py index f10afcec..7d9eb1d8 100644 --- a/grudge/eager.py +++ b/grudge/eager.py @@ -374,7 +374,15 @@ def interior_trace_pair(discrwb, vec): *discrwb*. """ i = discrwb.project("vol", "int_faces", vec) - e = obj_array_vectorize(lambda el: discrwb.opposite_face_connection()(el), i) + + def get_opposite_face(el): + if isinstance(el, Number): + return el + else: + return discrwb.opposite_face_connection()(el) + + e = obj_array_vectorize(get_opposite_face, i) + return TracePair("int_faces", interior=i, exterior=e) @@ -424,9 +432,13 @@ class _RankBoundaryCommunication: def _cross_rank_trace_pairs_scalar_field(discrwb, vec, tag=None): - rbcomms = [_RankBoundaryCommunication(discrwb, remote_rank, vec, tag=tag) - for remote_rank in discrwb.connected_ranks()] - return [rbcomm.finish() for rbcomm in rbcomms] + if isinstance(vec, Number): + return [TracePair(BTAG_PARTITION(remote_rank), interior=vec, exterior=vec) + for remote_rank in discrwb.connected_ranks()] + else: + rbcomms = [_RankBoundaryCommunication(discrwb, remote_rank, vec, tag=tag) + for remote_rank in discrwb.connected_ranks()] + return [rbcomm.finish() for rbcomm in rbcomms] def cross_rank_trace_pairs(discrwb, vec, tag=None): -- GitLab