1 2 static char help[] = "Tests PetscGlobalMinMax\n\n"; 3 4 #include <petscsys.h> 5 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.}; 11 12 PetscFunctionBeginUser; 13 PetscCall(PetscInitialize(&argc, &argv, (char *)0, help)); 14 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 15 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 16 17 li[0] = 4 + rank; 18 li[1] = -3 + size - rank; 19 PetscCall(PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, gi)); 20 if (gi[0] != 4 || gi[1] != -3 + size) PetscCall(PetscPrintf(PETSC_COMM_SELF, "1) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n", gi[0], gi[1])); 21 PetscCall(PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, li)); 22 if (li[0] != gi[0] || li[1] != gi[1]) PetscCall(PetscPrintf(PETSC_COMM_SELF, "2) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n", li[0], li[1])); 23 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 } 31 32 PetscCall(PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, gi)); 33 if (gi[0] > li[0] || gi[1] < li[1]) PetscCall(PetscPrintf(PETSC_COMM_SELF, "3) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n", gi[0], gi[1])); 34 35 lr[0] = 4.0 + rank; 36 lr[1] = -3.0 + size - rank; 37 PetscCall(PetscGlobalMinMaxReal(PETSC_COMM_WORLD, lr, gr)); 38 if (gr[0] != 4.0 || gr[1] != -3.0 + size) PetscCall(PetscPrintf(PETSC_COMM_SELF, "4) Error MIN/MAX %g %g\n", (double)gr[0], (double)gr[1])); 39 PetscCall(PetscGlobalMinMaxReal(PETSC_COMM_WORLD, lr, lr)); 40 if (lr[0] != gr[0] || lr[1] != gr[1]) PetscCall(PetscPrintf(PETSC_COMM_SELF, "5) Error MIN/MAX %g %g\n", (double)lr[0], (double)li[1])); 41 42 PetscCall(PetscFinalize()); 43 return 0; 44 } 45 46 /*TEST 47 48 test: 49 output_file: output/ex58_1.out 50 51 test: 52 suffix: 2 53 output_file: output/ex58_1.out 54 nsize: 2 55 56 TEST*/ 57