OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
imp_dt.F File Reference
#include "implicit_f.inc"
#include "com01_c.inc"
#include "com08_c.inc"
#include "impl1_c.inc"
#include "impl2_c.inc"
#include "units_c.inc"
#include "task_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine imp_dt2 (dt_e)
subroutine imp_dtn (it, ul2, fac, cumul_alen)
subroutine imp_dtf (fac)

Function/Subroutine Documentation

◆ imp_dt2()

subroutine imp_dt2 ( dt_e)

Definition at line 28 of file imp_dt.F.

29C-----------------------------------------------
30C I m p l i c i t T y p e s
31C-----------------------------------------------
32#include "implicit_f.inc"
33C-----------------------------------------------
34C C o m m o n B l o c k s
35C-----------------------------------------------
36#include "com01_c.inc"
37#include "com08_c.inc"
38#include "impl1_c.inc"
39#include "impl2_c.inc"
40C-----------------------------------------------
41C D u m m y A r g u m e n t s
42C-----------------------------------------------
43C REAL
45 . dt_e
46C-----------------------------------------------
47C L o c a l V a r i a b l e s
48C-----------------------------------------------
50 . trest
51C--------------------------------------------
52C DT_MIN=MAX(DT_E,DT_MIN)
53 trest=tstop-tt
54 IF (imconv==1.AND.trest>em10) THEN
55 dt_e = min(dt_imp,trest)
56 IF (idyna>0) dt_e = dt_imp
57 dt1_imp= dt_e
58 IF (ncycle==0.AND.inconv==1) dt0_imp= dt_e
59 ELSE
60 dt_e = dt1
61 dt0_imp= dt_e
62 ENDIF
63 IF (ncycle==0) THEN
64 dt1= dt_e
65 dt1_imp= dt_e
66 ENDIF
67C
68 RETURN
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20

◆ imp_dtf()

subroutine imp_dtf ( fac)

Definition at line 278 of file imp_dt.F.

279C-----------------------------------------------
280C I m p l i c i t T y p e s
281C-----------------------------------------------
282#include "implicit_f.inc"
283C-----------------------------------------------
284C C o m m o n B l o c k s
285C-----------------------------------------------
286#include "com08_c.inc"
287#include "impl1_c.inc"
288#include "impl2_c.inc"
289C-----------------------------------------------
290C D u m m y A r g u m e n t s
291C-----------------------------------------------
292 INTEGER IFIX
293C REAL
294 my_real
295 . fac
296C-----------------------------------------------
297C L o c a l V a r i a b l e s
298C-----------------------------------------------
299 INTEGER I,K
300 my_real
301 . tmp,told,trest
302C-----------------------------------------------
303 idtfix = 0
304 k = 0
305 DO i=1,ndtfix
306 IF (tt<dtimpf(i)) THEN
307 k = i
308 GOTO 100
309 ENDIF
310 ENDDO
311 100 IF (k==0) RETURN
312 trest= tt+dt_imp- dtimpf(k)
313 tmp = dt_imp*em02
314 IF (abs(trest)<=tmp) THEN
315 fac = fac*(dtimpf(k)-tt)/dt_imp
316 dt_imp = dtimpf(k)-tt
317 ELSEIF (trest>0) THEN
318 dtimpf(101)=dt_imp
319 fac = fac*(dtimpf(k)-tt)/dt_imp
320 dt_imp = dtimpf(k)-tt
321 idtfix = 1
322 ENDIF
323C
324 RETURN

◆ imp_dtn()

subroutine imp_dtn ( integer it,
ul2,
fac,
cumul_alen )

Definition at line 77 of file imp_dt.F.

