Hello,
I would like to move data between two Vecs managed by DMDAs. The DMDAs
involved may use the same MPI Communicator or possibly different
(possibly disjoint) MPI communicators. Crucially, Vecs may have
different parallel decompositions but the same global size, so
interpolation is not needed.
In other words, I would like to set up data exchange to couple
components of our model (PISM). All components use DMDA but may use
different communicators, domain decomposition, etc, but the same global
grid dimensions.
Would it be reasonable to use PETSc's tools for this? And if it is, do
you have any advice for me? I think I can accomplish this using
DMDACreatePatchIS and VecScatter, or maybe using PetscSF.
Let's do it in stges. Suppose the DMDAs use the same communicator. Then you could just
setup a VecScatter to move the unknowns from the source global numbering to the target
global numbering.
However, it might be complicated to come up with that VecScatter. Since the DMDAs are the
same size you could get the VecScatter that does GlobalToNatural from the source and target,
and apply the first FORWARD and the second BACKWARD.
You might want to optimize that. You could extract the PetscSF (VecScatter is implemented by
Lastly, you might have different communicators. Then you would have to a) have a common
supercomm, perhaps PETSC_COMM_WORLD, and b) pull the two vectors into the common
comm, c) rewrite the PetscSF with the new rank values. This is all doable, but involves some
programming. We have never had anyone ask for this.
Thanks,
Matt
Thank you!
--
Constantine