Actual source code: ex2.c
2: static char help[] = "Tests various 1-dimensional DA routines.\n\n";
4: #include petscda.h
5: #include petscsys.h
9: int main(int argc,char **argv)
10: {
11: PetscMPIInt rank;
12: PetscInt M = 13,s=1,dof=1;
13: DAPeriodicType wrap = DA_XPERIODIC;
15: DA da;
16: PetscViewer viewer;
17: Vec local,global;
18: PetscScalar value;
19: PetscDraw draw;
20: PetscTruth flg;
22: PetscInitialize(&argc,&argv,(char*)0,help);
24: /* Create viewers */
25: PetscViewerDrawOpen(PETSC_COMM_WORLD,0,"",280,480,600,200,&viewer);
26: PetscViewerDrawGetDraw(viewer,0,&draw);
27: PetscDrawSetDoubleBuffer(draw);
29: /* Readoptions */
30: PetscOptionsGetInt(PETSC_NULL,"-M",&M,PETSC_NULL);
31: PetscOptionsGetEnum(PETSC_NULL,"-wrap",DAPeriodicTypes,(PetscEnum*)&wrap,PETSC_NULL);
32: PetscOptionsGetInt(PETSC_NULL,"-dof",&dof,PETSC_NULL);
33: PetscOptionsGetInt(PETSC_NULL,"-s",&s,PETSC_NULL);
35: /* Create distributed array and get vectors */
36: DACreate1d(PETSC_COMM_WORLD,wrap,M,dof,s,PETSC_NULL,&da);
37: DAView(da,viewer);
38: DACreateGlobalVector(da,&global);
39: DACreateLocalVector(da,&local);
41: /* Set global vector; send ghost points to local vectors */
42: value = 1;
43: VecSet(global,value);
44: DAGlobalToLocalBegin(da,global,INSERT_VALUES,local);
45: DAGlobalToLocalEnd(da,global,INSERT_VALUES,local);
47: /* Scale local vectors according to processor rank; pass to global vector */
48: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
49: value = rank+1;
50: VecScale(local,value);
51: DALocalToGlobal(da,local,INSERT_VALUES,global);
53: VecView(global,viewer);
54: PetscPrintf(PETSC_COMM_WORLD,"\nGlobal Vector:\n");
55: VecView(global,PETSC_VIEWER_STDOUT_WORLD);
56: PetscPrintf(PETSC_COMM_WORLD,"\n");
58: /* Send ghost points to local vectors */
59: DAGlobalToLocalBegin(da,global,INSERT_VALUES,local);
60: DAGlobalToLocalEnd(da,global,INSERT_VALUES,local);
62: PetscOptionsHasName(PETSC_NULL,"-local_print",&flg);
63: if (flg) {
64: PetscViewer sviewer;
65: ISLocalToGlobalMapping is;
67: PetscSynchronizedPrintf(PETSC_COMM_WORLD,"\nLocal Vector: processor %d\n",rank);
68: PetscViewerGetSingleton(PETSC_VIEWER_STDOUT_WORLD,&sviewer);
69: VecView(local,sviewer);
70: PetscViewerRestoreSingleton(PETSC_VIEWER_STDOUT_WORLD,&sviewer);
71: PetscSynchronizedFlush(PETSC_COMM_WORLD);
73: PetscSynchronizedPrintf(PETSC_COMM_WORLD,"\nLocal to global mapping: processor %d\n",rank);
74: PetscViewerGetSingleton(PETSC_VIEWER_STDOUT_WORLD,&sviewer);
75: DAGetISLocalToGlobalMapping(da,&is);
76: ISLocalToGlobalMappingView(is,sviewer);
77: PetscViewerRestoreSingleton(PETSC_VIEWER_STDOUT_WORLD,&sviewer);
78: PetscSynchronizedFlush(PETSC_COMM_WORLD);
79: }
81: /* Free memory */
82: PetscViewerDestroy(viewer);
83: VecDestroy(global);
84: VecDestroy(local);
85: DADestroy(da);
86: PetscFinalize();
87: return 0;
88: }
89: