diff --git a/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl b/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl index 4f527bac7a..662eacab5c 100644 --- a/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl +++ b/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl @@ -62,7 +62,7 @@ end integrator.fsallast = f(uₙ, p, t + dtₙ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) tmp = integrator.fsallast - (1 + dtₙ / dtₙ₋₁) * integrator.fsalfirst + (dtₙ / dtₙ₋₁) * cache.fsalfirstprev est = (dtₙ₋₁ + dtₙ) / 6 * tmp @@ -151,7 +151,7 @@ end f(integrator.fsallast, uₙ, p, t + dtₙ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) btilde0 = (dtₙ₋₁ + dtₙ) * 1 // 6 btilde1 = 1 + dtₙ / dtₙ₋₁ btilde2 = dtₙ / dtₙ₋₁ @@ -382,7 +382,7 @@ function perform_step!(integrator, cache::QNDF1ConstantCache, repeat_step = fals u = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) if integrator.success_iter == 0 integrator.EEst = one(integrator.EEst) else @@ -471,7 +471,7 @@ function perform_step!(integrator, cache::QNDF1Cache, repeat_step = false) step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) if integrator.success_iter == 0 integrator.EEst = one(integrator.EEst) else @@ -567,7 +567,7 @@ function perform_step!(integrator, cache::QNDF2ConstantCache, repeat_step = fals u = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) if integrator.success_iter == 0 integrator.EEst = one(integrator.EEst) elseif integrator.success_iter == 1 @@ -681,7 +681,7 @@ function perform_step!(integrator, cache::QNDF2Cache, repeat_step = false) step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) if integrator.success_iter == 0 integrator.EEst = one(integrator.EEst) elseif integrator.success_iter == 1 @@ -791,7 +791,7 @@ function perform_step!(integrator, cache::QNDFConstantCache{max_order}, dd = u - u₀ update_D!(D, dd, k) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @unpack abstol, reltol, internalnorm = integrator.opts if cache.consfailcnt > 1 && mass_matrix !== I # if we get repeated failure and mass_matrix !== I it's likely that @@ -913,7 +913,7 @@ function perform_step!(integrator, cache::QNDFCache{max_order}, step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @unpack abstol, reltol, internalnorm = integrator.opts if cache.consfailcnt > 1 && mass_matrix !== I # if we get repeated failure and mass_matrix !== I it's likely that @@ -1151,7 +1151,7 @@ function perform_step!(integrator, cache::FBDFConstantCache{max_order}, end lte *= terkp1 - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) for i in 1:(k + 1) ts_tmp[i + 1] = ts[i] end @@ -1292,7 +1292,7 @@ function perform_step!(integrator, cache::FBDFCache{max_order}, lte -= bdf_coeffs[k, j] * r[j] end @.. broadcast=false terk_tmp=lte * terkp1_tmp - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @unpack abstol, reltol, internalnorm = integrator.opts for i in 1:(k + 1) ts_tmp[i + 1] = ts[i] diff --git a/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl b/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl index a13c3daf88..2104f07bbc 100644 --- a/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl +++ b/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl @@ -1,6 +1,8 @@ -abstract type AbstractController end using OrdinaryDiffEqCore +abstract type AbstractController end +overrides_adaptive(::AbstractController) = false + @inline function stepsize_controller!(integrator, alg) stepsize_controller!(integrator, integrator.opts.controller, alg) end diff --git a/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl b/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl index 093c62b4f8..271ca7ea61 100644 --- a/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl @@ -53,7 +53,7 @@ end integrator.eigen_est = integrator.opts.internalnorm(n, t) end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = αEEst[1] .* kk[1] for i in 2:stages utilde = utilde + αEEst[i] * kk[i] @@ -223,7 +223,7 @@ end integrator.eigen_est = integrator.opts.internalnorm(norm(utilde, Inf), t) end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) runtime_split_EEst!(tmp, αEEst, utilde, kk, dt, stages) calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, diff --git a/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl b/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl index 5944b40e88..5ec9faab16 100644 --- a/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl @@ -1392,7 +1392,7 @@ function perform_step!(integrator, cache::Exprb32ConstantCache, repeat_step = fa w2 = phiv(dt, A, F2, 3; m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, iop = alg.iop) u = uprev + dt * (w1[:, 2] - 2w1[:, 4] + 2w2[:, 4]) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # error estimator for the imbedded method utilde = 2dt * (-w1[:, 4] + w2[:, 4]) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, @@ -1436,7 +1436,7 @@ function perform_step!(integrator, cache::Exprb32Cache, repeat_step = false) axpy!(dt, @view(w1[:, 2]), u) axpy!(-2dt, @view(w1[:, 4]), u) axpy!(2dt, @view(w2[:, 4]), u) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # error estimator for the imbedded method @views @.. broadcast=false utilde=(2 * dt) * (-w1[:, 4] + w2[:, 4]) calculate_residuals!(tmp, utilde, uprev, u, integrator.opts.abstol, @@ -1476,7 +1476,7 @@ function perform_step!(integrator, cache::Exprb43ConstantCache, repeat_step = fa u = uprev + dt * (w1[:, 2] - 14w1[:, 4] + 36w1[:, 5] + 16w2[:, 4] - 48w2[:, 5] - 2w3[:, 4] + 12w3[:, 5]) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # error estimator for the imbedded method utilde = dt * (36w1[:, 5] - 48w2[:, 5] + 12w3[:, 5]) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, @@ -1527,7 +1527,7 @@ function perform_step!(integrator, cache::Exprb43Cache, repeat_step = false) @views @.. broadcast=false rtmp=w1[:, 2] - 14w1[:, 4] + 36w1[:, 5] + 16w2[:, 4] - 48w2[:, 5] - 2w3[:, 4] + 12w3[:, 5] @muladd @.. broadcast=false u=uprev + dt * rtmp - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @views @.. broadcast=false rtmp=36w1[:, 5] - 48w2[:, 5] + 12w3[:, 5] @.. broadcast=false utilde=dt * rtmp calculate_residuals!(tmp, utilde, uprev, u, integrator.opts.abstol, diff --git a/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl b/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl index ad26439864..f84dc16267 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl @@ -76,7 +76,7 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals end end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) minimum_work = Inf if isone(cache.step_no) range_start = 2 @@ -196,7 +196,7 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste end end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) minimum_work = Inf if isone(cache.step_no) range_start = 2 @@ -271,7 +271,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, @unpack sequence = cache - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -418,7 +418,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, end end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min @.. broadcast=false integrator.u=T[i + 1, i + 1] @@ -528,7 +528,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach @unpack dtpropose, T, n_curr, work, A, tf, uf = cache @unpack sequence, stage_number = cache - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -637,7 +637,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach integrator.dt = dt - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = T[i + 1, i + 1] @@ -747,7 +747,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, fill!(cache.Q, zero(eltype(cache.Q))) tol = integrator.opts.internalnorm(integrator.opts.reltol, t) # Used by the convergence monitor - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window win_min = max(alg.min_order, n_curr - 1) win_max = min(alg.max_order, n_curr + 1) @@ -840,7 +840,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, integrator.stats.nf += nevals end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (alg.min_order):n_curr @@ -968,7 +968,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant fill!(cache.Q, zero(eltype(cache.Q))) # Start computation - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window win_min = max(alg.min_order, n_curr - 1) win_max = min(alg.max_order, n_curr + 1) @@ -1051,7 +1051,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant integrator.stats.nf += nevals end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (alg.min_order):n_curr u = eltype(uprev).(extrapolation_scalars[i + 1]) * @@ -1158,7 +1158,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window win_min = max(alg.min_order, n_curr - 1) win_max = min(alg.max_order, n_curr + 1) @@ -1416,7 +1416,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, return end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (alg.min_order):n_curr @@ -1564,7 +1564,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant fill!(cache.Q, zero(eltype(cache.Q))) # Start computation - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window win_min = max(alg.min_order, n_curr - 1) win_max = min(alg.max_order, n_curr + 1) @@ -1712,7 +1712,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant return end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (alg.min_order):n_curr u = eltype(uprev).(extrapolation_scalars[i + 1]) * @@ -1826,7 +1826,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -1924,7 +1924,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache integrator.stats.nf += nevals end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min @@ -2051,7 +2051,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst T = fill(zero(uprev), alg.max_order + 1) # Storage for the internal discretisations obtained by the explicit midpoint rule fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -2136,7 +2136,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst nevals = cache.stage_number[n_curr + 1] - 1 integrator.stats.nf += nevals end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = eltype(uprev).(extrapolation_scalars[i + 1]) * @@ -2246,7 +2246,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst T = fill(zero(uprev), alg.max_order + 1) # Storage for the internal discretisations obtained by the explicit midpoint rule fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -2409,7 +2409,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst return end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = eltype(uprev).(extrapolation_scalars[i + 1]) * @@ -2527,7 +2527,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -2787,7 +2787,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache return end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min @@ -2952,7 +2952,7 @@ function perform_step!(integrator, T = fill(zero(uprev), alg.max_order + 1) # Storage for the internal discretisations obtained by the explicit midpoint rule fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -3109,7 +3109,7 @@ function perform_step!(integrator, return end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = eltype(uprev).(extrapolation_scalars[i + 1]) * @@ -3226,7 +3226,7 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC fill!(cache.Q, zero(eltype(cache.Q))) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) @@ -3500,7 +3500,7 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC return end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min diff --git a/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl b/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl index 0432ae1103..d964cf3df5 100644 --- a/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl +++ b/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl @@ -2,7 +2,7 @@ function do_newJ(integrator, alg, cache, repeat_step)::Bool # for FIRK integrator.iter <= 1 && return true repeat_step && return false first(islinearfunction(integrator)) && return false - integrator.opts.adaptive || return true + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || return true alg_can_repeat_jac(alg) || return true integrator.u_modified && return true # below is Newton specific logic, so we return non-Newton algs here @@ -81,7 +81,7 @@ function initialize!(integrator, cache::RadauIIA5Cache) integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @unpack abstol, reltol = integrator.opts if reltol isa Number cache.rtol = reltol^(2 / 3) / 10 @@ -101,7 +101,7 @@ function initialize!(integrator, cache::RadauIIA9Cache) integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @unpack abstol, reltol = integrator.opts if reltol isa Number cache.rtol = reltol^(5 / 8) / 10 diff --git a/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl b/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl index ddba6505b9..f293f42266 100644 --- a/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl @@ -71,7 +71,7 @@ end dt * (b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5 + b7 * k7 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12 + b13 * k13 + b14 * k14 + b15 * k15 + b16 * k16 + b17 * k17) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = @.. broadcast=false dt*(k2-k16)*adaptiveConst atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -134,7 +134,7 @@ end @.. broadcast=false tmp = uprev + dt*(a1600*k1 + a1601*k2 + a1602*k3 + a1604*k5 + a1605*k6 + a1606*k7 + a1607*k8 + a1608*k9 + a1609*k10 + a1610*k11 + a1611*k12 + a1612*k13 + a1613*k14 + a1614*k15 + a1615*k16) f(k17, tmp, p, t + c16*dt) @.. broadcast=false u = uprev + dt*(b1*k1 + b2*k2 + b3*k3 + b5*k5 + b7*k7 + b9*k9 + b10*k10 + b11*k11 + b12*k12 + b13*k13 + b14*k14 + b15*k15 + b16*k16 + b17*k17) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false tmp = dt*(k2 - k16) * adaptiveConst calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t) integrator.EEst = integrator.opts.internalnorm(atmp,t) @@ -258,7 +258,7 @@ end step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @tight_loop_macros for i in uidx @inbounds tmp[i] = dt * (k2[i] - k16[i]) * adaptiveConst end @@ -404,7 +404,7 @@ end k = f(u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.fsallast = k - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = @.. broadcast=false dt*(k2-k24)*adaptiveConst atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -480,7 +480,7 @@ end @.. broadcast=false tmp = uprev + dt*((a2400*k1 + a2401*k2 + a2402*k3) + (a2404*k5 + a2406*k7 + a2407*k8 + a2408*k9) + (a2409*k10 + a2410*k11 + a2411*k12 + a2412*k13) + (a2413*k14 + a2414*k15 + a2415*k16 + a2416*k17) + (a2417*k18 + a2418*k19 + a2419*k20 + a2420*k21) + (a2421*k22 + a2422*k23 + a2423*k24)) f(k25, tmp, p, t + c24*dt) @.. broadcast=false u = uprev + dt*((b1*k1 + b2*k2 + b3*k3 + b5*k5) + (b7*k7 + b8*k8 + b10*k10 + b11*k11) + (b13*k13 + b14*k14 + b15*k15 + b16*k16) + (b17*k17 + b18*k18 + b19*k19 + b20*k20) + (b21*k21 + b22*k22 + b23*k23) + (b24*k24 + b25*k25)) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false tmp = dt*(k2 - k24) * adaptiveConst calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t) integrator.EEst = integrator.opts.internalnorm(atmp,t) @@ -672,7 +672,7 @@ end step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @tight_loop_macros for i in uidx @inbounds tmp[i] = dt * (k2[i] - k24[i]) * adaptiveConst end @@ -890,7 +890,7 @@ end b21 * k21 + b22 * k22 + b23 * k23 + b24 * k24 + b25 * k25 + b26 * k26 + b27 * k27 + b28 * k28 + b29 * k29 + b30 * k30 + b31 * k31 + b32 * k32 + b33 * k33 + b34 * k34 + b35 * k35) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = @.. broadcast=false dt*(k2-k34)*adaptiveConst atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -990,7 +990,7 @@ end @.. broadcast=false tmp = uprev + dt*(a3400*k1 + a3401*k2 + a3402*k3 + a3404*k5 + a3406*k7 + a3407*k8 + a3409*k10 + a3410*k11 + a3411*k12 + a3412*k13 + a3413*k14 + a3414*k15 + a3415*k16 + a3416*k17 + a3417*k18 + a3418*k19 + a3419*k20 + a3420*k21 + a3421*k22 + a3422*k23 + a3423*k24 + a3424*k25 + a3425*k26 + a3426*k27 + a3427*k28 + a3428*k29 + a3429*k30 + a3430*k31 + a3431*k32 + a3432*k33 + a3433*k34) f(k35, tmp, p, t + c34*dt) @.. broadcast=false u = uprev + dt*(b1*k1 + b2*k2 + b3*k3 + b5*k5 + b7*k7 + b8*k8 + b10*k10 + b11*k11 + b12*k12 + b14*k14 + b15*k15 + b16*k16 + b18*k18 + b19*k19 + b20*k20 + b21*k21 + b22*k22 + b23*k23 + b24*k24 + b25*k25 + b26*k26 + b27*k27 + b28*k28 + b29*k29 + b30*k30 + b31*k31 + b32*k32 + b33*k33 + b34*k34 + b35*k35) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false tmp = dt*(k2 - k34) * adaptiveConst calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t) integrator.EEst = integrator.opts.internalnorm(atmp,t) @@ -1278,7 +1278,7 @@ end step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @tight_loop_macros for i in uidx @inbounds tmp[i] = dt * (k2[i] - k34[i]) * adaptiveConst end diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl index 5a623da48e..0febac542d 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl @@ -38,7 +38,7 @@ end t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 9) u = uprev + dt * (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + btilde10 * k10) @@ -117,7 +117,7 @@ end stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + @@ -182,7 +182,7 @@ end @inbounds u[i] = uprev[i] + dt*(b1*k1[i]+b4*k4[i]+b5*k5[i]+b6*k6[i]+b7*k7[i]+b8*k8[i]+b9*k9[i]) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @tight_loop_macros for i in uidx @inbounds utilde[i] = dt*(btilde1*k1[i]+btilde4*k4[i]+btilde5*k5[i]+btilde6*k6[i]+btilde7*k7[i]+btilde8*k8[i]+btilde9*k9[i]+btilde10*k10[i]) end @@ -225,7 +225,7 @@ end k12= f(t+dt, @.. broadcast=false uprev+dt*(a1201*k1 +a1204*k4+a1205*k5+a1206*k6+a1207*k7+a1208*k8+a1209*k9+a1210*k10+a1211*k11)) k13= f(t+dt, @.. broadcast=false uprev+dt*(a1301*k1 +a1304*k4+a1305*k5+a1306*k6+a1307*k7+a1308*k8+a1309*k9+a1310*k10)) u = @.. broadcast=false uprev + dt*(b1*k1+b6*k6+b7*k7+b8*k8+b9*k9+b10*k10+b11*k11+b12*k12) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = @.. broadcast=false dt*(btilde1*k1 + btilde6*k6 + btilde7*k7 + btilde8*k8 + btilde9*k9 + btilde10*k10 + btilde11*k11 + btilde12*k12 + btilde13*k13) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t) integrator.EEst = integrator.opts.internalnorm(atmp,t) @@ -290,7 +290,7 @@ end u = uprev + dt * (b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + btilde13 * k13) @@ -391,7 +391,7 @@ end stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 13) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + @@ -469,7 +469,7 @@ end @inbounds u[i] = uprev[i] + dt*(b1*k1[i]+b6*k6[i]+b7*k7[i]+b8*k8[i]+b9*k9[i]+b10*k10[i]+b11*k11[i]+b12*k12[i]) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 13) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @tight_loop_macros for i in uidx @inbounds utilde[i] = dt*(btilde1*k1[i] + btilde6*k6[i] + btilde7*k7[i] + btilde8*k8[i] + btilde9*k9[i] + btilde10*k10[i] + btilde11*k11[i] + btilde12*k12[i] + btilde13*k13[i]) end @@ -539,7 +539,7 @@ end kupdate = b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12 u = uprev + dt * kupdate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (k1 * er1 + k6 * er6 + k7 * er7 + k8 * er8 + k9 * er9 + k10 * er10 + k11 * er11 + k12 * er12) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, @@ -689,7 +689,7 @@ end stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 12) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (k1 * er1 + k6 * er6 + k7 * er7 + k8 * er8 + k9 * er9 + @@ -829,7 +829,7 @@ end @inbounds u[i] = uprev[i] + dt*kupdate[i] end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 12) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @tight_loop_macros for i in uidx @inbounds utilde[i] = dt*(k1[i]*er1 + k6[i]*er6 + k7[i]*er7 + k8[i]*er8 + k9[i]*er9 + k10[i]*er10 + k11[i]*er11 + k12[i]*er12) end @@ -984,7 +984,7 @@ end u = uprev + dt * (β1 * k1 + β6 * k6 + β7 * k7 + β8 * k8 + β9 * k9 + β10 * k10 + β11 * k11 + β12 * k12 + β13 * k13) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (β1tilde * k1 + β6tilde * k6 + β7tilde * k7 + β8tilde * k8 + β9tilde * k9 + β10tilde * k10 + β11tilde * k11 + β12tilde * k12) @@ -1128,7 +1128,7 @@ end stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 13) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (β1tilde * k1 + β6tilde * k6 + β7tilde * k7 + β8tilde * k8 + β9tilde * k9 + diff --git a/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl b/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl index 6ad1582659..fa4f6656e2 100644 --- a/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl +++ b/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl @@ -327,7 +327,7 @@ function perform_step!(integrator, cache::MagnusAdapt4Cache, repeat_step = false integrator.f(integrator.fsallast, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = u - exponential!(y6, exp_method, exp_cache) * uprev calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl index 9d9928f678..6bff590539 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl @@ -22,7 +22,7 @@ end k4 = f(u, p, t + dt) integrator.fsallast = k4 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -62,7 +62,7 @@ end step_limiter!(u, integrator, p, t + dt) f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4) calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, @@ -100,7 +100,7 @@ end k4 = f(u, p, t + dt) integrator.fsallast = k4 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -141,7 +141,7 @@ end step_limiter!(u, integrator, p, t + dt) f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3) calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, @@ -180,7 +180,7 @@ end k6 = f(u, p, t + dt) integrator.fsallast = k6 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -233,7 +233,7 @@ end step_limiter!(u, integrator, p, t + dt) f(k6, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) @@ -278,7 +278,7 @@ end k8 = f(u, p, t + dt) integrator.fsallast = k8 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7) @@ -350,7 +350,7 @@ end step_limiter!(u, integrator, p, t + dt) f(k8, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + @@ -403,7 +403,7 @@ end integrator.fsallast = f(u, p, t + dt) k8 = integrator.fsallast OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) uhat = dt * (bhat1 * k1 + bhat3 * k3 + bhat4 * k4 + bhat5 * k5 + bhat6 * k6) utilde = dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + @@ -427,7 +427,7 @@ end integrator.u = u alg = unwrap_alg(integrator, false) - if !alg.lazy && (integrator.opts.adaptive == false || + if !alg.lazy && (integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) == false || accept_step_controller(integrator, integrator.opts.controller)) @unpack c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110 = cache k = integrator.k @@ -514,7 +514,7 @@ end step_limiter!(u, integrator, p, t + dt) f(k8, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (bhat1 * k1 + bhat3 * k3 + bhat4 * k4 + bhat5 * k5 + @@ -535,7 +535,7 @@ end integrator.EEst = max(EEst1, EEst2) end alg = unwrap_alg(integrator, false) - if !alg.lazy && (integrator.opts.adaptive == false || + if !alg.lazy && (integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) == false || accept_step_controller(integrator, integrator.opts.controller)) k = integrator.k @unpack c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110 = cache.tab @@ -603,7 +603,7 @@ end integrator.eigen_est = integrator.opts.internalnorm( maximum(abs.((k7 .- k6) ./ (g7 .- g6))), t) end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7) @@ -671,7 +671,7 @@ end integrator.eigen_est = integrator.opts.internalnorm( norm(utilde, Inf) * oneunit(t), t) end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + @@ -842,7 +842,7 @@ end u = uprev + dt * (β1 * k1 + β4 * k4 + β5 * k5 + β6 * k6 + β7 * k7 + β8 * k8) integrator.fsallast = f(u, p, t + dt) k9 = integrator.fsallast - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (β1tilde * k1 + β4tilde * k4 + β5tilde * k5 + β6tilde * k6 + β7tilde * k7 + β8tilde * k8 + β9tilde * k9) @@ -936,7 +936,7 @@ end f(k9, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 8) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (β1tilde * k1 + β4tilde * k4 + β5tilde * k5 + β6tilde * k6 + β7tilde * k7 + @@ -1552,7 +1552,7 @@ function perform_step!(integrator, cache::Stepanov5ConstantCache, repeat_step = integrator.fsallast = k7 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false utilde=dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + @@ -1624,7 +1624,7 @@ function perform_step!(integrator, cache::Stepanov5Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) integrator.fsallast = k7 - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + @@ -1672,7 +1672,7 @@ function perform_step!(integrator, cache::SIR54ConstantCache, repeat_step = fals integrator.fsallast = k8 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + @@ -1752,7 +1752,7 @@ function perform_step!(integrator, cache::SIR54Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) integrator.fsallast = k8 - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + @@ -1786,7 +1786,7 @@ function perform_step!(integrator, cache::Alshina2ConstantCache, repeat_step = f k2 = f(tmp, p, t + c2 * dt) u = uprev + dt * (b1 * k1 + b2 * k2) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (b1tilde * k1) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -1831,7 +1831,7 @@ function perform_step!(integrator, cache::Alshina2Cache, repeat_step = false) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (b1tilde * k1) calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, @@ -1866,7 +1866,7 @@ function perform_step!(integrator, cache::Alshina3ConstantCache, repeat_step = f k3 = f(tmp, p, t + c3 * dt) u = uprev + dt * (b1 * k1 + b2 * k2 + b3 * k3) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (b2tilde * k2) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -1914,7 +1914,7 @@ function perform_step!(integrator, cache::Alshina3Cache, repeat_step = false) dt * (b1 * k1 + b2 * k2 + b3 * k3) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (b2tilde * k2) calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl b/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl index 5344dc296a..b69dcfa8f5 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl @@ -228,7 +228,7 @@ end integrator.k[1] = integrator.fsalfirst tmp = uprev u = tmp + β1 * dt * integrator.fsalfirst - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = bhat1 * dt * integrator.fsalfirst end @@ -238,12 +238,12 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tmp = tmp + δ2end[i] * u u = γ12end[i] * u + γ22end[i] * tmp + γ32end[i] * uprev + β2end[i] * dt * k - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = utilde + bhat2end[i] * dt * k end end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) integrator.EEst = integrator.opts.internalnorm(atmp, t) @@ -270,7 +270,7 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @.. broadcast=false thread=thread tmp=uprev @.. broadcast=false thread=thread u=tmp + β1 * dt * integrator.fsalfirst - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=bhat1 * dt * integrator.fsalfirst end @@ -282,7 +282,7 @@ end @.. broadcast=false thread=thread tmp=tmp + δ2end[i] * u @.. broadcast=false thread=thread u=γ12end[i] * u + γ22end[i] * tmp + γ32end[i] * uprev + β2end[i] * dt * k - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=utilde + bhat2end[i] * dt * k end end @@ -290,7 +290,7 @@ end stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, thread) @@ -319,7 +319,7 @@ end # u1 tmp = uprev u = tmp + β1 * dt * integrator.fsalfirst - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = bhat1 * dt * integrator.fsalfirst end @@ -329,7 +329,7 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tmp = tmp + δ2end[i] * u u = γ12end[i] * u + γ22end[i] * tmp + γ32end[i] * uprev + β2end[i] * dt * k - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = utilde + bhat2end[i] * dt * k end end @@ -338,7 +338,7 @@ end integrator.fsallast = f(u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = utilde + bhatfsal * dt * integrator.fsallast atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) @@ -370,7 +370,7 @@ end # u1 @.. broadcast=false thread=thread tmp=uprev @.. broadcast=false thread=thread u=tmp + β1 * dt * integrator.fsalfirst - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=bhat1 * dt * integrator.fsalfirst end @@ -382,7 +382,7 @@ end @.. broadcast=false thread=thread tmp=tmp + δ2end[i] * u @.. broadcast=false thread=thread u=γ12end[i] * u + γ22end[i] * tmp + γ32end[i] * uprev + β2end[i] * dt * k - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=utilde + bhat2end[i] * dt * k end end @@ -394,7 +394,7 @@ end f(k, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=utilde + bhatfsal * dt * k calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, @@ -421,11 +421,11 @@ end @unpack Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ = cache k = fsalfirst - integrator.opts.adaptive && (tmp = zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = zero(uprev)) #stages 1 to s-1 for i in eachindex(Aᵢ) - integrator.opts.adaptive && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) gprev = u + Aᵢ[i] * dt * k u = u + Bᵢ[i] * dt * k k = f(gprev, p, t + Cᵢ[i] * dt) @@ -433,11 +433,11 @@ end end #last stage - integrator.opts.adaptive && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) u = u + Bₗ * dt * k #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) integrator.EEst = integrator.opts.internalnorm(atmp, t) @@ -465,11 +465,11 @@ end @unpack Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ = cache.tab @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false tmp=zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false tmp=zero(uprev)) #stages 1 to s-1 for i in eachindex(Aᵢ) - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) @.. broadcast=false thread=thread gprev=u + Aᵢ[i] * dt * k @.. broadcast=false thread=thread u=u + Bᵢ[i] * dt * k @@ -478,12 +478,12 @@ end end #last stage - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bₗ - B̂ₗ) * dt * k) @.. broadcast=false thread=thread u=u + Bₗ * dt * k #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, thread) @@ -516,11 +516,11 @@ end k = fsalfirst uᵢ₋₁ = uprev uᵢ₋₂ = uprev - integrator.opts.adaptive && (tmp = zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = zero(uprev)) #stages 1 to s-1 for i in eachindex(Aᵢ₁) - integrator.opts.adaptive && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) gprev = uᵢ₋₂ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂) * dt u = u + Bᵢ[i] * dt * k fᵢ₋₂ = k @@ -531,11 +531,11 @@ end end #last stage - integrator.opts.adaptive && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) u = u + Bₗ * dt * k #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) integrator.EEst = integrator.opts.internalnorm(atmp, t) @@ -564,13 +564,13 @@ end @.. broadcast=false thread=thread fᵢ₋₂=zero(fsalfirst) @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false thread=thread tmp=zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=zero(uprev)) @.. broadcast=false thread=thread uᵢ₋₁=uprev @.. broadcast=false thread=thread uᵢ₋₂=uprev #stages 1 to s-1 for i in eachindex(Aᵢ₁) - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) @.. broadcast=false thread=thread gprev=uᵢ₋₂ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂) * dt @.. broadcast=false thread=thread u=u + Bᵢ[i] * dt * k @@ -582,14 +582,14 @@ end end #last stage - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bₗ - B̂ₗ) * dt * k) @.. broadcast=false thread=thread u=u + Bₗ * dt * k step_limiter!(u, integrator, p, t + dt) #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, thread) @@ -623,11 +623,11 @@ end uᵢ₋₁ = uprev uᵢ₋₂ = uprev uᵢ₋₃ = uprev - integrator.opts.adaptive && (tmp = zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = zero(uprev)) #stages 1 to s-1 for i in eachindex(Aᵢ₁) - integrator.opts.adaptive && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) gprev = uᵢ₋₃ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂ + Aᵢ₃[i] * fᵢ₋₃) * dt u = u + Bᵢ[i] * dt * k fᵢ₋₃ = fᵢ₋₂ @@ -640,11 +640,11 @@ end end #last stage - integrator.opts.adaptive && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) u = u + Bₗ * dt * k #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) integrator.EEst = integrator.opts.internalnorm(atmp, t) @@ -674,14 +674,14 @@ end @.. broadcast=false thread=thread fᵢ₋₂=zero(fsalfirst) @.. broadcast=false thread=thread fᵢ₋₃=zero(fsalfirst) @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false thread=thread tmp=zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=zero(uprev)) @.. broadcast=false thread=thread uᵢ₋₁=uprev @.. broadcast=false thread=thread uᵢ₋₂=uprev @.. broadcast=false thread=thread uᵢ₋₃=uprev #stages 1 to s-1 for i in eachindex(Aᵢ₁) - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) @.. broadcast=false thread=thread gprev=uᵢ₋₃ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂ + @@ -698,14 +698,14 @@ end end #last stage - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bₗ - B̂ₗ) * dt * k) @.. broadcast=false thread=thread u=u + Bₗ * dt * k step_limiter!(u, integrator, p, t + dt) #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, thread) @@ -741,11 +741,11 @@ end uᵢ₋₂ = uprev uᵢ₋₃ = uprev uᵢ₋₄ = uprev - integrator.opts.adaptive && (tmp = zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = zero(uprev)) #stages 1 to s-1 for i in eachindex(Aᵢ₁) - integrator.opts.adaptive && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) gprev = uᵢ₋₄ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂ + Aᵢ₃[i] * fᵢ₋₃ + Aᵢ₄[i] * fᵢ₋₄) * dt u = u + Bᵢ[i] * dt * k fᵢ₋₄ = fᵢ₋₃ @@ -760,11 +760,11 @@ end end #last stage - integrator.opts.adaptive && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (tmp = tmp + (Bₗ - B̂ₗ) * dt * k) u = u + Bₗ * dt * k #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t) integrator.EEst = integrator.opts.internalnorm(atmp, t) @@ -795,7 +795,7 @@ end @.. broadcast=false thread=thread fᵢ₋₃=zero(fsalfirst) @.. broadcast=false thread=thread fᵢ₋₄=zero(fsalfirst) @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false thread=thread tmp=zero(uprev)) + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=zero(uprev)) @.. broadcast=false thread=thread uᵢ₋₁=uprev @.. broadcast=false thread=thread uᵢ₋₂=uprev @.. broadcast=false thread=thread uᵢ₋₃=uprev @@ -803,7 +803,7 @@ end #stages 1 to s-1 for i in eachindex(Aᵢ₁) - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) @.. broadcast=false thread=thread gprev=uᵢ₋₄ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂ + @@ -822,14 +822,14 @@ end end #last stage - integrator.opts.adaptive && + integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) && (@.. broadcast=false thread=thread tmp=tmp + (Bₗ - B̂ₗ) * dt * k) @.. broadcast=false thread=thread u=u + Bₗ * dt * k step_limiter!(u, integrator, p, t + dt) #Error estimate - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, thread) diff --git a/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl b/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl index 25f280880f..02ab88896d 100644 --- a/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl +++ b/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl @@ -143,7 +143,7 @@ end integrator.eigen_est = integrator.opts.internalnorm( maximum(abs.((k7 .- k6) ./ (g7 .- g6))), t) end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7) @@ -216,7 +216,7 @@ end @.. broadcast=false thread=thread utilde=abs((k7 - k6) / (g7 - g6)) integrator.eigen_est = integrator.opts.internalnorm(norm(utilde, Inf), t) end - if integrator.opts.adaptive + if integrator.opts.adaptive || OrdinaryDiffEqCore.overrides_adaptive(integrator.opts.controller) @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 +