Actual source code: ex2.c


  2: static char help[] = "Tests various 1-dimensional DMDA routines.\n\n";

  4: #include <petscdm.h>
  5: #include <petscdmda.h>
  6: #include <petscdraw.h>

  8: int main(int argc, char **argv)
  9: {
 10:   PetscMPIInt            rank;
 11:   PetscInt               M = 13, s = 1, dof = 1;
 12:   DMBoundaryType         bx = DM_BOUNDARY_PERIODIC;
 13:   DM                     da;
 14:   PetscViewer            viewer;
 15:   Vec                    local, global;
 16:   PetscScalar            value;
 17:   PetscDraw              draw;
 18:   PetscBool              flg = PETSC_FALSE;
 19:   ISLocalToGlobalMapping is;

 22:   PetscInitialize(&argc, &argv, (char *)0, help);
 23:   PetscViewerDrawOpen(PETSC_COMM_WORLD, 0, "", 280, 480, 600, 200, &viewer);
 24:   PetscViewerDrawGetDraw(viewer, 0, &draw);
 25:   PetscDrawSetDoubleBuffer(draw);

 27:   /* Readoptions */
 28:   PetscOptionsGetInt(NULL, NULL, "-M", &M, NULL);
 29:   PetscOptionsGetEnum(NULL, NULL, "-wrap", DMBoundaryTypes, (PetscEnum *)&bx, NULL);
 30:   PetscOptionsGetInt(NULL, NULL, "-dof", &dof, NULL);
 31:   PetscOptionsGetInt(NULL, NULL, "-s", &s, NULL);

 33:   /* Create distributed array and get vectors */
 34:   DMDACreate1d(PETSC_COMM_WORLD, bx, M, dof, s, NULL, &da);
 35:   DMSetFromOptions(da);
 36:   DMSetUp(da);
 37:   DMView(da, viewer);
 38:   DMCreateGlobalVector(da, &global);
 39:   DMCreateLocalVector(da, &local);

 41:   value = 1;
 42:   VecSet(global, value);

 44:   MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
 45:   value = rank + 1;
 46:   VecScale(global, value);

 48:   VecView(global, viewer);
 49:   PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "\nGlobal Vector:\n");
 50:   VecView(global, PETSC_VIEWER_STDOUT_WORLD);
 51:   PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "\n");

 53:   /* Send ghost points to local vectors */
 54:   DMGlobalToLocalBegin(da, global, INSERT_VALUES, local);
 55:   DMGlobalToLocalEnd(da, global, INSERT_VALUES, local);

 57:   PetscOptionsGetBool(NULL, NULL, "-local_print", &flg, NULL);
 58:   if (flg) {
 59:     PetscViewer sviewer;

 61:     PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD);
 62:     PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "\nLocal Vector: processor %d\n", rank);
 63:     PetscViewerGetSubViewer(PETSC_VIEWER_STDOUT_WORLD, PETSC_COMM_SELF, &sviewer);
 64:     VecView(local, sviewer);
 65:     PetscViewerRestoreSubViewer(PETSC_VIEWER_STDOUT_WORLD, PETSC_COMM_SELF, &sviewer);
 66:     PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD);
 67:     PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD);
 68:   }
 69:   PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "\nLocal to global mapping\n");
 70:   DMGetLocalToGlobalMapping(da, &is);
 71:   ISLocalToGlobalMappingView(is, PETSC_VIEWER_STDOUT_WORLD);

 73:   /* Free memory */
 74:   PetscViewerDestroy(&viewer);
 75:   VecDestroy(&global);
 76:   VecDestroy(&local);
 77:   DMDestroy(&da);
 78:   PetscFinalize();
 79:   return 0;
 80: }

 82: /*TEST

 84:    test:
 85:       nsize: 2
 86:       args: -nox
 87:       filter: grep -v " MPI process"
 88:       output_file: output/ex2_1.out
 89:       requires: x

 91:    test:
 92:       suffix: 2
 93:       nsize: 3
 94:       args: -wrap none -local_print -nox
 95:       filter: grep -v "Vec Object: Vec"
 96:       requires: x

 98:    test:
 99:       suffix: 3
100:       nsize: 3
101:       args: -wrap ghosted -local_print -nox
102:       filter: grep -v "Vec Object: Vec"
103:       requires: x

105: TEST*/