[petsc-users] DMGetCoordinatesLocal and DMPlexGetCellCoordinates in PETSc > 3.18

Berend van Wachem berend.vanwachem at ovgu.de
Wed May 17 10:20:45 CDT 2023


Dear Matt,

Is there a way to 'redo' the DMLocalizeCoordinates() ? Or to undo it?
Alternatively, can we make the calling of DMLocalizeCoordinates() in the  DMPlexCreate...() routines optional?

Otherwise, we would have to copy all arrays of coordinates from DMGetCoordinatesLocal() and DMGetCellCoordinatesLocal() before 
scaling them.

Best regards, Berend.

On 5/17/23 16:35, Matthew Knepley wrote:
> On Wed, May 17, 2023 at 10:21 AM Berend van Wachem <berend.vanwachem at ovgu.de <mailto:berend.vanwachem at ovgu.de>> wrote:
> 
>     Dear Matt,
> 
>     Thanks for getting back to me so quickly.
> 
>     If I scale each of the coordinates of the mesh (say, I want to cube each
>     co-ordinate), and I do this for both:
> 
>     DMGetCoordinatesLocal();
>     DMGetCellCoordinatesLocal();
> 
>     How do I know I am not cubing one coordinate multiple times?
> 
> 
> Good question. Right now, the only connection between the two sets of coordinates is DMLocalizeCoordinates(). Since sometimes 
> people want to do non-trivial things to
> coordinates, I prefer not to push in an API for "just" scaling, but I could be convinced
> the other way.
> 
>    Thanks,
> 
>       Matt
> 
>     Thanks, Berend.
> 
>     On 5/17/23 16:10, Matthew Knepley wrote:
>      > On Wed, May 17, 2023 at 10:02 AM Berend van Wachem
>      > <berend.vanwachem at ovgu.de <mailto:berend.vanwachem at ovgu.de> <mailto:berend.vanwachem at ovgu.de
>     <mailto:berend.vanwachem at ovgu.de>>> wrote:
>      >
>      >     Dear PETSc Team,
>      >
>      >     We are using DMPlex, and we create a mesh using
>      >
>      >     DMPlexCreateBoxMesh (.... );
>      >
>      >     and get a uniform mesh. The mesh is periodic.
>      >
>      >     We typically want to "scale" the coordinates (vertices) of the mesh,
>      >     and
>      >     to achieve this, we call
>      >
>      >     DMGetCoordinatesLocal(dm, &coordinates);
>      >
>      >     and scale the entries in the Vector coordinates appropriately.
>      >
>      >     and then
>      >
>      >     DMSetCoordinatesLocal(dm, coordinates);
>      >
>      >
>      >     After this, we localise the coordinates by calling
>      >
>      >     DMLocalizeCoordinates(dm);
>      >
>      >     This worked fine up to PETSc 3.18, but with versions after this, the
>      >     coordinates we get from the call
>      >
>      >     DMPlexGetCellCoordinates(dm, CellID, &isDG, &CoordSize,
>      >     &ArrayCoordinates, &Coordinates);
>      >
>      >     are no longer correct if the mesh is periodic. A number of the
>      >     coordinates returned from calling DMPlexGetCellCoordinates are wrong.
>      >
>      >     I think, this is because DMLocalizeCoordinates is now automatically
>      >     called within the routine DMPlexCreateBoxMesh.
>      >
>      >     So, my question is: How should we scale the coordinates from a periodic
>      >     DMPlex mesh so that they are reflected correctly when calling both
>      >     DMGetCoordinatesLocal and DMPlexGetCellCoordinates, with PETSc versions
>      >       >= 3.18?
>      >
>      >
>      > I think we might have to add an API function. For now, when you scale
>      > the coordinates,
>      > can you scale both copies?
>      >
>      >    DMGetCoordinatesLocal()
>      >    DMGetCellCoordinatesLocal();
>      >
>      > and then set them back.
>      >
>      >    Thanks,
>      >
>      >       Matt
>      >
>      >     Many thanks, Berend.
>      >
>      > --
>      > 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/ <https://www.cse.buffalo.edu/~knepley/> <http://www.cse.buffalo.edu/~knepley/
>     <http://www.cse.buffalo.edu/~knepley/>>
> 
> 
> 
> -- 
> 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