<div dir="ltr">First, you don't want a DMShell. Just use da_swarm.<br><div>See src/dm/tutorials/ex20.c</div><div><br></div><div>You can run this test with </div><div>> cd src/dm/tutorials</div><div>> make ex20</div><div>> ./ex20   </div><div>or</div><div>> ./ex20 -mode 1</div><div>See the end of ex20.c for these (lack of) arguments</div><div><br></div><div>Now change that code to one periodic direction and test.</div><div><br></div><div>This could be a bug. This code is not well tested.</div><div><br></div><div>Thanks,</div><div>Mark</div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 12, 2023 at 4:02 AM Joauma Marichal <<a href="mailto:joauma.marichal@uclouvain.be" target="_blank">joauma.marichal@uclouvain.be</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>





<div lang="FR-BE">
<div>
<p class="MsoNormal"><span lang="EN-US">Hello, <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I am using petsc DMSwarm library for some Lagrangian particle tracking. Until now, I was working in a closed box and was therefore initializing my swarm object as:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p><span><span lang="EN-US">// Create a DMDA staggered and without ghost cells (for DMSwarm to work)</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMDACreate3d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,M,N,P,m,n,p,1,1,lx,ly,lz,da_swarm);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US"><u></u> <u></u></span></span></p>
<p><span><span lang="EN-US">DMSetFromOptions(*da_swarm);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMSetUp(*da_swarm);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">PetscScalar xmin, xmax, ymin, ymax, zmin, zmax;</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">xmin = ymin = zmin = 0.;</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">xmax = ymax = zmax = 1.;</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMDASetUniformCoordinates(*da_swarm,xmin, xmax, ymin, ymax, zmin, zmax);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">//SetNonUniform3DCoordinates(*da_swarm, cornp, gridp, rank);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span lang="EN-US"><u></u> <u></u></span></p>
<p><span><span lang="EN-US">/* Create a DMShell for point location purposes */</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMShellCreate(PETSC_COMM_WORLD,dmcell);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMSetApplicationContext(*dmcell,*da_swarm);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">(*dmcell)->ops->locatepoints = DMLocatePoints_DMDARegular;</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US"></span></span><span><span lang="EN-US">(*dmcell)->ops->getneighbors = DMGetNeighbors_DMDARegular;</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span lang="EN-US"><u></u> <u></u></span></p>
<p><span><span lang="EN-US">// Create a Swarm DMDA</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMCreate(PETSC_COMM_WORLD,swarm);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMSetType(*swarm,DMSWARM);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMSetDimension(*swarm,3);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMSwarmSetType(*swarm,DMSWARM_PIC);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p><span><span lang="EN-US">DMSwarmSetCellDM(*swarm,*dmcell);</span></span><span lang="EN-US"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I am now trying to work with periodic boundary conditions. I tried replacing
<span>DM_BOUNDARY_NONE by DM_BOUNDARY_PERIODIC but it does not work… I checked for examples using periodic B.C. but have not found any. Is it possible? And if yes, how can I make it work?
<u></u><u></u></span></span></p>
<p class="MsoNormal"><span><span lang="EN-US"><u></u> <u></u></span></span></p>
<p class="MsoNormal"><span><span lang="EN-US">Thanks a lot for your answer.
<u></u><u></u></span></span></p>
<p class="MsoNormal"><span><span lang="EN-US">Best regards, <u></u><u></u></span></span></p>
<p class="MsoNormal"><span><span lang="EN-US"><u></u> <u></u></span></span></p>
<p class="MsoNormal"><span><span lang="EN-US">Joauma</span></span><span lang="EN-US"><u></u><u></u></span></p>
</div>
</div>

</div></blockquote></div>