62 2 MS ,NIN ,ITASK ,WEIGHT ,
63 3 ISENDTO ,IRCVFROM,RETRI ,IAD_ELEM,FR_ELEM ,
64 4 ITAB ,KINET ,TEMP ,NRTM_T ,RENUM ,
65 5 NSNFIOLD,ESHIFT ,NUM_IMP ,IND_IMP ,NODNX_SMS,
66 6 INTBUF_TAB,H3D_DATA,IXS,MULTI_FVM,GLOB_THERM)
77 use check_sorting_criteria_mod ,
only : check_sorting_criteria
79 use element_mod ,
only : nixs
83#include "implicit_f.inc"
95#include "timeri_c.inc"
97 COMMON /i7mainc/bminma,curv_max_max,result,nsnr,nsnrold,i_memg,nmn_g
98 INTEGER RESULT,NSNR,NSNROLD,I_MEMG,NMN_G
100 . BMINMA(12),CURV_MAX_MAX
104 TYPE(timer_) :: TIMERS
105 INTEGER NIN ,ITASK, RETRI, NRTM_T,ESHIFT,
106 . NUM_IMP ,IND_IMP(*),
108 . IPARI(NPARI,NINTER),
109 . ISENDTO(NINTER+1,*),(NINTER+1,*),
110 . weight(*), iad_elem(2,*) ,fr_elem(*),
111 . renum(*), nsnfiold(nspmd), nodnx_sms(*), ixs(nixs, *)
114 . x(*), v(*), ms(*),temp(*)
116 TYPE(intbuf_struct_) INTBUF_TAB
117 TYPE(H3D_DATABASE) :: H3D_DATA
118 TYPE(MULTI_FVM_STRUCT),
INTENT(INOUT) :: MULTI_FVM
119 TYPE(glob_therm_),
INTENT(IN) :: GLOB_THERM
125 . i, ip0, ip2, ip21, i_sk_old, i_stok1,
126 . add1, nb_n_b, noint, inacti, multimp, igap, ifq, itied
128 . ILD, NCONT, NCONTACT, INACTII, INACIMP, INTTH,
129 . i_mem,cand_n_old,idum1(1),nmn_l, ivis2
131 . gap,maxbox,minbox,tzinf,dgaploadp,
132 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax,
133 . c_maxl,drad,mx,my,mz,dx,dy,dz,sx,sy,sz,sx2,sy2,sz2,
134 . curv_max(nrtm_t),rdum1(1)
137 INTEGER :: NRTM,NSN,NMN,NTY
138 logical :: need_computation
142 call check_sorting_criteria( need_computation,nin,npari,nspmd,
143 . itask,ipari(1,nin),tt,intbuf_tab )
144 if( .not.need_computation )
return
159 inacti =ipari(22,nin)
160 multimp =ipari(23,nin)
166 ncontact=multimp*ncont
169 IF(nty==7 .AND. inacti==7)type18=.true
171 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0.OR.
172 . num_imp>0.OR.itied/=0)
THEN
173 nsnrold = ipari(24,nin)
178 gap =intbuf_tab%VARIABLES(gap_index)
179 gapmin=intbuf_tab%VARIABLES(gapmin_index)
180 gapmax=intbuf_tab%VARIABLES(gapmax_index)
182 IF(ipari(7,nin)==7) drad =intbuf_tab%VARIABLES(drad_index)
183 dgaploadp= intbuf_tab%VARIABLES(bgapemx_index)
193 maxbox = intbuf_tab%VARIABLES(maxbox_index)
194 minbox = intbuf_tab%VARIABLES(minbox_index)
195 tzinf = intbuf_tab%VARIABLES(tzinf_index)
218 IF(.NOT.
ALLOCATED(intbuf_tab%CAND_A))
THEN
219 ALLOCATE(intbuf_tab%CAND_A(nsnrold+nsn+3))
220 ELSEIF(
SIZE(intbuf_tab%CAND_A)<nsnrold+nsn+3)
THEN
221 DEALLOCATE(intbuf_tab%CAND_A)
222 ALLOCATE(intbuf_tab%CAND_A(nsn+nsnrold+3))
228 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0.OR.
229 . num_imp>0.OR.itied/=0)
THEN
233 . (inacti/=5.AND.inacti/=6.AND.ifq<=0))
THEN
240 i_sk_old = intbuf_tab%I_STOK(1)
242 1 nsn+nsnrold ,i_sk_old ,intbuf_tab%CAND_N,intbuf_tab%CAND_E,
243 2 intbuf_tab%CAND_P,intbuf_tab%FTSAVX,intbuf_tab%FTSAVY,intbuf_tab%FTSAVZ,
244 3 intbuf_tab%CAND_A ,intbuf_tab%IFPEN ,inacti ,ifq ,
245 4 num_imp ,ind_imp ,intbuf_tab%STFNS ,nin ,
246 5 nsn ,itied,intbuf_tab%CAND_F )
248 IF(i_sk_old==0)inacti=-abs(inacti)
249 intbuf_tab%I_STOK(1)=i_sk_old
250 IF(inactii/=7.AND.inacimp>0)
THEN
255 ipari(22,nin) = inacti
261 intbuf_tab%I_STOK(1)=0
270 2 itask ,intbuf_tab%XSAV,xminl ,yminl ,zminl ,
271 3 xmaxl ,ymaxl ,zmaxl
272 4 ipari(39,nin),intbuf_tab%IRECTM(1+4*eshift) ,nrtm_t,sx,sy,
276 1 x ,intbuf_tab%NSV ,intbuf_tab%MSR,nsn ,nmn ,
277 2 itask ,intbuf_tab%XSAV,xminl ,yminl ,zminl ,
278 3 xmaxl ,ymaxl ,zmaxl ,c_maxl,curv_max,
279 4 ipari(39,nin),intbuf_tab%IRECTM(1+4*eshift) ,nrtm_t,sx,sy,
280 5 sz ,sx2 ,sy2 ,sz2 ,nmn_l )
283 bminma(1) =
max(bminma(1),xmaxl)
284 bminma(2) =
max(bminma(2),ymaxl)
285 bminma(3) =
max(bminma(3),zmaxl)
286 bminma(4) =
min(bminma(4),xminl)
287 bminma(5) =
min(bminma(5),yminl)
288 bminma(6) =
min(bminma(6),zminl)
289 curv_max_max =
max(curv_max_max,c_maxl)
290 bminma(7) = bminma(7)+sx
291 bminma(8) = bminma(8)+sy
292 bminma(9) = bminma(9)+sz
293 bminma(10)= bminma(10)+sx2
294 bminma(11)= bminma(11)+sy2
295 bminma(12)= bminma(12)+sz2
296 nmn_g = nmn_g + nmn_l
297#include "lockoff.inc"
305 IF(abs(bminma(6)-bminma(3))>2*ep30.OR.
306 + abs(bminma(5)-bminma(2))>2*ep30.OR.
307 + abs(bminma(4)-bminma(1))>2*ep30)
THEN
308 CALL ancmsg(msgid=87,anmode=aninfo,
309 . i1=noint,c1=
'(I7BUCE)')
313 bminma(1)=bminma(1)+tzinf+curv_max_max
314 bminma(2)=bminma(2)+tzinf+curv_max_max
315 bminma(3)=bminma(3)+tzinf+curv_max_max
316 bminma(4)=bminma(4)-tzinf-curv_max_max
317 bminma(5)=bminma(5)-tzinf-curv_max_max
318 bminma(6)=bminma(6)-tzinf-curv_max_max
322 mx=bminma(7)/
max(nmn_g,1)
323 my=bminma(8)/
max(nmn_g,1)
324 mz=bminma(9)/
max(nmn_g,1)
329 dx=sqrt(
max(bminma(10)/
max(nmn_g,1)-mx**2,zero))
330 dy=sqrt(
max(bminma(11)/
max(nmn_g,1)-my**2,zero))
331 dz=sqrt(
max(bminma(12)/
max(nmn_g,1)-mz**2,zero))
335 bminma(7) =
min(mx+2*dx,bminma(1))
336 bminma(8) =
min(my+2*dy,bminma(2))
337 bminma(9) =
min(mz+2*dz,bminma(3))
338 bminma(10) =
max(mx-2*dx,bminma(4))
339 bminma(11) =
max(my-2*dy,bminma(5))
340 bminma(12) =
max(mz-2*dz,bminma(6))
342 IF(abs(bminma(10)-bminma(7))<em10)
THEN
346 IF(abs(bminma(11)-bminma(8))<em10)
THEN
350 IF(abs(bminma(12)-bminma(9))<em10)
THEN
356 CALL ancmsg(msgid=36,anmode=aninfo,
372 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,26)
374 1 x ,bminma ,ipari(21,nin),nrtm_t,intbuf_tab%STFM(1+eshift),
375 2 tzinf ,curv_max,gapmin ,gapmax,intbuf_tab%GAP_M(1+eshift),
376 3 intbuf_tab%IRECTM(1+4*eshift),gap ,intbuf_tab%VARIABLES(bgapsmx_index),drad,
380 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,26)
386 IF (multi_fvm%IS_USED .AND. nty == 7 .AND. inacti == 7)
THEN
388 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,25)
390 1 intbuf_tab%NSV,nsn ,x ,v ,ms ,
391 2 bminma ,weight ,intbuf_tab%STFNS,nin ,isendto,
392 3 ircvfrom ,iad_elem,fr_elem ,nsnr ,ipari(21,nin),
393 4 intbuf_tab%GAP_S,itab ,kinet ,ifq ,inacti ,
394 5 nsnfiold,ipari(47,nin),intbuf_tab%IELEC,intbuf_tab%AREAS,temp ,
395 6 num_imp ,nodnx_sms,intbuf_tab%GAP_SL,nty ,idum1 ,
396 7 rdum1 ,rdum1,rdum1,rdum1,idum1 ,idum1 ,idum1, ixs, multi_fvm,
397 8 ipari(72,nin),intbuf_tab%IPARTFRICS)
398 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,25)
402 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,25)
405 1 intbuf_tab%NSV,nsn ,x ,v ,ms ,
406 2 bminma ,weight ,intbuf_tab%STFNS,nin ,isendto,
407 3 ircvfrom ,iad_elem,fr_elem ,nsnr ,ipari(21,nin),
408 4 intbuf_tab%GAP_S,itab ,kinet ,ifq ,inacti ,
409 5 nsnfiold,ipari(47,nin),intbuf_tab%IELEC,intbuf_tab%AREAS,temp ,
410 6 num_imp ,nodnx_sms,intbuf_tab%GAP_SL,nty ,idum1 ,
411 7 rdum1 ,rdum1,rdum1,rdum1,idum1 ,idum1 ,idum1 ,
412 8 ipari(72,nin),intbuf_tab%IPARTFRICS ,itied, ivis2, intbuf_tab%IF_ADH)
413 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,25)
420 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.
421 + ifq>0.OR.num_imp>0.OR.itied/=0)
THEN
423 1 intbuf_tab%CAND_N,renum ,intbuf_tab%I_STOK(1), nin,nsn,
429 cand_n_old = intbuf_tab%I_STOK(1)
455 IF(ipari(63,nin) ==2 ) intbuf_tab%METRIC%ALGO = algo_voxel
459 IF(itask == 0) intbuf_tab%METRIC%TIC =
mpi_wtime()
463 intbuf_tab%METRIC%TIC = nint(100.0 * t1)
466 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,30)
468 IF(intbuf_tab%METRIC%ALGO == algo_voxel .OR. intbuf_tab%METRIC%ALGO == try_algo_voxel)
THEN
470 1 x ,intbuf_tab%IRECTM(1+4*eshift),intbuf_tab%NSV ,inacti ,intbuf_tab%CAND_P
471 2 nmn_g ,nrtm_t ,nsn ,intbuf_tab%CAND_E,intbuf_tab%CAND_N,
472 3 gap ,noint ,intbuf_tab%I_STOK(1) ,ncontact ,bminma ,
473 4 tzinf ,maxbox ,minbox ,intbuf_tab%CAND_A,curv_max ,
474 6 nb_n_b ,eshift ,ild ,ifq ,intbuf_tab%IFPEN,
475 8 intbuf_tab%STFNS,nin ,intbuf_tab%STFM(1+eshift),ipari(21,nin),intbuf_tab%GAP_S,
476 a nsnr ,ncont ,renum ,nsnrold ,intbuf_tab%GAP_M(1+eshift),
477 b gapmin ,gapmax ,curv_max_max ,num_imp ,intbuf_tab%GAP_SL
478 c intbuf_tab%GAP_ML(1+eshift),intth ,itask , intbuf_tab%VARIABLES(bgapsmx_index),i_mem ,
479 d intbuf_tab%KREMNODE(1+2*eshift),intbuf_tab%REMNODE,itab , ipari(63,nin),drad ,
481 f nrtm ,glob_therm%INTHEAT,glob_therm%IDT_THERM,glob_therm%NODADT_THERM)
484 1 x ,intbuf_tab%IRECTM(1+4*eshift),intbuf_tab%NSV ,inacti ,intbuf_tab%CAND_P,
485 2 nmn_g ,nrtm_t ,nsn ,intbuf_tab%CAND_E,intbuf_tab%CAND_N,
486 3 gap ,noint ,intbuf_tab%I_STOK(1) ,ncontact ,bminma ,
487 4 tzinf ,maxbox ,minbox ,intbuf_tab%CAND_A,curv_max ,
488 6 nb_n_b ,eshift ,ild ,ifq ,intbuf_tab%IFPEN,
489 8 intbuf_tab%STFNS,nin ,intbuf_tab%STFM(1+eshift),ipari(21,nin),intbuf_tab%GAP_S,
490 a nsnr ,ncont ,renum ,nsnrold ,intbuf_tab%GAP_M(1+eshift),
491 b gapmin ,gapmax ,curv_max_max ,num_imp ,intbuf_tab%GAP_SL,
492 c intbuf_tab%GAP_ML(1+eshift),intth ,itask , intbuf_tab%VARIABLES(bgapsmx_index),i_mem ,
493 d intbuf_tab%KREMNODE(1+2*eshift),intbuf_tab%REMNODE,itab , ipari(63,nin),drad ,
494 e itied ,intbuf_tab%CAND_F,dgaploadp,glob_therm%INTHEAT, glob_therm%IDT_THERM, glob_therm%NODADT_THERM)
501#include "lockoff.inc"
508 IF(itask == 0 ) intbuf_tab%METRIC%TOC =
mpi_wtime()
512 intbuf_tab%METRIC%TOC = nint(100.0 * t1)
518 IF(i_memg == 3 .OR. i_memg == 1) intbuf_tab%METRIC%ALGO = algo_voxel
523 multimp = ipari(23,nin) + 4
528 intbuf_tab%I_STOK(1) = cand_n_old
529 multimp=ipari(23,nin)
530 ncontact=multimp*ncont
535 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,30)
537 IF( intbuf_tab%METRIC%ALGO == try_algo_voxel)
THEN
538 intbuf_tab%METRIC%ALGO = try_algo_bucket
539 intbuf_tab%METRIC%TOLD = intbuf_tab%METRIC%TOC - intbuf_tab%METRIC%TIC
540 ELSEIF ( intbuf_tab%METRIC%ALGO == try_algo_bucket)
THEN
541 IF( 1.2d0 * (intbuf_tab%METRIC%TOC-intbuf_tab%METRIC%TIC) < intbuf_tab%METRIC%TOLD)
THEN
542 intbuf_tab%METRIC%ALGO = algo_bucket
543 WRITE(iout,*)
"INFO: DOMAIN",ispmd,
544 .
"USES SORT2 FOR CONTACT INTERFACE",noint
546 intbuf_tab%METRIC%ALGO = algo_voxel
554 intbuf_tab%VARIABLES(maxbox_index) =
min(maxbox,intbuf_tab%VARIABLES(maxbox_index))
555 intbuf_tab%VARIABLES(minbox_index) =
min(minbox,intbuf_tab%VARIABLES(minbox_index))
556 intbuf_tab%VARIABLES(tzinf_index) =
min(tzinf,intbuf_tab%VARIABLES(tzinf_index))
557 intbuf_tab%VARIABLES(distance_index) = intbuf_tab%VARIABLES(tzinf_index)-gap
558 result = result + ild
559#include "lockoff.inc"
567 intbuf_tab%I_STOK(1) = i_sk_old
572 maxbox = intbuf_tab%VARIABLES(maxbox_index)
573 minbox = intbuf_tab%VARIABLES(minbox_index)
574 tzinf = intbuf_tab%VARIABLES(tzinf_index)
581 IF (imonm > 0)
CALL startime(timers,26)
582 intbuf_tab%VARIABLES(distance_index) = -intbuf_tab%VARIABLES(distance_index)
585 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
586 2 ipari(21,nin),nsnr ,multimp ,nty ,ipari(47,nin),
587 3 idum1 ,nsnfiold, ipari , h3d_data ,ipari(72,nin),
588 4 multi_fvm,glob_therm%NODADT_THERM)
594 IF (imonm > 0)
CALL stoptime(timers,26)