78C-----------------------------------------------
79C I m p l i c i t T y p e s
80C-----------------------------------------------
81#include "implicit_f.inc"
82C-----------------------------------------------
83C C o m m o n B l o c k s
84C-----------------------------------------------
85#include "com01_c.inc"
86#include "units_c.inc"
87#include "impl1_c.inc"
88#include "impl2_c.inc"
89#include "task_c.inc"
90#include "com08_c.inc"
91C-----------------------------------------------
92C D u m m y A r g u m e n t s
93C-----------------------------------------------
94C REAL
95 INTEGER IT
97 . fac,ul2,cumul_alen
98C-----------------------------------------------
99C L o c a l V a r i a b l e s
100C-----------------------------------------------
101 INTEGER IFIX0
102 my_real
103 . tmp,facl,lu,fact,trest
104C-----------------------------------
105 fac=one
106 IF (it==0.AND.imconv>0) RETURN
107 IF (imconv<0) THEN
108 IF (dt_imp>dt_min) THEN
109 fac=scal_dtn
110 tmp=dt_imp
111 dt_imp=dt_imp*fac
112 dt_imp=max(dt_imp,dt_min)
113 fac=dt_imp/tmp
114 IF (idtc==2.AND.alen0/=zero)alen=alen*scal_dtn
115 IF (idtc==3) THEN
116 alen=alen*scal_dtn
117 fact = one
118 END IF
119 ENDIF
120 ELSEIF (imconv==1) THEN
121 IF (idtfix>0) THEN
122 dt_imp = dtimpf(101)
123 ELSEIF (idtc==1) THEN
124 IF (it<=nl_dtp.AND.dt_imp<dt_max) THEN
125C--------increase----------------------
126 fac=scal_dtp
127 tmp=dt_imp
128 dt_imp=dt_imp*fac
129 dt_imp=min(dt_imp,dt_max)
130 fac=dt_imp/tmp
131 ENDIF
132 ELSEIF (idtc==2) THEN
133 lu=sqrt(ul2)
134 IF (ncycle==1) THEN
135 alen=lu
136 IF (alen0>zero) alen=alen0
137 ELSE
138 IF (alen<=em20) alen=lu
139 IF (alen0>zero) alen=alen0
140 tmp=one*nl_dtp/it
141 IF (it>nl_dtp.AND.scal_dtn/=one) THEN
142 IF (alen0==zero) THEN
143 tmp=(nl_dtn-nl_dtp)/(one-scal_dtn)
144 facl=(tmp-it+nl_dtp)/tmp
145 alen=alen*facl
146 alen=max(alen,em01*lu)
147 alen=min(alen,lu)
148 ENDIF
149 fac=alen/max(em20,lu)
150 fac=min(one,fac)
151 ELSEIF (it<nl_dtp.AND.nl_dtp/=1) THEN
152 IF (alen0==zero) THEN
153 facl=one+(nl_dtp-it)/(nl_dtp-one)
154 alen=alen*facl
155 alen=min(alen,lu*two)
156 ENDIF
157 fac=alen/max(em20,lu)
158 fac=max(one,fac)
159 ELSEIF (it==nl_dtp.AND.alen0==zero) THEN
160 alen=lu
161 ENDIF
162 ENDIF
163 tmp=dt_imp
164 IF (fac>one) THEN
165 fac=min(scal_dtp,fac)
166 dt_imp=dt_imp*fac
167 dt_imp=min(dt_imp,dt_max)
168 fac=dt_imp/tmp
169 ELSEIF (fac<one) THEN
170 fac=max(scal_dtn,fac)
171 dt_imp=dt_imp*fac
172 dt_imp=max(dt_imp,dt_min)
173 fac=dt_imp/tmp
174 ENDIF
175 ELSEIF (idtc==3) THEN
176 ilast=0
177 IF (ncycle==1) THEN
178 IF (alen0>zero) THEN
179 alen=alen0
180 fac = alen0/sqrt(ul2)
181 dt_imp=dt_imp*fac
182 ELSE
183 alen=sqrt(ul2)
184 ENDIF
185 fact = one
186 ELSE !(NCYCLE>1)
187C----------time correction ------
188 tt = tt + dla_riks
189 fact = one+dla_riks/dt2
190C------last step-------
191 IF (tt>tstop) THEN
192 ilast=1
193 tmp=dt_imp
194 dt_imp = max(dt_min,tmp*em3)
195 fac=dt_imp/tmp
196 tt =tstop-dt_imp
197 ELSE
198 trest=tstop-tt
199 IF (alen0>zero) THEN
200 alen=alen0
201 fac = one
202 ELSE
203 facl=sqrt(one*nl_dtp/it)
204 tmp=dt_imp
205 IF (facl>one) THEN
206 facl=min(scal_dtp,facl)
207 dt_imp=dt_imp*facl
208 dt_imp=min(dt_imp,dt_max)
209 facl=min(dt_imp/tmp,facl)
210 dt_imp=min(dt_imp,trest)
211 fac=dt_imp/tmp
212 ELSEIF (facl<one) THEN
213 facl=max(scal_dtn,facl)
214 dt_imp=dt_imp*facl
215 dt_imp=max(dt_imp,dt_min)
216 dt_imp=min(dt_imp,trest)
217 fac=dt_imp/tmp
218 ENDIF
219 alen=facl*alen
220 END IF !IF (ALEN0>ZERO)
221 ENDIF !IF (TT>TSTOP) THEN
222 ENDIF !(NCYCLE>1)
223 dla_riks = fact*dt2
224 ENDIF
225 ENDIF
226C----------reput old dt du to fix_p ------
227 ifix0 = idtfix
228 IF (ifix0>0) THEN
229 idtfix = 0
230 ELSE
231 CALL imp_dtf(fac)
232 ENDIF
233 IF (ispmd==0) THEN
234 IF (nprint/=0) THEN
235 WRITE(iout,*)
236 IF(nprint<0)WRITE(istdo,*)
237 IF (idtc==3) THEN
238 IF (fact/=one) THEN
239 WRITE(iout,1005) dla_riks
240 IF (nprint<0)WRITE(istdo,1005) dla_riks
241 END IF
242 ENDIF
243 IF (ifix0>0.AND.imconv==1) THEN
244 WRITE(iout,1004)
245 IF(nprint<0)WRITE(istdo,1004)
246 ELSE
247 IF (idtfix>0) THEN
248 WRITE(iout,1003)
249 IF(nprint<0)WRITE(istdo,1003)
250 ENDIF
251 IF (fac>one) THEN
252 WRITE(iout,1001) fac
253 IF(nprint<0)WRITE(istdo,1001) fac
254 ELSEIF (fac<one) THEN
255 WRITE(iout,1002) fac
256 IF(nprint<0)WRITE(istdo,1002) fac
257 ENDIF
258 ENDIF
259 ENDIF
260 ENDIF
261 IF (idtc==3.AND.ilast>0) dla_riks=fac
262 IF (imconv<0) fac=one
263 cumul_alen = cumul_alen + alen
264C---------------------------
265 1001 FORMAT(5x,'--NEXT TIMESTEP IS INCREASED BY--',e11.4/)
266 1002 FORMAT(5x,'--NEXT TIMESTEP IS DECREASED BY--',e11.4/)
267 1003 FORMAT(5x,'--NEXT TIMESTEP IS DETERMINED BY INPUT FIX POINT--')
268 1004 FORMAT(5x,'--RESET TIMESTEP DUE TO INPUT FIX POINT--')
269 1005 FORMAT(5x,'--TIMESTEP IS ADJUSTED BY RIKS METHOD TO:',e11.4/)
270 1006 FORMAT(5x,'--TERMINAL LOADING TIME BY RIKS METHOD IS:',e11.4/)
271 RETURN
subroutine imp_dtf(fac)
Definition imp_dt.F:279
#define max(a, b)
Definition macros.h:21