1*59599516SKenneth E. Jansenc 2*59599516SKenneth E. Jansenc-------------- 3*59599516SKenneth E. Jansenc drvAllreduce 4*59599516SKenneth E. Jansenc-------------- 5*59599516SKenneth E. Jansenc 6*59599516SKenneth E. Jansen subroutine drvAllreduce ( eachproc, result, m ) 7*59599516SKenneth E. Jansenc 8*59599516SKenneth E. Jansen include "common.h" 9*59599516SKenneth E. Jansen include "mpif.h" 10*59599516SKenneth E. Jansenc 11*59599516SKenneth E. Jansen dimension eachproc(m), result(m) 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansen if (numpe > 1) then 14*59599516SKenneth E. Jansen if(impistat.eq.1) then 15*59599516SKenneth E. Jansen iAllR = iAllR+1 16*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 17*59599516SKenneth E. Jansen iAllRScal = iAllRScal+1 18*59599516SKenneth E. Jansen endif 19*59599516SKenneth E. Jansen if(impistat2.eq.1) call MPI_BARRIER (MPI_COMM_WORLD, ierr) 20*59599516SKenneth E. Jansen if(impistat.gt.0) rmpitmr = TMRC() 21*59599516SKenneth E. Jansen call MPI_ALLREDUCE ( eachproc, result, m, 22*59599516SKenneth E. Jansen & MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr ) 23*59599516SKenneth E. Jansen if(impistat.eq.1) then 24*59599516SKenneth E. Jansen rAllR = rAllR+TMRC()-rmpitmr 25*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 26*59599516SKenneth E. Jansen rAllRScal = rAllRScal+TMRC()-rmpitmr 27*59599516SKenneth E. Jansen endif 28*59599516SKenneth E. Jansen else 29*59599516SKenneth E. Jansen result = eachproc 30*59599516SKenneth E. Jansen endif 31*59599516SKenneth E. Jansenc 32*59599516SKenneth E. Jansen return 33*59599516SKenneth E. Jansen end 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansenc------------------ 36*59599516SKenneth E. Jansenc drvAllreducesclr 37*59599516SKenneth E. Jansenc------------------ 38*59599516SKenneth E. Jansenc 39*59599516SKenneth E. Jansen subroutine drvAllreducesclr ( eachproc, result ) 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansen include "common.h" 42*59599516SKenneth E. Jansen include "mpif.h" 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansen if (numpe > 1) then 45*59599516SKenneth E. Jansen if(impistat.eq.1) then 46*59599516SKenneth E. Jansen iAllR = iAllR+1 47*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 48*59599516SKenneth E. Jansen iAllRScal = iAllRScal+1 49*59599516SKenneth E. Jansen endif 50*59599516SKenneth E. Jansen if(impistat2.eq.1) call MPI_BARRIER (MPI_COMM_WORLD, ierr) 51*59599516SKenneth E. Jansen if(impistat.gt.0) rmpitmr = TMRC() 52*59599516SKenneth E. Jansen call MPI_ALLREDUCE ( eachproc, result, 1, 53*59599516SKenneth E. Jansen & MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr ) 54*59599516SKenneth E. Jansen if(impistat.eq.1) then 55*59599516SKenneth E. Jansen rAllR = rAllR+TMRC()-rmpitmr 56*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 57*59599516SKenneth E. Jansen rAllRScal = rAllRScal+TMRC()-rmpitmr 58*59599516SKenneth E. Jansen endif 59*59599516SKenneth E. Jansen else 60*59599516SKenneth E. Jansen result = eachproc 61*59599516SKenneth E. Jansen endif 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansen return 64*59599516SKenneth E. Jansen end 65*59599516SKenneth E. Jansen 66*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansenc sum real*8 array over all processors 69*59599516SKenneth E. Jansenc 70*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 71*59599516SKenneth E. Jansen subroutine sumgat (u, n, summed) 72*59599516SKenneth E. Jansen 73*59599516SKenneth E. Jansen include "common.h" 74*59599516SKenneth E. Jansen include "mpif.h" 75*59599516SKenneth E. Jansen include "auxmpi.h" 76*59599516SKenneth E. Jansen 77*59599516SKenneth E. Jansen dimension u(nshg,n), ilwork(nlwork) 78*59599516SKenneth E. Jansen!SCATTER dimension sumvec(numpe), irecvcount(numpe) 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen summed = sum(u) 81*59599516SKenneth E. Jansen 82*59599516SKenneth E. Jansen if (numpe > 1) then 83*59599516SKenneth E. Jansen irecvcount = 1 84*59599516SKenneth E. Jansen sumvec = summed 85*59599516SKenneth E. Jansen if(impistat.eq.1) then 86*59599516SKenneth E. Jansen iAllR = iAllR+1 87*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 88*59599516SKenneth E. Jansen iAllRScal = iAllRScal+1 89*59599516SKenneth E. Jansen endif 90*59599516SKenneth E. Jansen if(impistat2.eq.1) call MPI_BARRIER (MPI_COMM_WORLD, ierr) 91*59599516SKenneth E. Jansen if(impistat.gt.0) rmpitmr = TMRC() 92*59599516SKenneth E. Jansen call MPI_ALLREDUCE (sumvec, summed, irecvcount, 93*59599516SKenneth E. Jansen & MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr) 94*59599516SKenneth E. Jansen if(impistat.eq.1) then 95*59599516SKenneth E. Jansen rAllR = rAllR+TMRC()-rmpitmr 96*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 97*59599516SKenneth E. Jansen rAllRScal = rAllRScal+TMRC()-rmpitmr 98*59599516SKenneth E. Jansen endif 99*59599516SKenneth E. Jansenc call MPI_REDUCE_SCATTER (sumvec, summed, irecvcount, 100*59599516SKenneth E. Jansenc & MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr) 101*59599516SKenneth E. Jansen 102*59599516SKenneth E. Jansen endif 103*59599516SKenneth E. Jansen 104*59599516SKenneth E. Jansen return 105*59599516SKenneth E. Jansen end 106*59599516SKenneth E. Jansen 107*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 108*59599516SKenneth E. Jansenc 109*59599516SKenneth E. Jansenc sum real*8 array of length nnp over all processors 110*59599516SKenneth E. Jansenc 111*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 112*59599516SKenneth E. Jansen subroutine sumgatN (u, n, summed, nnp) 113*59599516SKenneth E. Jansen 114*59599516SKenneth E. Jansen include "common.h" 115*59599516SKenneth E. Jansen include "mpif.h" 116*59599516SKenneth E. Jansen include "auxmpi.h" 117*59599516SKenneth E. Jansen 118*59599516SKenneth E. Jansen dimension u(nnp,n), ilwork(nlwork) 119*59599516SKenneth E. Jansen! dimension sumvec(numpe), irecvcount(numpe) 120*59599516SKenneth E. Jansen 121*59599516SKenneth E. Jansenc protect against underflow 122*59599516SKenneth E. Jansenc summed = sum(u) 123*59599516SKenneth E. Jansen summed = sum(u) + 1.e-20 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen if (numpe > 1) then 126*59599516SKenneth E. Jansen irecvcount = 1 127*59599516SKenneth E. Jansen sumvec = summed 128*59599516SKenneth E. Jansen 129*59599516SKenneth E. Jansen if(impistat.eq.1) then 130*59599516SKenneth E. Jansen iAllR = iAllR+1 131*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 132*59599516SKenneth E. Jansen iAllRScal = iAllRScal+1 133*59599516SKenneth E. Jansen endif 134*59599516SKenneth E. Jansen if(impistat2.eq.1) call MPI_BARRIER (MPI_COMM_WORLD, ierr) 135*59599516SKenneth E. Jansen if(impistat.gt.0) rmpitmr = TMRC() 136*59599516SKenneth E. Jansen call MPI_ALLREDUCE (sumvec, summed, irecvcount, 137*59599516SKenneth E. Jansen & MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr) 138*59599516SKenneth E. Jansen if(impistat.eq.1) then 139*59599516SKenneth E. Jansen rAllR = rAllR+TMRC()-rmpitmr 140*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 141*59599516SKenneth E. Jansen rAllRScal = rAllRScal+TMRC()-rmpitmr 142*59599516SKenneth E. Jansen endif 143*59599516SKenneth E. Jansenc call MPI_REDUCE_SCATTER (sumvec, summed, irecvcount, 144*59599516SKenneth E. Jansenc & MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, ierr) 145*59599516SKenneth E. Jansen 146*59599516SKenneth E. Jansen endif 147*59599516SKenneth E. Jansen 148*59599516SKenneth E. Jansen return 149*59599516SKenneth E. Jansen end 150*59599516SKenneth E. Jansen 151*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansenc sum integer array over all processors 154*59599516SKenneth E. Jansenc 155*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 156*59599516SKenneth E. Jansen subroutine sumgatInt (u, n, summed ) 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansen include "common.h" 159*59599516SKenneth E. Jansen include "mpif.h" 160*59599516SKenneth E. Jansen include "auxmpi.h" 161*59599516SKenneth E. Jansen 162*59599516SKenneth E. Jansen integer u(n), summed, sumvec 163*59599516SKenneth E. Jansen!SCATTER integer sumvec(numpe), irecvcount(numpe) 164*59599516SKenneth E. Jansen 165*59599516SKenneth E. Jansenc$$$ ttim(62) = ttim(62) - tmr() 166*59599516SKenneth E. Jansen 167*59599516SKenneth E. Jansen summed = sum(u) 168*59599516SKenneth E. Jansen 169*59599516SKenneth E. Jansen if (numpe > 1) then 170*59599516SKenneth E. Jansen irecvcount = 1 171*59599516SKenneth E. Jansen sumvec = summed 172*59599516SKenneth E. Jansen if(impistat.eq.1) then 173*59599516SKenneth E. Jansen iAllR = iAllR+1 174*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 175*59599516SKenneth E. Jansen iAllRScal = iAllRScal+1 176*59599516SKenneth E. Jansen endif 177*59599516SKenneth E. Jansen if(impistat2.eq.1) call MPI_BARRIER (MPI_COMM_WORLD, ierr) 178*59599516SKenneth E. Jansen if(impistat.gt.0) rmpitmr = TMRC() 179*59599516SKenneth E. Jansen call MPI_ALLREDUCE (sumvec, summed, irecvcount, 180*59599516SKenneth E. Jansen & MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, ierr) 181*59599516SKenneth E. Jansen if(impistat.eq.1) then 182*59599516SKenneth E. Jansen rAllR = rAllR+TMRC()-rmpitmr 183*59599516SKenneth E. Jansen elseif(impistat.eq.2) then 184*59599516SKenneth E. Jansen rAllRScal = rAllRScal+TMRC()-rmpitmr 185*59599516SKenneth E. Jansen endif 186*59599516SKenneth E. Jansenc call MPI_REDUCE_SCATTER (sumvec, summed, irecvcount, 187*59599516SKenneth E. Jansenc & MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, ierr) 188*59599516SKenneth E. Jansen 189*59599516SKenneth E. Jansen endif 190*59599516SKenneth E. Jansenc$$$ ttim(62) = ttim(62) + tmr() 191*59599516SKenneth E. Jansen 192*59599516SKenneth E. Jansen return 193*59599516SKenneth E. Jansen end 194*59599516SKenneth E. Jansen 195