Hi PETSc users! I'm trying to access a DMDA Vec's values after doing a scatter to all processors. I've run into some trouble, however, because the call to DMDAVecGetArray doesn't seem to care that I'm using a sequential vector. The calling sequence that "works" (runs without error *until* I try to use the values) is:
// da is the 2-dimensional DMDA // x is a global, input vector // xs is the sequential vector // values is an array of structs suitable for this DMDA DMGetLocalVector(da, &xloc); DMGlobalToLocalBegin(da, x, INSERT_VALUES, xloc); DMGlobalToLocalEnd(da, x, INSERT_VALUES, xloc); VecScatterCreateToAll(xloc, &scatter, &xs); VecScatterBegin(scatter, xloc, xs, INSERT_VALUES, SCATTER_FORWARD); VecScatterEnd(scatter, xloc, xs, INSERT_VALUES, SCATTER_FORWARD); DMDAVecGetArrayRead(da, xs, &values); >From a skim of the PETSc source code, it looks like the start parameters that get handed off to VecGetArray2d only depend on the DMDA and do not take into account that the vector might already be sequential. (I might be wrong about this, but that's what it looks like at first glance.) Is there a way around this that is more elegant than just modifying the output pointer? Feel free to point me to an applicable message board post if there is one, but Google hasn't brought up anything useful yet. Thanks, Ellen Price
