[petsc-users] VecScatter from slice of global vector to sequential vector + AO errors
Barry Smith
bsmith at mcs.anl.gov
Thu Oct 3 14:31:04 CDT 2013
Randy,
Take a look at DMDAGetRay() in src/dm/impls/da/dasub.c (now called DMDACreateRay()) this takes a row or column from a 2d DADM. You can use the same kind of approach to get a slice from a 3d DMDA.
Barry
On Oct 3, 2013, at 2:07 PM, Randall Mackie <rlmackie862 at gmail.com> wrote:
> 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:
>
> DM :: da3
> Vec :: daSlice, daVec
> PetscInt :: i, j, k, ierr, nis, istart, istep
> IS :: from, to
> AO :: ntog
> VecScatter :: vscat
> PetscInt, allocatable :: indices(:)
>
> ! Get the AO context for this DM
> call DMDAGetAO(da3,ntog,ierr)
>
> ! Create indices for scatter from global vector
> allocate (indices(3*nx*ny))
> istart=(k-1)*nx*ny*3
> nis=nx*ny*3
> do i=1,nis
> indices(i)=istart+i-1
> end do
>
> ! Convert the indices from natural ordering to PETSc ordering
> call AOApplicationToPetsc(ntog,nis,indices,ierr)
>
> call ISCreateGeneral(PETSC_COMM_SELF,nis,indices,PETSC_COPY_VALUES,from,ierr)
>
> ! Get the index set that specifies elements to scatter to sequential vector
> istep=1
> istart=0
> nis=3*nx*ny
> call ISCreateStride(PETSC_COMM_SELF,nis,istart,istep,to,ierr)
>
> ! Create the Vector Scatter to get the values to every processor
> call VecScatterCreate(daVec,from,daSlice,to,vscat,ierr)
>
> ! Release memory
> deallocate (indices)
> call AODestroy(ntog,ierr)
> call ISDestroy(from,ierr)
> call ISDestroy(to,ierr)
>
>
> This code is throwing errors as follows
>
> [2]PETSC ERROR: --------------------- Error Message ------------------------------------
> [2]PETSC ERROR: Invalid argument!
> [2]PETSC ERROR: Wrong type of object: Parameter # 1!
> [2]PETSC ERROR: ------------------------------------------------------------------------
> [2]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013
> [2]PETSC ERROR: See docs/changes/index.html for recent updates.
> [2]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [2]PETSC ERROR: See docs/index.html for manual pages.
> [2]PETSC ERROR: ------------------------------------------------------------------------
> [2]PETSC ERROR: Libraries linked from /home/rmackie/PETSc/petsc-3.4.2/linux-gfortran-debug/lib
> [2]PETSC ERROR: Configure run at Thu Sep 19 15:08:47 2013
> [2]PETSC ERROR: Configure options --with-scalar-type=complex --with-debugging=1 --with-fortran=1 --download-mpich=1
> [2]PETSC ERROR: ------------------------------------------------------------------------
> [2]PETSC ERROR: AOApplicationToPetsc() line 261 in /home/rmackie/PETSc/petsc-3.4.2/src/vec/is/ao/interface/ao.c
> [0]PETSC ERROR: --------------------- Error Message ------------------------------------
> [0]PETSC ERROR: Invalid argument!
> [0]PETSC ERROR: Wrong type of object: Parameter # 1!
> [0]PETSC ERROR: ------------------------------------------------------------------------
> [1]PETSC ERROR: --------------------- Error Message ------------------------------------
> [1]PETSC ERROR: Invalid argument!
> [1]PETSC ERROR: Wrong type of object: Parameter # 1!
> [1]PETSC ERROR: ------------------------------------------------------------------------
> [1]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013
> [1]PETSC ERROR: See docs/changes/index.html for recent updates.
> [1]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [1]PETSC ERROR: See docs/index.html for manual pages.
> [1]PETSC ERROR: ------------------------------------------------------------------------
> [1]PETSC ERROR: Libraries linked from /home/rmackie/PETSc/petsc-3.4.2/linux-gfortran-debug/lib
> [1]PETSC ERROR: Configure run at Thu Sep 19 15:08:47 2013
> [1]PETSC ERROR: Configure options --with-scalar-type=complex --with-debugging=1 --with-fortran=1 --download-mpich=1
> [1]PETSC ERROR: ------------------------------------------------------------------------
> [1]PETSC ERROR: AOApplicationToPetsc() line 261 in /home/rmackie/PETSc/petsc-3.4.2/src/vec/is/ao/interface/ao.c
> [0]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013
> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [0]PETSC ERROR: See docs/index.html for manual pages.
> [0]PETSC ERROR: -----------------------------------
>
> etc.
>
>
> 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.
>
> Thanks very much,
>
> Randy
>
More information about the petsc-users
mailing list