[petsc-users] How Can I scatter a global vector to a local vector without using DMGlobaltoLocalBegin/DMGlobaltoLocalEnd?
leejearl
leejearl at mail.nwpu.edu.cn
Tue Jan 15 03:51:14 CST 2019
Hi, Matt
> > Hi, all Petscer:
> > I am very sorry for disturbing you for my questions.
>
>
> I like your questions.
>
>
> > I have a
> > problems as follow.
> > 1. A DMPlex object dm is created.
> > 2. A global vector and a local vector are created using the
> following
> > routines DMCreateGlobalVector and DMCreateLocalVector.
> > 3. I have initialed global Vector. Because the local vector have
> some
> > overlap cells, I want to scatter the data from global to local.
> > 4. If I don't use the routines
> > DMGlobaltoLocalBegin/DMGlobaltoLocalEnd, how can I scatter it?
>
>
> To understand the question better, why would you not use
> DMGlobalToLocal()?
I have create a PetscSection for the dm object. The section is used to
store the macroscopic variables $\rho$, u, v, $\rho$E. A pair of
global and local vector are created using DMCreateGlobalVector and
DMCreateLocalVector.
I also needed a vector to store the derivatives of the macroscopic
variables, but I have the difficulty to set two PetscSection to a dm
object. The first section has four variables on the cell point, and the
variable number of second section is not the same as the first
section. I have no
idea about this problem, and I think that whether I can scatter it by
myself without using DMGlobalToLocal()?
Can you point me out how can I creat two PetscSection whin a dmplex
object, and how can I using DMGlobalToLocal() for the two pair of
vectors whin a dmplex object?
>
> > I have
> > scatter the vectors using VecScatterBegin and VecScatterEnd, and
> the IS
> > is created using the localId and the glolbalId (Obtained by
> > DMPlexGetCellNumbering). I got a wrong result.
> >
>
> DMPlexGetCellNumbering() gives you are _arbitrary_ numbering of the
> cells,
> not the
> global numbering of unknowns.
>
>
> > Can anyone give me some advices, and does it have some to do with
> the
> > natural ids?
> >
>
> 1) You can get the local ids from the local Section (DMGetSection),
> and the
> global ids
> from the global Section (DMGetGlobalSection). You loop over all the
> points
> in the mesh
> and get the offset/size pairs. However, this is error-prone (since
> you can
> have constraints)
> and probably unnecessary.
>
> 2) If you look at the code for DMGlobalToLocalBegin():
>
>
https://bitbucket.org/petsc/petsc/src/650136806607101f8eb495880e9efa33f2f75729/src/dm/interface/dm.c#lines-2201
>
> you see it just call PetscSFBcastBegin(), and there is a similar
> BcastEnd()
> in GlobalToLocalEnd(). Thus all
> we are doing is using the SF directly. That is the same as using a
> Scatter.
>
> Thanks,
>
> Matt
Thank you very much. I have do it yestoday following the code for
DMGlobalToLocalBegin().
>
> > Any helps are approciated. Thanks.
> >
> > leejearl
> >
> >
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their
> experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/ <
> http://www.cse.buffalo.edu/~knepley/>
More information about the petsc-users
mailing list