33 1 A ,AR ,MS ,IN ,STIFN,
34 2 STIFR,FR_I2M,IAD_I2M,LCOMI2M,ISIZE,
35 3 TAGNOD,INTTH2,FTHE,CONDN,FNCONT ,
36 4 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, INTTH2,
62 . FR_I2M(*), IAD_I2M(*),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,
75 . NBINDEX,INDEX,MSGOFF,SIZ,IERROR,,
76 . STATUS(MPI_STATUS_SIZE),
77 . REQ_S(NSPMD),REQ_R(NSPMD),INDEXI(NSPMD)
80 .
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))
99 len = iad_i2m(i+1)-iad_i2m(i)
106 s rbuf(ideb),siz,real,it_spmd(i),msgtyp,
107 g spmd_comm_world,req_r(l),ierror)
116 len = iad_i2m(i+1) - iad_i2m(i)
119 IF (idt_therm== 1)
THEN
121#include "vectorize.inc"
124 sbuf(ideb) = a(1,nod)*tagnod(nod)
125 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
126 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
127 sbuf(ideb+3) = ms(nod) *tagnod(nod)
128 sbuf(ideb+4) = stifn(nod)*tagnod(nod)
129 sbuf(ideb+5) = fthe(nod)*tagnod(nod)
130 sbuf(ideb+6) = condn(nod)*tagnod(nod)
134#include
"vectorize.inc"
137 sbuf(ideb) = a(1,nod)*tagnod(nod)
138 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
139 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
140 sbuf(ideb+3) = ar(1,nod)*tagnod(nod)
141 sbuf(ideb+4) = ar(2,nod)*tagnod(nod)
142 sbuf(ideb+5) = ar(3,nod)*tagnod(nod)
143 sbuf(ideb+6) = ms(nod)*tagnod(nod)
144 sbuf(ideb+7) = in(nod)*tagnod(nod)
145 sbuf(ideb+8) = stifn(nod)*tagnod(nod)
146 sbuf(ideb+9) = stifr(nod)*tagnod(nod)
147 sbuf(ideb+10)= fthe(nod)*tagnod(nod)
148 sbuf(ideb+11)= condn(nod)*tagnod(nod)
154#include "vectorize.inc"
157 sbuf(ideb) = a(1,nod)*tagnod(nod)
158 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
159 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
160 sbuf(ideb+3) = ms(nod) *tagnod(nod)
161 sbuf(ideb+4) = stifn(nod)*tagnod(nod)
162 sbuf(ideb+5) = fthe(nod)*tagnod(nod)
166#include "vectorize.inc"
169 sbuf(ideb) = a(1,nod)*tagnod(nod)
170 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
171 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
172 sbuf(ideb+3) = ar(1,nod)*tagnod(nod)
173 sbuf(ideb+4) = ar(2,nod)*tagnod(nod)
174 sbuf(ideb+5) = ar(3,nod)*tagnod(nod)
175 sbuf(ideb+6) = ms(nod)*tagnod(nod)
176 sbuf(ideb+7) = in(nod)*tagnod(nod)
177 sbuf(ideb+8) = stifn(nod)*tagnod(nod)
178 sbuf(ideb+9) = stifr(nod)*tagnod(nod)
179 sbuf(ideb+10)= fthe(nod)*tagnod(nod)
186#include "vectorize.inc"
189 sbuf(ideb) = a(1,nod)*tagnod(nod)
190 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
191 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
192 sbuf(ideb+3) = ms(nod) *tagnod(nod)
193 sbuf(ideb+4) = stifn(nod)*tagnod(nod)
197#include "vectorize.inc"
200 sbuf(ideb) = a(1,nod)*tagnod(nod)
201 sbuf(ideb+1) = a(2,nod)*tagnod(nod)
202 sbuf(ideb+2) = a(3,nod)*tagnod(nod)
203 sbuf(ideb+3) = ar(1,nod)*tagnod(nod)
204 sbuf(ideb+4) = ar(2,nod)*tagnod(nod)
205 sbuf(ideb+5) = ar(3,nod)*tagnod(nod)
206 sbuf(ideb+6) = ms(nod)*tagnod(nod)
207 sbuf(ideb+7) = in(nod)*tagnod(nod)
208 sbuf(ideb+8) = stifn(nod)*tagnod(nod)
209 sbuf(ideb+9) = stifr(nod)*tagnod(nod)
215 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
216#include "vectorize.inc"
219 sbuf(ideb) = fncont(1,nod)
220 sbuf(ideb+1) = fncont(2,nod)
221 sbuf(ideb+2) = fncont(3,nod)
225 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
226#include "vectorize.inc"
229 sbuf(ideb) = fncontp(1,nod)
230 sbuf(ideb+1) = fncontp(2,nod)
231 sbuf(ideb+2) = fncontp(3,nod)
232 sbuf(ideb+3) = ftcontp(1,nod)
233 sbuf(ideb+4) = ftcontp(2,nod)
234 sbuf(ideb+5) = ftcontp(3,nod)
244 len = iad_i2m(i+1)-iad_i2m
248 s sbuf(ideb),siz,real,it_spmd(i),msgtyp,
249 g spmd_comm_world,req_s(l),ierror)
254 CALL mpi_waitany(nbindex,req_r,index,status,ierror)
256 ideb = 1+(iad_i2m(i)-1)*isize2
257 len = iad_i2m(i+1)-iad_i2m(i)
260 IF (idt_therm== 1)
THEN
262#include "vectorize.inc"
265 a(1,nod) = a(1,nod) + rbuf(ideb)
266 a(2,nod) = a(2,nod) + rbuf(ideb+1)
267 a(3,nod) = a(3,nod) + rbuf(ideb+2)
268 ms(nod) = ms(nod) + rbuf(ideb+3)
269 stifn(nod) = stifn(nod)+rbuf(ideb+4)
270 fthe(nod) = fthe(nod) +rbuf(ideb+5)
271 condn(nod) = condn(nod)+condn(ideb+6)
275#include "vectorize.inc"
278 a(1,nod) = a(1,nod) + rbuf(ideb)
279 a(2,nod) = a(2,nod) + rbuf(ideb+1)
280 a(3,nod) = a(3,nod) + rbuf(ideb+2)
281 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
282 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
283 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
284 ms(nod) = ms(nod) + rbuf(ideb+6)
285 in(nod) = in(nod) + rbuf(ideb+7)
286 stifn(nod) = stifn(nod)+rbuf(ideb+8)
287 stifr(nod) = stifr(nod)+rbuf(ideb+9)
288 fthe(nod) = fthe(nod) +rbuf(ideb+10)
289 condn(nod) = condn(nod)+condn(ideb+11)
295#include "vectorize.inc"
298 a(1,nod) = a(1,nod) + rbuf(ideb)
299 a(2,nod) = a(2,nod) + rbuf(ideb+1)
300 a(3,nod) = a(3,nod) + rbuf(ideb+2)
301 ms(nod) = ms(nod) + rbuf(ideb+3)
302 stifn(nod) = stifn(nod)+rbuf(ideb+4)
303 fthe(nod) = fthe(nod) +rbuf(ideb+5)
307#include "vectorize.inc"
310 a(1,nod) = a(1,nod) + rbuf(ideb)
311 a(2,nod) = a(2,nod) + rbuf(ideb+1)
312 a(3,nod) = a(3,nod) + rbuf(ideb+2)
313 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
314 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
315 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
316 ms(nod) = ms(nod) + rbuf(ideb+6)
317 in(nod) = in(nod) + rbuf(ideb+7)
318 stifn(nod) = stifn(nod)+rbuf(ideb+8)
319 stifr(nod) = stifr(nod)+rbuf(ideb+9)
320 fthe(nod) = fthe(nod) +rbuf(ideb+10)
327#include "vectorize.inc"
330 a(1,nod) = a(1,nod) + rbuf(ideb)
331 a(2,nod) = a(2,nod) + rbuf(ideb+1)
332 a(3,nod) = a(3,nod) + rbuf(ideb+2)
333 ms(nod) = ms(nod) + rbuf(ideb+3)
334 stifn(nod) = stifn(nod)+rbuf(ideb+4)
338#include "vectorize.inc"
341 a(1,nod) = a(1,nod) + rbuf(ideb)
342 a(2,nod) = a(2,nod) + rbuf(ideb+1)
343 a(3,nod) = a(3,nod) + rbuf(ideb+2)
344 ar(1,nod) = ar(1,nod)+ rbuf(ideb+3)
345 ar(2,nod) = ar(2,nod)+ rbuf(ideb+4)
346 ar(3,nod) = ar(3,nod)+ rbuf(ideb+5)
347 ms(nod) = ms(nod) + rbuf(ideb+6)
348 in(nod) = in(nod) + rbuf(ideb+7)
349 stifn(nod) = stifn(nod)+rbuf(ideb+8)
350 stifr(nod) = stifr(nod)+rbuf(ideb+9)
356 IF (h3d_data%N_VECT_CONT2_MAX > 0.OR.h3d_data%N_VECT_CONT2_MIN > 0)
THEN
357#include "vectorize.inc"
360 fncont(1,nod) = fncont(1,nod) + rbuf(ideb)
361 fncont(2,nod) = fncont(2,nod) + rbuf(ideb+1)
362 fncont(3,nod) = fncont(3,nod) + rbuf(ideb+2)
366 IF (h3d_data%N_VECT_PCONT2_MAX > 0.OR.h3d_data%N_VECT_PCONT2_MIN > 0)
THEN
367#include "vectorize.inc"
370 fncontp(1,nod) = fncontp(1,nod) + rbuf(ideb)
371 fncontp(2,nod) = fncontp(2,nod) + rbuf(ideb+1)
372 fncontp(3,nod) = fncontp(3,nod) + rbuf(ideb+2)
373 ftcontp(1,nod) = ftcontp(1,nod) + rbuf(ideb+3)
374 ftcontp(2,nod) = ftcontp(2,nod) + rbuf(ideb+4)
375 ftcontp(3,nod) = ftcontp(3,nod) + rbuf(ideb+5)
383 CALL mpi_waitany(nbindex,req_s,index,status,ierror)