Actual source code: ex12.c

      1: static char help[] = "Tests DMGetGlobalVector() and DMRestoreGlobalVector().\n\n";

      3: /*
      4: Use the options
      5:      -da_grid_x <nx> - number of grid points in x direction, if M < 0
      6:      -da_grid_y <ny> - number of grid points in y direction, if N < 0
      7:      -da_processors_x <MX> number of processors in x directio
      8:      -da_processors_y <MY> number of processors in x direction
      9: */

     11: #include <petscdm.h>
     12: #include <petscdmda.h>

     14: int main(int argc, char **argv)
     15: {
     16:   PetscInt        M = 10, N = 8;
     17:   PetscBool       flg = PETSC_FALSE;
     18:   DM              da;
     19:   Vec             global1, global2, global3;
     20:   DMBoundaryType  bx = DM_BOUNDARY_NONE, by = DM_BOUNDARY_NONE;
     21:   DMDAStencilType stype = DMDA_STENCIL_BOX;

     23:   PetscFunctionBeginUser;
     24:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
     25:   PetscCall(PetscOptionsGetBool(NULL, NULL, "-star_stencil", &flg, NULL));
     26:   if (flg) stype = DMDA_STENCIL_STAR;

     28:   /* Create distributed array and get vectors */
     29:   PetscCall(DMDACreate2d(PETSC_COMM_WORLD, bx, by, stype, M, N, PETSC_DECIDE, PETSC_DECIDE, 1, 1, NULL, NULL, &da));
     30:   PetscCall(DMSetFromOptions(da));
     31:   PetscCall(DMSetUp(da));
     32:   PetscCall(DMGetGlobalVector(da, &global1));
     33:   PetscCall(DMGetGlobalVector(da, &global2));
     34:   PetscCall(DMRestoreGlobalVector(da, &global1));
     35:   PetscCall(DMRestoreGlobalVector(da, &global2));
     36:   PetscCall(DMGetGlobalVector(da, &global1));
     37:   PetscCall(DMGetGlobalVector(da, &global3));
     38:   PetscCall(DMGetGlobalVector(da, &global2));
     39:   PetscCall(DMRestoreGlobalVector(da, &global1));
     40:   PetscCall(DMRestoreGlobalVector(da, &global3));
     41:   PetscCall(DMRestoreGlobalVector(da, &global2));
     42:   PetscCall(DMGetGlobalVector(da, &global1));
     43:   PetscCall(DMGetGlobalVector(da, &global3));
     44:   PetscCall(DMGetGlobalVector(da, &global2));
     45:   PetscCall(DMRestoreGlobalVector(da, &global1));
     46:   PetscCall(DMRestoreGlobalVector(da, &global3));
     47:   PetscCall(DMRestoreGlobalVector(da, &global2));
     48:   PetscCall(DMDestroy(&da));
     49:   PetscCall(PetscFinalize());
     50:   return 0;
     51: }

     53: /*TEST

     55:    test:
     56:      output_file: output/empty.out

     58: TEST*/