78
79
80
81#include "implicit_f.inc"
82
83
84
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"
91
92
93
94
95 INTEGER IT
97 . fac,ul2,cumul_alen
98
99
100
101 INTEGER IFIX0
103 . tmp,facl,lu,fact,trest
104
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
125
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)
148 ENDIF
149 fac=alen/
max(em20,lu)
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)
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
187
188 tt = tt + dla_riks
189 fact = one+dla_riks/dt2
190
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
221 ENDIF
222 ENDIF
223 dla_riks = fact*dt2
224 ENDIF
225 ENDIF
226
227 ifix0 = idtfix
228 IF (ifix0>0) THEN
229 idtfix = 0
230 ELSE
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
264
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