34 1 A ,AR ,STIFN,STIFR ,MS ,
35 2 IAD_ELEM ,FR_ELEM,MSNF ,IFSUBM,SIZE,
36 3 LENR ,FTHE ,MCP ,FR_LOC,NB_FR,
37 4 MS_2D , MCP_OFF,FORNEQS,NFACNIT ,
38 5 LENC ,FCONT ,H3D_DATA,FNCONT ,
39 6 FTCONT ,GLOB_THERM )
46 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
47#include "implicit_f.inc"
59#include "intstamp_c.inc"
63 INTEGER IAD_ELEM(2,*),FR_ELEM(*), SIZE, LENR, IFSUBM,NB_FR,FR_LOC(*),
66 . A(3,*),AR(3,*),STIFN(*),STIFR(*),MS(*),MSNF(*),
67 . FTHE(*),MCP(*),(*),MS_2D(*),FORNEQS(3,*)
68 my_real ,
INTENT(INOUT) :: FCONT(3,NUMNOD),FNCONT(3,NUMNOD),
71 TYPE(glob_therm_) ,
INTENT(IN) :: GLOB_THERM
76 INTEGER MSGTYP,I,NOD,LOC_PROC,IERROR,MSGOFF,
78 . status(mpi_status_size),
79 . iad_send(nspmd+1),iad_recv(nspmd+1),
80 . req_r(nspmd),req_s(nspmd),
85 . rbuf(size*lenr + nfacnit*lenr + lenc*lenr),
86 . sbuf(size*lenr + nfacnit*lenr + lenc*lenr)
88 .
DIMENSION (:,:),
ALLOCATABLE :: sav_a
92 ALLOCATE(sav_a(size+nfacnit+lenc,nb_fr))
99 siz = (
SIZE + nfacnit + lenc)*(iad_elem(1,i+1)-iad_elem(1,i))
103 s rbuf(l),siz,real,it_spmd(i),msgtyp,
104 g spmd_comm_world,req_r(i),ierror)
114 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
119 sbuf(l+3) = stifn(nod)
124 sbuf(shift+1) = ar(1,nod)
125 sbuf(shift+2) = ar(2,nod)
126 sbuf(shift+3) = ar(3,nod)
128 sbuf(shift+4) = stifr(nod)
133 sbuf(shift+1) = ms(nod)
137 IF(n2d /=0.AND.ifsubm ==1)
THEN
138 sbuf(shift+1) = ms_2d(nod)
143 sbuf(shift+1) = msnf(nod)
147 IF(glob_therm%INTHEAT /=0 .OR. glob_therm%ITHERM_FE/=0)
THEN
148 sbuf(shift+1) = fthe(nod)
150 IF(glob_therm%ITHERM_FE /= 0)
THEN
151 sbuf(shift+1) = mcp(nod)
153 sbuf(shift+1) = mcp_off(nod)
159 sbuf(shift+1) = forneqs(1,nod)
160 sbuf(shift+2) = forneqs(2,nod)
161 sbuf(shift+3) = forneqs(3,nod)
162 shift = shift+nfacnit
166 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0)
THEN
167 sbuf(shift+1) = fcont(1,nod)
168 sbuf(shift+2) = fcont(2,nod)
169 sbuf(shift+3) = fcont(3,nod)
174 IF(anim_v(26)+h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0)
THEN
175 sbuf(shift+1) = fncont(1,nod)
176 sbuf(shift+2) = fncont(2,nod)
177 sbuf(shift+3) = fncont(3,nod)
178 sbuf(shift+4) = ftcont(1,nod)
179 sbuf(shift+5) = ftcont(2,nod)
180 sbuf(shift+6) = ftcont(3,nod)
184 l = l +
SIZE + nfacnit +lenc
196 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
198 siz = iad_send(i+1)-iad_send(i)
201 s sbuf(l),siz,real,it_spmd(i),msgtyp,
202 g spmd_comm_world,req_s(i),ierror)
211 sav_a(1,j) = a(1,nod)
212 sav_a(2,j) = a(2,nod)
213 sav_a(3,j) = a(3,nod)
214 sav_a(4,j) = stifn(nod)
224 sav_a(shift+1,j) = ar(1,nod)
225 sav_a(shift+2,j) = ar(2,nod)
226 sav_a(shift+3,j) = ar(3,nod)
227 sav_a(shift+4,j) = stifr(nod)
237 sav_a(shift+1,j) = ms(nod)
242 IF(n2d /=0.AND.ifsubm ==1)
THEN
243 sav_a(shift+1,j) = ms_2d(nod)
249 sav_a(shift+1,j) = msnf(nod)
254 IF(glob_therm%INTHEAT /=0 .OR. glob_therm%ITHERM_FE/=0)
THEN
255 sav_a(shift+1,j) = fthe(nod)
258 IF(glob_therm%ITHERM_FE /= 0 )
THEN
259 sav_a(shift+1,j) = mcp(nod)
262 sav_a(shift+1,j) = mcp_off(nod)
269 sav_a(shift+1,j) = forneqs(1,nod)
270 sav_a(shift+2,j) = forneqs(2,nod)
271 sav_a(shift+3,j) = forneqs(3,nod)
273 forneqs(1,nod) = zero
274 forneqs(2,nod) = zero
275 forneqs(3,nod) = zero
277 shift = shift+nfacnit
280 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0)
THEN
281 sav_a(shift+1,j) = fcont(1,nod)
282 sav_a(shift+2,j) = fcont(2,nod)
283 sav_a(shift+3,j) = fcont(3,nod)
292 IF(h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0)
THEN
293 sav_a(shift+1,j) = fncont(1,nod)
294 sav_a(shift+2,j) = fncont(2,nod)
295 sav_a(shift+3,j) = fncont(3,nod)
296 sav_a(shift+4,j) = ftcont(1,nod)
297 sav_a(shift+5,j) = ftcont(2,nod)
298 sav_a(shift+6,j) = ftcont(3,nod)
317 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
319 CALL mpi_wait(req_r(i),status,ierror)
322 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
324 a(1,nod) = a(1,nod) + rbuf(l)
325 a(2,nod) = a(2,nod) + rbuf(l+1)
326 a(3,nod) = a(3,nod) + rbuf(l+2)
327 stifn(nod)= stifn(nod)+ rbuf(l+3)
332 ar(1,nod)= ar(1,nod)+ rbuf(shift+1)
333 ar(2,nod)= ar(2,nod)+ rbuf(shift+2)
335 stifr(nod)= stifr(nod)+ rbuf(shift+4)
340 ms(nod) = ms(nod)+ rbuf(shift+1)
344 IF(n2d /=0.AND.ifsubm ==1)
THEN
345 ms_2d(nod) = ms_2d(nod)+ rbuf(shift+1)
350 msnf(nod) = msnf(nod) + rbuf(shift+1)
354 IF(glob_therm%INTHEAT /=0 .OR. glob_therm%ITHERM_FE/=0)
THEN
355 fthe(nod) = fthe(nod) + rbuf(shift+1)
357 IF(glob_therm%ITHERM_FE /= 0)
THEN
358 mcp(nod) = mcp(nod) + rbuf(shift+1)
360 mcp_off(nod) =
max(mcp_off(nod),rbuf(shift+1))
366 forneqs(1,nod)= forneqs(1,nod)+ rbuf(shift+1)
367 forneqs(2,nod)= forneqs(2,nod)+ rbuf(shift+2)
368 forneqs(3,nod)= forneqs(3,nod)+ rbuf(shift+3)
369 shift = shift+nfacnit
372 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0)
THEN
373 fcont(1,nod)= fcont(1,nod)+ rbuf(shift+1)
374 fcont(2,nod)= fcont(2,nod)+ rbuf(shift+2)
375 fcont(3,nod)= fcont(3,nod)+ rbuf(shift+3)
379 IF(h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0)
THEN
380 fncont(1,nod)= fncont(1,nod)+ rbuf(shift+1)
381 fncont(2,nod)= fncont(2,nod)+ rbuf(shift+2)
382 fncont(3,nod)= fncont(3,nod)+ rbuf(shift+3)
383 ftcont(1,nod)= ftcont(1,nod)+ rbuf(shift+4)
384 ftcont(2,nod)= ftcont(2,nod)+ rbuf(shift+5)
385 ftcont(3,nod)= ftcont(3,nod)+ rbuf(shift+6)
389 l = l +
SIZE +nfacnit +lenc
396 a(1,nod) = a(1,nod) + sav_a(1,j)
397 a(2,nod) = a(2,nod) + sav_a(2,j)
398 a(3,nod) = a(3,nod) + sav_a(3,j)
399 stifn(nod)= stifn(nod)+ sav_a(4,j)
403 ar(1,nod) = ar(1,nod) + sav_a(shift+1,j)
404 ar(2,nod) = ar(2,nod) + sav_a(shift+2,j)
405 ar(3,nod) = ar(3,nod) + sav_a(shift+3,j)
406 stifr(nod)= stifr(nod)+ sav_a(shift+4,j)
411 ms(nod) = ms(nod) + sav_a(shift+1,j)
415 IF(n2d /=0.AND.ifsubm ==1)
THEN
416 ms_2d(nod) = ms_2d(nod) + sav_a(shift+1,j)
421 msnf(nod) = msnf(nod) + sav_a(shift+1,j)
425 IF(glob_therm%INTHEAT /=0 .OR. glob_therm%ITHERM_FE/=0)
THEN
426 fthe(nod) = fthe(nod) + sav_a(shift+1,j)
428 IF(glob_therm%ITHERM_FE /= 0)
THEN
429 mcp(nod) = mcp(nod) + sav_a(shift+1,j)
431 mcp_off(nod) =
max(mcp_off(nod),sav_a(shift+1,j))
437 forneqs(1,nod) = forneqs(1,nod) + sav_a(shift+1,j)
438 forneqs(2,nod) = forneqs(2,nod) + sav_a(shift+2,j)
439 forneqs(3,nod) = forneqs(3,nod) + sav_a(shift+3,j)
440 shift = shift+nfacnit
444 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0)
THEN
445 fcont(1,nod) = fcont(1,nod) + sav_a(shift+1,j)
446 fcont(2,nod) = fcont(2,nod) + sav_a(shift+2,j)
447 fcont(3,nod) = fcont(3,nod) + sav_a(shift+3,j)
451 IF(h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0)
THEN
452 fncont(1,nod)= fncont(1,nod)+ sav_a(shift+1,j)
453 fncont(2,nod)= fncont(2,nod)+ sav_a(shift+2,j)
454 fncont(3,nod)= fncont(3,nod)+ sav_a(shift+3,j)
455 ftcont(1,nod)= ftcont(1,nod)+ sav_a(shift+4,j)
456 ftcont(2,nod)= ftcont(2,nod)+ sav_a(shift+5,j)
457 ftcont(3,nod)= ftcont(3,nod)+ sav_a(shift+6,j)
468 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
469 CALL mpi_wait(req_s(i),status,ierror)