160
161
162
163 USE intbufdef_mod
165
166
167
168#include "implicit_f.inc"
169
170
171
172#include "com01_c.inc"
173#include "com04_c.inc"
174#include "units_c.inc"
175#include "task_c.inc"
176#include "timerr_c.inc"
177#include "param_c.inc"
178
179
180
181 INTEGER, INTENT(IN) :: NBINTC
182 INTEGER, INTENT(IN) :: INTLIST(NBINTC),IPARI(NPARI,NINTER)
183 TYPE(INTBUF_STRUCT_),DIMENSION(NINTER), INTENT(IN) :: INTBUF_TAB
184 DOUBLE PRECISION :: TRESHOLD
185
186
187
188 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SENDBUF
189 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: RECVBUF
190 INTEGER :: I,J,N,P
191 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RATIO
192 DOUBLE PRECISION,DIMENSION(:,:,:), ALLOCATABLE :: SUMMARY
193 DOUBLE PRECISION ::PMAX,TOTAL_TIME
194 INTEGER :: NB_PRINTED_INTERF
195
196
197
198 IF(nspmd > 0) THEN
201 IF(ispmd == 0) THEN
204 ALLOCATE(ratio(nbintc))
206 ELSE
207 ALLOCATE(recvbuf(1,1))
208 ALLOCATE(ratio(1))
209 ALLOCATE(summary(1,1,1))
210 ENDIF
211
212 DO i = 1,nbintc
213 n = intlist(i)
219 sendbuf(j +
i_noint )=dble(intbuf_tab(n)%METRIC%NOINT )
220 sendbuf(j +
i_multimp )=dble(intbuf_tab(n)%METRIC%MULTIMP )
221 sendbuf(j +
i_nsn )=dble(intbuf_tab(n)%METRIC%NSN )
222 sendbuf(j +
i_nsnr )=dble(intbuf_tab(n)%METRIC%NSNR )
223 sendbuf(j +
i_ncont )=dble(intbuf_tab(n)%METRIC%NCONT )
224 ENDDO
225 IF(nspmd > 1) THEN
227 ELSE
229 ENDIF
230
231
232 IF( ispmd == 0) THEN
233
234 nb_printed_interf = 0
235 ratio(1:nbintc) = 0.0d0
237 DO i = 1,nbintc
238 pmax = 0.0d0
239 DO p = 1,nspmd
241
242 ratio(i) =
max(ratio(i),
247
248
253
256
257
258
263
264 IF(total_time > pmax) THEN
269 pmax = total_time
270 ENDIF
271 ENDDO
272 IF(ratio(i) > treshold) nb_printed_interf = nb_printed_interf + 1
273 ENDDO
274 IF(nb_printed_interf > 0) THEN
275 WRITE(iout,*)' '
276 WRITE(iout,*)
277 . ' ** INTERFACE SUMMARY **'
278
279 DO i = 1,nbintc
280 IF(ratio(i) > treshold) THEN
281 n = intlist(i)
282 WRITE(iout,*)' '
283 WRITE(iout,*)
284 . 'INTERFACE ID:',intbuf_tab(n)%METRIC%NOINT,' TYPE: ',ipari(7,n)
285 WRITE(iout,'(A,F12.3,A)')
286 .
'REMOTE SECONDARY:',summary(
i_nsnr,1,i)/summary(
i_nsn,1,i),
'%'
287 WRITE(iout,*) 'TIME (s) MAX AVG'
288 WRITE(iout,'(A,2F12.2)')
290 WRITE(iout,'(A,2F12.3)')
292 WRITE(iout,'(A,2F12.3)')
294 WRITE(iout,'(A,2F12.3)')
296 ENDIF
297 ENDDO
298 ENDIF
299 ENDIF
300 ENDIF
301
302
303 DEALLOCATE(ratio,sendbuf,recvbuf,summary)
304 RETURN
integer, parameter i_main_tri
integer, parameter size_metric
integer, parameter i_nsnr
integer, parameter i_ncont
integer, parameter i_main_opt_tri
integer, parameter i_main_forces
integer, parameter i_multimp
integer, parameter i_main_crit_tri
integer, parameter i_noint
subroutine spmd_dgather(sendbuf, length, recvbuf, rank)