@@ -6,7 +6,7 @@ function loopheader!(integrator)
6
6
7
7
# Accept or reject the step
8
8
if integrator. iter > 0
9
- if (integrator. opts. adaptive && integrator. accept_step) || ! integrator. opts. adaptive
9
+ if (( integrator. opts. adaptive && integrator. accept_step) || ! integrator. opts. adaptive) && ! integrator . force_stepfail
10
10
integrator. success_iter += 1
11
11
apply_step! (integrator)
12
12
elseif integrator. opts. adaptive && ! integrator. accept_step
245
245
function loopfooter! (integrator)
246
246
ttmp = integrator. t + integrator. dt
247
247
if integrator. force_stepfail
248
+ if integrator. opts. adaptive
249
+ integrator. dt = integrator. dt/ integrator. opts. failfactor
250
+ elseif integrator. last_stepfail
251
+ error (" Newton steps could not converge and algorithm is not adaptive. Use a lower dt." )
252
+ end
248
253
integrator. last_stepfail = true
249
254
integrator. accept_step = false
250
- integrator. dt = integrator. dt/ integrator. opts. failfactor
251
255
elseif integrator. opts. adaptive
252
256
q = stepsize_controller! (integrator,integrator. alg)
253
257
integrator. isout = integrator. opts. isoutofdomain (ttmp,integrator. u)
@@ -273,6 +277,7 @@ function loopfooter!(integrator)
273
277
else
274
278
integrator. t = ttmp
275
279
end
280
+ integrator. last_stepfail = false
276
281
integrator. accept_step = true
277
282
integrator. dtpropose = integrator. dt
278
283
handle_callbacks! (integrator)
0 commit comments