xref: /petsc/src/sys/tests/ex58.c (revision f97672e55eacc8688507b9471cd7ec2664d7f203)
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   PetscCall(PetscInitialize(&argc,&argv,(char*)0,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_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   }
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/ex58_1.out
49 
50    test:
51      suffix: 2
52      output_file: output/ex58_1.out
53      nsize: 2
54 
55 TEST*/
56