[petsc-users] locate DMSwarm particles with respect to a background DMDA mesh
Matteo Semplice
matteo.semplice at uninsubria.it
Thu Dec 22 05:28:27 CST 2022
Dear all
please ignore my previous email and read this one: I have better
localized the problem. Maybe DMSwarmMigrate is designed to migrate
particles only to first neighbouring ranks?
Il 22/12/22 11:44, Matteo Semplice ha scritto:
>
> Dear everybody,
>
> I have bug a bit into the code and I am able to add more information.
>
> Il 02/12/22 12:48, Matteo Semplice ha scritto:
>> Hi.
>> I am sorry to take this up again, but further tests show that it's
>> not right yet.
>>
>> Il 04/11/22 12:48, Matthew Knepley ha scritto:
>>> On Fri, Nov 4, 2022 at 7:46 AM Matteo Semplice
>>> <matteo.semplice at uninsubria.it> wrote:
>>>
>>> On 04/11/2022 02:43, Matthew Knepley wrote:
>>>> On Thu, Nov 3, 2022 at 8:36 PM Matthew Knepley
>>>> <knepley at gmail.com> wrote:
>>>>
>>>> On Thu, Oct 27, 2022 at 11:57 AM Semplice Matteo
>>>> <matteo.semplice at uninsubria.it> wrote:
>>>>
>>>> Dear Petsc developers,
>>>> I am trying to use a DMSwarm to locate a cloud of
>>>> points with respect to a background mesh. In the real
>>>> application the points will be loaded from disk, but I
>>>> have created a small demo in which
>>>>
>>>> * each processor creates Npart particles, all within
>>>> the domain covered by the mesh, but not all in the
>>>> local portion of the mesh
>>>> * migrate the particles
>>>>
>>>> After migration most particles are not any more in the
>>>> DMSwarm (how many and which ones seems to depend on the
>>>> number of cpus, but it never happens that all particle
>>>> survive the migration process).
>>>>
>>>> Thanks for sending this. I found the problem. Someone has
>>>> some overly fancy code inside DMDA to figure out the local
>>>> bounding box from the coordinates.
>>>> It is broken for DM_BOUNDARY_GHOSTED, but we never tested
>>>> with this. I will fix it.
>>>>
>>>>
>>>> Okay, I think this fix is correct
>>>>
>>>> https://gitlab.com/petsc/petsc/-/merge_requests/5802
>>>> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fpetsc%2Fpetsc%2F-%2Fmerge_requests%2F5802&data=05%7C01%7Cmatteo.semplice%40uninsubria.it%7Cf4d64b09df1f438437ad08dad45b342b%7C9252ed8bdffc401c86ca6237da9991fa%7C0%7C0%7C638055785720875500%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000%7C%7C%7C&sdata=ISLaLhhnYU4njkYfod%2F3tEiIOIV5uZvmiAlKZ2PvhmE%3D&reserved=0>
>>>>
>>>> I incorporated your test as src/dm/impls/da/tests/ex1.c. Can
>>>> you take a look and see if this fixes your issue?
>>>
>>> Yes, we have tested 2d and 3d, with various combinations of
>>> DM_BOUNDARY_* along different directions and it works like a charm.
>>>
>>> On a side note, neither DMSwarmViewXDMF nor DMSwarmMigrate seem
>>> to be implemented for 1d: I get
>>>
>>> [0]PETSC ERROR: No support for this operation for this object
>>> type[0]PETSC ERROR: Support not provided for 1D
>>>
>>> However, currently I have no need for this feature.
>>>
>>> Finally, if the test is meant to stay in the source, you may
>>> remove the call to DMSwarmRegisterPetscDatatypeField as in the
>>> attached patch.
>>>
>>> Thanks a lot!!
>>>
>>> Thanks! Glad it works.
>>>
>>> Matt
>>>
>> There are still problems when not using 1,2 or 4 cpus. Any other
>> number of cpus that I've tested does not work corectly.
>>
> I have now modified private_DMDALocatePointsIS_2D_Regular to print out
> some debugging information. I see that this is called twice during
> migration, once before and once after
> DMSwarmMigrate_DMNeighborScatter. If I understand correctly, the
> second call to private_DMDALocatePointsIS_2D_Regular should be able to
> locate all particles owned by the rank but it fails for some of them
> because they have been sent to the wrong rank (despite being well away
> from process boundaries).
>
> For example, running the example src/dm/impls/da/tests/ex1.c with
> Nx=21 (20x20 Q1 elements on [-1,1]X[-1,1]) with 3 processors,
>
> - the particles (-0.191,-0.462) and (0.191,-0.462) are sent cpu2
> instead of cpu0
>
> - those at (-0.287,-0.693)and (0.287,-0.693) are sent to cpu1 instead
> of cpu0
>
> - those at (0.191,0.462) and (-0.191,0.462) are sent to cpu0 instead
> of cpu2
>
> (This is 2d and thus not affected by the 3d issue mentioned yesterday
> on petsc-dev. Tests were made based on the release branch pulled out
> this morning, i.e. on commit bebdc8d016f).
>
I see: particles are sent "all around" and not only to the destination rank.
Still however, running the example src/dm/impls/da/tests/ex1.c with
Nx=21 (20x20 Q1 elements on [-1,1]X[-1,1]) with 3 processors, there are
2 particles initially owned by rank2 (at y=-0.6929 and x=+/-0.2870) that
are sent only to rank1 and never make it to rank0 and are thus lost in
the end since rank1, correctly, discards them.
Thanks
Matteo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20221222/021bc586/attachment.html>
More information about the petsc-users
mailing list