40
42 USE glob_therm_mod
43
44
45
46 USE spmd_comm_world_mod, ONLY : spmd_comm_world
47#include "implicit_f.inc"
48
49
50
51#include "spmd.inc"
52
53
54
55#include "com01_c.inc"
56#include "com04_c.inc"
57#include "sphcom.inc"
58#include "task_c.inc"
59#include "scr18_c.inc"
60#include "scr05_c.inc"
61#include "scr14_c.inc"
62#include "intstamp_c.inc"
63
64
65
66 INTEGER IAD_ELEM(2,*),FR_ELEM(*), SIZE, LENR, IFSUBM,
67 . NFACNIT,LENC
69 . ar(3,*),stifn(*),stifr(*),ms(*),msnf(*),
70 . fthe(*),mcp(*), dmsph(*),condn(*)
71 my_real,
DIMENSION(3,*),
INTENT(inout),
TARGET :: a
72 REAL(kind=8), dimension(3,*), INTENT(inout), TARGET :: adp
73
75 . ms_2d(*),mcp_off(*),
76 . forneqs(3,*)
77 my_real ,
INTENT(INOUT) :: fcont(3,numnod),fncont(3,numnod),
78 . ftcont(3,numnod)
79 TYPE(H3D_DATABASE) :: H3D_DATA
80 TYPE(GLOB_THERM_) ,INTENT(IN) :: GLOB_THERM
81
82
83
84#ifdef MPI
85 INTEGER MSGTYP,I,NOD,LOC_PROC,IERROR,MSGOFF,
86 . SIZ,J,K,L,NB_NOD,IADMSPH,
87 . STATUS(MPI_STATUS_SIZE),
88 . IAD_SEND(NSPMD+1),(NSPMD+1),
89 . REQ_R(NSPMD),REQ_S(NSPMD)
90 DATA msgoff/120/
91
92 REAL(kind=8)
93 . rbuf(size*lenr + nfacnit*lenr + lenc*lenr),
94 . sbuf(size*lenr + nfacnit*lenr + lenc*lenr)
95 REAL(=8), dimension(:,:), POINTER :: acc_pointer
96
97
98
99#ifdef MYREAL4
100 acc_pointer=>adp(1:3,1:numnod)
101#else
102 acc_pointer=>a(1:3,1:numnod)
103#endif
104 loc_proc = ispmd + 1
105 l = 1
106 iad_recv(1) = 1
107 DO i=1,nspmd
108 siz = (size+nfacnit+lenc)*(iad_elem(1,i+1)-iad_elem(1,i))
109 IF(siz/=0)THEN
110 msgtyp = msgoff
112 s rbuf(l),siz,mpi_double_precision,it_spmd(i),msgtyp,
113 g spmd_comm_world,req_r(i),ierror)
114 l = l + siz
115 ENDIF
116 iad_recv(i+1) = l
117 END DO
118
119 IF(sol2sph_flag/=0)THEN
120 iadmsph=5
121 IF(iroddl/=0)iadmsph=iadmsph+4
122 IF(glob_therm%INTHEAT /= 0 .OR. glob_therm%ITHERM_FE /= 0) iadmsph=iadmsph+1
123 l = 1
124 DO i=1,nspmd
125
126#include "vectorize.inc"
127 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
128 nod = fr_elem(j)
129 sbuf(l + iadmsph - 1) = dmsph(nod)
130 l = l + SIZE
131 END DO
132 END DO
133 END IF
134
135 IF(iresp==1) THEN
136 DO i = 1, nspmd
137 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
138 nod = fr_elem(j)
139 acc_pointer(1,nod) = a(1,nod)
140 acc_pointer(2,nod) = a(2,nod)
141 acc_pointer(3,nod) = a(3,nod)
142 ENDDO
143 ENDDO
144 ENDIF
145
146
147 l = 1
148 iad_send(1) = 1
149 DO i=1,nspmd
150
151 IF(glob_therm%INTHEAT == 0 .AND. glob_therm%ITHERM_FE == 0 )THEN
152 IF (n2d==0.AND.ifsubm==0) THEN
153 IF(iroddl/=0) THEN
154#include "vectorize.inc"
155 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
156 nod = fr_elem(j)
157 sbuf(l ) = acc_pointer(1,nod)
158 sbuf(l+1) = acc_pointer(2,nod)
159 sbuf(l+2) = acc_pointer(3,nod)
160 sbuf(l+3) = ar(1,nod)
161 sbuf(l+4) = ar(2,nod)
162 sbuf(l+5) = ar(3,nod)
163 sbuf(l+6) = stifn(nod)
164 sbuf(l+7) = stifr(nod)
165 l = l + SIZE
166 END DO
167 ELSE
168#include "vectorize.inc"
169 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
170 nod = fr_elem(j)
171 sbuf(l ) = acc_pointer(1,nod)
172 sbuf(l+1) = acc_pointer(2,nod)
173 sbuf(l+2) = acc_pointer(3,nod)
174 sbuf(l+3) = stifn(nod)
175 l = l + SIZE
176 END DO
177 ENDIF
178
179 ELSEIF(n2d/=0.AND.ifsubm==1)THEN
180 IF(iroddl/=0) THEN
181#include "vectorize.inc"
182 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
183 nod = fr_elem(j)
184 sbuf(l ) = acc_pointer(1,nod)
185 sbuf(l+1) = acc_pointer(2,nod)
186 sbuf(l+2) = acc_pointer(3,nod)
187 sbuf(l+3) = ar(1,nod)
188 sbuf(l+4) = ar(2,nod)
189 sbuf(l+5) = ar(3,nod)
190 sbuf(l+6) = stifn(nod)
191 sbuf(l+7) = stifr(nod)
192 sbuf(l+8) = ms(nod)
193 sbuf(l+9) = ms_2d(nod)
194 l = l + SIZE
195 END DO
196 ELSE
197#include "vectorize.inc"
198 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
199 nod = fr_elem(j)
200 sbuf(l ) = acc_pointer(1,nod)
201 sbuf(l+1) = acc_pointer(2,nod)
202 sbuf(l+2) = acc_pointer(3,nod)
203 sbuf(l+3) = stifn(nod)
204 sbuf(l+4) = ms(nod)
205 sbuf(l+5) = ms_2d(nod)
206 l = l + SIZE
207 END DO
208 ENDIF
209 ELSEIF(n2d/=0.AND.ifsubm==0)THEN
210 IF(iroddl/=0) THEN
211#include "vectorize.inc"
212 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
213 nod = fr_elem(j)
214 sbuf(l ) = acc_pointer(1,nod)
215 sbuf(l+1) = acc_pointer(2,nod)
216 sbuf(l+2) = acc_pointer(3,nod)
217 sbuf(l+3) = ar(1,nod)
218 sbuf(l+4) = ar(2,nod)
219 sbuf(l+5) = ar(3,nod)
220 sbuf(l+6) = stifn(nod)
221 sbuf(l+7) = stifr(nod)
222 sbuf(l+8) = ms(nod)
223 l = l + SIZE
224 END DO
225 ELSE
226#include "vectorize.inc"
227 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
228 nod = fr_elem(j)
229 sbuf(l ) = acc_pointer(1,nod)
230 sbuf(l+1) = acc_pointer(2,nod)
231 sbuf(l+2) = acc_pointer(3,nod)
232 sbuf(l+3) = stifn(nod)
233 sbuf(l+4) = ms(nod)
234 l = l + SIZE
235 END DO
236 ENDIF
237
238 ELSEIF(n2d==0.AND.ifsubm==1)THEN
239 IF(iroddl/=0) THEN
240#include "vectorize.inc"
241 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
242 nod = fr_elem(j)
243 sbuf(l ) = acc_pointer(1,nod)
244 sbuf(l+1) = acc_pointer(2,nod)
245 sbuf(l+2) = acc_pointer(3,nod)
246 sbuf(l+3) = ar(1,nod)
247 sbuf(l+4) = ar(2,nod)
248 sbuf(l+5) = ar(3,nod)
249 sbuf(l+6) = stifn(nod)
250 sbuf(l+7) = stifr(nod)
251 sbuf(l+8) = ms(nod)
252 sbuf(l+9) = msnf(nod)
253 l = l + SIZE
254 END DO
255 ELSE
256#include "vectorize.inc"
257 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
258 nod = fr_elem(j)
259 sbuf(l ) = acc_pointer(1,nod)
260 sbuf(l+1) = acc_pointer(2,nod)
261 sbuf(l+2) = acc_pointer(3,nod)
262 sbuf(l+3) = stifn(nod)
263 sbuf(l+4) = ms(nod)
264 sbuf(l+5) = msnf(nod)
265 l = l + SIZE
266 END DO
267 ENDIF
268 ENDIF
269
270
271
272 ELSE
273 IF (n2d==0.AND.ifsubm==0) THEN
274 IF(iroddl/=0) THEN
275#include "vectorize.inc"
276 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
277 nod = fr_elem(j)
278 sbuf(l ) = acc_pointer(1,nod)
279 sbuf(l+1) = acc_pointer(2,nod)
280 sbuf(l+2) = acc_pointer(3,nod)
281 sbuf(l+3) = ar(1,nod)
282 sbuf(l+4) = ar(2,nod)
283 sbuf(l+5) = ar(3,nod)
284 sbuf(l+6) = stifn(nod)
285 sbuf(l+7) = stifr(nod)
286 sbuf(l+8) = fthe(nod)
287 IF(glob_therm%ITHERM_FE == 1) sbuf(l+9) = mcp(nod)
288 IF(glob_therm%ITHERM_FE == 1) sbuf(l+10) = mcp_off(nod)
289 l = l + SIZE
290 END DO
291 ELSE
292 IF(glob_therm%NODADT_THERM ==1 )THEN
293#include "vectorize.inc"
294 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
295 nod = fr_elem(j)
296 sbuf(l ) = acc_pointer(1,nod)
297 sbuf(l+1) = acc_pointer(2,nod)
298 sbuf(l+2) = acc_pointer(3,nod)
299 sbuf(l+3) = stifn(nod)
300 sbuf(l+4) = fthe(nod)
301 sbuf(l+5) = condn(nod)
302 IF(glob_therm%ITHERM_FE == 1) sbuf(l+6) = mcp(nod)
303 IF(glob_therm%ITHERM_FE == 1) sbuf(l+7) = mcp_off(nod)
304 l = l + SIZE
305 END DO
306 ELSE
307#include "vectorize.inc"
308 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
309 nod = fr_elem(j)
310 sbuf(l ) = acc_pointer(1,nod)
311 sbuf(l+1) = acc_pointer(2,nod)
312 sbuf(l+2) = acc_pointer(3,nod)
313 sbuf(l+3) = stifn(nod)
314 sbuf(l+4) = fthe(nod)
315 IF(glob_therm%ITHERM_FE == 1) sbuf(l+5) = mcp(nod)
316 IF(glob_therm%ITHERM_FE == 1) sbuf(l+6) = mcp_off(nod)
317 l = l + SIZE
318 END DO
319 ENDIF
320 ENDIF
321
322 ELSEIF(n2d/=0.AND.ifsubm==1)THEN
323 IF(iroddl/=0) THEN
324#include "vectorize.inc"
325 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
326 nod = fr_elem(j)
327 sbuf(l ) = acc_pointer(1,nod)
328 sbuf(l+1) = acc_pointer(2,nod)
329 sbuf(l+2) = acc_pointer(3,nod)
330 sbuf(l+3) = ar(1,nod)
331 sbuf(l+4) = ar(2,nod)
332 sbuf(l+5) = ar(3,nod)
333 sbuf(l+6) = stifn(nod)
334 sbuf(l+7) = stifr(nod)
335 sbuf(l+8) = ms(nod)
336 sbuf(l+9) = fthe(nod)
337 sbuf(l+10) = mcp(nod)
338 sbuf(l+11) = ms_2d(nod)
339 l = l + SIZE
340 END DO
341 ELSE
342#include "vectorize.inc"
343 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
344 nod = fr_elem(j)
345 sbuf(l ) = acc_pointer(1,nod)
346 sbuf(l+1) = acc_pointer(2,nod)
347 sbuf(l+2) = acc_pointer(3,nod)
348 sbuf(l+3) = stifn(nod)
349 sbuf(l+4) = ms(nod)
350 sbuf(l+5) = fthe(nod)
351 sbuf(l+6) = mcp(nod)
352 sbuf(l+7) = ms_2d(nod)
353 l = l + SIZE
354 END DO
355 ENDIF
356 ELSEIF(n2d/=0.AND.ifsubm==0)THEN
357 IF(iroddl/=0) THEN
358#include "vectorize.inc"
359 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
360 nod = fr_elem(j)
361 sbuf(l ) = acc_pointer(
362 sbuf(l+1) = acc_pointer(2,nod)
363 sbuf(l+2) = acc_pointer(3,nod)
364 sbuf(l+3) = ar(1,nod)
365 sbuf(l+4) = ar(2,nod)
366 sbuf(l+5) = ar(3,nod)
367 sbuf(l+6) = stifn(nod)
368 sbuf(l+7) = stifr(nod)
369 sbuf(l+8) = ms(nod)
370 sbuf(l+9) = fthe(nod)
371 sbuf(l+10) = mcp(nod)
372 l = l + SIZE
373 END DO
374 ELSE
375#include "vectorize.inc"
376 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
377 nod = fr_elem(j
378 sbuf(l ) = acc_pointer(1,nod)
379 sbuf(l+1) = acc_pointer(2,nod)
380 sbuf(l
381 sbuf(l+3) = stifn(nod)
382 sbuf(l+4) = ms(nod)
383 sbuf(l+5) = fthe(nod)
384 sbuf(l+6) = mcp(nod)
385 l = l + SIZE
386 END DO
387 ENDIF
388 ELSEIF(n2d==0.AND.ifsubm==1)THEN
389 IF(iroddl/=0) THEN
390#include "vectorize.inc"
391 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
392 nod = fr_elem(j)
393 sbuf(l ) = acc_pointer(1,nod)
394 sbuf(l+1) = acc_pointer(2,nod)
395 sbuf(l+2) = acc_pointer(3,nod)
396 sbuf(l+3) = ar(1,nod)
397 sbuf(l+4) = ar(2,nod)
398 sbuf(l+5) = ar(3,nod)
399 sbuf(l+6) = stifn(nod)
400 sbuf(l+7) = stifr(nod)
401 sbuf(l+8) = ms(nod)
402 sbuf(l+9) = msnf(nod)
403 sbuf(l+10) = fthe(nod)
404 sbuf(l+11) = mcp(nod)
405 l = l + SIZE
406 END DO
407 ELSE
408#include "vectorize.inc"
409 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
410 nod = fr_elem(j)
411 sbuf(l ) = acc_pointer(1,nod)
412 sbuf(l+1) = acc_pointer(2,nod)
413 sbuf(l+2) = acc_pointer(3,nod)
414 sbuf(l+3) = stifn(nod)
415 sbuf(l+4) = ms(nod)
416 sbuf(l+5) = msnf(nod)
417 sbuf(l+6) = fthe(nod)
418 sbuf(l+7) = mcp(nod)
419 l = l + SIZE
420 END DO
421 ENDIF
422 ENDIF
423 ENDIF
424
425
426
427
428 IF(nitsche > 0) THEN
429#include "vectorize.inc"
430 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
431 nod = fr_elem(j)
432 sbuf(l ) = forneqs(1,nod)
433 sbuf(l+1) = forneqs(2,nod)
434 sbuf(l+2) = forneqs(3,nod)
435 l = l + nfacnit
436 END DO
437 ENDIF
438
439 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0) THEN
440#include "vectorize.inc"
441 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
442 nod = fr_elem(j)
443 sbuf(l ) = fcont(1,nod)
444 sbuf(l+1) = fcont(2,nod)
445 sbuf(l+2) = fcont(3,nod)
446 l = l + 3
447 END DO
448 ENDIF
449
450
451 IF(h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0) THEN
452#include "vectorize.inc"
453 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
454 nod = fr_elem(j)
455 sbuf(l ) = fncont(1,nod)
456 sbuf(l+1) = fncont(2,nod)
457 sbuf(l+2) = fncont(3,nod)
458 sbuf(l+3) = ftcont(1,nod)
459 sbuf(l+4) = ftcont(2,nod)
460 sbuf(l+5) = ftcont(3,nod)
461 l = l + 6
462 END DO
463 ENDIF
464
465 iad_send(i+1) = l
466 ENDDO
467
468
469
470 DO i=1,nspmd
471
472
473
474 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)THEN
475 msgtyp = msgoff
476 siz = iad_send(i+1)-iad_send(i)
477 l = iad_send(i)
479 s sbuf(l),siz,mpi_double_precision,it_spmd(i),msgtyp,
480 g spmd_comm_world,req_s(i),ierror)
481 ENDIF
482
483 ENDDO
484
485
486
487 IF(sol2sph_flag/=0)THEN
488 iadmsph=5
489 IF(iroddl/=0)iadmsph=iadmsph+4
490 IF (glob_therm%INTHEAT /= 0 .OR. glob_therm%ITHERM_FE /= 0) iadmsph=iadmsph+1
491 DO i = 1, nspmd
492 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
493 IF(nb_nod>0)THEN
494 CALL mpi_wait(req_r(i),status,ierror)
495 l = iad_recv(i)
496#include "vectorize.inc"
497 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
498 nod = fr_elem(j)
499 dmsph(nod) = dmsph(nod) + rbuf(l+iadmsph-1)
500 l = l + SIZE
501 END DO
502 END IF
503 END DO
504 END IF
505
506 DO i = 1, nspmd
507
508 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
509 IF(nb_nod>0)THEN
510 CALL mpi_wait(req_r(i),status,ierror)
511 l = iad_recv(i)
512
513 IF (glob_therm%ITHERM_FE == 0 .AND. glob_therm%INTHEAT == 0 ) THEN
514 IF (n2d==0.AND.ifsubm==0) THEN
515 IF(iroddl/=0) THEN
516#include "vectorize.inc"
517 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
518 nod = fr_elem(j)
519 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
520 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l
521 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
522 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
523 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
524 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
525 stifn(nod)= stifn(nod)+ rbuf(l+6)
526 stifr(nod)= stifr(nod)+ rbuf(l+7)
527 l = l + SIZE
528 END DO
529 ELSE
530#include "vectorize.inc"
531 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
532 nod = fr_elem(j)
533 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
534 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
535 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
536 stifn(nod)= stifn(nod)+ rbuf(l+3)
537 l = l + SIZE
538 END DO
539 ENDIF
540
541 ELSEIF(n2d/=0.AND.ifsubm==1)THEN
542 IF(iroddl/=0) THEN
543#include "vectorize.inc"
544 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
545 nod = fr_elem(j)
546 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
547 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
548 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
549 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
550 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
551 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
552 stifn(nod)= stifn(nod)+ rbuf(l+6)
553 stifr(nod)= stifr(nod)+ rbuf(l+7)
554 ms(nod) = ms(nod)+ rbuf(l+8)
555 ms_2d(nod) = ms_2d(nod)+ rbuf(l+9)
556 l = l + SIZE
557 END DO
558 ELSE
559#include "vectorize.inc"
560 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
561 nod = fr_elem(j)
562 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
563 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
564 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
565 stifn(nod)= stifn(nod)+ rbuf(l+3)
566 ms(nod) = ms(nod)+ rbuf(l+4)
567 ms_2d(nod) = ms_2d(nod)+ rbuf(l+5)
568 l = l + SIZE
569 END DO
570 ENDIF
571 ELSEIF(n2d/=0.AND.ifsubm==0)THEN
572 IF(iroddl/=0) THEN
573#include "vectorize.inc"
574 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
575 nod = fr_elem(j)
576 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
577 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
578 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
579 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
580 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
581 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
582 stifn(nod)= stifn(nod)+ rbuf(l+6)
583 stifr(nod)= stifr(nod)+ rbuf(l+7)
584 ms(nod) = ms(nod)+ rbuf(l+8)
585 l = l + SIZE
586 END DO
587 ELSE
588#include "vectorize.inc"
589 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
590 nod = fr_elem(j)
591 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
592 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
593 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
594 stifn(nod)= stifn(nod)+ rbuf(l+3)
595 ms(nod) = ms(nod)+ rbuf(l+4)
596 l = l + SIZE
597 END DO
598 ENDIF
599 ELSEIF(n2d==0.AND.ifsubm==1)THEN
600 IF(iroddl/=0) THEN
601#include "vectorize.inc"
602 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
603 nod = fr_elem(j)
604 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
605 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
606 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
607 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
608 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
609 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
610 stifn(nod)= stifn(nod)+ rbuf(l+6)
611 stifr(nod)= stifr(nod)+ rbuf(l+7)
612 ms(nod) = ms(nod)+ rbuf(l+8)
613 msnf(nod) = msnf(nod) + rbuf(l+9)
614 l = l + SIZE
615 END DO
616 ELSE
617#include "vectorize.inc"
618 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
619 nod = fr_elem(j)
620 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
621 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
622 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
623 stifn(nod)= stifn(nod)+ rbuf(l+3)
624 ms(nod) = ms(nod)+ rbuf(l+4)
625 msnf(nod) = msnf(nod) + rbuf(l+5)
626 l = l + SIZE
627 END DO
628 ENDIF
629 ENDIF
630
631
632
633 ELSE
634 IF (n2d==0.AND.ifsubm==0) THEN
635 IF(iroddl/=0) THEN
636#include "vectorize.inc"
637 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
638 nod = fr_elem(j)
639 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
640 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
641 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
642 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
643 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
644 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
645 stifn(nod)= stifn(nod)+ rbuf(l+6)
646 stifr(nod)= stifr(nod)+ rbuf(l+7)
647 fthe(nod) = fthe(nod) + rbuf(l+8)
648 IF(glob_therm%ITHERM_FE == 1) mcp(nod) = mcp(nod) + rbuf(l+9)
649 IF(glob_therm%ITHERM_FE == 1) mcp_off(nod) =
max(mcp_off(nod),rbuf(l+10))
650 l = l + SIZE
651 END DO
652 ELSE
653 IF(glob_therm%NODADT_THERM == 1) THEN
654#include "vectorize.inc"
655 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
656 nod = fr_elem(j)
657 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
658 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
659 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
660 stifn(nod)= stifn(nod)+ rbuf(l+3)
661 fthe(nod) = fthe(nod) + rbuf(l+4)
662 condn(nod) = condn(nod) + rbuf(l+5)
663 IF(glob_therm%ITHERM_FE == 1) mcp(nod) = mcp(nod) + rbuf(l+6)
664 IF(glob_therm%ITHERM_FE == 1) mcp_off(nod) =
max(mcp_off(nod),rbuf(l+7))
665 l = l + SIZE
666 END DO
667 ELSE
668#include "vectorize.inc"
669 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
670 nod = fr_elem(j)
671 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
672 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
673 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
674 stifn(nod)= stifn(nod)+ rbuf(l+3)
675 fthe(nod) = fthe(nod) + rbuf(l+4)
676 IF(glob_therm%ITHERM_FE == 1) mcp(nod) = mcp(nod) + rbuf(l+5)
677 IF(glob_therm%ITHERM_FE == 1) mcp_off(nod) =
max(mcp_off(nod),rbuf(l+6))
678 l = l + SIZE
679 END DO
680 ENDIF
681 ENDIF
682
683 ELSEIF(n2d/=0.AND.ifsubm==1)THEN
684 IF(iroddl/=0) THEN
685#include "vectorize.inc"
686 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
687 nod = fr_elem(j)
688 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
689 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
690 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
691 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
692 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
693 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
694 stifn(nod)= stifn(nod)+ rbuf(l+6)
695 stifr(nod)= stifr(nod)+ rbuf(l+7)
696 ms(nod) = ms(nod)+ rbuf(l+8)
697 fthe(nod) = fthe(nod) + rbuf(l+9)
698 mcp(nod) = mcp(nod) + rbuf(l+10)
699 ms_2d(nod) = ms_2d(nod)+ rbuf(l+11)
700 l = l + SIZE
701 END DO
702 ELSE
703#include "vectorize.inc"
704 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
705 nod = fr_elem(j)
706 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
707 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
708 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
709 stifn(nod)= stifn(nod)+ rbuf(l+3)
710 ms(nod) = ms(nod)+ rbuf(l+4)
711 fthe(nod) = fthe(nod) + rbuf(l+5)
712 mcp(nod) = mcp(nod) + rbuf(l+6)
713 ms_2d(nod) = ms_2d(nod)+ rbuf(l+7)
714 l = l + SIZE
715 END DO
716 ENDIF
717 ELSEIF(n2d/=0.AND.ifsubm==0)THEN
718 IF(iroddl/=0) THEN
719#include "vectorize.inc"
720 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
721 nod = fr_elem(j)
722 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
723 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
724 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
725 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
726 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
727 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
728 stifn(nod)= stifn(nod)+ rbuf(l+6)
729 stifr(nod)= stifr(nod)+ rbuf(l+7)
730 ms(nod) = ms(nod)+ rbuf(l+8)
731 fthe(nod) = fthe(nod) + rbuf(l+9)
732 mcp(nod) = mcp(nod) + rbuf(l+10)
733 l = l + SIZE
734 END DO
735 ELSE
736#include "vectorize.inc"
737 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
738 nod = fr_elem(j)
739 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
740 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
741 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
742 stifn(nod)= stifn(nod)+ rbuf(l+3)
743 ms(nod) = ms(nod)+ rbuf(l+4)
744 fthe(nod) = fthe(nod) + rbuf(l+5)
745 mcp(nod) = mcp(nod) + rbuf(l+6)
746 l = l + SIZE
747 END DO
748 ENDIF
749 ELSEIF(n2d==0.AND.ifsubm==1)THEN
750 IF(iroddl/=0) THEN
751#include "vectorize.inc"
752 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
753 nod = fr_elem(j)
754 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
755 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
756 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
757 ar(1,nod)= ar(1,nod)+ rbuf(l+3)
758 ar(2,nod)= ar(2,nod)+ rbuf(l+4)
759 ar(3,nod)= ar(3,nod)+ rbuf(l+5)
760 stifn(nod)= stifn(nod)+ rbuf(l+6)
761 stifr(nod)= stifr(nod)+ rbuf(l+7)
762 ms(nod) = ms(nod)+ rbuf(l+8)
763 msnf(nod) = msnf(nod) + rbuf(l+9)
764 fthe(nod) = fthe(nod) + rbuf(l+10)
765 mcp(nod) = mcp(nod
766 l = l + SIZE
767 END DO
768 ELSE
769#include "vectorize.inc"
770 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
771 nod = fr_elem(j)
772 acc_pointer(1,nod) = acc_pointer(1,nod) + rbuf(l)
773 acc_pointer(2,nod) = acc_pointer(2,nod) + rbuf(l+1)
774 acc_pointer(3,nod) = acc_pointer(3,nod) + rbuf(l+2)
775 stifn(nod)= stifn(nod)+ rbuf(l+3)
776 ms(nod) = ms(nod)+ rbuf(l+4)
777 msnf(nod) = msnf(nod) + rbuf(l+5)
778 fthe(nod) = fthe(nod) + rbuf(l+6)
779 mcp(nod) = mcp(nod) + rbuf(l+7)
780 l = l + SIZE
781 END DO
782 ENDIF
783 ENDIF
784 ENDIF
785
786 ENDIF
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804 IF(nitsche > 0) THEN
805#include "vectorize.inc"
806 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
807 nod = fr_elem(j)
808 forneqs(1,nod) = forneqs(1,nod) + rbuf(l)
809 forneqs(2,nod) = forneqs(2,nod) + rbuf(l+1)
810 forneqs(3,nod) = forneqs(3,nod) + rbuf(l+2)
811 l = l + nfacnit
812 END DO
813 ENDIF
814
815 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0) THEN
816#include "vectorize.inc"
817 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
818 nod = fr_elem(j)
819 fcont(1,nod) = fcont(1,nod) + rbuf(l)
820 fcont(2,nod) = fcont(2,nod) + rbuf(l+1)
821 fcont(3,nod) = fcont(3,nod) + rbuf(l+2)
822 l = l + 3
823 END DO
824 ENDIF
825
826
827 IF(h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0) THEN
828#include "vectorize.inc"
829 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
830 nod = fr_elem(j)
831 fncont(1,nod) = fncont(1,nod) + rbuf(l)
832 fncont(2,nod) = fncont(2,nod) + rbuf(l+1)
833 fncont(3,nod) = fncont(3,nod) + rbuf(l+2)
834 ftcont(1,nod) = ftcont(1,nod) + rbuf(l+3)
835 ftcont(2,nod) = ftcont(2,nod) + rbuf(l+4)
836 ftcont(3,nod) = ftcont(3,nod) + rbuf(l+5)
837 l = l + 6
838 END DO
839 ENDIF
840
841
842
843
844 END DO
845
846
847
848 IF(iresp==1) THEN
849 DO i = 1, nspmd
850 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
851 IF(nb_nod>0)THEN
852 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
853 nod = fr_elem(j)
854 a(1,nod) = acc_pointer(1,nod)
855 a(2,nod) = acc_pointer(2,nod)
856 a(3,nod) = acc_pointer(3,nod)
857 ENDDO
858 ENDIF
859 ENDDO
860 ENDIF
861
862 DO i = 1, nspmd
863 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)THEN
864 CALL mpi_wait(req_s(i),status,ierror)
865 ENDIF
866 ENDDO
867
868#endif
869 RETURN
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_wait(ireq, status, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)