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