hi

On 15/06/21 12:21 pm, Matthew Knepley wrote:

I admit that it is becoming complicated, but this can also be handled.

The corner case only shows up when we distribute with overlap. Thus we could,

1) Distribute the mesh without overlap

2) Mark the global boundary using the former algorithm

3) Distribute overlap = 1 using DMPlexDistributeOverlap(). DMPlexDistribute() just does these two steps at once if you ask for overlap.

4) Use the former algorithm, with the boundary label we just made, to mark flux faces.

That sounds like it might work. Do you think this perhaps slightly simpler version might also work?

1) distribute mesh without overlap

2) label boundary faces using DMPlexMarkBoundaryFaces()

3) DMPlexDistributeOverlap()

4) Un-label boundary faces with support size > 1 (i.e. the shared faces on the non-overlapped mesh- I think) - so the boundary label is now just the global boundary

5) loop over faces as in my original algorithm, labelling flux faces if they are either on the open boundary, or are not on the global boundary

Unfortunately I can't test this at the moment - it looks like the Fortran interface for DMPlexDistributeOverlap() is missing?

- Adrian

--

Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
University of Auckland, New Zealand
email: [email protected]
tel: +64 (0)9 923 4611

Reply via email to