[petsc-users] locate DMSwarm particles with respect to a background DMDA mesh
Matteo Semplice
matteo.semplice at uninsubria.it
Thu Jan 12 11:14:57 CST 2023
Il 23/12/22 17:14, Matthew Knepley ha scritto:
> On Thu, Dec 22, 2022 at 3:08 PM Matteo Semplice
> <matteo.semplice at uninsubria.it> wrote:
>
>
> Il 22/12/22 20:06, Dave May ha scritto:
>>
>>
>> On Thu 22. Dec 2022 at 10:27, Matteo Semplice
>> <matteo.semplice at uninsubria.it> wrote:
>>
>> Dear Dave and Matt,
>>
>> I am really dealing with two different use cases in a
>> code that will compute a levelset function passing through a
>> large set of points. If I had DMSwarmSetMigrateType() and if
>> it were safe to switch the migration mode back and forth in
>> the same swarm, this would cover all my use cases here. Is it
>> safe to add it back to petsc? Details below if you are curious.
>>
>> 1) During preprocessing I am loading a point cloud from disk
>> (in whatever order it comes) and need to send the particles
>> to the right ranks. Since the background DM is a DMDA I can
>> easily figure out the destination rank. This would be covered
>> by your suggestion not to attach the DM, except that later I
>> need to locate these points with respect to the background
>> cells in order to initialize data on the Vecs associated to
>> the DMDA.
>>
>> 2) Then I need to implement a semilagrangian time evolution
>> scheme. For this I'd like to send particles around at the
>> "foot of characteristic", collect data there and then send
>> them back to the originating point. The first migration would
>> be based on particle coordinates
>> (DMSwarmMigrate_DMNeighborScatter and the restriction to only
>> neighbouring ranks is perfect), while for the second move it
>> would be easier to just send them back to the originating
>> rank, which I can easily store in an Int field in the swarm.
>> Thus at each timestep I'd need to swap migrate types in this
>> swarm (DMScatter for moving them to the feet and BASIC to
>> send them back).
>>
>>
>> When you use BASIC, you would have to explicitly call the point
>> location routine from your code as BASIC does not interact with
>> the DM.
>>
>> Based on what I see in the code, switching migrate modes between
>> basic and dmneighbourscatter should be safe.
>>
>> If you are fine calling the point location from your side then
>> what you propose should work.
>
> If I understood the code correctly, BASIC will just migrate
> particles sending them to what is stored in DMSwarmField_rank,
> right? That'd be easy since I can create a SWARM with all the data
> I need and an extra int field (say "original_rank") and copy those
> values into DMSwarmField_rank before calling migrate for the
> "going back" step. After this backward migration I do not need to
> locate particles again (e.g. I do not need DMSwarmSortGetAccess
> after the BASIC migration, but only after the DMNeighborScatter one).
>
> Thus having back DMSwarmSetMigrateType() should be enough for me.
>
> Hi Matteo,
>
> I have done this in
>
> https://gitlab.com/petsc/petsc/-/merge_requests/5941
> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fpetsc%2Fpetsc%2F-%2Fmerge_requests%2F5941&data=05%7C01%7Cmatteo.semplice%40uninsubria.it%7C8b12eb28eaa74ac776aa08dae500d712%7C9252ed8bdffc401c86ca6237da9991fa%7C0%7C0%7C638074089022508394%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=T2Sp019DMQi%2BarRKTdwRVY7%2F%2FaGVbwCJjBpzOta1yoM%3D&reserved=0>
>
> I also hope to get the fix for your DMDA issue in there.
Hi.
I have finally got round to testing the updates and, using the main
branch, my issues are fixed.
Only, I have noticed that, after a DMSwarmMigrate_DMNeighborScatter, the
field DMSwarmField_rank has the same content as the field
DMSwarmPICField_cellid. It does not affect me, but it seems a little
strange and might surprise users... In the long term, a word in the docs
about the names/content of the fields that are automatically created in
a swarm would be helpful.
Thanks!
Matteo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230112/9ae4d6d5/attachment.html>
More information about the petsc-users
mailing list