<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">It is enough if you use DMPlexDistribute with 1 level of overlap, set the local section for your dofs,  and call DMGlobalToLocal . The local vector will contain data for what you call “ghost” cells. I call them “not-owned’ cells.<br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jun 15, 2020, at 12:09 PM, Shashwat Tiwari <<a href="mailto:shaswat121994@gmail.com" class="">shaswat121994@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">The way I'm trying to implement periodic bc is, when I loop over the boundary faces, say, on the left boundary of the domain to compute flux and residual, I need solution values from the two cells neighbouring the face, i.e. the left cell and the right cell (the face normal pointing from the left cell to the right cell and the right cell being a boundary ghost cell for boundary faces). For the boundary to be periodic, I need the value that I get from the right cell (boundary ghost cell) to be the solution value at its periodic counterpart, i.e. the solution value at left cell of the face on right boundary of the domain in this case. My question is how do I update the value at a boundary ghost cell with the value at the real cell which is its periodic counterpart from the other side of the domain. Is there some kind of mapping of the boundary ghost cells to their corresponding real cells which I can use to update the solution values at ghost cells? <br class=""><div class=""><br class=""></div><div class="">Regards,</div><div class="">Shashwat<br class=""></div></div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 14, 2020 at 5:11 AM Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class=""><div dir="ltr" class="">On Fri, Jun 12, 2020 at 3:19 PM Shashwat Tiwari <<a href="mailto:shaswat121994@gmail.com" target="_blank" class="">shaswat121994@gmail.com</a>> wrote:<br class=""></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class=""><div class="">Hi, <br class=""></div><div class="">I am writing a first order 2D solver for unstructured grids with periodic boundaries using DMPlex. After generating the mesh, I use "DMSetPeriodicity" function to set periodicity in both directions. After which I partition the mesh (DMPlexDistribute), construct ghost cells (DMPlexConstructGhostCells),</div></div></blockquote><div class=""><br class=""></div><div class="">These ghost cells are for FVM boundary conditions. If you want cells to be shared across parallel partitions, then you want to give overlap=1</div><div class="">to DMPlexDIstribute(). Is that what you want?</div><div class=""><br class=""></div><div class="">  Thanks,</div><div class=""><br class=""></div><div class="">     Matt</div><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class=""><div class=""> create a section, and set some initial values in the global vector. Then I use "VecGhostUpdateBegin" to start updating the boundary ghost cell values, but, I get the following error in case I use multiple processors:</div><div class=""><br class=""></div><div class="">[0]PETSC ERROR: Invalid argument<br class="">[0]PETSC ERROR: Vector is not ghosted<br class="">[0]PETSC ERROR: See <a href="https://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank" class="">https://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.</div><div class=""><br class=""></div><div class="">if I run with a single process, there is no error but the values remain empty (zero) and are not updated. Kindly let me know, if I am missing some crucial step before I can update the ghost values in order to implement the periodic bc, or if there is any other approach to achieve it. I am attaching a small code to demonstrate the issue for your reference.</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Shashwat<br class=""></div></div>
</blockquote></div><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class="">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">-- Norbert Wiener</div><div class=""><br class=""></div><div class=""><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank" class="">https://www.cse.buffalo.edu/~knepley/</a><br class=""></div></div></div></div></div></div></div></div>
</blockquote></div>
</div></blockquote></div><br class=""></div></body></html>