<div dir="ltr">I am trying to create a VecScatter that will scatter all the values from a horizontal slice of a 3D DMDA global vector (with dof=3) to a sequential vector on every processor. So far I have been unsuccessful, most likely because I don't completely understand how to get the appropriate IS to do this. I believe that you need to create a sequential IS on every processor that has the PETSc global number for the appropriate values I want to scatter. What I most recently tried was the following code which takes the values at level k:<div>






<br></div><div><div>  DM          :: da3</div><div>  Vec         :: daSlice, daVec</div><div>  PetscInt    :: i, j, k, ierr, nis, istart, istep</div><div>  IS          :: from, to</div><div>  AO          :: ntog</div><div>






  VecScatter  :: vscat</div><div>  PetscInt, allocatable :: indices(:)</div><div><br></div><div>  ! Get the AO context for this DM</div><div>  call DMDAGetAO(da3,ntog,ierr)</div><div><br></div><div>  ! Create indices for scatter from global vector</div>






<div>  allocate (indices(3*nx*ny))</div><div>  istart=(k-1)*nx*ny*3</div><div>  nis=nx*ny*3</div><div>  do i=1,nis</div><div>    indices(i)=istart+i-1</div><div>  end do</div><div><br></div><div>  ! Convert the indices from natural ordering to PETSc ordering</div>






<div>  call AOApplicationToPetsc(ntog,nis,indices,ierr)</div><div><br></div><div>  call ISCreateGeneral(PETSC_COMM_SELF,nis,indices,PETSC_COPY_VALUES,from,ierr)</div><div><br></div><div>  ! Get the index set that specifies elements to scatter to sequential vector</div>


<div>  istep=1</div><div>  istart=0</div><div>  nis=3*nx*ny</div>



<div>  call ISCreateStride(PETSC_COMM_SELF,nis,istart,istep,to,ierr)</div><div><br></div><div>  ! Create the Vector Scatter to get the values to every processor</div><div>  call VecScatterCreate(daVec,from,daSlice,to,vscat,ierr)</div>






<div><br></div><div>  ! Release memory</div><div>  deallocate (indices)</div><div>  call AODestroy(ntog,ierr)</div><div>  call ISDestroy(from,ierr)</div><div>  call ISDestroy(to,ierr)</div></div><div><br></div><div><br></div>




<div>This code is throwing errors as follows</div><div><br></div><div><div>[2]PETSC ERROR: --------------------- Error Message ------------------------------------</div><div>[2]PETSC ERROR: Invalid argument!</div><div>[2]PETSC ERROR: Wrong type of object: Parameter # 1!</div>

<div>[2]PETSC ERROR: ------------------------------------------------------------------------</div><div>[2]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 </div><div>[2]PETSC ERROR: See docs/changes/index.html for recent updates.</div>

<div>[2]PETSC ERROR: See docs/faq.html for hints about trouble shooting.</div><div>[2]PETSC ERROR: See docs/index.html for manual pages.</div><div>[2]PETSC ERROR: ------------------------------------------------------------------------</div>
<div>[2]PETSC ERROR: Libraries linked from /home/rmackie/PETSc/petsc-3.4.2/linux-gfortran-debug/lib</div>
<div>[2]PETSC ERROR: Configure run at Thu Sep 19 15:08:47 2013</div><div>[2]PETSC ERROR: Configure options --with-scalar-type=complex --with-debugging=1 --with-fortran=1 --download-mpich=1</div><div>[2]PETSC ERROR: ------------------------------------------------------------------------</div>

<div>[2]PETSC ERROR: AOApplicationToPetsc() line 261 in /home/rmackie/PETSc/petsc-3.4.2/src/vec/is/ao/interface/ao.c</div><div>[0]PETSC ERROR: --------------------- Error Message ------------------------------------</div>

<div>[0]PETSC ERROR: Invalid argument!</div><div>[0]PETSC ERROR: Wrong type of object: Parameter # 1!</div><div>[0]PETSC ERROR: ------------------------------------------------------------------------</div><div>[1]PETSC ERROR: --------------------- Error Message ------------------------------------</div>

<div>[1]PETSC ERROR: Invalid argument!</div><div>[1]PETSC ERROR: Wrong type of object: Parameter # 1!</div><div>[1]PETSC ERROR: ------------------------------------------------------------------------</div><div>[1]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 </div>

<div>[1]PETSC ERROR: See docs/changes/index.html for recent updates.</div><div>[1]PETSC ERROR: See docs/faq.html for hints about trouble shooting.</div><div>[1]PETSC ERROR: See docs/index.html for manual pages.</div><div>

[1]PETSC ERROR: ------------------------------------------------------------------------</div>
<div>[1]PETSC ERROR: Libraries linked from /home/rmackie/PETSc/petsc-3.4.2/linux-gfortran-debug/lib</div><div>[1]PETSC ERROR: Configure run at Thu Sep 19 15:08:47 2013</div><div>[1]PETSC ERROR: Configure options --with-scalar-type=complex --with-debugging=1 --with-fortran=1 --download-mpich=1</div>

<div>[1]PETSC ERROR: ------------------------------------------------------------------------</div><div>[1]PETSC ERROR: AOApplicationToPetsc() line 261 in /home/rmackie/PETSc/petsc-3.4.2/src/vec/is/ao/interface/ao.c</div>

<div>[0]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 </div><div>[0]PETSC ERROR: See docs/changes/index.html for recent updates.</div><div>[0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.</div>

<div>[0]PETSC ERROR: See docs/index.html for manual pages.</div><div>[0]PETSC ERROR: -----------------------------------</div></div><div><br></div><div>etc.</div><div><br></div><div><br></div><div>First, I don't see where my error is that is causing these problems, but second, is there a better way to create this vector scatter without having to use an AO? I suspect there is,  but so far I have been unable to figure out how to create the correct IS.</div>


<div><br></div><div>Thanks very much,</div><div><br></div><div>Randy</div><div><br>
</div></div>