Dear Matt,

I'm really sorry for this stupid bug!

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/>

Reply via email to