34 1 A ,AR ,MS ,IN ,STIFN,
35 2 STIFR,FR_I2M,IAD_I2M,LCOMI2M,ISIZE,
36 3 NB_FRI2M,FR_LOCI2M,TAGNOD,INTTH2,FTHE,
37 4 CONDN,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(*), (*),FR_LOCI2M(*),TAGNOD(*)
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,
76 . LENSAV,STATUS(MPI_STATUS_SIZE),
77 . REQ_S(NSPMD),REQ_R(NSPMD),INDEXI(NSPMD)
80 .
DIMENSION (:),
ALLOCATABLE :: sbuf,rbuf
82 .
DIMENSION(:,:),
ALLOCATABLE :: sav_acc
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)
122 IF (idt_therm== 1)
THEN
124#include "vectorize.inc"
127 sbuf(ideb) = a(1,nod)*tagnod(nod)
128 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
129 sbuf(ideb+2) = a(3,nod)*tagnod
130 sbuf(ideb+3) = ms(nod)*tagnod
131 sbuf(ideb+4) = stifn(nod)*tagnod(nod)
132 sbuf(ideb+5) = fthe(nod)*tagnod(nod)
133 sbuf(ideb+6) = condn(nod)*tagnod(nod)
137#include "vectorize.inc"
140 sbuf(ideb) = a(1,nod)*tagnod(nod)
141 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
142 sbuf(ideb+2) = a(3,nod)*tagnod(nod
143 sbuf(ideb+3) = ar(1,nod)*tagnod(nod)
144 sbuf(ideb+4) = ar(2,nod)*tagnod(nod)
145 sbuf(ideb+5) = ar(3,nod)*tagnod(nod)
147 sbuf(ideb+7) = in(nod)*tagnod(nod)
148 sbuf(ideb+8) = stifn(nod)*tagnod(nod)
149 sbuf(ideb+9) = stifr(nod)*tagnod(nod)
150 sbuf(ideb+10)= fthe(nod)*tagnod(nod)
151 sbuf(ideb+11)= condn(nod)*tagnod(nod)
157#include "vectorize.inc"
160 sbuf(ideb) = a(1,nod)*tagnod(nod)
161 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
162 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
163 sbuf(ideb+3) = ms(nod)*tagnod(nod
164 sbuf(ideb+4) = stifn(nod)*tagnod(nod)
165 sbuf(ideb+5) = fthe(nod)*tagnod(nod
169#include "vectorize.inc"
172 sbuf(ideb) = a(1,nod)*tagnod(nod)
173 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
174 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
175 sbuf(ideb+3) = ar(1,nod)*tagnod(nod)
176 sbuf(ideb+4) = ar(2,nod)*tagnod(nod)
177 sbuf(ideb+5) = ar(3,nod)*tagnod(nod)
178 sbuf(ideb+6) = ms(nod)*tagnod(nod)
179 sbuf(ideb+7) = in(nod)*tagnod(nod)
180 sbuf(ideb+8) = stifn(nod)*tagnod(nod)
181 sbuf(ideb+9) = stifr(nod)*tagnod(nod)
182 sbuf(ideb+10)= fthe(nod)*tagnod(nod)
189#include "vectorize.inc"
192 sbuf(ideb) = a(1,nod)*tagnod(nod)
193 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
194 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
195 sbuf(ideb+3) = ms(nod)*tagnod(nod)
196 sbuf(ideb+4) = stifn(nod)*tagnod(nod)
200#include "vectorize.inc"
203 sbuf(ideb) = a(1,nod)*tagnod(nod)
204 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
205 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
206 sbuf(ideb+3) = ar(1,nod)*tagnod(nod)
207 sbuf(ideb+4) = ar(2,nod)*tagnod(nod)
208 sbuf(ideb+5) = ar(3,nod)*tagnod(nod)
209 sbuf(ideb+6) = ms(nod)*tagnod(nod)
210 sbuf(ideb+7) = in(nod)*tagnod(nod)
211 sbuf(ideb+8) = stifn(nod)*tagnod(nod)
212 sbuf(ideb+9) = stifr(nod)*tagnod(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)*tagnod(nod)
223 sbuf(ideb+1) = fncont(2,nod)*tagnod(nod)
224 sbuf(ideb+2) = fncont(3,nod)*tagnod(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)*tagnod(nod)
233 sbuf(ideb+1) = fncontp(2,nod)*tagnod(nod)
234 sbuf(ideb+2) = fncontp(3,nod)*tagnod(nod)
235 sbuf(ideb+3) = ftcontp(1,nod)*tagnod(nod)
236 sbuf(ideb+4) = ftcontp(2,nod)*tagnod(nod)
237 sbuf(ideb+5) = ftcontp(3,nod)*tagnod(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)
258 IF (idt_therm== 1)
THEN
262 sav_acc(1,i)=a(1,nod)*tagnod(nod)
263 sav_acc(2,i)=a(2,nod)*tagnod(nod)
264 sav_acc(3,i)=a(3,nod)*tagnod(nod)
265 sav_acc(4,i)=ms(nod)*tagnod(nod)
266 sav_acc(5,i)=stifn(nod)*tagnod(nod)
267 sav_acc(6,i)=fthe(nod)*tagnod(nod)
268 sav_acc(7,i)=condn(nod)*tagnod(nod)
270 IF(tagnod(nod)==1)
THEN
286 sav_acc( 1,i) = a(1,nod)*tagnod(nod)
287 sav_acc( 2,i) = a(2,nod)*tagnod(nod)
288 sav_acc( 3,i) = a(3,nod)*tagnod(nod)
289 sav_acc( 4,i) = ar(1,nod)*tagnod(nod)
290 sav_acc( 5,i) = ar(2,nod)*tagnod(nod)
291 sav_acc( 6,i) = ar(3,nod)*tagnod(nod)
292 sav_acc( 7,i) = ms(nod)*tagnod(nod)
293 sav_acc( 8,i) = in(nod)*tagnod(nod)
294 sav_acc( 9,i) = stifn(nod)*tagnod(nod)
295 sav_acc(10,i) = stifr(nod)*tagnod(nod)
296 sav_acc(11,i) = fthe(nod)*tagnod(nod)
297 sav_acc(12,i) = condn(nod)*tagnod(nod)
298 IF(tagnod(nod)==1)
THEN
320 sav_acc(1,i)=a(1,nod)*tagnod(nod)
321 sav_acc(2,i)=a(2,nod)*tagnod(nod)
322 sav_acc(3,i)=a(3,nod)*tagnod(nod)
323 sav_acc(4,i)=ms(nod)*tagnod(nod)
324 sav_acc(5,i)=stifn(nod)*tagnod(nod)
325 sav_acc(6,i)=fthe(nod)*tagnod(nod)
327 IF(tagnod(nod)==1)
THEN
341 sav_acc( 1,i) = a(1,nod)*tagnod(nod)
342 sav_acc( 2,i) = a(2,nod)*tagnod(nod)
343 sav_acc( 3,i) = a(3,nod)*tagnod(nod)
344 sav_acc( 4,i) = ar(1,nod)*tagnod(nod)
345 sav_acc( 5,i) = ar(2,nod)*tagnod(nod)
346 sav_acc( 6,i) = ar(3,nod)*tagnod(nod)
347 sav_acc( 7,i) = ms(nod)*tagnod(nod)
348 sav_acc( 8,i) = in(nod)*tagnod(nod)
349 sav_acc( 9,i) = stifn(nod)*tagnod(nod)
350 sav_acc(10,i) = stifr(nod)*tagnod(nod)
351 sav_acc(11,i) = fthe(nod)*tagnod(nod)
352 IF(tagnod(nod)==1)
THEN
377 sav_acc(2,i)=a(2,nod)*tagnod(nod)
378 sav_acc(3,i)=a(3,nod)*tagnod(nod)
379 sav_acc(4,i)=ms(nod)*tagnod(nod)
380 sav_acc(5,i)=stifn(nod)*tagnod(nod)
382 IF(tagnod(nod)==1)
THEN
396 sav_acc( 1,i) = a(1,nod)*tagnod(nod)
397 sav_acc( 2,i) = a(2,nod)*tagnod(nod)
398 sav_acc( 3,i) = a(3,nod)*tagnod(nod)
399 sav_acc( 4,i) = ar(1,nod)*tagnod(nod)
400 sav_acc( 5,i) = ar(2,nod)*tagnod
401 sav_acc( 6,i) = ar(3,nod)*tagnod(nod)
402 sav_acc( 7,i) = ms(nod)*tagnod(nod)
403 sav_acc( 8,i) = in(nod)*tagnod(nod)
404 sav_acc( 9,i) = stifn(nod)*tagnod(nod)
405 sav_acc(10,i) = stifr(nod)*tagnod(nod)
406 IF(tagnod(nod)==1)
THEN
424 IF (h3d_data%N_VECT_CONT2_MAX > 0)
THEN
427 sav_acc(lensav+1,i)=fncont(1,nod)*tagnod(nod)
428 sav_acc(lensav+2,i)=fncont(2,nod)*tagnod(nod)
429 sav_acc(lensav+3,i)=fncont(3,nod)*tagnod(nod)
431 IF(tagnod(nod)==1)
THEN
440 IF (h3d_data%N_VECT_PCONT2_MAX > 0)
THEN
443 sav_acc(lensav+1,i)=fncontp(1,nod)*tagnod(nod)
444 sav_acc(lensav+2,i)=fncontp(2,nod)*tagnod(nod)
445 sav_acc(lensav+3,i)=fncontp(3,nod)*tagnod(nod)
446 sav_acc(lensav+4,i)=ftcontp(1,nod)*tagnod(nod)
447 sav_acc(lensav+5,i)=ftcontp(2,nod)*tagnod(nod
448 sav_acc(lensav+6,i)=ftcontp(3,nod)*tagnod(nod)
450 IF(tagnod(nod)==1)
THEN
451 fncontp(1,nod) = zero
452 fncontp(2,nod) = zero
453 fncontp(3,nod) = zero
454 ftcontp(1,nod) = zero
455 ftcontp(2,nod) = zero
456 ftcontp(3,nod) = zero
466 len= iad_i2m(p+1)-iad_i2m(p)
469 ideb = 1+(iad_i2m(p)-1)*isize2
471 CALL mpi_wait(req_r(l),status,ierror
473 IF (idt_therm== 1)
THEN
475#include "vectorize.inc"
478 a(1,nod) = a(1,nod) + rbuf(ideb)
479 a(2,nod) = a(2,nod) + rbuf(ideb+1)
480 a(3,nod) = a(3,nod) + rbuf
481 ms(nod) = ms(nod) + rbuf(ideb+3)
482 stifn(nod) = stifn(nod)+rbuf(ideb+4)
483 fthe(nod) = fthe(nod)+rbuf(ideb+5)
484 condn(nod) = condn(nod)+rbuf(ideb+6)
488#include "vectorize.inc"
491 a(1,nod) = a(1,nod) + rbuf(ideb)
492 a(2,nod) = a(2,nod) + rbuf(ideb+1)
493 a(3,nod) = a(3,nod) + rbuf(ideb+2)
494 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
495 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
496 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
497 ms(nod) = ms(nod) + rbuf(ideb+6)
498 in(nod) = in(nod) + rbuf(ideb+7)
499 stifn(nod) = stifn(nod)+rbuf(ideb+8)
500 stifr(nod) = stifr(nod)+rbuf(ideb+9)
501 fthe(nod) = fthe(nod) +rbuf(ideb+10)
502 condn(nod) = condn(nod)+rbuf(ideb+11)
508#include "vectorize.inc"
511 a(1,nod) = a(1,nod) + rbuf(ideb)
512 a(2,nod) = a(2,nod) + rbuf(ideb+1)
513 a(3,nod) = a(3,nod) + rbuf(ideb+2)
514 ms(nod) = ms(nod) + rbuf(ideb+3)
515 stifn(nod) = stifn(nod)+rbuf(ideb+4)
516 fthe(nod) = fthe(nod)+rbuf(ideb+5)
520#include "vectorize.inc"
523 a(1,nod) = a(1,nod) + rbuf(ideb)
524 a(2,nod) = a(2,nod) + rbuf(ideb+1)
525 a(3,nod) = a(3,nod) + rbuf(ideb+2)
526 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
527 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
528 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
529 ms(nod) = ms(nod) + rbuf(ideb+6)
530 in(nod) = in(nod) + rbuf(ideb+7)
531 stifn(nod) = stifn(nod)+rbuf(ideb+8)
532 stifr(nod) = stifr(nod)+rbuf(ideb+9)
533 fthe(nod) = fthe(nod) +rbuf(ideb+10)
540#include "vectorize.inc"
543 a(1,nod) = a(1,nod) + rbuf(ideb)
544 a(2,nod) = a(2,nod) + rbuf(ideb+1)
545 a(3,nod) = a(3,nod) + rbuf(ideb+2)
546 ms(nod) = ms(nod) + rbuf(ideb+3)
547 stifn(nod) = stifn(nod)+rbuf(ideb+4)
551#include "vectorize.inc"
554 a(1,nod) = a(1,nod) + rbuf(ideb)
555 a(2,nod) = a(2,nod) + rbuf(ideb+1)
556 a(3,nod) = a(3,nod) + rbuf(ideb+2)
557 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
558 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
559 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
560 ms(nod) = ms(nod) + rbuf(ideb+6)
561 in(nod) = in(nod) + rbuf(ideb+7)
562 stifn(nod) = stifn(nod)+rbuf(ideb+8)
563 stifr(nod) = stifr(nod)+rbuf(ideb+9)
570 IF (h3d_data%N_VECT_CONT2_MAX > 0)
THEN
571#include "vectorize.inc"
574 fncont(1,nod) = fncont(1,nod) + rbuf(ideb)
575 fncont(2,nod) = fncont(2,nod) + rbuf(ideb+1)
576 fncont(3,nod) = fncont(3,nod) + rbuf(ideb+2)
580 IF (h3d_data%N_VECT_PCONT2_MAX > 0)
THEN
581#include "vectorize.inc"
584 fncontp(1,nod) = fncontp(1,nod) + rbuf(ideb)
585 fncontp(2,nod) = fncontp(2,nod) + rbuf(ideb+1)
586 fncontp(3,nod) = fncontp(3,nod) + rbuf(ideb+2)
587 ftcontp(1,nod) = ftcontp(1,nod) + rbuf(ideb+3)
588 ftcontp(2,nod) = ftcontp(2,nod) + rbuf(ideb+4)
589 ftcontp(3,nod) = ftcontp(3,nod) + rbuf(ideb+5)
596 IF (idt_therm== 1)
THEN
600 a(1,nod) = a(1,nod) + sav_acc(1,j)
601 a(2,nod) = a(2,nod) + sav_acc(2,j)
602 a(3,nod) = a(3,nod) + sav_acc(3,j)
603 ms(nod) = ms(nod) + sav_acc(4,j)
604 stifn(nod) = stifn(nod)+sav_acc(5,j)
605 fthe(nod) = fthe(nod) +sav_acc(6,j)
606 condn(nod) = condn(nod) +sav_acc(7,j)
612 a(1,nod) = a(1,nod) + sav_acc(1,j)
613 a(2,nod) = a(2,nod) + sav_acc(2,j)
614 a(3,nod) = a(3,nod) + sav_acc(3,j)
615 ar(1,nod) = ar(1,nod)+ sav_acc(4,j)
616 ar(2,nod) = ar(2,nod)+ sav_acc(5,j)
617 ar(3,nod) = ar(3,nod)+ sav_acc(6,j)
618 ms(nod) = ms(nod) + sav_acc(7,j)
619 in(nod) = in(nod) + sav_acc(8,j)
620 stifn(nod) = stifn(nod)+sav_acc(9,j)
621 stifr(nod) = stifr(nod)+sav_acc(10,j)
622 fthe(nod) = fthe(nod) +sav_acc(11,j)
623 condn(nod) = condn(nod)+sav_acc(12,j)
631 a(1,nod) = a(1,nod) + sav_acc(1,j)
633 a(3,nod) = a(3,nod) + sav_acc(3,j)
634 ms(nod) = ms(nod) + sav_acc(4,j)
635 stifn(nod) = stifn(nod)+sav_acc(5,j)
636 fthe(nod) = fthe(nod) +sav_acc(6,j)
642 a(1,nod) = a(1,nod) + sav_acc(1,j)
643 a(2,nod) = a(2,nod) + sav_acc(2,j)
644 a(3,nod) = a(3,nod) + sav_acc(3,j)
645 ar(1,nod) = ar(1,nod)+ sav_acc(4,j)
646 ar(2,nod) = ar(2,nod)+ sav_acc(5,j)
647 ar(3,nod) = ar(3,nod)+ sav_acc(6,j)
648 ms(nod) = ms(nod) + sav_acc(7,j)
649 in(nod) = in(nod) + sav_acc(8,j)
650 stifn(nod) = stifn(nod)+sav_acc(9,j)
651 stifr(nod) = stifr(nod)+sav_acc(10,j)
652 fthe(nod) = fthe(nod) +sav_acc(11,j)
661 a(1,nod) = a(1,nod) + sav_acc(1,j)
662 a(2,nod) = a(2,nod) + sav_acc(2,j)
663 a(3,nod) = a(3,nod) + sav_acc(3,j)
664 ms(nod) = ms(nod) + sav_acc(4,j)
665 stifn(nod) = stifn(nod)+sav_acc(5,j)
671 a(1,nod) = a(1,nod) + sav_acc(1,j)
672 a(2,nod) = a(2,nod) + sav_acc(2,j)
673 a(3,nod) = a(3,nod) + sav_acc(3,j)
674 ar(1,nod) = ar(1,nod)+ sav_acc(4,j)
675 ar(2,nod) = ar(2,nod)+ sav_acc(5,j)
676 ar(3,nod) = ar(3,nod)+ sav_acc(6,j)
677 ms(nod) = ms(nod) + sav_acc(7,j)
678 in(nod) = in(nod) + sav_acc(8,j)
679 stifn(nod) = stifn(nod)+sav_acc(9,j)
680 stifr(nod) = stifr(nod)+sav_acc(10,j)
686 IF (h3d_data%N_VECT_CONT2_MAX > 0)
THEN
689 fncont(1,nod) = fncont(1,nod) + sav_acc(lensav+1,j)
690 fncont(2,nod) = fncont(2,nod) + sav_acc(lensav+2,j)
691 fncont(3,nod) = fncont(3,nod) + sav_acc(lensav+3,j)
696 IF (h3d_data%N_VECT_PCONT2_MAX > 0)
THEN
699 fncontp(1,nod) = fncontp(1,nod) + sav_acc(lensav+1,j)
700 fncontp(2,nod) = fncontp(2,nod) + sav_acc(lensav+2,j)
701 fncontp(3,nod) = fncontp(3,nod) + sav_acc(lensav+3,j)
702 ftcontp(1,nod) = ftcontp(1,nod) + sav_acc(lensav+4,j)
703 ftcontp(2,nod) = ftcontp(2,nod) + sav_acc(lensav+5,j)
704 ftcontp(3,nod) = ftcontp(3,nod) + sav_acc(lensav+6,j)
715 CALL mpi_waitany(nbindex,req_s,index,status,ierror)