[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