1 static char help[] = "Tests PetscGlobalMinMax\n\n";
2
3 #include <petscsys.h>
4
main(int argc,char ** argv)5 int main(int argc, char **argv)
6 {
7 PetscMPIInt size, rank;
8 PetscInt li[2], gi[2] = {-1, -1};
9 PetscReal lr[2], gr[2] = {-1., -1.};
10
11 PetscFunctionBeginUser;
12 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
13 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
14 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
15
16 li[0] = 4 + rank;
17 li[1] = -3 + size - rank;
18 PetscCall(PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, gi));
19 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]));
20 PetscCall(PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, li));
21 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]));
22
23 if (rank == 0) {
24 li[0] = PETSC_INT_MAX;
25 li[1] = PETSC_INT_MIN;
26 } else if (rank == 1) {
27 li[0] = PETSC_INT_MIN;
28 li[1] = PETSC_INT_MAX;
29 }
30
31 PetscCall(PetscGlobalMinMaxInt(PETSC_COMM_WORLD, li, gi));
32 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]));
33
34 lr[0] = 4.0 + rank;
35 lr[1] = -3.0 + size - rank;
36 PetscCall(PetscGlobalMinMaxReal(PETSC_COMM_WORLD, lr, gr));
37 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]));
38 PetscCall(PetscGlobalMinMaxReal(PETSC_COMM_WORLD, lr, lr));
39 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]));
40
41 PetscCall(PetscFinalize());
42 return 0;
43 }
44
45 /*TEST
46
47 test:
48 output_file: output/empty.out
49
50 test:
51 suffix: 2
52 output_file: output/empty.out
53 nsize: 2
54
55 TEST*/
56