hi

I have a DMPlex in a finite volume simulation and I want to create a Vec containing flux data only on the mesh faces where fluxes are computed (e.g. not on closed boundaries). Basically these are all the faces with support size 2 (aside from some complications related to boundary conditions).

To do this I clone the DM using DMClone() and create a section on it with DMPlexCreateSection(), passing in a label which has value 1 on all the required faces. The problem then consists of labelling the appropriate faces.

The tricky part is that when a face exists on more than one process, you have to make sure it has the same label value on all processes, otherwise an error results when you try and create a global vector on the DM. Because I distribute the DMPlex with overlap = 1, a face can have different support sizes on different processes.

So on each process, I need to label a face if it has support size 2 on *any* process.

Would it be possible to use PetscSFBcast and the point SF from DMGetPointSF() to somehow broadcast the support sizes? Or is there a simpler way?

- 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