34 1 A ,AR ,MS ,IN ,STIFN,
35 2 STIFR,FR_I2M,IAD_I2M,LCOMI2M,ISIZE,
36 3 NB_FRI2M,FR_LOCI2M,INTTH2,FTHE,CONDN,
37 4 FNCONT ,FNCONTP,FTCONTP,H3D_DATA,IDT_THERM)
45 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
46#include "implicit_f.inc"
61 INTEGER LCOMI2M, ISIZE, NB_FRI2M,INTTH2,
62 . FR_I2M(*), IAD_I2M(*),FR_LOCI2M(*)
63 INTEGER ,
INTENT(IN) :: IDT_THERM
65 . a(3,*), ar(3,*), ms(*), in(*),
66 . stifn(*), stifr(*),fthe(*),condn(*)
67 my_real ,
INTENT(INOUT) :: fncont(3,numnod),
68 . fncontp(3,numnod),ftcontp(3,numnod)
74 INTEGER MSGTYP,LOC_PROC,NOD,I,J,L,IDEB,IAD,LEN,P,
75 . NBINDEX,INDEX,MSGOFF,SIZ,IERROR,ISIZE2,LENSAV,
76 . STATUS(MPI_STATUS_SIZE),
77 . REQ_S(NSPMD),REQ_R(NSPMD),INDEXI(NSPMD)
80 .
DIMENSION(:,:),
ALLOCATABLE :: sav_acc
82 .
DIMENSION (:),
ALLOCATABLE :: sbuf,rbuf
87 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
90 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
93 ALLOCATE(sbuf(lcomi2m*isize2))
94 ALLOCATE(rbuf(lcomi2m*isize2))
95 ALLOCATE (sav_acc(isize2,nb_fri2m))
102 len = iad_i2m(i+1)-iad_i2m(i)
109 s rbuf(ideb),siz,real,it_spmd(i),msgtyp,
110 g spmd_comm_world,req_r(l),ierror)
119 len = iad_i2m(i+1) - iad_i2m(i)
121 IF (intth2 == 1)
THEN
122 IF(idt_therm == 1)
THEN
124#include "vectorize.inc"
127 sbuf(ideb) = a(1,nod)
128 sbuf(ideb+1) = a(2,nod)
129 sbuf(ideb+2) = a(3,nod)
130 sbuf(ideb+3) = ms(nod)
131 sbuf(ideb+4) = stifn(nod)
132 sbuf(ideb+5) = fthe(nod)
133 sbuf(ideb+6) = condn(nod)
137#include "vectorize.inc"
140 sbuf(ideb) = a(1,nod)
141 sbuf(ideb+1) = a(2,nod)
142 sbuf(ideb+2) = a(3,nod)
143 sbuf(ideb+3) = ar(1,nod)
144 sbuf(ideb+4) = ar(2,nod)
145 sbuf(ideb+5) = ar(3,nod)
146 sbuf(ideb+6) = ms(nod)
147 sbuf(ideb+7) = in(nod)
148 sbuf(ideb+8) = stifn(nod)
149 sbuf(ideb+9) = stifr(nod)
150 sbuf(ideb+10) = fthe(nod)
151 sbuf(ideb+11) = condn(nod)
157#include "vectorize.inc"
160 sbuf(ideb) = a(1,nod)
161 sbuf(ideb+1) = a(2,nod)
162 sbuf(ideb+2) = a(3,nod)
163 sbuf(ideb+3) = ms(nod)
164 sbuf(ideb+4) = stifn(nod)
165 sbuf(ideb+5) = fthe(nod)
169#include "vectorize.inc"
172 sbuf(ideb) = a(1,nod)
173 sbuf(ideb+1) = a(2,nod)
174 sbuf(ideb+2) = a(3,nod)
175 sbuf(ideb+3) = ar(1,nod)
176 sbuf(ideb+4) = ar(2,nod)
177 sbuf(ideb+5) = ar(3,nod)
178 sbuf(ideb+6) = ms(nod)
179 sbuf(ideb+7) = in(nod)
180 sbuf(ideb+8) = stifn(nod)
181 sbuf(ideb+9) = stifr(nod)
182 sbuf(ideb+10) = fthe(nod)
189#include
"vectorize.inc"
192 sbuf(ideb) = a(1,nod)
193 sbuf(ideb+1) = a(2,nod)
194 sbuf(ideb+2) = a(3,nod)
195 sbuf(ideb+3) = ms(nod)
196 sbuf(ideb+4) = stifn(nod)
200#include "vectorize.inc"
203 sbuf(ideb) = a(1,nod)
204 sbuf(ideb+1) = a(2,nod)
205 sbuf(ideb+2) = a(3,nod)
206 sbuf(ideb+3) = ar(1,nod)
207 sbuf(ideb+4) = ar(2,nod)
208 sbuf(ideb+5) = ar(3,nod)
209 sbuf(ideb+6) = ms(nod)
210 sbuf(ideb+7) = in(nod)
211 sbuf(ideb+8) = stifn(nod)
212 sbuf(ideb+9) = stifr(nod)
218 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
219#include "vectorize.inc"
222 sbuf(ideb) = fncont(1,nod)
223 sbuf(ideb+1) = fncont(2,nod)
224 sbuf(ideb+2) = fncont(3,nod)
228 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
229#include "vectorize.inc"
232 sbuf(ideb) = fncontp(1,nod)
233 sbuf(ideb+1) = fncontp(2,nod)
234 sbuf(ideb+2) = fncontp(3,nod)
235 sbuf(ideb+3) = ftcontp(1,nod)
236 sbuf(ideb+4) = ftcontp(2,nod)
237 sbuf(ideb+5) = ftcontp(3,nod)
248 len = iad_i2m(i+1)-iad_i2m(i)
252 s sbuf(ideb),siz,real,it_spmd(i),msgtyp,
253 g spmd_comm_world,req_s(l),ierror)
257 IF (intth2 == 1)
THEN
258 IF(idt_therm == 1)
THEN
262 sav_acc(1,i)=a(1,nod)
263 sav_acc(2,i)=a(2,nod)
264 sav_acc(3,i)=a(3,nod)
266 sav_acc(5,i)=stifn(nod)
267 sav_acc(6,i)=fthe(nod)
268 sav_acc(7,i)=condn(nod)
284 sav_acc( 1,i) = a(1,nod)
285 sav_acc( 2,i) = a(2,nod)
286 sav_acc( 3,i) = a(3,nod)
287 sav_acc( 4,i) = ar(1,nod)
288 sav_acc( 5,i) = ar(2,nod)
289 sav_acc( 6,i) = ar(3,nod)
290 sav_acc( 7,i) = ms(nod)
291 sav_acc( 8,i) = in(nod)
292 sav_acc( 9,i) = stifn(nod)
293 sav_acc(10,i) = stifr(nod)
294 sav_acc(11,i) = fthe(nod)
295 sav_acc(12,i) = condn(nod)
316 sav_acc(1,i)=a(1,nod)
317 sav_acc(2,i)=a(2,nod)
318 sav_acc(3,i)=a(3,nod)
320 sav_acc(5,i)=stifn(nod)
321 sav_acc(6,i)=fthe(nod)
335 sav_acc( 1,i) = a(1,nod)
336 sav_acc( 2,i) = a(2,nod)
337 sav_acc( 3,i) = a(3,nod)
338 sav_acc( 4,i) = ar(1,nod)
339 sav_acc( 5,i) = ar(2,nod)
340 sav_acc( 6,i) = ar(3,nod)
341 sav_acc( 7,i) = ms(nod)
342 sav_acc( 8,i) = in(nod)
343 sav_acc( 9,i) = stifn(nod)
344 sav_acc(10,i) = stifr(nod)
345 sav_acc(11,i) = fthe(nod)
367 sav_acc(1,i)=a(1,nod)
368 sav_acc(2,i)=a(2,nod)
369 sav_acc(3,i)=a(3,nod)
371 sav_acc(5,i)=stifn(nod)
384 sav_acc( 1,i) = a(1,nod)
385 sav_acc( 2,i) = a(2,nod)
386 sav_acc( 3,i) = a(3,nod)
387 sav_acc( 4,i) = ar(1,nod)
388 sav_acc( 5,i) = ar(2,nod)
389 sav_acc( 6,i) = ar(3,nod)
390 sav_acc( 7,i) = ms(nod)
391 sav_acc( 8,i) = in(nod)
392 sav_acc( 9,i) = stifn(nod)
393 sav_acc(10,i) = stifr(nod)
410 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
413 sav_acc(lensav+1,i)=fncont(1,nod)
414 sav_acc(lensav+2,i)=fncont(2,nod)
415 sav_acc(lensav+3,i)=fncont(3,nod)
425 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
428 sav_acc(lensav+1,i)=fncontp(1,nod)
429 sav_acc(lensav+2,i)=fncontp(2,nod)
430 sav_acc(lensav+3,i)=fncontp(3,nod)
431 sav_acc(lensav+4,i)=ftcontp(1,nod)
432 sav_acc(lensav+5,i)=ftcontp(2,nod)
433 sav_acc(lensav+6,i)=ftcontp(3,nod)
435 fncontp(1,nod) = zero
436 fncontp(2,nod) = zero
437 fncontp(3,nod) = zero
438 ftcontp(1,nod) = zero
439 ftcontp(2,nod) = zero
440 ftcontp(3,nod) = zero
447 len= iad_i2m(p+1)-iad_i2m(p)
450 ideb = 1+(iad_i2m(p)-1)*isize2
452 CALL mpi_wait(req_r(l),status,ierror)
453 IF (intth2 == 1)
THEN
454 IF(idt_therm == 1)
THEN
456#include "vectorize.inc"
459 a(1,nod) = a(1,nod) + rbuf(ideb)
460 a(2,nod) = a(2,nod) + rbuf(ideb+1)
461 a(3,nod) = a(3,nod) + rbuf(ideb+2)
462 ms(nod) = ms(nod) + rbuf(ideb+3)
463 stifn(nod) = stifn(nod)+rbuf(ideb+4)
464 fthe(nod) = fthe(nod)+rbuf(ideb+5)
465 condn(nod) = condn(nod)+rbuf(ideb+6)
469#include "vectorize.inc"
472 a(1,nod) = a(1,nod) + rbuf(ideb)
473 a(2,nod) = a(2,nod) + rbuf(ideb+1)
474 a(3,nod) = a(3,nod) + rbuf(ideb+2)
475 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
476 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
477 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
478 ms(nod) = ms(nod) + rbuf(ideb+6)
479 in(nod) = in(nod) + rbuf(ideb+7)
480 stifn(nod) = stifn(nod)+rbuf(ideb+8)
481 stifr(nod) = stifr(nod)+rbuf(ideb+9)
482 fthe(nod) = fthe(nod)+rbuf(ideb+10)
483 condn(nod) = condn(nod)+rbuf(ideb+11)
489#include "vectorize.inc"
492 a(1,nod) = a(1,nod) + rbuf(ideb)
493 a(2,nod) = a(2,nod) + rbuf(ideb+1)
494 a(3,nod) = a(3,nod) + rbuf(ideb+2)
495 ms(nod) = ms(nod) + rbuf(ideb+3)
496 stifn(nod) = stifn(nod)+rbuf(ideb+4)
497 fthe(nod) = fthe(nod)+rbuf(ideb+5)
501#include "vectorize.inc"
504 a(1,nod) = a(1,nod) + rbuf(ideb)
505 a(2,nod) = a(2,nod) + rbuf(ideb+1)
507 ar(1,nod) = ar(1,nod)+
508 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
509 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
510 ms(nod) = ms(nod) + rbuf(ideb+6)
511 in(nod) = in(nod) + rbuf(ideb+7)
512 stifn(nod) = stifn(nod)+rbuf(ideb+8)
513 stifr(nod) = stifr(nod)+rbuf(ideb+9)
514 fthe(nod) = fthe(nod)+rbuf(ideb+10)
521#include "vectorize.inc"
524 a(1,nod) = a(1,nod) + rbuf(ideb)
525 a(2,nod) = a(2,nod) + rbuf(ideb+1)
526 a(3,nod) = a(3,nod) + rbuf(ideb+2)
527 ms(nod) = ms(nod) + rbuf(ideb+3)
528 stifn(nod) = stifn(nod)+rbuf(ideb+4)
532#include "vectorize.inc"
535 a(1,nod) = a(1,nod) + rbuf(ideb)
536 a(2,nod) = a(2,nod) + rbuf(ideb+1)
537 a(3,nod) = a(3,nod) + rbuf(ideb+2)
538 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
539 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
540 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
541 ms(nod) = ms(nod) + rbuf(ideb+6)
542 in(nod) = in(nod) + rbuf(ideb+7)
543 stifn(nod) = stifn(nod)+rbuf(ideb+8)
544 stifr(nod) = stifr(nod)+rbuf(ideb+9)
551 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
552#include "vectorize.inc"
555 fncont(1,nod) = fncont(1,nod) + rbuf(ideb)
556 fncont(2,nod) = fncont(2,nod) + rbuf(ideb+1)
557 fncont(3,nod) = fncont(3,nod) + rbuf(ideb+2)
561 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
562#include "vectorize.inc"
565 fncontp(1,nod) = fncontp(1,nod) + rbuf(ideb)
566 fncontp(2,nod) = fncontp(2,nod) + rbuf(ideb+1)
567 fncontp(3,nod) = fncontp(3,nod) + rbuf(ideb+2)
568 ftcontp(1,nod) = ftcontp(1,nod) + rbuf(ideb+3)
569 ftcontp(2,nod) = ftcontp(2,nod) + rbuf(ideb+4)
570 ftcontp(3,nod) = ftcontp(3,nod) + rbuf(ideb
577 IF (intth2 == 1)
THEN
578 IF (idt_therm== 1)
THEN
582 a(1,nod) = a(1,nod) + sav_acc(1,j)
584 a(3,nod) = a(3,nod) + sav_acc(3,j)
586 stifn(nod) = stifn(nod)+sav_acc(5,j)
587 fthe(nod) = fthe(nod) +sav_acc(6,j)
588 condn(nod) = condn(nod)+sav_acc(7,j)
594 a(1,nod) = a(1,nod) + sav_acc(1,j)
595 a(2,nod) = a(2,nod) + sav_acc(2,j)
596 a(3,nod) = a(3,nod) + sav_acc(3,j)
597 ar(1,nod) = ar(1,nod)+ sav_acc(4,j)
598 ar(2,nod) = ar(2,nod)+ sav_acc(5,j)
599 ar(3,nod) = ar(3,nod)+ sav_acc(6,j)
600 ms(nod) = ms(nod) + sav_acc(7,j)
601 in(nod) = in(nod) + sav_acc(8,j)
602 stifn(nod) = stifn(nod)+sav_acc(9,j)
603 stifr(nod) = stifr(nod)+sav_acc(10,j)
604 fthe(nod) = fthe(nod) +sav_acc(11,j)
605 condn(nod) = condn(nod)+sav_acc(12,j)
613 a(1,nod) = a(1,nod) + sav_acc(1,j)
614 a(2,nod) = a(2,nod) + sav_acc(2,j)
615 a(3,nod) = a(3,nod) + sav_acc(3,j)
616 ms(nod) = ms(nod) + sav_acc(4,j)
617 stifn(nod) = stifn(nod)+sav_acc(5,j)
618 fthe(nod) = fthe(nod) +sav_acc(6,j)
624 a(1,nod) = a(1,nod) + sav_acc(1,j)
625 a(2,nod) = a(2,nod) + sav_acc(2,j)
626 a(3,nod) = a(3,nod) + sav_acc(3,j)
627 ar(1,nod) = ar(1,nod)+ sav_acc(4,j)
628 ar(2,nod) = ar(2,nod)+ sav_acc(5,j)
629 ar(3,nod) = ar(3,nod)+ sav_acc(6,j)
630 ms(nod) = ms(nod) + sav_acc(7,j)
631 in(nod) = in(nod) + sav_acc(8,j)
632 stifn(nod) = stifn(nod)+sav_acc(9,j)
633 stifr(nod) = stifr(nod)+sav_acc(10,j)
634 fthe(nod) = fthe(nod) +sav_acc(11,j)
643 a(1,nod) = a(1,nod) + sav_acc(1,j)
644 a(2,nod) = a(2,nod) + sav_acc(2,j)
645 a(3,nod) = a(3,nod) + sav_acc(3,j)
646 ms(nod) = ms(nod) + sav_acc(4,j)
647 stifn(nod) = stifn(nod)+sav_acc(5,j)
653 a(1,nod) = a(1,nod) + sav_acc(1,j)
654 a(2,nod) = a(2,nod) + sav_acc(2,j)
655 a(3,nod) = a(3,nod) + sav_acc(3,j)
656 ar(1,nod) = ar(1,nod)+ sav_acc(4,j)
657 ar(2,nod) = ar(2,nod)+ sav_acc(5,j)
658 ar(3,nod) = ar(3,nod)+ sav_acc(6,j)
659 ms(nod) = ms(nod) + sav_acc(7,j)
660 in(nod) = in(nod) + sav_acc(8,j)
661 stifn(nod) = stifn(nod)+sav_acc(9,j)
662 stifr(nod) = stifr(nod)+sav_acc(10,j)
668 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
671 fncont(1,nod) = fncont(1,nod) + sav_acc(lensav+1,j)
672 fncont(2,nod) = fncont(2,nod) + sav_acc(lensav+2,j)
673 fncont(3,nod) = fncont(3,nod) + sav_acc(lensav+3,j)
677 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
680 fncontp(1,nod) = fncontp(1,nod) + sav_acc(lensav+1,j)
681 fncontp(2,nod) = fncontp(2,nod) + sav_acc(lensav+2,j)
682 fncontp(3,nod) = fncontp(3,nod) + sav_acc(lensav+3,j)
683 ftcontp(1,nod) = ftcontp(1,nod) + sav_acc(lensav+4,j)
684 ftcontp(2,nod) = ftcontp(2,nod) + sav_acc(lensav+5,j)
685 ftcontp(3,nod) = ftcontp(3,nod) + sav_acc(lensav+6,j)
693 CALL mpi_waitany(nbindex,req_s,index,status,ierror)