Actual source code: ex58.c


  2: static char help[] = "Tests PetscGlobalMinMax\n\n";

  4: #include <petscsys.h>

  6: int main(int argc, char **argv)
  7: {
  8:   PetscMPIInt size, rank;
  9:   PetscInt    li[2], gi[2] = {-1, -1};
 10:   PetscReal   lr[2], gr[2] = {-1., -1.};

 13:   PetscInitialize(&argc, &argv, (char *)0, help);
 14:   MPI_Comm_size(PETSC_COMM_WORLD, &size);
 15:   MPI_Comm_rank(PETSC_COMM_WORLD, &rank);

 17:   li[0] = 4 + rank;
 18:   li[1] = -3 + size - rank;
 19:   PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, gi);
 20:   if (gi[0] != 4 || gi[1] != -3 + size) PetscPrintf(PETSC_COMM_SELF, "1) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n", gi[0], gi[1]);
 21:   PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, li);
 22:   if (li[0] != gi[0] || li[1] != gi[1]) PetscPrintf(PETSC_COMM_SELF, "2) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n", li[0], li[1]);

 24:   if (rank == 0) {
 25:     li[0] = PETSC_MAX_INT;
 26:     li[1] = PETSC_MIN_INT;
 27:   } else if (rank == 1) {
 28:     li[0] = PETSC_MIN_INT;
 29:     li[1] = PETSC_MAX_INT;
 30:   }

 32:   PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, gi);
 33:   if (gi[0] > li[0] || gi[1] < li[1]) PetscPrintf(PETSC_COMM_SELF, "3) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n", gi[0], gi[1]);

 35:   lr[0] = 4.0 + rank;
 36:   lr[1] = -3.0 + size - rank;
 37:   PetscGlobalMinMaxReal(PETSC_COMM_WORLD, lr, gr);
 38:   if (gr[0] != 4.0 || gr[1] != -3.0 + size) PetscPrintf(PETSC_COMM_SELF, "4) Error MIN/MAX %g %g\n", (double)gr[0], (double)gr[1]);
 39:   PetscGlobalMinMaxReal(PETSC_COMM_WORLD, lr, lr);
 40:   if (lr[0] != gr[0] || lr[1] != gr[1]) PetscPrintf(PETSC_COMM_SELF, "5) Error MIN/MAX %g %g\n", (double)lr[0], (double)li[1]);

 42:   PetscFinalize();
 43:   return 0;
 44: }

 46: /*TEST

 48:    test:
 49:      output_file: output/ex58_1.out

 51:    test:
 52:      suffix: 2
 53:      output_file: output/ex58_1.out
 54:      nsize: 2

 56: TEST*/