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*/