Pratik,

Thank you for your reply. If I understand it correctly, in step 4 of the ParallelDistributed::distribute_dofs() function in the dof_handler.cc file you compute and flag the cells that have ghost neighbours by looking at only the vertices by calling the function compute_vertices_with_ghost_neighbors() as you say above.

Yes. In essence, you have to find out which locally owned cell is a ghost cell on some other processor. If you have only one layer of ghost cells around, looking at which vertices are adjacent to ghost cells, and then checking which locally owned cells are adjacent to these vertices is enough.

But if you have multiple ghost layers, this logic is not enough any more. You will have to find a different algorithm to determine which of the locally owned cells are ghosts somewhere else, and where. This will likely not be trivial and I would guess involves communication in some way. It will require some serious thinking.


This uses the internal::p4est::p4est_iterate function to iterate the member variable of the struct FindGhosts.vertices_with_ghosts_neighbors which is a map of the cells and its subdomain id's through the find_ghost_faces() and find_ghost_corners() for 2d and find_ghost_edges() functions as well for 3d and flag those cells which have a face, corner or edge with.a ghost cell ?

I should be able to use this p4est_iterate function to search through the cells (even ghosts) and add them to the map right ? I am not sure how to do this. Could you please give me some pointers on this ?

I don't know. I don't know the details of p4est_iterate, and I would have to put some deep thought into how exactly I would want to write this algorithm.


If I understand correctly, the function p4est_iterate takes these function pointers (find_ghost_faces() ... ) and user structs ( FindGhosts )and iterates it through the parallel_forest. But I am not sure how to write a function that searches through the ghost cells and flags them and if that is all is needed for this and how do I make sure that the appropriate pairs are flagged for receiving and sending from and to the appropriate domains ?

I don't know that either. As I said, I don't think that there is an easy criterion for whether a locally owned cell is a ghost cell somewhere else if you have more than one layer of cells.

You could, however, do it recursively. You know that if a cell is a ghost cell on processor X, then all of its (locally owned) vertex neighbors are also ghost cells on processor X if you have two layers of ghost cells. And so forth. In other words, this would allow you to write the algorithm in a recursive way.

Best
 W.

--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 bange...@colostate.edu
                           www: http://www.math.colostate.edu/~bangerth/

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to