Actual source code: ex44.c
2: static char help[] = "Tests various DMComposite routines.\n\n";
4: #include <petscdm.h>
5: #include <petscdmda.h>
6: #include <petscdmcomposite.h>
8: int main(int argc,char **argv)
9: {
10: PetscMPIInt rank;
11: DM da1,da2,packer;
12: Vec local,global,globals[2],buffer;
13: PetscScalar value;
14: PetscViewer viewer;
16: PetscInitialize(&argc,&argv,(char*)0,help);
18: DMCompositeCreate(PETSC_COMM_WORLD,&packer);
19: DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,8,1,1,NULL,&da1);
20: DMSetFromOptions(da1);
21: DMSetUp(da1);
22: DMCompositeAddDM(packer,da1);
23: DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,6,1,1,NULL,&da2);
24: DMSetFromOptions(da2);
25: DMSetUp(da2);
26: DMCompositeAddDM(packer,da2);
28: DMCreateGlobalVector(packer,&global);
29: DMCreateLocalVector(packer,&local);
30: DMCreateLocalVector(packer,&buffer);
32: DMCompositeGetAccessArray(packer,global,2,NULL,globals);
33: value = 1;
34: VecSet(globals[0], value);
35: value = -1;
36: VecSet(globals[1], value);
37: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
38: value = rank + 1;
39: VecScale(globals[0], value);
40: VecScale(globals[1], value);
41: DMCompositeRestoreAccessArray(packer,global,2,NULL,globals);
43: /* Test GlobalToLocal in insert mode */
44: DMGlobalToLocalBegin(packer,global,INSERT_VALUES,local);
45: DMGlobalToLocalEnd(packer,global,INSERT_VALUES,local);
47: PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD);
48: PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"\nLocal Vector: processor %d\n",rank);
49: PetscViewerGetSubViewer(PETSC_VIEWER_STDOUT_WORLD,PETSC_COMM_SELF,&viewer);
50: VecView(local,viewer);
51: PetscViewerRestoreSubViewer(PETSC_VIEWER_STDOUT_WORLD,PETSC_COMM_SELF,&viewer);
52: PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD);
53: PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD);
55: /* Test LocalToGlobal in insert mode */
56: DMLocalToGlobalBegin(packer,local,INSERT_VALUES,global);
57: DMLocalToGlobalEnd(packer,local,INSERT_VALUES,global);
59: VecView(global,PETSC_VIEWER_STDOUT_WORLD);
61: /* Test LocalToLocal in insert mode */
62: DMLocalToLocalBegin(packer,local,INSERT_VALUES,buffer);
63: DMLocalToLocalEnd(packer,local,INSERT_VALUES,buffer);
65: PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD);
66: PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"\nLocal Vector: processor %d\n",rank);
67: PetscViewerGetSubViewer(PETSC_VIEWER_STDOUT_WORLD,PETSC_COMM_SELF,&viewer);
68: VecView(buffer,viewer);
69: PetscViewerRestoreSubViewer(PETSC_VIEWER_STDOUT_WORLD,PETSC_COMM_SELF,&viewer);
70: PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD);
71: PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD);
73: VecDestroy(&buffer);
74: VecDestroy(&local);
75: VecDestroy(&global);
76: DMDestroy(&packer);
77: DMDestroy(&da2);
78: DMDestroy(&da1);
80: PetscFinalize();
81: return 0;
82: }
84: /*TEST
86: test:
87: nsize: 3
89: TEST*/