44 1 ERRORS, IPARI ,NEWFRONT,ISENDTO,NSENSOR ,
45 2 IRCVFROM,DT2T ,NELTST ,ITYPTST ,ITAB ,
46 3 XSLV ,XMSR ,VSLV ,VMSR ,INTLIST,
47 4 NBINTC ,SIZE_T ,SENSOR_TAB,DELTA_PMAX_GAP,
48 5 INTBUF_TAB,DELTA_PMAX_GAP_NODE,IDEL7NOK_SAV,MAXDGAP, V )
60#include "implicit_f.inc"
71#include "timeri_c.inc"
76 TYPE(timer_) :: TIMERS
77 my_real,
intent(in) :: V(3,NUMNOD)
78 INTEGER,
INTENT(INOUT) :: ERRORS
79 INTEGER ,
INTENT(IN) :: NSENSOR
80 INTEGER IPARI(NPARI,*),
81 . neltst,ityptst,nbintc,intlist(*),newfront(*), itab(*),
82 . isendto(ninter+1,*) ,ircvfrom(ninter+1,*),delta_pmax_gap_node(*),idel7nok_sav
84 my_real :: xslv(18,*), xmsr(12,*), vslv(6,*), vmsr(6,*),
85 . size_t(*),delta_pmax_gap(*),maxdgap(ninter)
87 TYPE(intbuf_struct_) INTBUF_TAB(*)
88 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
92 LOGICAL,
DIMENSION(NINTER) :: FORCE_COMPUTATION
93 INTEGER I,J,KK,IGN,IGE,JJ, NSN, NMN,
94 . IAD,K,N,IADD,ICOMP,NTY,NME,NMES,NMET,
95 . NBNEW, LISTNEW(NBINTC), ISENS, INTERACT,DELTA_PMAX_GAP_NOD
98 . xx,xy,xz,dist0,vx,vy,vz,gapinf,vv,dti,vmaxdt,
99 . startt, stopt, minbox,tzinfl,gapsup,pmax_gap,
100 . marge0,tzinf(nbintc),criterl(nbintc),ts ,
101 . xxp,xyp,xzp,xxg,xyg,xzg,d0,d1,d2,d3,d4,d5,d6,d7,d8,
102 . delta_pmax_gap_sav(ninter)
107 delta_pmax_gap_sav(1:ninter)=delta_pmax_gap(1:ninter)
110 force_computation(1:ninter) = .false.
121 IF(nty == 7.OR.nty == 11.OR.nty == 24.OR.nty == 21.OR.
122 . nty == 5.OR.nty == 19.OR.nty == 25) isens = ipari(64,i)
124 ts = sensor_tab(isens)%TSTART
125 IF (tt>=ts) interact = 1
128 startt = intbuf_tab(i)%VARIABLES(3)
129 stopt = intbuf_tab(i)%VARIABLES(11)
130 IF (startt<=tt.AND.tt<=stopt) interact = 1
133 IF(interact/=0.OR.(nty==25 .AND. tt <= stopt))
THEN
136 tzinf(nbnew) = intbuf_tab(i)%VARIABLES(8)
152 IF(interact == 0 .AND.
nsnfi_flag(i)==0.AND.nty/=25)
THEN
158 nsnfi(i)%P(1:nspmd) = 0
159 nsnsi(i)%P(1:nspmd) = 0
167 IF (imonm > 0)
CALL startime(timers,27)
169 1 isendto,ircvfrom,newfront,xslv ,xmsr ,
171 3 size_t ,ipari , delta_pmax_gap ,maxdgap)
172 IF (imonm > 0)
CALL stoptime(timers,27)
178 IF (nty/=24.AND.nty/=25)
THEN
179 intbuf_tab(i)%VARIABLES(8)=tzinf(kk)
182 IF(nty==25.AND.newfront(i)==-2) force_computation(i) = .true.
187 IF (newfront(i)<0)
THEN
188 IF(nty==7.OR.nty==10.OR.nty==23.OR.nty==24)
THEN
190 1 newfront(i) ,intbuf_tab(i)%I_STOK(1) ,
191 2 intbuf_tab(i)%CAND_N,intbuf_tab(i)%STFNS,
192 3 ipari(5,i),i,isendto,ircvfrom,intbuf_tab(i)%NSV,
196 1 newfront(i) ,intbuf_tab(i)%I_STOK(1),
197 2 intbuf_tab(i)%CAND_N, intbuf_tab(i)%STFS,
198 3 ipari(3,i),i,isendto,ircvfrom,intbuf_tab(i)%IRECTS,
202 1 newfront(i) ,intbuf_tab(i)%I_STOK(1) ,
203 2 intbuf_tab(i)%CAND_N,intbuf_tab(i)%STFA,
204 3 ipari(5,i),i,isendto,ircvfrom,intbuf_tab(i)%NSV,
205 4 itab,intbuf_tab(i)%NLG)
207 1 newfront(i) ,nint(intbuf_tab(i)%VARIABLES(20)) ,
208 2 intbuf_tab(i)%LCAND_S,intbuf_tab(i)%STFS,
209 3 ipari(53,i),i,isendto,ircvfrom,intbuf_tab(i)%IXLINS,
210 4 itab, intbuf_tab(i)%NLG )
213 1 newfront(i) , intbuf_tab(i)%STFNS,ipari(5,i),
214 3 i,isendto,ircvfrom,intbuf_tab(i)%NSV,
225 IF(ipari(33,i) == 0)
THEN
236 tzinf(kk) = intbuf_tab(i)%VARIABLES(4) * size_t(i) / nmet / 6
237 intbuf_tab(i)%VARIABLES(8) = tzinf(kk)
238 minbox = intbuf_tab(i)%VARIABLES(5) * size_t(i) / nmet / 6
239 intbuf_tab(i)%VARIABLES(12) = minbox
241 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
242 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
243 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
244 dist0 = xx**2 + xy**2 + xz**2
248 IF(dist0>=tzinf(kk)**2.OR.kforsms/=0)
THEN
250 intbuf_tab(i)%VARIABLES(5)= -intbuf_tab(i)%VARIABLES(5)
251 IF(debug(3)>=1.AND.ncycle/=0)
THEN
252 WRITE(istdo,
'(A,I10,A,I8,A,I4)')
253 .
'** NEW SORT FOR INTERFACE NUMBER ',
254 . ipari(15,i),
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1
255 WRITE(iout,
'(A,I10,A,I8,A,I4)')
256 .
'** NEW SORT FOR INTERFACE NUMBER ',
257 . ipari(15,i),
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1
262 ELSEIF(nty == 24)
THEN
265 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
266 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
267 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
292 d0 = sqrt(xx**2+xy**2+xz**2)
302 vx =
max(vslv(1,i)-vmsr(4,i),vmsr(1,i)-vslv(4,i),zero)
303 vy =
max(vslv(2,i)-vmsr(5,i),vmsr(2,i)-vslv(5,i),zero)
304 vz =
max(vslv(3,i)-vmsr(6,i),vmsr(3,i)-vslv(6,i),zero)
305 vv = sqrt(vx**2+vy**2+vz**2)
307 tzinfl = intbuf_tab(i)%VARIABLES(8)
308 gapsup = intbuf_tab(i)%VARIABLES(2)
315 vmaxdt = onep01*vv*dt1
316 intbuf_tab(i)%VARIABLES(24) = vmaxdt
320 marge0 = intbuf_tab(i)%VARIABLES(25)
322 pmax_gap = intbuf_tab(i)%VARIABLES(23)
328 dist0 = marge0 - onep01*(d0 + vmaxdt + delta_pmax_gap(i))
330 intbuf_tab(i)%VARIABLES(5) = dist0
332 IF(dist0<=zero.OR.kforsms/=0)
THEN
334 intbuf_tab(i)%VARIABLES(5) = -one
339 IF(delta_pmax_gap_sav(i) == delta_pmax_gap(i
341 WRITE(istdo,
'(A,I10,A,I8,A,F20.10,A,F20.10,A,F20.10,A,
342 . F20.10,A,F14.7,A,F20.10,A,I10,A,I4)')
343 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
344 . ncycle,
' T',tt,
' DIST0 ',dist0,
' : MARGE0',marge0,
345 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' DELTA_PMAX_GAP ',delta_pmax_gap(i),
' NODE: ',delta_pmax_gap_nod,
' PROC',
351 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
352 . ncycle,
' T',tt,
' DIST0',dist0,
' : MARGE0',marge0,
353 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' DELTA_PMAX_GAP ',delta_pmax_gap(i),
' NODE: ',delta_pmax_gap_nod,
' PROC',
358 ELSEIF(nty == 25)
THEN
361 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
362 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
363 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
365 d0 = sqrt(xx**2+xy**2+xz**2)
366 vx =
max(vslv(1,i)-vmsr(4,i),vmsr(1,i)-vslv(4,i),zero)
367 vy =
max(vslv(2,i)-vmsr(5,i),vmsr(2,i)-vslv(5,i),zero)
368 vz =
max(vslv(3,i)-vmsr(6,i),vmsr(3,i)-vslv(6,i),zero)
369 vv = sqrt(vx**2+vy**2+vz**2)
371 tzinfl = intbuf_tab(i)%VARIABLES(8)
372 gapsup = intbuf_tab(i)%VARIABLES(2)
379 vmaxdt = onep01*vv*dt1
383 intbuf_tab(i)%VARIABLES(24) = vmaxdt
384 marge0 = intbuf_tab(i)%VARIABLES(25)
386 dist0 = marge0 - onep01*(d0 + vmaxdt + maxdgap(i))
388 intbuf_tab(i)%VARIABLES(5) = dist0
392 IF(vmaxdt > five * marge0)
THEN
396 WRITE(istdo,
'(A,I10)')
"ERROR: NODAL VELOCITY IS TOO HIGH
397 . FOR INTERFACE",ipari(15,i)
398 WRITE(iout,
'(A,I10)')
"ERROR: NODAL VELOCITY IS TOO HIGH
399 . FOR INTERFACE",ipari(15,i)
406 j=intbuf_tab(i)%NSV(jj)
407 IF(intbuf_tab(i)%STFNS(jj)/=zero .AND. j<=numnod .AND. j > 0)
THEN
411 IF( sqrt(vx**2+vy**2+vz**2) > d1)
THEN
412 d1 = sqrt(vx**2+vy**2+vz**2)
418 j=intbuf_tab(i)%MSR(jj)
419 IF(j>0 .AND. j <= numnod)
THEN
423 IF( sqrt(vx**2+vy**2+vz**2) > d1)
THEN
424 d1 = sqrt(vx**2+vy**2+vz**2)
429 IF(d1 > five * marge0 /two )
THEN
430 WRITE(istdo,*)
"ERROR: NODAL VELOCITY IS TOO HIGH FOR NODE",itab(jmax),d1
431 WRITE(iout,*)
"ERROR: NODAL VELOCITY IS TOO HIGH FOR NODE",itab(jmax),d1
433 intbuf_tab(i)%VARIABLES(24) = marge0
437 IF(dist0<=zero.OR.kforsms/=0.OR.force_computation(i))
THEN
439 intbuf_tab(i)%VARIABLES(5) = -one
443 WRITE(istdo,
'(A,I10,A,I8,A,F20.10,A,F20.10,A,F20.10,A,
444 . F20.10,A,F14.7,A,I4)')
445 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
446 . ncycle,
' T',tt,
' DIST0 ',dist0,
' : MARGE0',marge0,
447 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' PROC',ispmd+1
452 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
453 . ncycle,
' T',tt,
' DIST0',dist0,
' : MARGE0',marge0,
454 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' PROC',ispmd+1
461 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
462 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
463 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
465 vx =
max(vslv(1,i)-vmsr(4,i),vmsr(1,i)-vslv(4,i),zero)
466 vy =
max(vslv(2,i)-vmsr(5,i),vmsr(2,i)-vslv(5,i),zero)
467 vz =
max(vslv(3,i)-vmsr(6,i),vmsr(3,i)-vslv(6,i),zero)
468 vv = sqrt(vx**2+vy**2+vz**2)
470 tzinfl = intbuf_tab(i)%VARIABLES(8)
471 gapsup = intbuf_tab(i)%VARIABLES(2)
477 tzinfl = intbuf_tab(i)%VARIABLES(8)
479 intbuf_tab(i)%VARIABLES(5) = tzinfl-sqrt(three)*gapsup
481 intbuf_tab(i)%VARIABLES(5) = tzinfl-gapsup
484 dist0 = intbuf_tab(i)%VARIABLES(5) - sqrt(xx**2+xy**2+xz**2)
489 gapinf =intbuf_tab(i)%VARIABLES(6)
490 IF (gapinf==zero) gapinf = intbuf_tab(i)%VARIABLES(2)
500 IF(dist0<=zero.OR.kforsms/=0)
THEN
502 intbuf_tab(i)%VARIABLES(5) = -one
503 IF(debug(3)>=1.AND.ncycle/=0)
THEN
504 WRITE(istdo,
'(A,I10,A,I4,A,I8,A,I4,A,I4,A,F20.10,A,F20.10,A,F20.10)')
505 .
'** NEW SORT FOR INTERFACE NUMBER ',
506 . ipari(15,i),
' TYPE ',nty,
507 .
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1,
' I19FLAG ',ipari(7,i),
508 .
' DIST0 '' TZINF '' GAP ',
509 . intbuf_tab(i)%VARIABLES(2)
511 WRITE(iout,
'(A,I10,A,I4,A,I8,A,I4,A,I4,A,F20.10,A,F20.10,A,F20.10)')
512 .
'** NEW SORT FOR INTERFACE NUMBER ',
513 . ipari(15,i),
' TYPE ',nty,
514 .
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1,
' I19FLAG ',ipari(7,i),
515 .
' DIST0 ',dist0,
' TZINF ',intbuf_tab(i)%VARIABLES(8),
' GAP ',
516 . intbuf_tab(i)%VARIABLES(2)