From 79c5e623dcb81c9ac29c9be46961a27a9890be0d Mon Sep 17 00:00:00 2001 From: ellis Date: Thu, 16 Mar 2017 21:08:12 -0500 Subject: [PATCH] Created make_opposite_partition_connection function --- .../discretization/connection/__init__.py | 2 +- .../connection/opposite_face.py | 36 +++++++++++++++++++ test/test_meshmode.py | 11 ++++-- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/meshmode/discretization/connection/__init__.py b/meshmode/discretization/connection/__init__.py index bdb0f525..e2a45113 100644 --- a/meshmode/discretization/connection/__init__.py +++ b/meshmode/discretization/connection/__init__.py @@ -35,7 +35,7 @@ from meshmode.discretization.connection.face import ( FRESTR_INTERIOR_FACES, FRESTR_ALL_FACES, make_face_restriction, make_face_to_all_faces_embedding) from meshmode.discretization.connection.opposite_face import \ - make_opposite_face_connection + make_opposite_face_connection, make_opposite_partition_connection from meshmode.discretization.connection.refinement import \ make_refinement_connection diff --git a/meshmode/discretization/connection/opposite_face.py b/meshmode/discretization/connection/opposite_face.py index 6ce70b2a..629782ff 100644 --- a/meshmode/discretization/connection/opposite_face.py +++ b/meshmode/discretization/connection/opposite_face.py @@ -392,4 +392,40 @@ def make_opposite_face_connection(volume_to_bdry_conn): # }}} + +def make_opposite_partition_connection(vol_to_bdry_conns): + """ + Given a list of boundary restriction connections *volume_to_bdry_conn*, + return a :class:`DirectDiscretizationConnection` that performs data + exchange across adjacent faces of different partitions. + + :arg :vol_to_bdry_conns A list of *volume_to_bdry_conn* corresponding to + a partition of a parent mesh. + """ + + disc_conns = [] + return disc_conns + nparts = len(vol_to_bdry_conns) + from meshmode.discretization.connection import ( + DirectDiscretizationConnection, DiscretizationConnectionElementGroup) + for part_idx in range(nparts): + vol_discr = vol_to_bdry_conns[part_idx].from_discr + vol_mesh = vol_discr.mesh + bdry_discr = vol_to_bdry_conns[part_idx].to_discr + + with cl.CommandQueue(vol_discr.cl_context) as queue: + # Create a list of batches. Each batch contains interpolation + # data from one partition to another. + nop + + disc_conns.append(DirectDiscretizationConnection( + from_discr=bdry_discr, + to_discr=bdry_discr, + groups=[ + DiscretizationConnectionElementGroup(batches=batches) + for batches in groups], + is_surjective=True)) + + return disc_conns + # vim: foldmethod=marker diff --git a/test/test_meshmode.py b/test/test_meshmode.py index e2251a36..f3f9802b 100644 --- a/test/test_meshmode.py +++ b/test/test_meshmode.py @@ -78,11 +78,18 @@ def test_partition_interpolation(ctx_getter): vol_discrs = [Discretization(cl_ctx, part_meshes[i], group_factory) for i in range(num_parts)] - from meshmode.discretization.connection import (make_face_restriction, - check_connection) + from meshmode.discretization.connection import make_face_restriction bdry_connections = [make_face_restriction(vol_discrs[i], group_factory, FRESTR_INTERIOR_FACES) for i in range(num_parts)] + from meshmode.discretization.connection import \ + make_opposite_partition_connection + opp_faces = make_opposite_partition_connection(bdry_connections) + + from meshmode.discretization.connection import check_connection + for opp_face in opp_faces: + check_connection(opp_face) + # {{{ partition_mesh -- GitLab