xref: /petsc/src/sys/tests/ex58.c (revision 58b5cd2af1ac4ce0c10283796d09964cd3da84d3)
1*58b5cd2aSSatish Balay 
2*58b5cd2aSSatish Balay static char help[] = "Tests PetscGlobalMinMax\n\n";
3*58b5cd2aSSatish Balay 
4*58b5cd2aSSatish Balay #include <petscsys.h>
5*58b5cd2aSSatish Balay 
6*58b5cd2aSSatish Balay int main(int argc,char **argv)
7*58b5cd2aSSatish Balay {
8*58b5cd2aSSatish Balay   PetscErrorCode ierr;
9*58b5cd2aSSatish Balay   PetscMPIInt    size,rank;
10*58b5cd2aSSatish Balay   PetscInt       li[2],gi[2] = {-1, -1};
11*58b5cd2aSSatish Balay   PetscReal      lr[2],gr[2] = {-1., -1.};
12*58b5cd2aSSatish Balay 
13*58b5cd2aSSatish Balay   ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
14*58b5cd2aSSatish Balay   ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRMPI(ierr);
15*58b5cd2aSSatish Balay   ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRMPI(ierr);
16*58b5cd2aSSatish Balay 
17*58b5cd2aSSatish Balay   li[0] = 4 + rank;
18*58b5cd2aSSatish Balay   li[1] = -3 + size - rank;
19*58b5cd2aSSatish Balay   ierr = PetscGlobalMinMaxInt(PETSC_COMM_WORLD,li,gi);CHKERRQ(ierr);
20*58b5cd2aSSatish Balay   if (gi[0] != 4 || gi[1] != -3+size) { ierr = PetscPrintf(PETSC_COMM_SELF,"1) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n",gi[0],gi[1]);CHKERRQ(ierr); }
21*58b5cd2aSSatish Balay   ierr = PetscGlobalMinMaxInt(PETSC_COMM_WORLD,li,li);CHKERRQ(ierr);
22*58b5cd2aSSatish Balay   if (li[0] != gi[0] || li[1] != gi[1]) { ierr = PetscPrintf(PETSC_COMM_SELF,"2) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n",li[0],li[1]);CHKERRQ(ierr); }
23*58b5cd2aSSatish Balay 
24*58b5cd2aSSatish Balay   if (rank == 0) {
25*58b5cd2aSSatish Balay     li[0] = PETSC_MAX_INT;
26*58b5cd2aSSatish Balay     li[1] = PETSC_MIN_INT;
27*58b5cd2aSSatish Balay   } else if (rank == 1) {
28*58b5cd2aSSatish Balay     li[0] = PETSC_MIN_INT;
29*58b5cd2aSSatish Balay     li[1] = PETSC_MAX_INT;
30*58b5cd2aSSatish Balay   }
31*58b5cd2aSSatish Balay 
32*58b5cd2aSSatish Balay   ierr = PetscGlobalMinMaxInt(PETSC_COMM_WORLD,li,gi);CHKERRQ(ierr);
33*58b5cd2aSSatish Balay   if (gi[0] > li[0] || gi[1] < li[1]) { ierr = PetscPrintf(PETSC_COMM_SELF,"3) Error MIN/MAX %" PetscInt_FMT " %" PetscInt_FMT "\n",gi[0],gi[1]);CHKERRQ(ierr); }
34*58b5cd2aSSatish Balay 
35*58b5cd2aSSatish Balay   lr[0] = 4.0 + rank;
36*58b5cd2aSSatish Balay   lr[1] = -3.0 + size - rank;
37*58b5cd2aSSatish Balay   ierr = PetscGlobalMinMaxReal(PETSC_COMM_WORLD,lr,gr);CHKERRQ(ierr);
38*58b5cd2aSSatish Balay   if (gr[0] != 4.0 || gr[1] != -3.0+size) { ierr = PetscPrintf(PETSC_COMM_SELF,"4) Error MIN/MAX %g %g\n",(double)gr[0],(double)gr[1]);CHKERRQ(ierr); }
39*58b5cd2aSSatish Balay   ierr = PetscGlobalMinMaxReal(PETSC_COMM_WORLD,lr,lr);CHKERRQ(ierr);
40*58b5cd2aSSatish Balay   if (lr[0] != gr[0] || lr[1] != gr[1]) { ierr = PetscPrintf(PETSC_COMM_SELF,"5) Error MIN/MAX %g %g\n",(double)lr[0],(double)li[1]);CHKERRQ(ierr); }
41*58b5cd2aSSatish Balay 
42*58b5cd2aSSatish Balay   ierr = PetscFinalize();
43*58b5cd2aSSatish Balay   return ierr;
44*58b5cd2aSSatish Balay }
45*58b5cd2aSSatish Balay 
46*58b5cd2aSSatish Balay /*TEST
47*58b5cd2aSSatish Balay 
48*58b5cd2aSSatish Balay    test:
49*58b5cd2aSSatish Balay      output_file: output/ex58_1.out
50*58b5cd2aSSatish Balay 
51*58b5cd2aSSatish Balay    test:
52*58b5cd2aSSatish Balay      suffix: 2
53*58b5cd2aSSatish Balay      output_file: output/ex58_1.out
54*58b5cd2aSSatish Balay      nsize: 2
55*58b5cd2aSSatish Balay 
56*58b5cd2aSSatish Balay TEST*/
57