- integrator.k[2] = integrator.fsallast
- end
-
- function perform_step!(integrator, cache::LinearExponentialCache, repeat_step = false)
- @unpack t, dt, uprev, u, f, p = integrator
- @unpack tmp, KsCache = cache
- alg = unwrap_alg(integrator, nothing)
- A = f.f # assume f to be an ODEFunction wrapped around a linear operator
-
- if alg.krylov == :off
- E = exp(dt * Matrix(A))
- mul!(tmp, E, u)
- elseif alg.krylov == :simple
- Ks, expv_cache = KsCache
- arnoldi!(Ks, A, u; m = min(alg.m, size(A, 1)),
- opnorm = integrator.opts.internalopnorm, iop = alg.iop)
- expv!(tmp, dt, Ks; cache = expv_cache)
- else
- expv_timestep!(tmp, dt, A, u; adaptive = true, caches = KsCache,
- m = min(alg.m, size(A, 1)), iop = alg.iop,
- opnorm = integrator.opts.internalopnorm,