xref: /petsc/src/dm/tests/ex38.c (revision 6a98f8dc3f2c9149905a87dc2e9d0fedaf64e09a)
1 
2 static char help[] = "Tests DMGlobalToLocal() for 3d DA with stencil width of 2.\n\n";
3 
4 #include <petscdm.h>
5 #include <petscdmda.h>
6 
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   PetscErrorCode   ierr;
12   PetscMPIInt      rank;
13   DMBoundaryType   bx           = DM_BOUNDARY_NONE,by = DM_BOUNDARY_NONE,bz = DM_BOUNDARY_NONE;
14   DMDAStencilType  stencil_type = DMDA_STENCIL_STAR;
15   DM               da;
16   Vec              global,local;
17 
18 
19   ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
20   ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);
21   ierr = PetscOptionsGetInt(NULL,NULL,"-M",&M,NULL);CHKERRQ(ierr);
22   ierr = PetscOptionsGetInt(NULL,NULL,"-N",&N,NULL);CHKERRQ(ierr);
23   ierr = PetscOptionsGetInt(NULL,NULL,"-P",&P,NULL);CHKERRQ(ierr);
24   ierr = PetscOptionsGetInt(NULL,NULL,"-dof",&dof,NULL);CHKERRQ(ierr);
25   ierr = PetscOptionsGetInt(NULL,NULL,"-stencil_width",&stencil_width,NULL);CHKERRQ(ierr);
26   ierr = PetscOptionsGetInt(NULL,NULL,"-stencil_type",(PetscInt*)&stencil_type,NULL);CHKERRQ(ierr);
27 
28   ierr = 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);CHKERRQ(ierr);
29   ierr = DMSetFromOptions(da);CHKERRQ(ierr);
30   ierr = DMSetUp(da);CHKERRQ(ierr);
31   ierr = DMCreateGlobalVector(da,&global);CHKERRQ(ierr);
32   ierr = VecGetOwnershipRange(global,&rstart,&rend);CHKERRQ(ierr);
33   for (i=rstart; i<rend; i++) {ierr = VecSetValue(global,i,(PetscReal)(i + 100*rank),INSERT_VALUES);CHKERRQ(ierr);}
34   ierr = VecAssemblyBegin(global);CHKERRQ(ierr);
35   ierr = VecAssemblyEnd(global);CHKERRQ(ierr);
36   ierr = DMCreateLocalVector(da,&local);CHKERRQ(ierr);
37   ierr = VecSet(local,-1);CHKERRQ(ierr);
38   ierr = DMGlobalToLocalBegin(da,global,INSERT_VALUES,local);CHKERRQ(ierr);
39   ierr = DMGlobalToLocalEnd(da,global,INSERT_VALUES,local);CHKERRQ(ierr);
40   if (!rank) {ierr = VecView(local,0);CHKERRQ(ierr);}
41   ierr = DMDestroy(&da);CHKERRQ(ierr);
42   ierr = VecDestroy(&local);CHKERRQ(ierr);
43   ierr = VecDestroy(&global);CHKERRQ(ierr);
44   ierr = PetscFinalize();
45   return ierr;
46 }
47