Actual source code: ex38.c


  2: static char help[] = "Tests DMGlobalToLocal() for 3d DA with stencil width of 2.\n\n";

  4: #include <petscdm.h>
  5: #include <petscdmda.h>

  7: int main(int argc,char **argv)
  8: {
  9:   PetscInt         N             = 3,M=2,P=4,dof=1,rstart,rend,i;
 10:   PetscInt         stencil_width = 2;
 11:   PetscMPIInt      rank;
 12:   DMBoundaryType   bx           = DM_BOUNDARY_NONE,by = DM_BOUNDARY_NONE,bz = DM_BOUNDARY_NONE;
 13:   DMDAStencilType  stencil_type = DMDA_STENCIL_STAR;
 14:   DM               da;
 15:   Vec              global,local;

 17:   PetscInitialize(&argc,&argv,(char*)0,help);
 18:   MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
 19:   PetscOptionsGetInt(NULL,NULL,"-M",&M,NULL);
 20:   PetscOptionsGetInt(NULL,NULL,"-N",&N,NULL);
 21:   PetscOptionsGetInt(NULL,NULL,"-P",&P,NULL);
 22:   PetscOptionsGetInt(NULL,NULL,"-dof",&dof,NULL);
 23:   PetscOptionsGetInt(NULL,NULL,"-stencil_width",&stencil_width,NULL);
 24:   PetscOptionsGetInt(NULL,NULL,"-stencil_type",(PetscInt*)&stencil_type,NULL);

 26:   DMDACreate3d(PETSC_COMM_WORLD,bx,by,bz,stencil_type,M,N,P,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,stencil_width,0,0,0,&da);
 27:   DMSetFromOptions(da);
 28:   DMSetUp(da);
 29:   DMCreateGlobalVector(da,&global);
 30:   VecGetOwnershipRange(global,&rstart,&rend);
 31:   for (i=rstart; i<rend; i++) VecSetValue(global,i,(PetscReal)(i + 100*rank),INSERT_VALUES);
 32:   VecAssemblyBegin(global);
 33:   VecAssemblyEnd(global);
 34:   DMCreateLocalVector(da,&local);
 35:   VecSet(local,-1);
 36:   DMGlobalToLocalBegin(da,global,INSERT_VALUES,local);
 37:   DMGlobalToLocalEnd(da,global,INSERT_VALUES,local);
 38:   if (rank == 0) VecView(local,0);
 39:   DMDestroy(&da);
 40:   VecDestroy(&local);
 41:   VecDestroy(&global);
 42:   PetscFinalize();
 43:   return 0;
 44: }