41 . ISHEOFF,ITRUOFF ,IPOUOFF ,IRESOFF ,ITRIOFF,
52#include "implicit_f.inc"
63 INTEGER ISOLOFF(*),ISHEOFF(*),ITRUOFF(*),IPOUOFF(*),IRESOFF(*),ITRIOFF(*),
66 . dtelem(*),
dtnoda,dt_r2r(4,*),cost_r2r
70 INTEGER :: I,FLG_CHK,FLG_CTL,DOMLEN,FLG_CHK_SUB,FLG_CTL_SUB
71 :: DT,DT_SUB,SPEEDUP,COST_SUB
77 cost_r2r = cost_r2r + 12.0
83 dt_r2r(2,1) = cost_r2r
84 IF (flg_chk>0) dt_r2r(3,1) = one
85 IF (flg_ctl>0) dt_r2r(4,1) = one
93 CALL ancmsg(msgid=1095, msgtype=msgwarning, anmode=aninfo_blind_2, c1=rootnam(1:rootlen)//
'_0001.rad')
97 cost_sub = dt_r2r(2,1)
99 IF (flg_swale == 1)
THEN
103 cost_r2r = dt_r2r(2,1)
108 IF (dt_r2r(3,1)>em20) flg_chk_sub = 1
109 IF (dt_r2r(4,1)>em20) flg_ctl_sub = 1
114 IF (flg_chk_sub==0)
THEN
115 CALL ancmsg(msgid=1095, msgtype=msgwarning, anmode=aninfo_blind_2, c1=nam(1:domlen)//
'_0001.rad')
118 speedup = 0.9*((cost_r2r+cost_sub)/((cost_r2r*dt_sub/dt)+cost_sub))
121 WRITE(iout,2001) nam(1:domlen),dt_sub
122 WRITE(iout,2002) speedup
127 1000
FORMAT(//,
' MULTIDOMAINS SPEEDUP ESTIMATION')
128 1001
FORMAT(
' ------------------------')
129 2000
FORMAT(/,
' ESTIMATED TIME STEP FOR FULLDOMAIN',3x,1pg20.13)
130 2001
FORMAT(
' ESTIMATED TIME STEP FOR SUBDOMAIN',1x,a,3x,1pg20.13)
131 2002
FORMAT(/,
' ESTIMATED THEORETICAL SPEEDUP',2x,f10.1,//)
153 . ISOLOFF,ISHEOFF,ITRUOFF ,IPOUOFF ,IRESOFF ,
165#include "implicit_f.inc"
169#include "com04_c.inc"
170#include "com06_c.inc"
171#include "scr15_c.inc"
176 INTEGER FLG_CHK,FLG_CTL,ISOLOFF(*),ISHEOFF(*),ITRUOFF(*),
177 . IPOUOFF(*),IRESOFF(*),ITRIOFF(*),IQUAOFF(*)
183 INTEGER IO_ERR1,I,DT_INDEX(11),FLAG_TRI(11),NUME(11),NUMEL
184 CHARACTER FILNAM*109, KEYA*80, KEYA2*80
186 . DTSCA,DTMINI,DTINI,DTMAX,DT_MIN_ELEM(11),DTFAC1(11)
187 INTEGER :: LEN_TMP_NAME
188 CHARACTER(len=4096) :: TMP_NAME
190 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PERM
197 dt_min_elem(:) = ep30
200 numel= numelc+numels+numelt+numelq+numelp+numelr+numeltg
201 . +numelx+numsph+numelig3d
202 CALL my_alloc( perm,numel+1)
220 dt_index(i) = dt_index(i-1) + nume(i-1)
227 IF (isoloff(i)/=0)
THEN
228 dtelem(i+dt_index(1)) = ep30
234 IF (iquaoff(i)/=0)
THEN
235 dtelem(i+dt_index(2)) = ep30
241 IF (isheoff(i)/=0)
THEN
242 dtelem(i+dt_index(3)) = ep30
248 IF (itruoff(i)/=0)
THEN
249 dtelem(i+dt_index(4)) = ep30
255 IF (ipouoff(i)/=0)
THEN
256 dtelem(i+dt_index(5)) = ep30
262 IF (iresoff(i)/=0)
THEN
263 dtelem(i+dt_index(6)) = ep30
269 IF (itrioff(i)/=0)
THEN
270 dtelem(i+dt_index(7)) = ep30
276 IF (flag_tri(i)==1)
THEN
277 CALL myqsort(nume(i),dtelem(1+dt_index(i)),perm(1+dt_index(i)),ierror)
278 dtelem(numel+1+dt_index(i):numel+nume(i)+1+dt_index(i)) = perm(1+dt_index(i):nume(i)+1+dt_index(i))
286 dt_min_elem(i) = dtelem(1+dt_index(i))
292 filnam=rootnam(1:rootlen)//
'_0001.rad'
295 OPEN(unit=71,file=tmp_name(1:len_tmp_name),
296 . access=
'SEQUENTIAL',status=
'OLD',iostat=io_err1)
299 filnam=rootnam(1:rootlen)//
'D01'
302 OPEN(unit=71,file=tmp_name(1:len_tmp_name),
303 . access=
'SEQUENTIAL',status=
'OLD',iostat=io_err1)
309 10
READ(71,'(a)
',END=20) KEYA
311 IF (KEYA(1:3)=='/dt
') THEN
312 READ(71,'(a)
',END=20) KEYA2
313 IF(KEYA2(1:1)/='$.AND.
'KEYA2(1:1)/='#') THEN
319 IF(keya(1:8)==
'/DT/NODA')
THEN
320 READ(71,*,
END=20) DTSCA,dtmini
322 IF(keya(1:12)==
'/DT/NODA/CST')
THEN
327 ELSEIF(keya(1:9)==
'/DT/BRICK')
THEN
328 READ(71,*,
END=20) DTSCA,dtmini
330 IF (keya(10:13)==
'/DEL')
THEN
332 IF (dtsca*dtelem(dt_index(1)+i)>dtmini)
THEN
333 dt_min_elem(1) = dtelem(dt_index(1)+i)
339 ELSEIF(keya(1:9)==
'/DT/QUAD')
THEN
340 READ(71,*,
END=20) DTSCA,dtmini
342 IF (keya(10:13)==
'/DEL')
THEN
344 IF (dtsca*dtelem(dt_index(2)+i)>dtmini)
THEN
345 dt_min_elem(2) = dtelem(dt_index(2)+i)
351 ELSEIF(keya(1:9)==
'/DT/SHELL')
THEN
352 READ(71,*,
END=20) DTSCA,dtmini
354 IF ((keya(10:14)/=
'/STOP').AND.(keya(10:13)/=
'/CST'))
THEN
356 IF (dtsca*dtelem(dt_index(3)+i)>dtmini)
THEN
357 dt_min_elem(3) = dtelem(dt_index(3)+i)
363 ELSEIF (keya(1:8)==
'/DT/BEAM')
THEN
364 READ(71,*,
END=20) DTSCA,dtmini
366 IF (keya(9:12)==
'/DEL')
THEN
368 IF (dtsca*dtelem(dt_index(4)+i)>dtmini)
THEN
369 dt_min_elem(4) = dtelem(dt_index(4)+i)
375 ELSEIF (keya(1:9)==
'/DT/TRUSS')
THEN
376 READ(71,*,
END=20) DTSCA,dtmini
378 IF (keya(10:13)==
'/DEL')
THEN
380 IF (dtsca*dtelem(dt_index(5)+i)>dtmini)
THEN
381 dt_min_elem(5) = dtelem(dt_index(5)+i)
387 ELSEIF (keya(1:10)==
'/DT/SPRING')
THEN
388 READ(71,*,
END=20) DTSCA,dtmini
390 IF (keya(11:14)==
'/DEL')
THEN
392 IF (dtsca*dtelem(dt_index(6)+i)>dtmini)
THEN
393 dt_min_elem(6) = dtelem(dt_index(6)+i)
399 ELSEIF(keya(1:9)==
'/DT/SH_3N')
THEN
400 READ(71,*,
END=20) DTSCA,dtmini
402 IF ((keya(10:14)/=
'/STOP').AND.(keya(10:13)/=
'/CST'))
THEN
404 IF (dtsca*dtelem(dt_index(7)+i)>dtmini)
THEN
405 dt_min_elem(7) = dtelem(dt_index(7)+i)
411 ELSEIF (keya(1:10)==
'/DT/SPHCEL')
THEN
412 READ(71,*,
END=20) DTSCA,dtmini
414 IF (keya(11:14)==
'/DEL')
THEN
416 IF (dtsca*dtelem(dt_index(10)+i)>dtmini)
THEN
417 dt_min_elem(10) = dtelem(dt_index(10)+i)
423 ELSEIF(keya(1:4)==
'/DT ')
THEN
425 READ(71,*,
END=20) DTSCA,dtmini
430 ELSEIF(keya(1:5)==
'/DTIX')
THEN
432 READ(71,*,
END=20) DTINI,dtmax
447 dt =
min(dt,dtfac1(i)*dt_min_elem(i))
subroutine dtnoda(nodft, nodlt, neltst, ityptst, itab, ms, in, stifn, stifr, dt2t, dmast, dinert, adt, adm, imsch, weight, a, ar, igrnod, nodadt_therm, adi, rbym, arby, arrby, weight_md, mcp, mcp_off, condn, nale, h3d_data)
subroutine find_dt_engine(dtelem, dtnoda, dt, flg_chk, flg_ctl, isoloff, isheoff, itruoff, ipouoff, iresoff, itrioff, iquaoff)
subroutine r2r_speedup(dtelem, dtnoda, dt_r2r, cost_r2r, isoloff, isheoff, itruoff, ipouoff, iresoff, itrioff, iquaoff)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)