xref: /phasta/phSolver/common/mpitools.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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