45 1 ERRORS, IPARI ,NEWFRONT,ISENDTO,NSENSOR ,
46 2 IRCVFROM,DT2T ,NELTST ,ITYPTST ,ITAB ,
47 3 XSLV ,XMSR ,VSLV ,VMSR ,INTLIST,
48 4 NBINTC ,SIZE_T ,SENSOR_TAB,DELTA_PMAX_GAP,
49 5 INTBUF_TAB,DELTA_PMAX_GAP_NODE,IDEL7NOK_SAV,MAXDGAP, V )
62#include "implicit_f.inc"
73#include "timeri_c.inc"
78 TYPE(timer_) :: TIMERS
79 my_real,
intent(in) :: V(3,NUMNOD)
80 INTEGER,
INTENT(INOUT) :: ERRORS
81 INTEGER ,
INTENT(IN) :: NSENSOR
82 INTEGER IPARI(NPARI,*),
83 . neltst,ityptst,nbintc,intlist(*),newfront(*), itab(*),
84 . isendto(ninter+1,*) ,ircvfrom(ninter+1,*),delta_pmax_gap_node(*),idel7nok_sav
86 my_real :: xslv(18,*), xmsr(12,*), vslv(6,*), vmsr(6,*),
87 . size_t(*),delta_pmax_gap(*),maxdgap(ninter)
89 TYPE(intbuf_struct_) INTBUF_TAB(*)
90 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
94 LOGICAL,
DIMENSION(NINTER) :: FORCE_COMPUTATION
95 INTEGER I,J,KK,IGN,IGE,JJ, NSN, NMN,
97 . NBNEW, LISTNEW(NBINTC), ISENS, INTERACT,DELTA_PMAX_GAP_NOD
98 INTEGER :: JMAX,KEY,KEYIN
100 . xx,xy,xz,dist0,vx,vy,vz,gapinf,vv,dti,vmaxdt,
101 . startt, stopt, minbox,tzinfl,gapsup,pmax_gap,
102 . marge0,tzinf(nbintc),ts ,
104 . delta_pmax_gap_sav(ninter)
110 delta_pmax_gap_sav(1:ninter)=delta_pmax_gap(1:ninter)
113 force_computation(1:ninter) = .false.
124 IF(nty == 7.OR.nty == 11.OR.nty == 24.OR.nty == 21.OR.
125 . nty == 5.OR.nty == 19.OR.nty == 25) isens = ipari(64,i)
127 ts = sensor_tab(isens)%TSTART
128 IF (tt>=ts) interact = 1
131 startt = intbuf_tab(i)%VARIABLES(3)
132 stopt = intbuf_tab(i)%VARIABLES(11)
133 IF (startt<=tt.AND.tt<=stopt) interact = 1
136 IF(interact/=0.OR.(nty==25 .AND. tt <= stopt))
THEN
139 tzinf(nbnew) = intbuf_tab(i)%VARIABLES(8)
155 IF(interact == 0 .AND.
nsnfi_flag(i)==0.AND.nty/=25)
THEN
161 nsnfi(i)%P(1:nspmd) = 0
162 nsnsi(i)%P(1:nspmd) = 0
170 IF (imonm > 0)
CALL startime(timers,27)
172 1 isendto,ircvfrom,newfront,xslv ,xmsr ,
173 2 vslv ,vmsr ,listnew ,nbnew ,tzinf ,
174 3 size_t ,ipari , delta_pmax_gap ,maxdgap)
175 IF (imonm > 0)
CALL stoptime(timers,2
181 IF (nty/=24.AND.nty/=25)
THEN
182 intbuf_tab(i)%VARIABLES(8)=tzinf(kk)
185 IF(nty==25.AND.newfront(i)==-2) force_computation(i) = .true.
190 IF (newfront(i)<0)
THEN
191 IF(nty==7.OR.nty==10.OR.nty==23.OR.nty==24)
THEN
193 1 newfront(i) ,intbuf_tab(i)%I_STOK(1) ,
195 3 ipari(5,i),i,isendto,ircvfrom,intbuf_tab(i)%NSV,
199 1 newfront(i) ,intbuf_tab(i)%I_STOK(1),
200 2 intbuf_tab(i)%CAND_N, intbuf_tab(i)%STFS,
201 3 ipari(3,i),i,isendto,ircvfrom,intbuf_tab(i)%IRECTS,
205 1 newfront(i) ,intbuf_tab(i)%I_STOK(1) ,
206 2 intbuf_tab(i)%CAND_N,intbuf_tab(i)%STFA,
207 3 ipari(5,i),i,isendto,ircvfrom,intbuf_tab(i)%NSV,
208 4 itab,intbuf_tab(i)%NLG)
210 1 newfront(i) ,nint(intbuf_tab(i)%VARIABLES(20)) ,
211 2 intbuf_tab(i)%LCAND_S,intbuf_tab(i)%STFS,
212 3 ipari(53,i),i,isendto,ircvfrom,intbuf_tab(i)%IXLINS,
213 4 itab, intbuf_tab(i)%NLG )
216 1 newfront(i) , intbuf_tab(i)%STFNS,ipari(5,i),
217 3 i,isendto,ircvfrom,intbuf_tab(i)%NSV,
228 IF(ipari(33,i) == 0)
THEN
239 tzinf(kk) = intbuf_tab(i)%VARIABLES(4) * size_t(i) / nmet / 6
240 intbuf_tab(i)%VARIABLES(8) = tzinf(kk)
241 minbox = intbuf_tab(i)%VARIABLES(5) * size_t(i) / nmet / 6
242 intbuf_tab(i)%VARIABLES(12) = minbox
244 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
245 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
246 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
247 dist0 = xx**2 + xy**2 + xz**2
251 IF(dist0>=tzinf(kk)**2.OR.kforsms/=0)
THEN
253 intbuf_tab(i)%VARIABLES(5)= -intbuf_tab(i)%VARIABLES(5)
254 IF(debug(3)>=1.AND.ncycle/=0)
THEN
255 WRITE(istdo,
'(A,I10,A,I8,A,I4)')
256 .
'** NEW SORT FOR INTERFACE NUMBER ',
257 . ipari(15,i),
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1
258 WRITE(iout,
'(A,I10,A,I8,A,I4)')
259 .
'** NEW SORT FOR INTERFACE NUMBER ',
260 . ipari(15,i),
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1
265 ELSEIF(nty == 24)
THEN
268 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
269 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
270 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
295 d0 = sqrt(xx**2+xy**2+xz**2)
305 vx =
max(vslv(1,i)-vmsr(4,i),vmsr(1,i)-vslv(4,i),zero)
306 vy =
max(vslv(2,i)-vmsr(5,i),vmsr(2,i)-vslv(5,i),zero)
307 vz =
max(vslv(3,i)-vmsr(6,i),vmsr(3,i)-vslv(6,i),zero)
308 vv = sqrt(vx**2+vy**2+vz**2)
310 tzinfl = intbuf_tab(i)%VARIABLES
311 gapsup = intbuf_tab(i)%VARIABLES(2)
318 vmaxdt = onep01*vv*dt1
319 intbuf_tab(i)%VARIABLES(24) = vmaxdt
323 marge0 = intbuf_tab(i)%VARIABLES(25)
325 pmax_gap = intbuf_tab(i)%VARIABLES(23)
329 ! marge0 = some kind of safety margin, we already have
the possible candidates within this margin
331 dist0 = marge0 - onep01*(d0 + vmaxdt + delta_pmax_gap(i))
335 IF(dist0<=zero.OR.kforsms/=0)
THEN
337 intbuf_tab(i)%VARIABLES(5) = -one
342 IF(delta_pmax_gap_sav(i) == delta_pmax_gap(i)) delta_pmax_gap_nod=delta_pmax_gap_node(i)
344 WRITE(istdo,
'(A,I10,A,I8,A,F20.10,A,F20.10,A,F20.10,A,
345 . F20.10,A,F14.7,A,F20.10,A,I10,A,I4)')
346 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
347 . ncycle,
' T',tt,
' DIST0 ',dist0,
' : MARGE0',marge0,
348 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' DELTA_PMAX_GAP ',delta_pmax_gap(i),
' NODE: ',delta_pmax_gap_nod,
' PROC',
354 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
355 . ncycle,
' T',tt,
' DIST0',dist0,
' : MARGE0',marge0,
356 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' DELTA_PMAX_GAP ',delta_pmax_gap
' NODE: '' PROC'
361 ELSEIF(nty == 25)
THEN
364 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
365 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
366 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
368 d0 = sqrt(xx**2+xy**2+xz**2)
369 vx =
max(vslv(1,i)-vmsr(4,i),vmsr(1,i)-vslv(4,i),zero)
370 vy =
max(vslv(2,i)-vmsr(5,i),vmsr(2,i)-vslv(5,i),zero)
371 vz =
max(vslv(3,i)-vmsr(6,i),vmsr(3,i)-vslv(6,i),zero)
372 vv = sqrt(vx**2+vy**2+vz**2)
374 tzinfl = intbuf_tab(i)%VARIABLES(8)
375 gapsup = intbuf_tab(i)%VARIABLES(2)
382 vmaxdt = onep01*vv*dt1
386 intbuf_tab(i)%VARIABLES(24) = vmaxdt
387 marge0 = intbuf_tab(i)%VARIABLES(25)
389 dist0 = marge0 - onep01*(d0 + vmaxdt + maxdgap(i))
391 intbuf_tab(i)%VARIABLES(5) = dist0
395 IF(vmaxdt > two * marge0)
THEN
397 IF(vmaxdt > five*marge0)
THEN
400 WRITE(istdo,
'(A,I10)')
"ERROR: NODAL VELOCITY IS TOO HIGH
401 . FOR INTERFACE",ipari(15,i)
402 WRITE(iout,
'(A,I10)')
"ERROR: NODAL VELOCITY IS TOO HIGH
403 . FOR INTERFACE",ipari(15,i)
407 WRITE(istdo,
'(A,I10)')
"WARNING: NODAL VELOCITY MAY BE TOO HIGH
408 . FOR INTERFACE",ipari(15,i)
409 WRITE(iout,
'(A,I10)')
"WARNING: NODAL VELOCITY MAY BE TOO HIGH
410 . FOR INTERFACE",ipari(15,i)
418 j=intbuf_tab(i)%NSV(jj)
419 IF(intbuf_tab(i)%STFNS(jj)/=zero .AND. j<=numnod .AND. j > 0)
THEN
420 vx =
max(v(1,j)-vmsr(4,i),vmsr(1,i)-v(1,j),zero)
421 vy =
max(v(2,j)-vmsr(5,i),vmsr(2,i)-v(2,j),zero)
422 vz =
max(v(3,j)-vmsr(6,i),vmsr(3,i)-v(3,j),zero)
423 IF( sqrt(vx**2+vy**2+vz**2) > d1)
THEN
424 d1 = sqrt(vx**2+vy**2+vz**2)
430 j=intbuf_tab(i)%MSR(jj)
431 IF(j>0 .AND. j <= numnod)
THEN
432 vx =
max(vslv(1,i)-v(1,j),v(1,j)-vslv(1,i),zero)
433 vy =
max(vslv(2,i)-v(2,j),v(2,j)-vslv(2,i),zero)
434 vz =
max(vslv(3,i)-v(3,j),v(3,j)-vslv(3,i),zero)
435 IF( sqrt(vx**2+vy**2+vz**2) > d1)
THEN
436 d1 = sqrt(vx**2+vy**2+vz**2)
441 IF(intbuf_tab(i)%belongs_to_comm_crit)
THEN
444 call spmd_allreduce(d1, dglob, 1 , spmd_max, intbuf_tab(i)%MPI_COMM_CRIT)
449 call spmd_allreduce(ispmd, key, 1 , spmd_max, intbuf_tab(i)%MPI_COMM_CRIT)
450 IF(d1 == dglob .AND. ispmd == key)
THEN
451 WRITE(istdo,*)
"NODE WITH HIGHEST RELATIVE VELOCITY:",itab(jmax),d1
452 WRITE(iout,*)
"NODE WITH HIGHEST RELATIVE VELOCITY:",itab(jmax),d1
455 IF(vmaxdt > five*marge0)
THEN
456 intbuf_tab(i)%VARIABLES(24) = marge0
461 IF(dist0<=zero.OR.kforsms/=0.OR.force_computation(i))
THEN
463 intbuf_tab(i)%VARIABLES(5) = -one
467 WRITE(istdo,
'(A,I10,A,I8,A,F20.10,A,F20.10,A,F20.10,A,
468 . F20.10,A,F14.7,A,I4)')
469 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
470 . ncycle,
' T',tt,
' DIST0 ',dist0,
' : MARGE0',marge0,
471 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' PROC',ispmd
476 .
'** NEW SORT INTERFACE ',ipari(15,i),
' CYCLE ',
477 . ncycle,
' T',tt,
' DIST0',dist0,
' : MARGE0',marge0,
478 .
' D0',d0,
' VMAXDT ', vmaxdt ,
' PROC',ispmd+1
485 xx =
max(xslv(1,i)-xmsr(4,i),xmsr(1,i)-xslv(4,i),zero)
486 xy =
max(xslv(2,i)-xmsr(5,i),xmsr(2,i)-xslv(5,i),zero)
487 xz =
max(xslv(3,i)-xmsr(6,i),xmsr(3,i)-xslv(6,i),zero)
489 vx =
max(vslv(1,i)-vmsr(4,i),vmsr(1,i)-vslv(4,i),zero)
490 vy =
max(vslv(2,i)-vmsr(5,i),vmsr(2,i)-vslv(5,i),zero)
491 vz =
max(vslv(3,i)-vmsr(6,i),vmsr(3,i)-vslv(6,i),zero)
492 vv = sqrt(vx**2+vy**2+vz**2)
494 tzinfl = intbuf_tab(i)%VARIABLES(8)
495 gapsup = intbuf_tab(i)%VARIABLES(2)
501 tzinfl = intbuf_tab(i)%VARIABLES(8)
503 intbuf_tab(i)%VARIABLES(5) = tzinfl-sqrt(three)*gapsup
505 intbuf_tab(i)%VARIABLES(5) = tzinfl-gapsup
508 dist0 = intbuf_tab(i)%VARIABLES(5) - sqrt(xx**2+xy**2+xz**2)
513 gapinf =intbuf_tab(i)%VARIABLES(6)
514 IF (gapinf==zero) gapinf = intbuf_tab(i)%VARIABLES(2)
524 IF(dist0<=zero.OR.kforsms/=0)
THEN
526 intbuf_tab(i)%VARIABLES(5) = -one
527 IF(debug(3)>=1.AND.ncycle/=0)
THEN
528 WRITE(istdo,
'(A,I10,A,I4,A,I8,A,I4,A,I4,A,F20.10,A,F20.10,A,F20.10)')
529 .
'** NEW SORT FOR INTERFACE NUMBER ',
530 . ipari(15,i),
' TYPE ',nty,
531 .
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1,
' I19FLAG ',ipari(7,i),
532 .
' DIST0 ',dist0,
' TZINF ',intbuf_tab(i)%VARIABLES(8),
' GAP ',
533 . intbuf_tab(i)%VARIABLES(2)
535 WRITE(iout,
'(A,I10,A,I4,A,I8,A,I4,A,I4,A,F20.10,A,F20.10,A,F20.10)')
536 .
'** NEW SORT FOR INTERFACE NUMBER ',
537 . ipari(15,i),
' TYPE ',nty,
538 .
' AT CYCLE ',ncycle,
' ON PROC',ispmd+1,
' I19FLAG ',ipari(7,i),
539 .
' DIST0 ',dist0,
' TZINF ',intbuf_tab(i)%VARIABLES(8),
' GAP ',
540 . intbuf_tab(i)%VARIABLES(2)