Jason,
I guess you can let PETSc partition the first DMDA, then access the
partitioning data using DMDAGetOwnershipRanges, and pass this to
subsequent calls to DMDACreat3D via lx, ly, lz parameters.
Thanks,
Anton
On 11/29/16 12:30 AM, Jason Lefley wrote:
I’m developing an application and used PETSc’s DMDA functionality to perform
distributed computation on a cartesian grid. I encountered a situation where I
need two distributed arrays with equivalent partitioning but each having a
different stencil width.
Right now I accomplish this through multiple calls to DMDACreate3d(), however I
found that for some combinations of global array dimensions and number of
processors, the multiple calls to DMDACreate3d() result in partition sizes that
differ by a single cell when comparing the partitioning of the two distributed
arrays. The application cannot run if this happens because a particular process
needs access to the same grid locations in both of the distributed arrays.
Is it possible to use PETSc’s cartesian grid partitioning functionality to
perform a single partitioning of the domain and then set up the two distributed
arrays using that partitioning in combination with different stencil widths? I
looked at the source code that performs the partitioning but did not see an
obvious way to use it in the capacity I describe. I think I could use lower
level calls in PETSc and some other partitioning algorithm if necessary but I
want to make sure that there is no way to do this using the built-in
partitioning functionality.
Thanks