On Mon, May 22, 2023 at 4:41 AM Berend van Wachem <berend.vanwac...@ovgu.de> wrote:
> Dear Matt, > > I'm really sorry for this stupid bug! > No problem. You have really helped me get the bugs out of Plex. Thanks, Matt > I can confirm that setting the coordinates with both > CellCoordinatesLocal and CoordinatesLocal works. > > Best regards, Berend. > > Many thanks and best regards, Berend. > > On 5/17/23 23:04, Matthew Knepley wrote: > > On Wed, May 17, 2023 at 2:01 PM Berend van Wachem > > <berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>> wrote: > > > > Dear Matt, > > > > I tried it, but it doesn't seem to work. > > Attached is a very small working example illustrating the problem. > > I create a DMPlexBox Mesh, periodic in the Y direction. I then scale > > the Y coordinates with a factor 10, and add 1.0 to it. Both > > DMGetCoordinatesLocal and DMGetCellCoordinatesLocal. > > Then I evaluate the coordinates with DMPlexGetCellCoordinates. Most > > of the Y coordinates are correct, but not all of them - for > > instance, the minimum Y coordinate is 0.0, and this should be 1.0. > > > > Am I doing something wrong? > > > > > > Quickly, I see that > > > > a *= 10.0 + 1.0; > > > > is the same as > > > > a *= 11.0; > > > > not multiply by 10 and add 1. I will send it back when I get everything > > the way I want. > > > > Thanks, > > > > Matt > > > > Thanks and best regards, > > > > Berend. > > > > On 5/17/23 17:58, Matthew Knepley wrote: > > > On Wed, May 17, 2023 at 11:20 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 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> > > <mailto:berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>> > > > <mailto:berend.vanwac...@ovgu.de > > <mailto:berend.vanwac...@ovgu.de> <mailto: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>> <mailto:berend.vanwac...@ovgu.de > > <mailto:berend.vanwac...@ovgu.de> > > > <mailto:berend.vanwac...@ovgu.de > > <mailto:berend.vanwac...@ovgu.de>>> <mailto:berend.vanwac...@ovgu.de > > <mailto:berend.vanwac...@ovgu.de> <mailto:berend.vanwac...@ovgu.de > > <mailto:berend.vanwac...@ovgu.de>> > > > > <mailto: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/> > > <https://www.cse.buffalo.edu/~knepley/ > > <https://www.cse.buffalo.edu/~knepley/>> > > > <https://www.cse.buffalo.edu/~knepley/ > > <https://www.cse.buffalo.edu/~knepley/> > > <https://www.cse.buffalo.edu/~knepley/ > > <https://www.cse.buffalo.edu/~knepley/>>> > > <http://www.cse.buffalo.edu/~knepley/ > > <http://www.cse.buffalo.edu/~knepley/> > > > <http://www.cse.buffalo.edu/~knepley/ > > <http://www.cse.buffalo.edu/~knepley/>> > > > > <http://www.cse.buffalo.edu/~knepley/ > > <http://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/ > > <https://www.cse.buffalo.edu/~knepley/> > > <https://www.cse.buffalo.edu/~knepley/ > > <https://www.cse.buffalo.edu/~knepley/>> > > <http://www.cse.buffalo.edu/~knepley/ > > <http://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/ > > <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/>