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.};

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

 16:   li[0] = 4 + rank;
 17:   li[1] = -3 + size - rank;
 18:   PetscGlobalMinMaxInt(PETSC_COMM_WORLD,li,gi);
 19:   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]);
 20:   PetscGlobalMinMaxInt(PETSC_COMM_WORLD,li,li);
 21:   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]);

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

 31:   PetscGlobalMinMaxInt(PETSC_COMM_WORLD,li,gi);
 32:   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]);

 34:   lr[0] = 4.0 + rank;
 35:   lr[1] = -3.0 + size - rank;
 36:   PetscGlobalMinMaxReal(PETSC_COMM_WORLD,lr,gr);
 37:   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]);
 38:   PetscGlobalMinMaxReal(PETSC_COMM_WORLD,lr,lr);
 39:   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]);

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

 45: /*TEST

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

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

 55: TEST*/