<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Jan 15, 2019 at 4:51 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, Matt<br>
<br>
> > Hi, all Petscer:<br>
> >   I am very sorry for disturbing you for my questions.<br>
> <br>
> <br>
> I like your questions.<br>
> <br>
> <br>
> > 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<br>
> following<br>
> > routines DMCreateGlobalVector and DMCreateLocalVector.<br>
> >   3. I have initialed global Vector. Because the local vector have<br>
> 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?<br>
> <br>
> <br>
> To understand the question better, why would you not use<br>
> DMGlobalToLocal()?<br>
I have create a PetscSection for the dm object. The section is used to<br>
store the macroscopic variables $\rho$, u,  v, $\rho$E. A pair of<br>
global and local vector are created using DMCreateGlobalVector and<br>
DMCreateLocalVector. <br>
<br>
I also needed a vector to store the derivatives of the macroscopic<br>
variables, but I have the difficulty to set two PetscSection to a dm<br>
object. </blockquote><div><br></div><div>You are right. You can't use 2 Sections for 1 DM. However, this one is easy.</div><div>Use DMClone() to get another DM. They will share the expensive topology</div><div>information, but the new one can have the different Section. Then all the</div><div>GlobalToLocal will be created automatically.</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">The first section has four variables on the cell point, and the<br>
variable number of second section is  not the same as the first<br>
section. I have no <br>
idea about this problem, and I think that whether I can scatter it by<br>
myself without using  DMGlobalToLocal()?<br>
<br>
Can you point me out how can I creat two PetscSection whin a dmplex<br>
object, and how can I using DMGlobalToLocal() for the two pair of<br>
vectors whin a dmplex object? <br>
> <br>
> > I have<br>
> > scatter the vectors using VecScatterBegin and VecScatterEnd, and<br>
> the IS<br>
> > is created using the localId and the glolbalId (Obtained by<br>
> > DMPlexGetCellNumbering). I got a wrong result.<br>
> ><br>
> <br>
> DMPlexGetCellNumbering() gives you are _arbitrary_ numbering of the<br>
> cells,<br>
> not the<br>
> global numbering of unknowns.<br>
> <br>
> <br>
> >   Can anyone give me some advices, and does it have some to do with<br>
> the<br>
> > natural ids?<br>
> ><br>
> <br>
> 1) You can get the local ids from the local Section (DMGetSection),<br>
> and the<br>
> global ids<br>
> from the global Section (DMGetGlobalSection). You loop over all the<br>
> points<br>
> in the mesh<br>
> and get the offset/size pairs. However, this is error-prone (since<br>
> you can<br>
> have constraints)<br>
> and probably unnecessary.<br>
> <br>
> 2) If you look at the code for DMGlobalToLocalBegin():<br>
> <br>
> <br>
<a href="https://bitbucket.org/petsc/petsc/src/650136806607101f8eb495880e9efa33f2f75729/src/dm/interface/dm.c#lines-2201" rel="noreferrer" target="_blank">https://bitbucket.org/petsc/petsc/src/650136806607101f8eb495880e9efa33f2f75729/src/dm/interface/dm.c#lines-2201</a><br>
> <br>
> you see it just call PetscSFBcastBegin(), and there is a similar<br>
> BcastEnd()<br>
> in GlobalToLocalEnd(). Thus all<br>
> we are doing is using the SF directly. That is the same as using a<br>
> Scatter.<br>
> <br>
>   Thanks,<br>
> <br>
>    Matt<br>
Thank you very much. I have do it yestoday following the code for<br>
DMGlobalToLocalBegin().<br>
> <br>
> >   Any helps are approciated. Thanks.<br>
> ><br>
> > leejearl<br>
> ><br>
> ><br>
> <br>
> -- <br>
> What most experimenters take for granted before they begin their<br>
> experiments is infinitely more interesting than any results to which<br>
> their<br>
> experiments lead.<br>
> -- Norbert Wiener<br>
> <br>
> <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~knepley/</a> <<br>
> <a href="http://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">http://www.cse.buffalo.edu/~knepley/</a>><br>
<br>
<br>
<br>
<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>