59 2 MS ,NIN ,ITASK ,MWAG ,WEIGHT ,
60 3 ISENDTO ,IRCVFROM,RETRI ,IAD_ELEM,FR_ELEM ,
61 4 ITAB ,KINET ,TEMP ,NRTM_T ,RENUM ,
62 5 NSNFIOLD,ESHIFT ,NUM_IMP ,IND_IMP ,NODNX_SMS ,
63 6 IXS ,IGRBRIC ,ALE_CONNECTIVITY,INTBUF_TAB,
64 7 COUNT_REMSLV ,H3D_DATA,MULTI_FVM,NODADT_THERM)
78 use check_sorting_criteria_mod ,
only : check_sorting_criteria
82#include "implicit_f.inc"
93#include "timeri_c.inc"
96 COMMON /i22mainc/bminma_lag,bminma_flu,result,nsnr,nsnrold,i_memg,
98 INTEGER RESULT,NSNR,NSNROLD,I_MEMG
106 TYPE(timer_) :: TIMERS
107 INTEGER NIN ,ITASK, RETRI, NRTM_T,ESHIFT,
108 . NUM_IMP ,IND_IMP(*),
110 . IPARI(NPARI,NINTER), MWAG(*),
111 . ISENDTO(NINTER+1,*),IRCVFROM(NINTER+1,*),
112 . WEIGHT(*), IAD_ELEM(2,*) ,FR_ELEM(*),
113 . renum(numnod), nsnfiold(nspmd), nodnx_sms(*),
114 . ixs(nixs,*),nshell, count_remslv(*)
115 INTEGER ,
INTENT(IN) :: NODADT_THERM
117 . X(3,*), V(3,*), MS(*),TEMP(*)
118 TYPE(INTBUF_STRUCT_) INTBUF_TAB
119 TYPE(H3D_DATABASE) :: H3D_DATA
120 TYPE(MULTI_FVM_STRUCT),
INTENT(INOUT) :: MULTI_FVM
123 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
124 TYPE(t_ale_connectivity),
INTENT(IN) :: ALE_CONNECTIVITY
129 . I, IP0, IP1, IP2, IP21, I_SK_OLD, I_STOK1,
130 . add1, nb_n_b, noint, inacti, multimp, igap, ifq,
131 . iad, j, nf,
nl, i1, i2, rem_p(nspmd-1)
141 . ILD, NCONT, NCONTACT, INACTII, INACIMP, INTTH,
142 . I_MEM,CAND_N_OLD,IDUM1(1),
143 . ISU1, ISU2, NBF, NBL, IBID, COUNT_CAND, CT,INTFRIC
147 . gap,maxbox,minbox,tzinf,
148 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax,
150 . curv_max(nrtm_t),rdum1(1), stfe,
154 INTEGER :: NRTM,NSN,NTY,NMN
155 logical :: need_computation
160 call check_sorting_criteria( need_computation,nin,npari,nspmd,
161 . itask,ipari(1,nin),tt,intbuf_tab )
162 if( .not.need_computation )
return
183 inacti =ipari(22,nin)
184 multimp=ipari(23,nin)
190 gap =intbuf_tab%VARIABLES(2)
191 gapmin=intbuf_tab%VARIABLES(13)
192 gapmax=intbuf_tab%VARIABLES(16)
193 intbuf_tab%I_STOK(1)=0
197 nbric_g = ipari(32,nin)
199 nbric_l = igrbric(isu1)%NENTITY
202 nshel_g = ipari(33,nin)
203 nshel_l = ipari(4,nin)
219 ALLOCATE(xmins(nbric_l))
220 ALLOCATE(ymins(nbric_l))
221 ALLOCATE(zmins(nbric_l))
222 ALLOCATE(xmaxs(nbric_l))
223 ALLOCATE(ymaxs(nbric_l))
224 ALLOCATE(zmaxs(nbric_l))
226 ALLOCATE(xmine(nshel_l))
227 ALLOCATE(ymine(nshel_l))
228 ALLOCATE(zmine(nshel_l))
229 ALLOCATE(xmaxe(nshel_l))
230 ALLOCATE(ymaxe(nshel_l))
231 ALLOCATE(zmaxe(nshel_l))
232 bminma_lag(1) = -ep30
233 bminma_lag(2) = -ep30
234 bminma_lag(3) = -ep30
244 dx22min_l(itask) = ep30
245 v22max_l(itask) = zero
255 maxbox = intbuf_tab%VARIABLES(9)
256 minbox = intbuf_tab%VARIABLES(12)
257 tzinf = intbuf_tab%VARIABLES(8)
264 1 x ,intbuf_tab%NSV ,intbuf_tab%MSR ,nsn ,nmn ,
265 2 itask ,intbuf_tab%XSAV ,xminl ,yminl ,zminl ,
267 4 ipari(39,nin) ,intbuf_tab%IRECTM(1+4*eshift) ,nrtm_t )
270 bminma_lag(1) =
max(bminma_lag(1),xmaxl)
271 bminma_lag(2) =
max(bminma_lag(2),ymaxl)
272 bminma_lag(3) =
max(bminma_lag(3),zmaxl)
273 bminma_lag(4) =
min(bminma_lag(4),xminl)
274 bminma_lag(5) =
min(bminma_lag(5),yminl)
275 bminma_lag(6) =
min(bminma_lag(6),zminl)
276#include "lockoff.inc"
285 IF(abs(bminma_lag(6)-bminma_lag(3))>2*ep30.OR.
286 + abs(bminma_lag(5)-bminma_lag(2))>2*ep30.OR.
287 + abs(bminma_lag(4)-bminma_lag(1))>2*ep30)
THEN
288 CALL ancmsg(msgid=87,anmode=aninfo,
289 . i1=noint,c1=
'(I22BUCE)')
295 .
"applying TZINF extension to lag domain", tzinf
297 bminma_lag(1)=bminma_lag(1)+tzinf
298 bminma_lag(2)=bminma_lag(2)+tzinf
299 bminma_lag(3)=bminma_lag(3)+tzinf
300 bminma_lag(4)=bminma_lag(4)-tzinf
301 bminma_lag(5)=bminma_lag(5)-tzinf
302 bminma_lag(6)=bminma_lag(6)-tzinf
305 CALL ancmsg(msgid=36,anmode=aninfo,
318 ALLOCATE(bminma_lag_spmd(6,nspmd))
319 IF(imonm > 0)
CALL startime(timers,25)
321 . bminma_lag_spmd, bminma_lag, isendto ,ircvfrom , nin)
322 IF(imonm > 0)
CALL stoptime(timers,25)
324 if(itask==0.and.
ibug22_tri==1)print *,
"BMINMA=",
325 . bminma_lag(4:6),bminma_lag(1:3)
341 bminma_lag_r(4) = minval(bminma_lag_spmd(4,rem_p(1:j)))
342 bminma_lag_r(5) = minval(bminma_lag_spmd(5,rem_p(1:j)))
343 bminma_lag_r(6) = minval(bminma_lag_spmd(6,rem_p(1:j)))
344 bminma_lag_r(1) = maxval(bminma_lag_spmd(1,rem_p(1:j)))
345 bminma_lag_r(2) = maxval(bminma_lag_spmd(2,rem_p(1:j)))
346 bminma_lag_r(3) = maxval(bminma_lag_spmd(3,rem_p(1:j)))
348 bminma_lag_g(4) =
min(bminma_lag_r(4),bminma_lag_spmd(4,p))
349 bminma_lag_g(5) =
min(bminma_lag_r
350 bminma_lag_g(6) =
min(bminma_lag_r(6),bminma_lag_spmd(6,p))
351 bminma_lag_g(1) =
max(bminma_lag_r(1),bminma_lag_spmd(1,p))
352 bminma_lag_g(2) =
max(bminma_lag_r
353 bminma_lag_g(3) =
max(bminma_lag_r(3),bminma_lag_spmd(3,p))
357 print *,
"TZINF=", tzinf
359 print *,
"---------------------------------------------------"
360 print *,
"CURRENT DOMAIN =", loc_proc
361 print *,
"--------BOUNDS FOR CURRENT LAG DOMAIN--------------"
362 print *,
" BMINMAL=", bminma_lag(4:6),bminma_lag(1:3)
363 print *,
"--------BOUNDS FOR ALL LAG DOMAINS-----------------"
365 print *,
"DOMAIN =", ispmd+1
366 print *,
" BMINMAL=",
367 . bminma_lag_spmd(4:6,i),bminma_lag_spmd(1:3,i)
369 print *,
"--------BOUNDS FOR AL REMOTE LAG DOMAINS-----------"
370 print *,
" BMINMAL=", bminma_lag_r(4:6),bminma_lag_r(1:3)
371 print *,
"--------BOUNDS FOR LAG GLOBAL DOMAINS--------------"
372 print *,
" BMINMAL=", bminma_lag_g(4:6),bminma_lag_g(1:3)
373 print *,
"---------------------------------------------------"
379 IF(itask==0) bminma_lag_g = bminma_lag
386 bminma_flu(1) = -ep30
387 bminma_flu(2) = -ep30
388 bminma_flu(3) = -ep30
397 1 x, ixs, igrbric(isu1)%ENTITY, nbric_l,
404 bminma_flu(1) =
max(bminma_flu(1),maxval(xmaxs))
405 bminma_flu(2) =
max(bminma_flu(2),maxval(ymaxs))
406 bminma_flu(3) =
max(bminma_flu(3),maxval(zmaxs))
407 bminma_flu(4) =
min(bminma_flu(4),minval(xmins))
408 bminma_flu(5) =
min(bminma_flu(5),minval(ymins))
409 bminma_flu(6) =
min(bminma_flu(6),minval(zmins))
410#include "lockoff.inc"
415 bminma_flu(1) = bminma_flu(1)+tzinf
416 bminma_flu(2) = bminma_flu(2)+tzinf
417 bminma_flu(3) = bminma_flu(3)+tzinf
418 bminma_flu(4) = bminma_flu(4)-tzinf
419 bminma_flu(5) = bminma_flu(5)-tzinf
420 bminma_flu(6) = bminma_flu(6)-tzinf
423 print *,
"--------LOCAL FLUID DOMAIN-------------"
424 print *,
" BMINMAL_FLU=", bminma_flu(4:6),bminma_flu(1:3)
425 print *,
"---------------------------------------------------"
437 1 x, intbuf_tab%IRECTM(1+4*eshift), nrtm_t, intbuf_tab%STFM(1+eshift), itask,
438 2 itab, eshift, bminma_flu, tzinf )
452 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,26)
455 1 x, bminma_flu , nbric_l, ixs, igrbric(isu1)%ENTITY,
456 2 itask, itab , xmins , ymins, zmins ,
457 3 xmaxs, ymaxs , zmaxs ,bminma_lag_r, is_contact,
462 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,26)
464 IF (imonm > 0 )
CALL startime(timers,25)
467 1 intbuf_tab%IRECTM ,nshel_l ,x ,v ,bminma_and_r,
468 2 intbuf_tab%STFM ,nin ,isendto ,ircvfrom ,iad_elem ,
469 3 fr_elem ,nsnr ,itab ,itask )
471 IF (imonm > 0)
CALL stoptime(timers,25)
505 stfe = intbuf_tab%STFM(1+eshift+i)
506 irect_l(23 , j) = stfe
510 irect_l(1:4 , j) = itab(intbuf_tab%IRECTM(i1:i2))
511 irect_l(5:8 , j) = x(1,intbuf_tab%IRECTM(i1:i2))
512 irect_l(9:12 , j) = x(2,intbuf_tab%IRECTM(i1:i2))
513 irect_l(13:16, j) = x(3,intbuf_tab%IRECTM(i1:i2))
514 irect_l(17:19, j) = (/xmine(j),ymine(j),zmine(j)/)
515 irect_l(20:22, j) = (/xmaxe(j),ymaxe(j),zmaxe(j)/)
516 irect_l(24, j) = sum(v(1,intbuf_tab%IRECTM(i1:i2)))/four
517 irect_l(25, j) = sum(v(2,intbuf_tab%IRECTM(i1:i2)))/four
518 irect_l(26, j) = sum(v(3,intbuf_tab%IRECTM
521 vel(1) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+0)),v(1:3,intbuf_tab%IRECTM(i1+0)))
522 vel(2) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+1)),v(1:3,intbuf_tab%IRECTM(i1+1)))
523 vel(3) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+2)),v(1:3,intbuf_tab%IRECTM(i1+2)))
525 vel(1) = sqrt(vel(1))
526 vel(2) = sqrt(vel(2))
527 vel(3) = sqrt(vel(3))
528 vel(4) = sqrt(vel(4))
529 v22max_l(itask) =
max(v22max_l(itask), maxval(vel) )
534 nf = 1+itask*nshelr_l/nthread
535 nl = (itask+1)*nshelr_l/nthread
538 irect_l(1:4 , j) = xrem( 1:4,i)
539 irect_l(5:8 , j) = xrem( 5:8,i
540 irect_l(9:12 , j) = xrem( 9:12,i)
541 irect_l(13:16 , j) = xrem(13:16,i)
542 irect_l(17:19 , j) = xrem(17:19,i)
543 irect_l(20:22 , j) = xrem(20:22,i)
544 irect_l(23 , j) = xrem( 23,i)
545 irect_l(24:26 , j) = xrem(24:26,i)
556 v22_max =
max(v22_max,v22max_l(itask))
557#include "lockoff.inc"
563 cand_n_old = intbuf_tab%I_STOK(1)
574 bminma_and(1) =
min(bminma_flu(1),bminma_lag_g(1))
575 bminma_and(2) =
min(bminma_flu(2),bminma_lag_g(2))
576 bminma_and(3) =
min(bminma_flu(3),bminma_lag_g(3))
577 bminma_and(4) =
max(bminma_flu(4),bminma_lag_g(4))
578 bminma_and(5) =
max(bminma_flu(5),bminma_lag_g(5))
579 bminma_and(6) =
max(bminma_flu(6),bminma_lag_g(6))
582 .
"Faire test si dimension negative ",
583 .
"=>candidat=0 ! ici ou dans i22trivox"
588 IF (bminma_and(1)-bminma_and(4)<0)
GOTO 999
589 IF (bminma_and(2)-bminma_and(5)<0)
GOTO 999
590 IF (bminma_and(3)-bminma_and(6)<0)
GOTO 999
598 IF (imonm > 0)
CALL startime(timers,30)
600 1 x ,intbuf_tab%IRECTM(1+4*eshift) ,intbuf_tab%NSV ,inacti ,
iskip22 ,
601 2 nmn ,nshel_t ,nsn ,intbuf_tab%CAND_E ,intbuf_tab%CAND_N ,
602 3 gap ,noint ,intbuf_tab%I_STOK(1) ,ncontact ,bminma_and ,
603 4 tzinf ,maxbox ,minbox ,mwag ,curv_max ,
604 6 nb_n_b ,eshift ,ild ,ifq ,ibid ,
605 8 intbuf_tab%STFNS ,nin ,intbuf_tab%STFM(1+eshift) ,ipari(21,nin) ,
606 a nshelr_l ,ncont ,renum ,nsnrold ,
608 c intth ,itask ,intbuf_tab%VARIABLES(7) ,i_mem ,
609 d ixs ,igrbric(isu1)%ENTITY ,nbric_l ,itab ,nshel_l ,
610 e ale_connectivity ,ipari(1,nin) )
616#include "lockoff.inc"
623 multimp = ipari(23,nin) + 4
628 intbuf_tab%i_STOK(1) = cand_n_old
629 multimp = ipari(23,nin)
630 ncontact = multimp*ncont
635 IF (imonm > 0)
CALL stoptime(timers,30)
637 count_cand = intbuf_tab%I_STOK(1)
638 ct = intbuf_tab%I_STOK(1)
640 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
641 intbuf_tab%VARIABLES(12) =
min(minbox,intbuf_tab%VARIABLES(12))
642 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
643 intbuf_tab%VARIABLES(5) = intbuf_tab%VARIABLES(8)-gap
644 result = result + ild
645 lskyi_count = lskyi_count+count_cand*5
646 count_remslv(nin) = count_remslv(nin)+ct
647#include "lockoff.inc"
658 intbuf_tab%I_STOK(1) = i_sk_old
663 maxbox = intbuf_tab%VARIABLES(9)
664 minbox = intbuf_tab%VARIABLES(12)
665 tzinf = intbuf_tab%VARIABLES(8)
672 IF (imonm > 0)
CALL startime(timers,26)
673 intbuf_tab%VARIABLES(5) = -intbuf_tab%VARIABLES(5)
677 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
678 2 ipari(21,nin),nsnr,multimp ,nty,ipari(47,nin),
679 3 idum1 ,nsnfiold, ipari, h3d_data,intfric,
680 4 multi_fvm,nodadt_therm)
684 .
CALL imp_rnumcd(intbuf_tab%CAND_N,nin,nsn,num_imp,ind_imp )
686 IF (imonm > 0)
CALL stoptime(timers,26)
712 IF(
ALLOCATED(bminma_lag_spmd))
DEALLOCATE(bminma_lag_spmd)