<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>It makes sense, thank you. In fact, both ways seems better than
my way. The first one looks the most straightforward.
Unfortunately I do not know how to implement either of them. Could
you please direct me to the corresponding PETSc functions ?<br>
</p>
<p>Pierre<br>
</p>
<br>
<div class="moz-cite-prefix">On 15/10/21 13:25, Matthew Knepley
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAMYG4GmqCXemuQvO1L+We7fDJj9qQF7znALtcZjziV3VGRZ4wg@mail.gmail.com">
<div dir="ltr">
<div dir="ltr">On Fri, Oct 15, 2021 at 7:08 AM Pierre Seize <<a
href="mailto:pierre.seize@onera.fr" moz-do-not-send="true">pierre.seize@onera.fr</a>>
wrote:<br>
</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">Hi,<br>
<br>
I'm writing a code using PETSc to solve NS equations with FV
on an <br>
unstructured mesh. Therefore I use DMPlex.<br>
<br>
Regarding periodicity, I manage to implement it this way:<br>
<br>
- for each couple of boundaries that is linked with
periodicity, I <br>
create a buffer vector with an ISLocalToGlobalMapping<br>
<br>
- then, when I need to fill the ghost cells corresponding
to the <br>
periodicity, the i "true" cell of the local vector fills the
buffer <br>
vector on location i with VecSetValuesBlockedLocal, then <br>
VecAssemblyBegin/VecAssemblyEnd ensure each value is send to
the correct <br>
location thanks to the mapping, then the i "ghost" cell of
the local <br>
vector reads the vector on location i to get it's value.<br>
<br>
<br>
It works, but it seems to me there is a better way, with
maybe PetscSF, <br>
VecScatter, or something I don't know yet. Does anyone have
any advice ?<br>
</blockquote>
<div><br>
</div>
<div>There are at least two other ways to handle this. First,
the method that is advocated in</div>
<div>Plex is to actually make a periodic geometry, meaning
connect the cells that are meant</div>
<div>to be connected. Then, if you partition with overlap = 1,
PetscGlobalToLocal() will fill in</div>
<div>these cell values automatically.</div>
<div><br>
</div>
<div>Second, you could use a non-periodic geometry, but alter
the LocalToGlobal map such</div>
<div>that the cells gets filled in anyway. Many codes use this
scheme and it is straightforward</div>
<div>with Plex just by augmenting the map it makes
automatically.</div>
<div><br>
</div>
<div>Does this make sense?</div>
<div><br>
</div>
<div> Thanks,</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
Pierre Seize<br>
</blockquote>
</div>
-- <br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most experimenters take for granted before
they begin their experiments is infinitely more
interesting than any results to which their
experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a
href="http://www.cse.buffalo.edu/%7Eknepley/"
target="_blank" moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>