33 1 NI25,IAD_FREDG,FR_EDG,NOD_NORMAL,WNOD_NORMAL,SIZE,NADMSR,
34 2 REQ_R ,REQ_S ,IRINDEX,ISINDEX,IAD_RECV ,
35 3 NBIRECV,NBISEND,RBUF ,SBUF ,VTX_BISECTOR,
36 4 LBOUND ,IAD_FRNOR,FR_NOR,IFLAG ,FSKYN ,ISHIFT,
37 5 ADDCSRECT, PROCNOR,SOL_EDGE)
45 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
46#include "implicit_f.inc"
61INTEGER NI25, IAD_FREDG(NINTER25,*), FR_EDG(2,*),,ISHIFT,
62 . REQ_R(NSPMD),REQ_S(NSPMD),IRINDEX(NSPMD),ISINDEX(NSPMD),IAD_RECV(NSPMD+1),
63 . NBIRECV, NBISEND, IAD_FRNOR(NINTER25,*), FR_NOR(*), IFLAG, LBOUND(*),
64 . ADDCSRECT(*), PROCNOR(*)
65 real*4 nod_normal(3,4,*), wnod_normal(3,4,*), vtx_bisector(3,2,nadmsr),fskyn(3,*),
71 INTEGER MSGTYP,I,NOD,LOC_PROC,IERROR,INDEX, N, M, E, IS,
72 . SIZ,J,K,L0,L,CC,II, MSGOFF,
73 . STATUS(MPI_STATUS_SIZE)
93 l = l+ size*(iad_fredg(ni25,i+1)-iad_fredg(ni25,i))
94 . +2*size*(iad_frnor(ni25,i+1)-iad_frnor(ni25,i))
95 . + (iad_frnor(ni25,i+1)-iad_frnor(ni25,i))
99 IF(iad_frnor(ni25,i+1)-iad_frnor(ni25,i)>0)
THEN
100 DO j=iad_frnor(ni25,i),iad_frnor(ni25,i+1)-1
101 nod = ishift + fr_nor(j)
102 DO cc = addcsrect(nod),addcsrect(nod+1)-1
103 IF(procnor(cc)==i)
THEN
115 nbirecv = nbirecv + 1
118 s rbuf(l0),siz,mpi_real4,it_spmd(i),msgtyp,
119 g spmd_comm_world,req_r(nbirecv),ierror)
131 IF(iad_fredg(ni25,i+1)-iad_fredg(ni25,i)>0)
THEN
132 DO j=iad_fredg(ni25,i),iad_fredg(ni25,i+1)-1
135 sbuf(l) = nod_normal(1,e,m)
136 sbuf(l+1) = nod_normal(2,e,m)
137 sbuf(l+2) = nod_normal(3,e,m)
149 IF(iad_frnor(ni25,i+1)-iad_frnor(ni25,i)>0)
THEN
150 DO j=iad_frnor(ni25,i),iad_frnor(ni25,i+1)-1
152 sbuf(l) = vtx_bisector(1,1,is)
153 sbuf(l+1) = vtx_bisector(2,1,is)
154 sbuf(l+2) = vtx_bisector(3,1,is
156 sbuf(l) = vtx_bisector(1,2,is)
157 sbuf(l+1) = vtx_bisector(2,2,is)
158 sbuf(l+2) = vtx_bisector(3,2,is)
167 IF(iad_frnor(ni25,i+1)-iad_frnor(ni25,i)>0)
THEN
168 DO j=iad_frnor(ni25,i)
169 nod = ishift + fr_nor(j)
170 DO cc = addcsrect(nod),addcsrect(nod+1)-1
171 IF(procnor(cc)==loc_proc)
THEN
172 sbuf(l) = fskyn(1,cc)
173 sbuf(l+1) = fskyn(2,cc)
174 sbuf(l+2) = fskyn(3,cc)
186 nbisend = nbisend + 1
189 s sbuf(l0),siz,mpi_real4,it_spmd(i),msgtyp,
190 g spmd_comm_world,req_s(i),ierror)
200 CALL mpi_waitany(nbirecv,req_r,index,status,ierror)
204 DO j=iad_fredg(ni25,i),iad_fredg(ni25,i+1)-1
207 wnod_normal(1,e,m) = rbuf(l)
208 wnod_normal(2,e,m) = rbuf(l+1)
209 wnod_normal(3,e,m) = rbuf(l+2)
214 DO j=iad_frnor(ni25,i),iad_frnor(ni25,i+1)-1
216 IF(rbuf(l)/=rzero.OR.rbuf(l+1)/=rzero.OR.rbuf(l+2)/=rzero)
THEN
217 IF(vtx_bisector(1,1,is)==rzero.AND.
218 . vtx_bisector(2,1,is)==rzero.AND.
219 . vtx_bisector(3,1,is)==rzero)
THEN
220 vtx_bisector(1,1,is)=rbuf(l)
221 vtx_bisector(2,1,is)=rbuf(l+1)
222 vtx_bisector(3,1,is)=rbuf(l+2)
223 ELSEIF(vtx_bisector(1,2,is)==rzero.AND.
224 . vtx_bisector(2,2,is)==rzero.AND.
225 . vtx_bisector(3,2,is)==rzero)
THEN
226 vtx_bisector(1,2,is)=rbuf(l)
227 vtx_bisector(2,2,is)=rbuf(l+1)
228 vtx_bisector(3,2,is)=rbuf(l+2)
230 vtx_bisector(1,1,is) = rzero
231 vtx_bisector(2,1,is) = rzero
232 vtx_bisector(3,1,is) = rzero
233 vtx_bisector(1,2,is) = rzero
234 vtx_bisector(2,2,is) = rzero
235 vtx_bisector(3,2,is) = rzero
239 IF(rbuf(l)/=rzero.OR.rbuf(l+1)/=rzero.OR.rbuf
THEN
240 IF(vtx_bisector(1,1,is)==rzero.AND.
241 . vtx_bisector(2,1,is)==rzero.AND.
242 . vtx_bisector(3,1,is)==rzero)
THEN
243 vtx_bisector(1,1,is)=rbuf(l)
244 vtx_bisector(2,1,is)=rbuf(l+1)
245 vtx_bisector(3,1,is)=rbuf(l+2)
246 ELSEIF(vtx_bisector(1,2,is)==rzero.AND.
247 . vtx_bisector(2,2,is)==rzero.AND.
248 . vtx_bisector(3,2,is)==rzero)
THEN
249 vtx_bisector(1,2,is)=rbuf(l)
250 vtx_bisector(2,2,is)=rbuf(l+1)
251 vtx_bisector(3,2,is)=rbuf(l+2)
256 lbound(is) = lbound(is)+nint(rbuf(l))
257 IF(lbound(is) > 2)
THEN
258 vtx_bisector(1,1,is) = rzero
259 vtx_bisector(2,1,is) = rzero
260 vtx_bisector(3,1,is) = rzero
261 vtx_bisector(1,2,is) = rzero
262 vtx_bisector(2,2,is) = rzero
263 vtx_bisector(3,2,is) = rzero
270 DO j=iad_frnor(ni25,i),iad_frnor(ni25,i+1)-1
271 nod = ishift + fr_nor(j)
272 DO cc = addcsrect(nod),addcsrect(nod+1)-1
273 IF(procnor(cc)==i)
THEN
274 fskyn(1,cc) = rbuf(l)
275 fskyn(2,cc) = rbuf(l+1)
276 fskyn(3,cc) = rbuf(l+2)
288 CALL mpi_wait(req_s(i),status,ierror)