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*/