60 2 MS ,NIN ,ITASK ,MWAG ,WEIGHT ,
61 3 ISENDTO ,IRCVFROM,RETRI ,IAD_ELEM,FR_ELEM ,
62 4 ITAB ,KINET ,TEMP ,NRTM_T ,RENUM ,
63 5 NSNFIOLD,ESHIFT ,NUM_IMP ,IND_IMP ,NODNX_SMS ,
64 6 IXS ,IGRBRIC ,ALE_CONNECTIVITY,INTBUF_TAB,
65 7 COUNT_REMSLV ,H3D_DATA,MULTI_FVM,NODADT_THERM)
79 use check_sorting_criteria_mod ,
only : check_sorting_criteria
80 use element_mod ,
only : nixs
84#include "implicit_f.inc"
95#include "timeri_c.inc"
98 COMMON /i22mainc/bminma_lag,bminma_flu,result,nsnr,nsnrold,i_memg,
100 INTEGER RESULT,NSNR,NSNROLD,I_MEMG
108 TYPE(timer_) :: TIMERS
109 INTEGER NIN ,ITASK, RETRI, NRTM_T,ESHIFT,
110 . NUM_IMP ,IND_IMP(*),
112 . IPARI(NPARI,NINTER), MWAG(*),
113 . ISENDTO(NINTER+1,*),IRCVFROM(NINTER+1,*),
114 . WEIGHT(*), IAD_ELEM(2,*) ,FR_ELEM(*),
115 . renum(numnod), nsnfiold(nspmd), nodnx_sms(*),
116 . ixs(nixs,*),nshell, count_remslv(*)
117 INTEGER ,
INTENT(IN) :: NODADT_THERM
119 . X(3,*), V(3,*), MS(*),TEMP(*)
120 TYPE(INTBUF_STRUCT_) INTBUF_TAB
121 TYPE(H3D_DATABASE) ::
122 TYPE(MULTI_FVM_STRUCT),
INTENT(INOUT) :: MULTI_FVM
125 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
126 TYPE(t_ale_connectivity),
INTENT(IN) :
131 . I, IP0, IP1, IP2, IP21, I_SK_OLD, ,
132 . add1, nb_n_b, noint, inacti, multimp, igap, ifq,
133 . iad, j, nf,
nl, i1, i2, rem_p(nspmd-1)
143 . ILD, NCONT, NCONTACT, INACTII, INACIMP, INTTH,
144 . I_MEM,CAND_N_OLD,IDUM1(1),
145 . ISU1, ISU2, NBF, NBL, IBID, COUNT_CAND, CT,INTFRIC
149 . gap,maxbox,minbox,tzinf,
150 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax,
152 . curv_max(nrtm_t),rdum1(1), stfe,
156 INTEGER :: NRTM,NSN,NTY,NMN
157 logical :: need_computation
162 call check_sorting_criteria( need_computation,nin,npari,nspmd,
163 . itask,ipari(1,nin),tt,intbuf_tab )
164 if( .not.need_computation )
return
185 inacti =ipari(22,nin)
186 multimp=ipari(23,nin)
187 ncontact=multimp*ncont
192 gap =intbuf_tab%VARIABLES(2)
193 gapmin=intbuf_tab%VARIABLES(13)
194 gapmax=intbuf_tab%VARIABLES(16)
195 intbuf_tab%I_STOK(1)=0
199 nbric_g = ipari(32,nin)
201 nbric_l = igrbric(isu1)%NENTITY
204 nshel_g = ipari(33,nin)
205 nshel_l = ipari(4,nin)
221 ALLOCATE(xmins(nbric_l))
222 ALLOCATE(ymins(nbric_l))
223 ALLOCATE(zmins(nbric_l
224 ALLOCATE(xmaxs(nbric_l))
225 ALLOCATE(ymaxs(nbric_l))
226 ALLOCATE(zmaxs(nbric_l))
228 ALLOCATE(xmine(nshel_l))
229 ALLOCATE(ymine(nshel_l))
230 ALLOCATE(zmine(nshel_l))
231 ALLOCATE(xmaxe(nshel_l))
232 ALLOCATE(ymaxe(nshel_l))
233 ALLOCATE(zmaxe(nshel_l))
234 bminma_lag(1) = -ep30
235 bminma_lag(2) = -ep30
236 bminma_lag(3) = -ep30
246 dx22min_l(itask) = ep30
247 v22max_l(itask) = zero
257 maxbox = intbuf_tab%VARIABLES(9)
258 minbox = intbuf_tab%VARIABLES(12)
259 tzinf = intbuf_tab%VARIABLES(8)
266 1 x ,intbuf_tab%NSV ,intbuf_tab%MSR ,nsn ,nmn ,
267 2 itask ,intbuf_tab%XSAV ,xminl ,yminl ,zminl ,
268 3 xmaxl ,ymaxl ,zmaxl ,c_maxl ,curv_max ,
269 4 ipari(39,nin) ,intbuf_tab%IRECTM(1+4*eshift) ,nrtm_t
272 bminma_lag(1) =
max(bminma_lag(1),xmaxl)
273 bminma_lag(2) =
max(bminma_lag(2),ymaxl)
274 bminma_lag(3) =
max(bminma_lag(3),zmaxl)
276 bminma_lag(5) =
min(bminma_lag(5),yminl)
277 bminma_lag(6) =
min(bminma_lag(6),zminl)
278#include "lockoff.inc"
287 IF(abs(bminma_lag(6)-bminma_lag(3))>2*ep30.OR.
288 + abs(bminma_lag(5)-bminma_lag(2))>2*ep30.OR.
289 + abs(bminma_lag(4)-bminma_lag(1))>2*ep30)
THEN
290 CALL ancmsg(msgid=87,anmode=aninfo,
291 . i1=noint,c1=
'(I22BUCE)')
297 .
"applying TZINF extension to lag domain", tzinf
299 bminma_lag(1)=bminma_lag(1)+tzinf
300 bminma_lag(2)=bminma_lag(2)+tzinf
301 bminma_lag(3)=bminma_lag(3)+tzinf
302 bminma_lag(4)=bminma_lag(4)-tzinf
303 bminma_lag(5)=bminma_lag(5)-tzinf
304 bminma_lag(6)=bminma_lag(6)-tzinf
307 CALL ancmsg(msgid=36,anmode=aninfo,
320 ALLOCATE(bminma_lag_spmd(6,nspmd))
321 IF(imonm > 0)
CALL startime(timers,25)
323 . bminma_lag_spmd, bminma_lag, isendto ,ircvfrom , nin)
324 IF(imonm > 0)
CALL stoptime(timers,25)
326 if(itask==0.and.
ibug22_tri==1)print *,
"BMINMA=",
327 . bminma_lag(4:6),bminma_lag(1:3)
343 bminma_lag_r(4) = minval(bminma_lag_spmd(4,rem_p(1:j)))
344 bminma_lag_r(5) = minval(bminma_lag_spmd(5,rem_p(1:j)))
345 bminma_lag_r(6) = minval(bminma_lag_spmd(6,rem_p(1:j)))
346 bminma_lag_r(1) = maxval(bminma_lag_spmd(1,rem_p(1:j)))
347 bminma_lag_r(2) = maxval(bminma_lag_spmd(2,rem_p(1:j)))
348 bminma_lag_r(3) = maxval(bminma_lag_spmd(3,rem_p(1:j)))
350 bminma_lag_g(4) =
min(bminma_lag_r(4),bminma_lag_spmd(4,p))
351 bminma_lag_g(5) =
min(bminma_lag_r(5),bminma_lag_spmd(5,p))
352 bminma_lag_g(6) =
min(bminma_lag_r(6),bminma_lag_spmd(6,p))
353 bminma_lag_g(1) =
max(bminma_lag_r(1),bminma_lag_spmd(1,p))
354 bminma_lag_g(2) =
max(bminma_lag_r(2),bminma_lag_spmd(2,p))
355 bminma_lag_g(3) =
max(bminma_lag_r(3),bminma_lag_spmd(3,p))
361 print *,
"---------------------------------------------------"
362 print *,
"CURRENT DOMAIN =", loc_proc
363 print *,
"--------BOUNDS FOR CURRENT LAG DOMAIN--------------"
364 print *,
" BMINMAL=", bminma_lag(4:6),bminma_lag(1:3)
365 print *,
"--------BOUNDS FOR ALL LAG DOMAINS-----------------"
367 print *,
"DOMAIN =", ispmd+1
368 print *,
" BMINMAL=",
369 . bminma_lag_spmd(4:6,i),bminma_lag_spmd(1:3,i)
371 print *,
"--------BOUNDS FOR AL REMOTE LAG DOMAINS-----------"
372 print *,
" BMINMAL=", bminma_lag_r(4:6),bminma_lag_r(1:3)
373 print *,
"--------BOUNDS FOR LAG GLOBAL DOMAINS--------------"
374 print *,
" BMINMAL=", bminma_lag_g(4:6),bminma_lag_g(1:3)
375 print *,
"---------------------------------------------------"
381 IF(itask==0) bminma_lag_g = bminma_lag
388 bminma_flu(1) = -ep30
389 bminma_flu(2) = -ep30
390 bminma_flu(3) = -ep30
406 bminma_flu(1) =
max(bminma_flu(1),maxval(xmaxs))
407 bminma_flu(2) =
max(bminma_flu(2),maxval(ymaxs))
408 bminma_flu(3) =
max(bminma_flu(3),maxval(zmaxs))
409 bminma_flu(4) =
min(bminma_flu(4),minval(xmins))
410 bminma_flu(5) =
min(bminma_flu(5),minval(ymins))
411 bminma_flu(6) =
min(bminma_flu(6),minval(zmins))
412#include "lockoff.inc"
417 bminma_flu(1) = bminma_flu(1)+tzinf
418 bminma_flu(2) = bminma_flu(2)+tzinf
419 bminma_flu(3) = bminma_flu(3)+tzinf
420 bminma_flu(4) = bminma_flu(4)-tzinf
421 bminma_flu(5) = bminma_flu(5)-tzinf
422 bminma_flu(6) = bminma_flu(6)-tzinf
425 print *,
"--------LOCAL FLUID DOMAIN-------------"
426 print *,
" BMINMAL_FLU=", bminma_flu(4:6),bminma_flu(1:3)
427 print *,
"---------------------------------------------------"
439 1 x, intbuf_tab%IRECTM(1+4*eshift), nrtm_t, intbuf_tab%STFM(1+eshift), itask,
440 2 itab, eshift, bminma_flu, tzinf )
454 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,26)
457 1 x, bminma_flu , nbric_l, ixs, igrbric(isu1)%ENTITY
458 2 itask, itab , xmins , ymins, zmins ,
459 3 xmaxs, ymaxs , zmaxs ,bminma_lag_r, is_contact,
464 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,26)
466 IF (imonm > 0 )
CALL startime(timers,25)
469 1 intbuf_tab%IRECTM ,nshel_l ,x ,v ,bminma_and_r,
470 2 intbuf_tab%STFM ,nin ,isendto ,ircvfrom ,iad_elem ,
471 3 fr_elem ,nsnr ,itab ,itask )
473 IF (imonm > 0)
CALL stoptime(timers,25)
507 stfe = intbuf_tab%STFM(1+eshift+i)
508 irect_l(23 , j) = stfe
512 irect_l(1:4 , j) = itab(intbuf_tab%IRECTM(i1:i2))
513 irect_l(5:8 , j) = x(1,intbuf_tab%IRECTM(i1:i2))
514 irect_l(9:12 , j) = x(2,intbuf_tab%IRECTM(i1:i2))
515 irect_l(13:16, j) = x(3,intbuf_tab%IRECTM(i1:i2))
516 irect_l(17:19, j) = (/xmine(j),ymine(j),zmine(j)/)
517 irect_l(20:22, j) = (/xmaxe(j),ymaxe(j),zmaxe(j)/)
518 irect_l(24, j) = sum(v(1,intbuf_tab%IRECTM(i1:i2)))/four
519 irect_l(25, j) = sum(v(2,intbuf_tab%IRECTM(i1:i2)))/four
520 irect_l(26, j) = sum(v(3,intbuf_tab%IRECTM(i1:i2)))/four
523 vel(1) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+0)),v(1:3,intbuf_tab%IRECTM(i1+0)))
524 vel(2) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+1)),v(1:3,intbuf_tab%IRECTM(i1+1)))
525 vel(3) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+2)),v(1:3,intbuf_tab%IRECTM(i1+2)))
526 vel(4) = dot_product(v(1:3,intbuf_tab%IRECTM(i1+3)),v(1:3,intbuf_tab%IRECTM(i1+3)))
527 vel(1) = sqrt(vel(1))
528 vel(2) = sqrt(vel(2))
529 vel(3) = sqrt(vel(3))
530 vel(4) = sqrt(vel(4))
531 v22max_l(itask) =
max(v22max_l(itask), maxval(vel) )
536 nf = 1+itask*nshelr_l/nthread
537 nl = (itask+1)*nshelr_l/nthread
540 irect_l(1:4 , j) = xrem( 1:4,i)
541 irect_l(5:8 , j) = xrem( 5:8,i)
542 irect_l(9:12 , j) = xrem( 9:12,i)
543 irect_l(13:16 , j) = xrem(13:16,i)
544 irect_l(17:19 , j) = xrem(17:19,i)
545 irect_l(20:22 , j) = xrem(20:22,i)
546 irect_l(23 , j) = xrem( 23,i)
547 irect_l(24:26 , j) = xrem(24:26,i)
558 v22_max =
max(v22_max,v22max_l(itask))
559#include "lockoff.inc"
565 cand_n_old = intbuf_tab%I_STOK(1)
576 bminma_and(1) =
min(bminma_flu(1),bminma_lag_g(1))
577 bminma_and(2) =
min(bminma_flu(2),bminma_lag_g(2))
578 bminma_and(3) =
min(bminma_flu(3),bminma_lag_g(3))
579 bminma_and(4) =
max(bminma_flu(4),bminma_lag_g(4))
580 bminma_and(5) =
max(bminma_flu(5),bminma_lag_g(5))
581 bminma_and(6) =
max(bminma_flu(6),bminma_lag_g(6))
590 IF (bminma_and(1)-bminma_and(4)<0)
GOTO 999
591 IF (bminma_and(2)-bminma_and(5)<0)
GOTO 999
592 IF (bminma_and(3)-bminma_and(6)<0)
GOTO 999
600 IF (imonm > 0)
CALL startime(timers,30)
602 1 x ,intbuf_tab%IRECTM(1+4*eshift) ,intbuf_tab%NSV ,inacti ,
iskip22 ,
603 2 nmn ,nshel_t ,nsn ,intbuf_tab%CAND_E ,intbuf_tab%CAND_N ,
604 3 gap ,noint ,intbuf_tab%I_STOK(1) ,ncontact ,bminma_and ,
605 4 tzinf ,maxbox ,minbox ,mwag ,curv_max ,
606 6 nb_n_b ,eshift ,ild ,ifq ,ibid ,
607 8 intbuf_tab%STFNS ,nin ,intbuf_tab%STFM(1+eshift) ,ipari(21,nin) ,
608 a nshelr_l ,ncont ,renum ,nsnrold ,
609 b gapmin ,gapmax ,curv_max_max ,num_imp ,
611 d ixs ,igrbric(isu1)%ENTITY ,nbric_l ,itab ,nshel_l ,
612 e ale_connectivity ,ipari(1,nin) )
618#include "lockoff.inc"
625 multimp = ipari(23,nin
630 intbuf_tab%i_STOK(1) = cand_n_old
631 multimp = ipari(23,nin)
632 ncontact = multimp*ncont
637 IF (imonm > 0)
CALL stoptime(timers,30)
639 count_cand = intbuf_tab%I_STOK(1)
640 ct = intbuf_tab%I_STOK(1)
642 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
643 intbuf_tab%VARIABLES(12) =
min(minbox,intbuf_tab%VARIABLES(12))
644 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
645 intbuf_tab%VARIABLES(5) = intbuf_tab%VARIABLES(8)-gap
646 result = result + ild
647 lskyi_count = lskyi_count+count_cand*5
648 count_remslv(nin) = count_remslv(nin)+ct
649#include "lockoff.inc"
660 intbuf_tab%I_STOK(1) = i_sk_old
665 maxbox = intbuf_tab%VARIABLES(9)
666 minbox = intbuf_tab%VARIABLES(12)
667 tzinf = intbuf_tab%VARIABLES(8)
674 IF (imonm > 0)
CALL startime(timers,26)
675 intbuf_tab%VARIABLES(5) = -intbuf_tab%VARIABLES(5)
679 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
680 2 ipari(21,nin),nsnr,multimp ,nty,ipari(47,nin),
681 3 idum1 ,nsnfiold, ipari, h3d_data,intfric,
682 4 multi_fvm,nodadt_therm)
686 .
CALL imp_rnumcd(intbuf_tab%CAND_N,nin,nsn,num_imp,ind_imp )
688 IF (imonm > 0)
CALL stoptime(timers,26)
714 IF(
ALLOCATED(bminma_lag_spmd))
DEALLOCATE(bminma_lag_spmd)