40 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
41#include "implicit_f.inc"
49 INTEGER IAD_ELEM(2,*), FR_ELEM(*)
54 INTEGER,
DIMENSION(:),
ALLOCATABLE :: COUNT
55 INTEGER P,J,TOTAL_NODES,NCOUNT,NOD
58 IF (
ALLOCATED( failwave%FWAVE_IAD))
DEALLOCATE (failwave%FWAVE_IAD)
59 IF (
ALLOCATED( failwave%FWAVE_FR ))
DEALLOCATE (failwave%FWAVE_FR)
62 ALLOCATE(count(nspmd))
66 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
68 IF (failwave%IDXI(nod) > 0)
THEN
72 total_nodes = total_nodes + count(p)
75 ALLOCATE(failwave%FWAVE_IAD(nspmd+1))
76 ALLOCATE(failwave%FWAVE_FR(total_nodes))
77 failwave%FWAVE_IAD(1)=1
79 failwave%FWAVE_IAD(p)=failwave%FWAVE_IAD(p-1)+count(p-1)
84 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
86 IF (failwave%IDXI(nod) > 0)
THEN
88 failwave%FWAVE_FR(ncount)=failwave%IDXI(nod)
116 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
117#include "implicit_f.inc"
125#include "com01_c.inc"
130 TYPE (FAILWAVE_STR_) ,
TARGET :: FAILWAVE
140 INTEGER MSGTYP,NOD,LOC_PROC, SIZ,NB_NOD,NB,MAXLEV,VALUE
142 INTEGER (MPI_STATUS_SIZE),IERROR
144 INTEGER MSGOFF1,MSGOFF2
145 INTEGER IAD_SEND(NSPMD+1),IAD_RECV(NSPMD+1)
146 INTEGER SEND_SIZ(NSPMD),RECV_SIZ(NSPMD)
149 INTEGER REQ_S1(NSPMD), REQ_S2(NSPMD)
150 INTEGER REQ_R1(NSPMD), REQ_R2(NSPMD)
152 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ,RBUFI
153 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SEND_BUF,RECV_BUF
165 siz = failwave%FWAVE_IAD(nspmd+1)-failwave%FWAVE_IAD(1)
175 siz = failwave%FWAVE_IAD(i+1)-failwave%FWAVE_IAD(i)
179 s rbufi(l),siz,mpi_integer,it_spmd(i),msgtyp,
180 g spmd_comm_world,req_r1(i),ierror)
194 DO j=failwave%FWAVE_IAD(i),failwave%FWAVE_IAD(i+1)-1
195 nod = failwave%FWAVE_FR(j)
196 sbufi(l) = failwave%MAXLEV(nod)
197 send_siz(i) = send_siz(i)+failwave%MAXLEV(nod)*nddim
206 IF(failwave%FWAVE_IAD(i+1)-failwave%FWAVE_IAD(i)>0)
THEN
208 siz = iad_send(i+1)-iad_send(i)
211 s sbufi(l),siz,mpi_integer,it_spmd(i),msgtyp,
212 g spmd_comm_world,req_s1(i),ierror)
221 nb_nod = failwave%FWAVE_IAD(i+1)-failwave%FWAVE_IAD(i)
224 CALL mpi_wait(req_r1(i),status,ierror)
227 DO j=failwave%FWAVE_IAD(i),failwave%FWAVE_IAD(i+1)-1
228 recv_siz(i) = recv_siz(i) + rbufi(l)*nddim
239 IF (failwave%FWAVE_IAD(i+1)-failwave%FWAVE_IAD(i) > 0)
THEN
240 CALL mpi_wait(req_s1(i),status,ierror)
252 iad_send(i+1)=iad_send(i)+send_siz(i)
253 iad_recv(i+1)=iad_recv(i)+recv_siz(i)
256 siz_send = (iad_send(nspmd+1)-iad_send(1))
257 siz_recv = (iad_recv(nspmd+1)-iad_recv(1))
259 ALLOCATE(send_buf(siz_send))
260 ALLOCATE(recv_buf(siz_recv))
268 siz = iad_recv(i+1)-iad_recv(i)
272 s recv_buf(l),siz,mpi_integer,it_spmd(i),msgtyp,
273 g spmd_comm_world,req_r2(i),ierror)
284 DO j=failwave%FWAVE_IAD(i),failwave%FWAVE_IAD(i+1)-1
285 nd = failwave%FWAVE_FR(j)
286 DO l=1,failwave%MAXLEV(nd)
288 send_buf(k) = failwave%FWAVE_NOD(m,nd,l)
299 siz = iad_send(i+1)-iad_send(i)
305 s send_buf(l),siz,mpi_integer,it_spmd(i),msgtyp,
306 g spmd_comm_world,req_s2(i),ierror)
317 siz = iad_recv(i+1)-iad_recv(i)
319 CALL mpi_wait(req_r2(i),status,ierror)
322 DO j=failwave%FWAVE_IAD(i),failwave%FWAVE_IAD(i+1)-1
326 nd = failwave%FWAVE_FR(j)
327 IF (failwave%WAVE_MOD == 1)
THEN
331 failwave%FWAVE_NOD(k,nd,1)=
max(
VALUE,failwave%FWAVE_NOD(k,nd,1))
338 failwave%MAXLEV(nd)=failwave%MAXLEV(nd)+1
339 maxlev = failwave%MAXLEV(nd)
342 failwave%FWAVE_NOD(k,nd,maxlev)=
VALUE
358 siz = iad_send(i+1)-iad_send(i)
360 CALL mpi_wait(req_s2(i),status,ierror)