Scattering DA Vectors
Barry Smith
bsmith at mcs.anl.gov
Wed Jan 24 07:46:54 CST 2007
On Wed, 24 Jan 2007, Victor Sofonea wrote:
>
> Hi,
>
> I'm using two-dimensional DAs in my code to create global and local
> vectors
>
> DA da;
> Vec nloc, lnloc, zero_nloc;
> PetscInt imax = 102, jmax=3;
>
> DACreate2d(PETSC_COMM_WORLD, DA_YPERIODIC, DA_STENCIL_BOX,
> imax,jmax,PETSC_DECIDE,PETSC_DECIDE,
> 1,1,PETSC_NULL,PETSC_NULL,&da);
>
> ierr = DACreateLocalVector(da,&lnloc); CHKERRQ(ierr);
>
> ierr = DACreateGlobalVector(da,&nloc); CHKERRQ(ierr);
>
>
> and at some moment I need copy all values of the global vector nloc
> on the zeroth processor. For this purpose, I tried to create a scatter
> context and use VecScatterBegin...End:
>
Before creating the VecScatter to zero you need to do DACreateNaturalVector() and
DAGlobalToNaturalBegin/End() then do the scatter below.
> ierr = VecScatterCreateToZero(nloc,&zero_ctx,&zero_nloc);CHKERRQ(ierr);
>
> ierr = VecScatterBegin(nloc,zero_nloc,INSERT_VALUES,SCATTER_FORWARD,zero_ctx);
> CHKERRQ(ierr);
> ierr = VecScatterEnd(nloc,zero_nloc,INSERT_VALUES,SCATTER_FORWARD,zero_ctx);
> CHKERRQ(ierr);
>
> This scatter procedure does not work for global vectors created using
> DACreateGlobalVector(...) since (on processor 0, when using 2
> processors, but I plan to use more processors in the future):
>
> PetscReal **aznloc
>
> ierr = DAVecGetArray(da,zero_nloc,&aznloc); CHKERRQ(ierr);
>
Use VecGetArray2d() which allows you to "shape" the vector as you need.
Good luck,
Barry
> gives the error
>
> +++++++++++++ BEGIN ERROR MESSAGE
>
> [0]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [0]PETSC ERROR: Arguments are incompatible!
> [0]PETSC ERROR: Vector local size 306 is not compatible with DA local
> sizes 153 260
> !
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: Petsc Release Version 2.3.2, Patch 7, Fri Dec 1 11:22:44
> CST 2006 HG revision: 4fc87ad4c9d9855d212e1fa6135ed04b299cdc92
> [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:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: ./dachannel on a freebsd named
> smoluchowski.acad-tim.tm.edu.ro by sofonea Wed Jan 24 08:08:34 2007
> [0]PETSC ERROR: Libraries linked from
> /usr/local/petsc-2.3.2-p7-mpi//lib/freebsd
> [0]PETSC ERROR: Configure run at Tue Jan 2 18:08:24 2007
> [0]PETSC ERROR: Configure options --with-deb[1]PETSC ERROR:
> --------------------- Error Message ------------------------------------
> [1]PETSC ERROR: Arguments are incompatible!
> [1]PETSC ERROR: Vector local size 0 is not compatible with DA local sizes
> 153 260
> !
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: Petsc Release Version 2.3.2, Patch 7, Fri Dec 1 11:22:44
> CST 2006 HG revision: 4fc87ad4c9d9855d212e1fa6135ed04b299cdc92
> [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: ./dachannel on a freebsd named
> smoluchowski.acad-tim.tm.edu.ro by sofonea Wed Jan 24 08:08:34 2007
> [1]PETSC ERROR: Libraries linked from
> /usr/local/petsc-2.3.2-p7-mpi//lib/freebsd
> [1]PETSC ERROR: Configure run at Tue Jan 2 18:08:24 2007
> [1]PETSC ERROR: Configure options --with-debugging=0ugging=0
> --download-f-blas-lapack=ifneeded --download-mpich=ifneeded
> --with-shared=0
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: DAVecGetArray() line 50 in src/dm/da/src/dagetarray.c
> [0]PETSC ERROR: User provided function() line 343 in dainout.c
> [0]PETSC ERROR: User provided function() line 1130 in damain.c
> --download-f-blas-lapack=ifneeded --download-mpich=ifneeded
> --with-shared=0
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: DAVecGetArray() line 50 in src/dm/da/src/dagetarray.c
> [1]PETSC ERROR: User provided function() line 343 in dainout.c
> [1]PETSC ERROR: User provided function() line 1130 in damain.c
>
> ++++++++++++ END ERROR MESSAGE
>
> I tried also
>
> PetscReal *aznloc
>
> ierr = VecGetArray(zero_nloc,&aznloc); CHKERRQ(ierr);
>
> Although this works, I need the natural ordering for further processing
> the elements of aznloc, as follows:
>
> PetscReal nn[imax];
>
> for(i=0; i<imax; i++)
> {
> nn[i] = 0.00
> for(i=0; j<imax; i++)
> {
> nn[i] += aznloc[j][i];
> }
> }
>
>
> In other words, I need aznloc to be a two-dimensional array to preserve
> the same idex ranges 0...imax and 0...jmax used for the global vector
> nloc).
>
> Do you have a solution ?
>
> Thank you,
>
> Victor Sofonea
>
>
More information about the petsc-users
mailing list