<div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Fri, Jan 11, 2019 at 3:35 AM leejearl via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi, all Petscer:<br>
  I am very sorry for disturbing you for my questions.</blockquote><div><br></div><div>I like your questions.</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"> I have a<br>
problems as follow.<br>
  1. A DMPlex object dm is created.<br>
  2. A global vector and a local vector are created using the following<br>
routines DMCreateGlobalVector and DMCreateLocalVector.<br>
  3. I have initialed global Vector. Because the local vector have some<br>
overlap cells, I want to scatter the data from global to local.<br>
  4. If I don't use the routines<br>
DMGlobaltoLocalBegin/DMGlobaltoLocalEnd, how can I scatter it?</blockquote><div><br></div><div>To understand the question better, why would you not use DMGlobalToLocal()?</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">I have<br>
scatter the vectors using VecScatterBegin and VecScatterEnd, and the IS<br>
is created using the localId and the glolbalId (Obtained by<br>
DMPlexGetCellNumbering). I got a wrong result.<br></blockquote><div><br></div><div>DMPlexGetCellNumbering() gives you are _arbitrary_ numbering of the cells, not the</div><div>global numbering of unknowns.</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">
  Can anyone give me some advices, and does it have some to do with the<br>
natural ids?<br></blockquote><div><br></div><div>1) You can get the local ids from the local Section (DMGetSection), and the global ids</div><div>from the global Section (DMGetGlobalSection). You loop over all the points in the mesh</div><div>and get the offset/size pairs. However, this is error-prone (since you can have constraints)</div><div>and probably unnecessary.</div><div><br></div><div>2) If you look at the code for DMGlobalToLocalBegin():</div><div><br></div><div><a href="https://bitbucket.org/petsc/petsc/src/650136806607101f8eb495880e9efa33f2f75729/src/dm/interface/dm.c#lines-2201">https://bitbucket.org/petsc/petsc/src/650136806607101f8eb495880e9efa33f2f75729/src/dm/interface/dm.c#lines-2201</a><br></div><div><br></div><div>you see it just call PetscSFBcastBegin(), and there is a similar BcastEnd() in GlobalToLocalEnd(). Thus all</div><div>we are doing is using the SF directly. That is the same as using a Scatter.</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">
  Any helps are approciated. Thanks. <br><br>
leejearl<br>
<br>
</blockquote></div><br clear="all"><div><br></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/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div></div>