Hello, 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:
// Create a DMDA staggered and without ghost cells (for DMSwarm to work) 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); DMSetFromOptions(*da_swarm); DMSetUp(*da_swarm); PetscScalar xmin, xmax, ymin, ymax, zmin, zmax; xmin = ymin = zmin = 0.; xmax = ymax = zmax = 1.; DMDASetUniformCoordinates(*da_swarm,xmin, xmax, ymin, ymax, zmin, zmax); //SetNonUniform3DCoordinates(*da_swarm, cornp, gridp, rank); /* Create a DMShell for point location purposes */ DMShellCreate(PETSC_COMM_WORLD,dmcell); DMSetApplicationContext(*dmcell,*da_swarm); (*dmcell)->ops->locatepoints = DMLocatePoints_DMDARegular; (*dmcell)->ops->getneighbors = DMGetNeighbors_DMDARegular; // Create a Swarm DMDA DMCreate(PETSC_COMM_WORLD,swarm); DMSetType(*swarm,DMSWARM); DMSetDimension(*swarm,3); DMSwarmSetType(*swarm,DMSWARM_PIC); DMSwarmSetCellDM(*swarm,*dmcell); I am now trying to work with periodic boundary conditions. I tried replacing 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? Thanks a lot for your answer. Best regards, Joauma
