34 1 FR_I2M ,IAD_I2M,ADDCNI2 ,PROCNI2 ,FR_NBCCI2,
35 2 I2SIZE ,LENR ,LENS ,FSKYI2 ,INTTH2 ,
36 3 FTHESKYI2,CONDNSKYI2, I2SIZEMEC,LCOMI2M,FNCONT,
37 4 FNCONTP,FTCONTP,H3D_DATA ,IDT_THERM)
43 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
44#include "implicit_f.inc"
59 INTEGER IAD_I2M(*),(*),FR_NBCCI2(2,*),
60 . ADDCNI2(*), PROCNI2(*),
61 . I2SIZE , ,LENS,INTTH2,I2SIZEMEC
62 INTEGER ,
INTENT(IN) :: LCOMI2M
63 INTEGER ,
INTENT(IN) :: IDT_THERM
65 . FSKYI2(I2SIZEMEC,*),FTHESKYI2(*),CONDNSKYI2(*)
66 my_real ,
INTENT(INOUT) :: fncont(3,numnod),
67 . fncontp(3,numnod),ftcontp(3,numnod)
73 INTEGER MSGTYP,I,NOD,LOC_PROC,IERROR, INDEXI, NISKYF, N, IDEB,
74 . SIZ, J, L, CC, NBIRECV, NBISEND, II, MSGOFF,ISIZOUT,LEN,
76 . IAD_RECV(NSPMD+1), INDEXR(NSPMD),INDEXS(NSPMD),
77 . req_r(nspmd),req_s(nspmd),
78 . status(mpi_status_size)
80 .
DIMENSION (:),
ALLOCATABLE :: sbuf,rbuf
88 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
91 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
94 ALLOCATE(sbuf(lens*i2size+isizout*lcomi2m))
95 ALLOCATE(rbuf(lenr*i2size+isizout*lcomi2m))
103 len = iad_i2m(i+1)-iad_i2m(i)
104 IF(fr_nbcci2(2,i)>0.OR.len*isizout>0)
THEN
105 siz = (i2size)*fr_nbcci2(2,i)+isizout*len
107 nbirecv = nbirecv + 1
110 s rbuf(l),siz,real,it_spmd(i),msgtyp,
111 g spmd_comm_world,req_r(nbirecv),ierror)
115 IF(fr_nbcci2(1,i)>0.OR.len*isizout>0)
THEN
116 nbisend = nbisend + 1
126 IF (intth2 == 1)
THEN
127 IF(idt_therm == 1)
THEN
129 DO j=iad_i2m(i),iad_i2m(i+1)-1
131 DO cc = addcni2(nod),addcni2(nod+1)-1
132 IF(procni2(cc)==loc_proc)
THEN
133 sbuf(l) = fskyi2(1,cc)
134 sbuf(l+1) = fskyi2(2,cc)
135 sbuf(l+2) = fskyi2(3,cc)
136 sbuf(l+3) = fskyi2(4,cc)
137 sbuf(l+4) = fskyi2(5,cc)
138 sbuf(l+5) = fskyi2(6,cc)
139 sbuf(l+6) = fskyi2(7,cc)
140 sbuf(l+7) = fskyi2(8,cc)
141 sbuf(l+8) = fskyi2(9,cc)
142 sbuf(l+9) = fskyi2(10,cc)
143 sbuf(l+10)= ftheskyi2(cc)
144 sbuf(l+11)= condnskyi2(cc)
150 DO j=iad_i2m(i),iad_i2m(i+1)-1
152 DO cc = addcni2(nod),addcni2(nod+1)-1
153 IF(procni2(cc)==loc_proc)
THEN
154 sbuf(l) = fskyi2(1,cc)
155 sbuf(l+1) = fskyi2(2,cc)
156 sbuf(l+2) = fskyi2(3,cc)
157 sbuf(l+3) = fskyi2(4,cc)
158 sbuf(l+4) = fskyi2(5,cc)
159 sbuf(l+5) = ftheskyi2(cc)
160 sbuf(l+6) = condnskyi2(cc)
168 DO j=iad_i2m(i),iad_i2m(i+1)-1
170 DO cc = addcni2(nod),addcni2(nod+1)-1
171 IF(procni2(cc)==loc_proc)
THEN
172 sbuf(l) = fskyi2(1,cc)
173 sbuf(l+1) = fskyi2(2,cc)
174 sbuf(l+2) = fskyi2(3,cc)
176 sbuf(l+4) = fskyi2(5,cc)
177 sbuf(l+5) = fskyi2(6,cc)
178 sbuf(l+6) = fskyi2(7,cc)
179 sbuf(l+7) = fskyi2(8,cc)
180 sbuf(l+8) = fskyi2(9,cc)
181 sbuf(l+9) = fskyi2(10,cc)
182 sbuf(l+10)= ftheskyi2(cc)
188 DO j=iad_i2m(i),iad_i2m(i+1)-1
190 DO cc = addcni2(nod),addcni2(nod+1)-1
191 IF(procni2(cc)==loc_proc)
THEN
192 sbuf(l) = fskyi2(1,cc)
193 sbuf(l+1) = fskyi2(2,cc)
194 sbuf(l+2) = fskyi2(3,cc)
195 sbuf(l+3) = fskyi2(4,cc)
196 sbuf(l+4) = fskyi2(5,cc)
197 sbuf(l+5) = ftheskyi2(cc)
206 DO j=iad_i2m(i),iad_i2m(i+1)-1
208 DO cc = addcni2(nod),addcni2(nod+1)-1
209 IF(procni2(cc)==loc_proc)
THEN
210 sbuf(l) = fskyi2(1,cc)
211 sbuf(l+1) = fskyi2(2,cc)
212 sbuf(l+2) = fskyi2(3,cc)
213 sbuf(l+3) = fskyi2(4,cc)
214 sbuf(l+4) = fskyi2(5,cc)
215 sbuf(l+5) = fskyi2(6,cc)
216 sbuf(l+6) = fskyi2(7,cc)
217 sbuf(l+7) = fskyi2(8,cc)
218 sbuf(l+8) = fskyi2(9,cc)
219 sbuf(l+9) = fskyi2(10,cc)
225 DO j=iad_i2m(i),iad_i2m(i+1)-1
227 DO cc = addcni2(nod),addcni2(nod+1)-1
228 IF(procni2(cc)==loc_proc)
THEN
229 sbuf(l) = fskyi2(1,cc)
230 sbuf(l+1) = fskyi2(2,cc)
231 sbuf(l+2) = fskyi2(3,cc)
232 sbuf(l+3) = fskyi2(4,cc)
233 sbuf(l+4) = fskyi2(5,cc)
241 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
242#include "vectorize.inc"
243 DO j=iad_i2m(i),iad_i2m(i+1)-1
245 sbuf(l) = fncont(1,nod)
246 sbuf(l+1) = fncont(2,nod)
247 sbuf(l+2) = fncont(3,nod)
251 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
252#include "vectorize.inc"
253 DO j=iad_i2m(i),iad_i2m(i+1)-1
255 sbuf(l) = fncontp(1,nod)
256 sbuf(l+1) = fncontp(2,nod)
257 sbuf(l+2) = fncontp(3,nod)
258 sbuf(l+3) = ftcontp(1,nod)
259 sbuf(l+4) = ftcontp(2,nod)
260 sbuf(l+5) = ftcontp(3,nod)
272 len = iad_i2m(i+1)-iad_i2m(i)
273 siz = i2size*fr_nbcci2(1,i) +isizout*len
276 s sbuf(l),siz,real,it_spmd(i),msgtyp,
277 g spmd_comm_world,req_s(ii),ierror)
284 CALL mpi_waitany(nbirecv,req_r,indexi,status,ierror)
287 IF (intth2 == 1)
THEN
288 IF(idt_therm == 1)
THEN
290 DO j=iad_i2m(i),iad_i2m(i+1)-1
292 DO cc = addcni2(nod), addcni2(nod+1)-1
293 IF(procni2(cc)==i)
THEN
294 fskyi2(1,cc) = rbuf(l)
295 fskyi2(2,cc) = rbuf(l+1)
296 fskyi2(3,cc) = rbuf(l+2)
297 fskyi2(4,cc) = rbuf(l+3)
298 fskyi2(5,cc) = rbuf(l+4)
299 fskyi2(6,cc) = rbuf(l+5)
300 fskyi2(7,cc) = rbuf(l+6)
301 fskyi2(8,cc) = rbuf(l+7)
302 fskyi2(9,cc) = rbuf(l+8)
303 fskyi2(10,cc)= rbuf(l+9)
304 ftheskyi2(cc)= rbuf(l+10)
305 condnskyi2(cc)= rbuf(l+11)
311 DO j=iad_i2m(i),iad_i2m(i+1)-1
313 DO cc = addcni2(nod), addcni2(nod+1)-1
314 IF(procni2(cc)==i)
THEN
315 fskyi2(1,cc) = rbuf(l)
316 fskyi2(2,cc) = rbuf(l+1)
317 fskyi2(3,cc) = rbuf(l+2)
318 fskyi2(4,cc) = rbuf(l+3)
319 fskyi2(5,cc) = rbuf(l+4)
320 ftheskyi2(cc)= rbuf(l+5)
321 condnskyi2(cc)= rbuf(l+6)
329 DO j=iad_i2m(i),iad_i2m(i+1)-1
331 DO cc = addcni2(nod), addcni2(nod+1)-1
332 IF(procni2(cc)==i)
THEN
333 fskyi2(1,cc) = rbuf(l)
334 fskyi2(2,cc) = rbuf(l+1)
335 fskyi2(3,cc) = rbuf(l+2)
336 fskyi2(4,cc) = rbuf(l+3)
337 fskyi2(5,cc) = rbuf(l+4)
338 fskyi2(6,cc) = rbuf(l+5)
339 fskyi2(7,cc) = rbuf(l+6)
340 fskyi2(8,cc) = rbuf(l+7)
341 fskyi2(9,cc) = rbuf(l+8)
342 fskyi2(10,cc)= rbuf(l+9)
343 ftheskyi2(cc)= rbuf(l+10)
349 DO j=iad_i2m(i),iad_i2m(i+1)-1
351 DO cc = addcni2(nod), addcni2(nod+1)-1
352 IF(procni2(cc)==i)
THEN
353 fskyi2(1,cc) = rbuf(l)
354 fskyi2(2,cc) = rbuf(l+1)
355 fskyi2(3,cc) = rbuf(l+2)
356 fskyi2(4,cc) = rbuf(l+3)
357 fskyi2(5,cc) = rbuf(l+4)
358 ftheskyi2(cc)= rbuf(l+5)
367 DO j=iad_i2m(i),iad_i2m(i+1)-1
369 DO cc = addcni2(nod), addcni2(nod+1)-1
370 IF(procni2(cc)==i)
THEN
371 fskyi2(1,cc) = rbuf(l)
372 fskyi2(2,cc) = rbuf(l+1)
373 fskyi2(3,cc) = rbuf(l+2)
374 fskyi2(4,cc) = rbuf(l+3)
375 fskyi2(5,cc) = rbuf(l+4)
376 fskyi2(6,cc) = rbuf(l+5)
377 fskyi2(7,cc) = rbuf(l+6)
378 fskyi2(8,cc) = rbuf(l+7)
379 fskyi2(9,cc) = rbuf(l+8)
380 fskyi2(10,cc)= rbuf(l+9)
386 DO j=iad_i2m(i),iad_i2m(i+1)-1
388 DO cc = addcni2(nod), addcni2(nod+1)-1
389 IF(procni2(cc)==i)
THEN
390 fskyi2(1,cc) = rbuf(l)
391 fskyi2(2,cc) = rbuf(l+1)
392 fskyi2(3,cc) = rbuf(l+2)
393 fskyi2(4,cc) = rbuf(l+3)
394 fskyi2(5,cc) = rbuf(l+4)
402 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
403#include
"vectorize.inc"
404 DO j=iad_i2m(i),iad_i2m(i+1)-1
406 fncont(1,nod) = fncont(1,nod) + rbuf(l)
407 fncont(2,nod) = fncont(2,nod) + rbuf(l+1)
408 fncont(3,nod) = fncont(3,nod) + rbuf(l+2)
412 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
413#include "vectorize.inc"
414 DO j=iad_i2m(i),iad_i2m(i+1)-1
416 fncontp(1,nod) = fncontp(1,nod) + rbuf(l)
417 fncontp(2,nod) = fncontp(2,nod) + rbuf(l+1)
418 fncontp(3,nod) = fncontp(3,nod) + rbuf(l+2)
419 ftcontp(1,nod) = ftcontp(1,nod) + rbuf(l+3)
420 ftcontp(2,nod) = ftcontp(2,nod) + rbuf(l+4)
421 ftcontp(3,nod) = ftcontp(3,nod) + rbuf(l+5)
432 CALL mpi_waitany(nbisend,req_s,indexi,status,ierror)