39 1 NSV ,NSN ,X ,V ,MS ,
40 2 BMINMAL ,WEIGHT ,STIFN ,NIN ,ISENDTO,
41 3 IRCVFROM,IAD_ELEM ,FR_ELEM,NSNR ,IGAP ,
42 4 GAP_S ,ITAB ,KINET ,IFQ ,INACTI ,
43 5 NSNFIOLD,INTTH ,IELEC ,AREAS ,TEMP ,
44 6 NUM_IMP ,NODNX_SMS,GAP_S_L ,ITYP,
45 7 IRTLM ,I24_TIME_S,I24_FRFI,I24_PENE_OLD,
46 8 I24_STIF_OLD ,NBINFLG,ILEV ,I24_ICONT_I ,
47 9 INTFRIC ,IPARTFRICS,ITIED ,IVIS2, IF_ADH)
57 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
58#include "implicit_f.inc"
69#include "timeri_c.inc"
74 INTEGER NIN, NSN, IFQ, INACTI, IGAP,INTTH,,INTFRIC,
76 . NSNFIOLD(*), NSV(*), WEIGHT(*),
77 . ISENDTO(+1,*), IRCVFROM(NINTER+1,*),
78 . IAD_ELEM(2,*), FR_ELEM(*), ITAB(*), KINET(*),
79 . IELEC(*),NUM_IMP, NODNX_SMS(*),IRTLM(*),ITYP,
80 . NBINFLG(*),ILEV,I24_ICONT_I(*),IPARTFRICS(*),IF_ADH(*)
83 . x(3,*), v(3,*), ms(*), bminmal(*), stifn(*), gap_s(*),
84 . areas(*),temp(*),gap_s_l(*),i24_time_s(*),i24_frfi(6,*),
85 . i24_pene_old(5,*),i24_stif_old(2,*)
90 INTEGER MSGTYP,INFO,I,NOD, DT_CST, LOC_PROC,P,IDEB,
91 . siz,j, l, bufsiz, len, nb, ierror1, iad,
92 . status(mpi_status_size),ierror,req_sb(nspmd),
93 . req_rb(nspmd),kk,nbirecv,irindexi(nspmd),
94 . req_rd(nspmd),req_sd(nspmd),req_sd2(nspmd),
95 . req_rc(nspmd),req_sc(nspmd),
96 . indexi,isindexi(nspmd),index(numnod),nbox(nspmd),
97 . nbx,nby,nbz,ix,iy,iz,
98 . msgoff, msgoff2, msgoff3, msgoff4, msgoff5,
99 . rsiz, isiz, l2, req_sd3(nspmd),req_rd2(nspmd),
100 . len2, rshift, ishift, nd, jdeb, q, nbb
103 INTEGER :: SEND_SIZE_BMINMA
104 INTEGER :: REQUEST_BMINMA
105 INTEGER,
DIMENSION(COMM_TRI7VOX(NIN)%proc_number) :: RCV_SIZE_BMINMA,DISPLS_BMINMA
107 INTEGER :: SEND_SIZE_CRVOX
108 INTEGER :: REQUEST_CRVOX
109 INTEGER,
DIMENSION(COMM_TRI7VOX(NIN)%proc_number) :: RCV_SIZE_CRVOX,DISPLS_CRVOX
110 my_real,
DIMENSION(6) :: BMINMA_LOC
111 INTEGER,
DIMENSION(0:LRVOXEL,0:LRVOXEL) :: CRVOXEL_LOC
124 . xmaxb,ymaxb,zmaxb,xminb,yminb,zminb
126 TYPE(real_pointer),
DIMENSION(NSPMD) :: RBUF
127 TYPE(int_pointer) ,
DIMENSION(NSPMD) :: IBUF
128 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAGNSNFI
129 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xtmp
130 INTEGER,
DIMENSION(NSPMD) :: TAB_NB
148 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0
152 nsnfiold(p) =
nsnfi(nin)%P(p)
158 IF(ircvfrom(nin,loc_proc)==0.AND.
159 . isendto(nin,loc_proc)==0)
RETURN
160 bminma(1,loc_proc) = bminmal(1)
161 bminma(2,loc_proc) = bminmal(2)
162 bminma(3,loc_proc) = bminmal(3)
163 bminma(4,loc_proc) = bminmal(4)
164 bminma(5,loc_proc) = bminmal(5)
165 bminma(6,loc_proc) = bminmal(6)
176 IF(ircvfrom(nin,loc_proc)/=0)
THEN
183 IF(ircvfrom(nin,p)/=0)
THEN
184 rcv_size_bminma(p_loc) = 6
190 rcv_size_bminma(p_loc) = send_size_bminma
191 rcv_size_crvox(p_loc) = send_size_crvox
196 displs_bminma(p_loc) = (p-1)*6
199 displs_bminma(p_loc) = 0
200 displs_crvox(p_loc) = 0
206 bminma_loc(1:6) = bminma(1:6,loc_proc)
208 . 6*nspmd,rcv_size_bminma,displs_bminma,request_bminma
214 . (
lrvoxel+1)*(
lrvoxel+1)*nspmd,rcv_size_crvox,displs_crvox,request_crvox,
217 IF(isendto(nin,loc_proc)/=0)
THEN
220 IF(ircvfrom(nin,p)/=0)
THEN
243 IF(igap==1 .OR. igap==2)
THEN
257 IF(ityp==25.AND.ivis2==-1 )
THEN
258 IF(intth==0) rsiz = rsiz + 1
263 IF(intfric > 0 )
THEN
271 ELSEIF(idtmins_int/=0)
THEN
280 IF (ilev==2) isiz = isiz + 1
289 IF (ilev==2) isiz = isiz + 1
295 ALLOCATE(itagnsnfi(numnod),stat=ierror)
296 itagnsnfi(1:numnod) = 0
307 CALL mpi_wait(request_bminma,status,ierror)
308 CALL mpi_wait(request_crvox,status,ierror)
312 IF(isendto(nin,loc_proc)/=0)
THEN
317 DO j = iad_elem(1,p), iad_elem(1,p+1)-1
320 weight(nod) = weight(nod)*(-1)
334 IF(weight(nod)==1)
THEN
335 IF(stifn(i)>zero)
THEN
336 IF(itied/=0.AND.ityp==7.AND.
candf_si(nin)%P(i)/=0)
THEN
341 IF(irtlm(4*(i-1)+4)==p)
THEN
348 IF(x(1,nod) < xminb) cycle
349 IF(x(1,nod) > xmaxb) cycle
350 IF(x(2,nod) < yminb) cycle
351 IF(x(2,nod) > ymaxb) cycle
352 IF(x(3,nod) < zminb) cycle
353 IF(x(3,nod) > zmaxb) cycle
355 ix=int(nbx*(x(1,nod)-xminb)/(xmaxb-xminb))
356 IF(ix >= 0 .AND. ix <= nbx)
THEN
357 iy=int(nby*(x(2,nod)-yminb)/(ymaxb-yminb))
358 IF(iy >= 0 .AND. iy <= nby)
THEN
359 iz=int(nbz*(x(3,nod)-zminb)/(zmaxb-zminb))
360 IF(iz >= 0 .AND. iz <= nbz)
THEN
361 IF(btest(
crvoxel(iy,iz,p),ix))
THEN
374 DO j = iad_elem(1,p), iad_elem(1,p+1)-1
377 weight(nod) = weight(nod)*(-1)
383 jdeb = jdeb +
nsnsi(nin)%P(q)
385 nbb =
nsnsi(nin)%P(p)
387 nd =
nsvsi(nin)%P(jdeb+j)
396 CALL mpi_isend(nbox(p),1,mpi_integer,it_spmd(p),msgtyp,
397 . spmd_comm_world,req_sd(p),ierror)
402 ALLOCATE(rbuf(p)%P(rsiz*nb),stat=ierror)
403 ALLOCATE(ibuf(p)%P(isiz*nb),stat=ierror)
405 CALL ancmsg(msgid=20,anmode=aninfo)
411#include "vectorize.inc"
415 rbuf(p)%p(l+1) = x(1,nod)
416 rbuf(p)%p(l+2) = x(2,nod)
417 rbuf(p)%p(l+3) = x(3,nod)
418 rbuf(p)%p(l+4) = v(1,nod)
419 rbuf(p)%p(l+5) = v(2,nod)
420 rbuf(p)%p(l+6) = v(3,nod)
421 rbuf(p)%p(l+7) = ms(nod)
422 rbuf(p)%p(l+8) = stifn(i)
424 ibuf(p)%p(l2+2) = itab(nod)
425 ibuf(p)%p(l2+3) = kinet(nod)
441 IF(igap==1 .OR. igap==2)
THEN
444#include "vectorize.inc"
447 rbuf(p)%p(l+rshift)= gap_s(i)
456#include "vectorize.inc"
460 rbuf(p)%p(l+rshift+1)= gap_s_l(i)
470#include "vectorize.inc"
475 rbuf(p)%p(l+rshift+1) = areas(i)
476 ibuf(p)%p(l2+ishift) = ielec(i)
485 IF(ityp==25.AND.ivis2==-1)
THEN
488#include "vectorize.inc"
492 IF(intth==0) rbuf(p)%p(l+rshift) = areas(i)
493 ibuf(p)%p(l2+ishift) = if_adh(i)
494 ibuf(p)%p(l2+ishift+1)=itagnsnfi(nod)
495 IF(intth==0)l = l + rsiz
498 IF(intth==0) rshift = rshift + 1
505#include "vectorize.inc"
508 ibuf(p)%p(l2+ishift) = ipartfrics(i)
517#include "vectorize.inc"
521 ibuf(p)%p(l2+ishift) = nodnx_sms(nod)
522 ibuf(p)%p(l2+ishift+1)= nod
528 ELSEIF(idtmins_int/=0)
THEN
530#include "vectorize.inc"
534 ibuf(p)%p(l2+ishift)= nod
545#include "vectorize.inc"
548 rbuf(p)%p(l+rshift) =i24_time_s(i)
549 rbuf(p)%p(l+rshift+1) =i24_frfi(1,i)
550 rbuf(p)%p(l+rshift+2) =i24_frfi(2,i)
551 rbuf(p)%p(l+rshift+3) =i24_frfi(3,i)
552 rbuf(p)%p(l+rshift+4) =i24_pene_old(1,i)
553 rbuf(p)%p(l+rshift+5) =i24_stif_old(1,i)
554 rbuf(p)%p(l+rshift+6) =i24_pene_old(3,i)
555 rbuf(p)%p(l+rshift+7) =i24_pene_old(5,i)
562#include "vectorize.inc"
566 ibuf(p)%p(l2+ishift) =irtlm(2*(i-1)+1)
567 ibuf(p)%p(l2+ishift+1)=irtlm(2*(i-1)+2)
568 ibuf(p)%p(l2+ishift+2)=i24_icont_i(i)
576#include "vectorize.inc"
579 ibuf(p)%p(l2+ishift)=nbinflg(i)
591#include "vectorize.inc"
594 rbuf(p)%p(l+rshift) =i24_time_s(2*(i-1)+1)
595 rbuf(p)%p(l+rshift+1) =i24_time_s(2*(i-1)+2)
596 rbuf(p)%p(l+rshift+2) =i24_pene_old(5,i)
604#include "vectorize.inc"
609 ibuf(p)%p(l2+ishift) =irtlm(4*(i-1)+1)
610 ibuf(p)%p(l2+ishift+1)=irtlm(4*(i-1)+2)
613 ibuf(p)%p(l2+ishift+2)=irtlm(4*(i-1)+3)
614 ibuf(p)%p(l2+ishift+3)=irtlm(4*(i-1)+4)
615 ibuf(p)%p(l2+ishift+4)=i24_icont_i(i)
616 ibuf(p)%p(l2+ishift+5)=itagnsnfi(nod)
624#include "vectorize.inc"
627 ibuf(p)%p(l2+ishift)=nbinflg(i)
637#include "vectorize.inc"
652 nbb =
nsnsi(nin)%P(p)
654 nd =
nsvsi(nin)%P(jdeb+j)
662 IF(ityp==25)
DEALLOCATE(itagnsnfi)
666 IF(ircvfrom(nin,loc_proc)/=0)
THEN
671 IF(isendto(nin,p)/=0)
THEN
675 . msgtyp,spmd_comm_world,status,ierror)
676 IF(
nsnfi(nin)%P(p)>0)
THEN
679 nsnr = nsnr +
nsnfi(nin)%P(p)
691 ALLOCATE(xrem(rsiz,nsnr),stat=ierror)
692 ALLOCATE(
irem(isiz,nsnr),stat=ierror)
696 CALL ancmsg(msgid=20,anmode=aninfo)
702 len =
nsnfi(nin)%P(p)*rsiz
706 1 xrem(1,ideb),len,real,it_spmd(p),
707 2 msgtyp,spmd_comm_world,req_rd(l),ierror)
709 len2 =
nsnfi(nin)%P(p)*isiz
712 1
irem(1,ideb),len2,mpi_integer,it_spmd(p),
713 2 msgtyp,spmd_comm_world,req_rd2(l),ierror)
714 ideb = ideb +
nsnfi(nin)%P(p)
720 IF(tab_nb(p) /= 0 )
THEN
723 1 rbuf(p)%P(1),tab_nb(p)*rsiz,real,it_spmd(p),msgtyp,
724 2 spmd_comm_world,req_sd2(p),ierror)
727 1 ibuf(p)%P(1),tab_nb(p)*isiz,mpi_integer,it_spmd(p),msgtyp,
728 2 spmd_comm_world,req_sd3(p),ierror)
732 IF(ircvfrom(nin,loc_proc)/=0)
THEN
735 CALL mpi_waitany(nbirecv,req_rd,indexi,status,ierror)
736 CALL mpi_waitany(nbirecv,req_rd2,indexi,status,ierror)
745 IF(isendto(nin,loc_proc)/=0)
THEN
749CALL mpi_wait(req_sd(p),status,ierror)
751 CALL mpi_wait(req_sd2(p),status,ierror)
752 DEALLOCATE(rbuf(p)%p)
753 CALL mpi_wait(req_sd3(p),status,ierror)
754 DEALLOCATE(ibuf(p)%p)