On Wed, May 17, 2023 at 11:20 AM Berend van Wachem <berend.vanwac...@ovgu.de> wrote:
> 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. > I am likely not being clear. I think all you have to do is the following: DMGetCoordinatesLocal(dm, &xl); VecScale(xl, scale); DMSetCoordinatesLocal(dm, xl); DMGetCellCoordinatesLocal(dm, &xl); VecScale(xl, scale); DMSetCellCoordinatesLocal(dm, xl); Does this not work? Thanks, Matt 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.vanwac...@ovgu.de <mailto:berend.vanwac...@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.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de> > <mailto:berend.vanwac...@ovgu.de > > <mailto:berend.vanwac...@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/> > -- 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/>