From 82ba7edb36ab2bc4f87e0c2456b8decf178ec96a Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Sun, 10 Aug 2025 21:38:52 +0200 Subject: [PATCH 1/8] `return nothing` for the curstom time integrators --- src/time_integration/methods_2N.jl | 6 ++++++ src/time_integration/methods_3Sstar.jl | 8 +++++++- src/time_integration/methods_SSP.jl | 8 ++++++++ .../paired_explicit_runge_kutta/methods_PERK2.jl | 2 ++ .../paired_explicit_runge_kutta/methods_PERK3.jl | 4 ++++ .../paired_explicit_runge_kutta/methods_PERK4.jl | 4 ++++ .../paired_explicit_runge_kutta.jl | 14 ++++++++++++++ .../relaxation_methods/methods_subdiagonal.jl | 4 ++++ .../relaxation_methods/methods_vanderHouwen.jl | 4 ++++ .../relaxation_methods/relaxation_methods.jl | 2 ++ src/time_integration/time_integration.jl | 4 ++++ 11 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index d626163d1a0..4ce740fd504 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -188,6 +188,8 @@ function step!(integrator::SimpleIntegrator2N) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end # get a cache where the RHS can be stored @@ -200,6 +202,8 @@ u_modified!(integrator::SimpleIntegrator2N, ::Bool) = false function terminate!(integrator::SimpleIntegrator2N) integrator.finalstep = true empty!(integrator.opts.tstops) + + return nothing end # used for AMR @@ -207,5 +211,7 @@ function Base.resize!(integrator::SimpleIntegrator2N, new_size) resize!(integrator.u, new_size) resize!(integrator.du, new_size) resize!(integrator.u_tmp, new_size) + + return nothing end end # @muladd diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index 7862a273544..e0482fea2f1 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -236,11 +236,13 @@ function step!(integrator::SimpleIntegrator3Sstar) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end # get a cache where the RHS can be stored function get_tmp_cache(integrator::SimpleIntegrator3Sstar) - (integrator.u_tmp1, integrator.u_tmp2) + return (integrator.u_tmp1, integrator.u_tmp2) end # some algorithms from DiffEq like FSAL-ones need to be informed when a callback has modified u @@ -250,6 +252,8 @@ u_modified!(integrator::SimpleIntegrator3Sstar, ::Bool) = false function terminate!(integrator::SimpleIntegrator3Sstar) integrator.finalstep = true empty!(integrator.opts.tstops) + + return nothing end # used for AMR @@ -258,5 +262,7 @@ function Base.resize!(integrator::SimpleIntegrator3Sstar, new_size) resize!(integrator.du, new_size) resize!(integrator.u_tmp1, new_size) resize!(integrator.u_tmp2, new_size) + + return nothing end end # @muladd diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index dbf0a0f1d2f..7931a38d0a8 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -232,6 +232,8 @@ function step!(integrator::SimpleIntegratorSSP) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end # get a cache where the RHS can be stored @@ -243,6 +245,8 @@ u_modified!(integrator::SimpleIntegratorSSP, ::Bool) = false # stop the time integration function terminate!(integrator::SimpleIntegratorSSP) integrator.finalstep = true + + return nothing end """ @@ -267,6 +271,8 @@ function modify_dt_for_tstops!(integrator::SimpleIntegratorSSP) min(abs(integrator.dtcache), abs(tdir_tstop - tdir_t)) # step! to the end end end + + return nothing end # used for AMR @@ -279,5 +285,7 @@ function Base.resize!(integrator::SimpleIntegratorSSP, new_size) # new_size = n_variables * n_nodes^n_dims * n_elements n_elements = nelements(integrator.p.solver, integrator.p.cache) resize!(integrator.p, integrator.p.solver.volume_integral, n_elements) + + return nothing end end # @muladd diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl index 3f9460dd433..1882a073086 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl @@ -304,5 +304,7 @@ function step!(integrator::PairedExplicitRK2Integrator) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end end # @muladd diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl index 4f7344678d9..4d5d1e7fce2 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl @@ -309,6 +309,8 @@ function step!(integrator::PairedExplicitRK3Integrator) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end function Base.resize!(integrator::PairedExplicitRK3Integrator, new_size) @@ -318,5 +320,7 @@ function Base.resize!(integrator::PairedExplicitRK3Integrator, new_size) resize!(integrator.k1, new_size) resize!(integrator.kS1, new_size) + + return nothing end end # @muladd diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl index d0571b9b0ae..6e598bb8ed9 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl @@ -280,6 +280,8 @@ end integrator.u[i] += 0.5 * integrator.dt * (integrator.k1[i] + integrator.du[i]) end + + return nothing end function step!(integrator::PairedExplicitRK4Integrator) @@ -333,5 +335,7 @@ function step!(integrator::PairedExplicitRK4Integrator) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end end # @muladd diff --git a/src/time_integration/paired_explicit_runge_kutta/paired_explicit_runge_kutta.jl b/src/time_integration/paired_explicit_runge_kutta/paired_explicit_runge_kutta.jl index c12adb41cac..333ebc14983 100644 --- a/src/time_integration/paired_explicit_runge_kutta/paired_explicit_runge_kutta.jl +++ b/src/time_integration/paired_explicit_runge_kutta/paired_explicit_runge_kutta.jl @@ -78,6 +78,8 @@ function add_tstop!(integrator::AbstractPairedExplicitRKIntegrator, t) pop!(integrator.opts.tstops) end push!(integrator.opts.tstops, integrator.tdir * t) + + return nothing end has_tstop(integrator::AbstractPairedExplicitRKIntegrator) = !isempty(integrator.opts.tstops) @@ -86,6 +88,8 @@ first_tstop(integrator::AbstractPairedExplicitRKIntegrator) = first(integrator.o # Function that computes the first stage of a general PERK method @inline function PERK_k1!(integrator::AbstractPairedExplicitRKIntegrator, p) integrator.f(integrator.k1, integrator.u, p, integrator.t) + + return nothing end @inline function PERK_k2!(integrator::AbstractPairedExplicitRKSingleIntegrator, p, alg) @@ -96,6 +100,8 @@ end integrator.f(integrator.du, integrator.u_tmp, p, integrator.t + alg.c[2] * integrator.dt) + + return nothing end @inline function PERK_ki!(integrator::AbstractPairedExplicitRKSingleIntegrator, p, alg, @@ -110,6 +116,8 @@ end integrator.f(integrator.du, integrator.u_tmp, p, integrator.t + alg.c[stage] * integrator.dt) + + return nothing end # used for AMR (Adaptive Mesh Refinement) @@ -119,6 +127,8 @@ function Base.resize!(integrator::AbstractPairedExplicitRKIntegrator, new_size) resize!(integrator.u_tmp, new_size) resize!(integrator.k1, new_size) + + return nothing end # get a cache where the RHS can be stored @@ -130,6 +140,8 @@ u_modified!(integrator::AbstractPairedExplicitRKIntegrator, ::Bool) = false # stop the time integration function terminate!(integrator::AbstractPairedExplicitRKIntegrator) integrator.finalstep = true + + return nothing end """ @@ -155,6 +167,8 @@ function modify_dt_for_tstops!(integrator::AbstractPairedExplicitRKIntegrator) min(abs(integrator.dtcache), abs(tdir_tstop - tdir_t)) # step! to the end end end + + return nothing end # Add definitions of functions related to polynomial optimization by NLsolve here diff --git a/src/time_integration/relaxation_methods/methods_subdiagonal.jl b/src/time_integration/relaxation_methods/methods_subdiagonal.jl index d5beb7e20f9..4b25d622c93 100644 --- a/src/time_integration/relaxation_methods/methods_subdiagonal.jl +++ b/src/time_integration/relaxation_methods/methods_subdiagonal.jl @@ -289,6 +289,8 @@ function step!(integrator::SubDiagonalRelaxationIntegrator) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end # used for AMR @@ -298,5 +300,7 @@ function Base.resize!(integrator::SubDiagonalRelaxationIntegrator, new_size) resize!(integrator.u_tmp, new_size) # Relaxation addition resize!(integrator.direction, new_size) + + return nothing end end # @muladd diff --git a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl index 7d1b81d225c..3a76fee5c9a 100644 --- a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl +++ b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl @@ -355,6 +355,8 @@ function step!(integrator::vanderHouwenRelaxationIntegrator) @warn "Interrupted. Larger maxiters is needed." terminate!(integrator) end + + return nothing end # used for AMR @@ -365,5 +367,7 @@ function Base.resize!(integrator::vanderHouwenRelaxationIntegrator, new_size) resize!(integrator.k_prev, new_size) # Relaxation addition resize!(integrator.direction, new_size) + + return nothing end end # @muladd diff --git a/src/time_integration/relaxation_methods/relaxation_methods.jl b/src/time_integration/relaxation_methods/relaxation_methods.jl index a1dfcdf9786..b0a793dfae4 100644 --- a/src/time_integration/relaxation_methods/relaxation_methods.jl +++ b/src/time_integration/relaxation_methods/relaxation_methods.jl @@ -11,6 +11,8 @@ u_modified!(integrator::RelaxationIntegrator, ::Bool) = false function terminate!(integrator::RelaxationIntegrator) integrator.finalstep = true empty!(integrator.opts.tstops) + + return nothing end @inline function update_t_relaxation!(integrator::RelaxationIntegrator) diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index 31d1f8fa2aa..fa1eacfc794 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -34,6 +34,8 @@ end # used by adaptive timestepping algorithms in DiffEq function set_proposed_dt!(integrator::AbstractTimeIntegrator, dt) (integrator.dt = dt; integrator.dtcache = dt) + + return nothing end # Required e.g. for `glm_speed_callback` @@ -92,6 +94,8 @@ function finalize_callbacks(integrator::AbstractTimeIntegrator) cb.finalize(cb, integrator.u, integrator.t, integrator) end end + + return nothing end include("methods_2N.jl") From 1560ace8d419ec0059e9ac60815538167a20adbb Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 12:08:04 +0200 Subject: [PATCH 2/8] unify callback init --- src/time_integration/methods_2N.jl | 10 +--------- src/time_integration/methods_3Sstar.jl | 10 +--------- src/time_integration/methods_SSP.jl | 12 +++--------- .../paired_explicit_runge_kutta/methods_PERK2.jl | 10 +--------- .../paired_explicit_runge_kutta/methods_PERK3.jl | 10 +--------- .../paired_explicit_runge_kutta/methods_PERK4.jl | 10 +--------- .../relaxation_methods/methods_subdiagonal.jl | 10 +--------- .../relaxation_methods/methods_vanderHouwen.jl | 10 +--------- src/time_integration/time_integration.jl | 15 +++++++++++++++ 9 files changed, 25 insertions(+), 72 deletions(-) diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index 4ce740fd504..3bf19d2132e 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -121,15 +121,7 @@ function init(ode::ODEProblem, alg::SimpleAlgorithm2N; SimpleIntegratorOptions(callback, ode.tspan; kwargs...), false) - # initialize callbacks - if callback isa CallbackSet - foreach(callback.continuous_callbacks) do cb - throw(ArgumentError("Continuous callbacks are unsupported with the 2N storage time integration methods.")) - end - foreach(callback.discrete_callbacks) do cb - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index e0482fea2f1..7632917cda9 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -163,15 +163,7 @@ function init(ode::ODEProblem, alg::SimpleAlgorithm3Sstar; ode.tspan; kwargs...), false) - # initialize callbacks - if callback isa CallbackSet - foreach(callback.continuous_callbacks) do cb - throw(ArgumentError("Continuous callbacks are unsupported with the 3 star time integration methods.")) - end - foreach(callback.discrete_callbacks) do cb - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index 7931a38d0a8..e2c49a29cc7 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -134,16 +134,10 @@ function init(ode::ODEProblem, alg::SimpleAlgorithmSSP; resize!(integrator.p, integrator.p.solver.volume_integral, nelements(integrator.p.solver, integrator.p.cache)) - # initialize callbacks - if callback isa CallbackSet - foreach(callback.continuous_callbacks) do cb - throw(ArgumentError("Continuous callbacks are unsupported with the SSP time integration methods.")) - end - foreach(callback.discrete_callbacks) do cb - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + # Standard callbacks + initialize_callbacks!(callback, integrator) + # Addition for `SimpleAlgorithmSSP` which may have stage callbacks for stage_callback in alg.stage_callbacks init_callback(stage_callback, integrator.p) end diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl index 1882a073086..51395d808a0 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl @@ -234,15 +234,7 @@ function init(ode::ODEProblem, alg::PairedExplicitRK2; false, true, false, k1) - # initialize callbacks - if callback isa CallbackSet - for cb in callback.continuous_callbacks - throw(ArgumentError("Continuous callbacks are unsupported with paired explicit Runge-Kutta methods.")) - end - for cb in callback.discrete_callbacks - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl index 4d5d1e7fce2..832975f7ca2 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl @@ -230,15 +230,7 @@ function init(ode::ODEProblem, alg::PairedExplicitRK3; false, true, false, k1, kS1) - # initialize callbacks - if callback isa CallbackSet - for cb in callback.continuous_callbacks - throw(ArgumentError("Continuous callbacks are unsupported with paired explicit Runge-Kutta methods.")) - end - for cb in callback.discrete_callbacks - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl index 6e598bb8ed9..75eb16e99c8 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl @@ -228,15 +228,7 @@ function init(ode::ODEProblem, alg::PairedExplicitRK4; false, true, false, k1) - # initialize callbacks - if callback isa CallbackSet - for cb in callback.continuous_callbacks - throw(ArgumentError("Continuous callbacks are unsupported with paired explicit Runge-Kutta methods.")) - end - for cb in callback.discrete_callbacks - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/relaxation_methods/methods_subdiagonal.jl b/src/time_integration/relaxation_methods/methods_subdiagonal.jl index 4b25d622c93..8b83bafc064 100644 --- a/src/time_integration/relaxation_methods/methods_subdiagonal.jl +++ b/src/time_integration/relaxation_methods/methods_subdiagonal.jl @@ -184,15 +184,7 @@ function init(ode::ODEProblem, alg::SubDiagonalRelaxationAlgorithm; direction, gamma, S_old, alg.relaxation_solver) - # initialize callbacks - if callback isa CallbackSet - foreach(callback.continuous_callbacks) do cb - throw(ArgumentError("Continuous callbacks are unsupported with sub-diagonal time integration methods.")) - end - foreach(callback.discrete_callbacks) do cb - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl index 3a76fee5c9a..4b3aaf4ed1f 100644 --- a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl +++ b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl @@ -221,15 +221,7 @@ function init(ode::ODEProblem, alg::vanderHouwenRelaxationAlgorithm; k_prev, direction, gamma, S_old, alg.relaxation_solver) - # initialize callbacks - if callback isa CallbackSet - foreach(callback.continuous_callbacks) do cb - throw(ArgumentError("Continuous callbacks are unsupported with van-der-Houwen time integration methods.")) - end - foreach(callback.discrete_callbacks) do cb - cb.initialize(cb, integrator.u, integrator.t, integrator) - end - end + initialize_callbacks!(callback, integrator) return integrator end diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index fa1eacfc794..9f4420717ce 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -43,6 +43,21 @@ function get_proposed_dt(integrator::AbstractTimeIntegrator) return integrator.dt end +function initialize_callbacks!(callback::Union{CallbackSet, Nothing}, + integrator::AbstractTimeIntegrator) + # initialize callbacks + if callback isa CallbackSet + foreach(callback.continuous_callbacks) do cb + throw(ArgumentError("Continuous callbacks are unsupported.")) + end + foreach(callback.discrete_callbacks) do cb + cb.initialize(cb, integrator.u, integrator.t, integrator) + end + end + + return nothing +end + """ Trixi.solve(ode::ODEProblem, alg::AbstractTimeIntegrationAlgorithm; dt, callbacks, kwargs...) From e76399d2ae747db08f479122f0606b7941908a55 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 12:23:56 +0200 Subject: [PATCH 3/8] handle callbakcs --- src/time_integration/methods_2N.jl | 12 +----------- src/time_integration/methods_3Sstar.jl | 12 +----------- src/time_integration/methods_SSP.jl | 12 +----------- .../paired_explicit_runge_kutta/methods_PERK2.jl | 12 +----------- .../paired_explicit_runge_kutta/methods_PERK3.jl | 12 +----------- .../relaxation_methods/methods_subdiagonal.jl | 12 +----------- .../relaxation_methods/methods_vanderHouwen.jl | 12 +----------- src/time_integration/time_integration.jl | 15 +++++++++++++++ 8 files changed, 22 insertions(+), 77 deletions(-) diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index 3bf19d2132e..ccc0c413e86 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -163,17 +163,7 @@ function step!(integrator::SimpleIntegrator2N) integrator.iter += 1 integrator.t += integrator.dt - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index 7632917cda9..d83310d3995 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -211,17 +211,7 @@ function step!(integrator::SimpleIntegrator3Sstar) integrator.iter += 1 integrator.t += integrator.dt - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index e2c49a29cc7..8dfbbc9b734 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -209,17 +209,7 @@ function step!(integrator::SimpleIntegratorSSP) integrator.iter += 1 integrator.t += integrator.dt - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl index 51395d808a0..4a6e52a4b81 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl @@ -279,17 +279,7 @@ function step!(integrator::PairedExplicitRK2Integrator) integrator.iter += 1 integrator.t += integrator.dt - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl index 832975f7ca2..072a9736359 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl @@ -284,17 +284,7 @@ function step!(integrator::PairedExplicitRK3Integrator) integrator.iter += 1 integrator.t += integrator.dt - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/relaxation_methods/methods_subdiagonal.jl b/src/time_integration/relaxation_methods/methods_subdiagonal.jl index 8b83bafc064..7a6e228cf8c 100644 --- a/src/time_integration/relaxation_methods/methods_subdiagonal.jl +++ b/src/time_integration/relaxation_methods/methods_subdiagonal.jl @@ -264,17 +264,7 @@ function step!(integrator::SubDiagonalRelaxationIntegrator) end end - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl index 4b3aaf4ed1f..7daa3a646d6 100644 --- a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl +++ b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl @@ -330,17 +330,7 @@ function step!(integrator::vanderHouwenRelaxationIntegrator) end end - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - foreach(callbacks.discrete_callbacks) do cb - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - return nothing - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index 9f4420717ce..263361f09c1 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -58,6 +58,21 @@ function initialize_callbacks!(callback::Union{CallbackSet, Nothing}, return nothing end +function handle_callbacks!(callbacks::Union{CallbackSet, Nothing}, + integrator::AbstractTimeIntegrator) + # handle callbacks + if callbacks isa CallbackSet + foreach(callbacks.discrete_callbacks) do cb + if cb.condition(integrator.u, integrator.t, integrator) + cb.affect!(integrator) + end + return nothing + end + end + + return nothing +end + """ Trixi.solve(ode::ODEProblem, alg::AbstractTimeIntegrationAlgorithm; dt, callbacks, kwargs...) From 0fc22675264fa96adbec154cc5503a6f5fb34972 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 12:25:26 +0200 Subject: [PATCH 4/8] s --- src/time_integration/time_integration.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index 263361f09c1..c268697892c 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -43,14 +43,14 @@ function get_proposed_dt(integrator::AbstractTimeIntegrator) return integrator.dt end -function initialize_callbacks!(callback::Union{CallbackSet, Nothing}, +function initialize_callbacks!(callbacks::Union{CallbackSet, Nothing}, integrator::AbstractTimeIntegrator) # initialize callbacks - if callback isa CallbackSet - foreach(callback.continuous_callbacks) do cb + if callbacks isa CallbackSet + foreach(callbacks.continuous_callbacks) do cb throw(ArgumentError("Continuous callbacks are unsupported.")) end - foreach(callback.discrete_callbacks) do cb + foreach(callbacks.discrete_callbacks) do cb cb.initialize(cb, integrator.u, integrator.t, integrator) end end From a996dffb86eab9380e4e54c3e73c3e01b070d1b1 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 12:27:13 +0200 Subject: [PATCH 5/8] cb --- .../paired_explicit_runge_kutta/methods_PERK4.jl | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl index 75eb16e99c8..789388aafb6 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl @@ -311,16 +311,7 @@ function step!(integrator::PairedExplicitRK4Integrator) integrator.iter += 1 integrator.t += integrator.dt - @trixi_timeit timer() "Step-Callbacks" begin - # handle callbacks - if callbacks isa CallbackSet - for cb in callbacks.discrete_callbacks - if cb.condition(integrator.u, integrator.t, integrator) - cb.affect!(integrator) - end - end - end - end + @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) # respect maximum number of iterations if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep From 833a21a55923cece2982b3287d0717dde948a348 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 12:32:55 +0200 Subject: [PATCH 6/8] check max iter --- src/time_integration/methods_2N.jl | 6 +----- src/time_integration/methods_3Sstar.jl | 6 +----- src/time_integration/methods_SSP.jl | 6 +----- .../paired_explicit_runge_kutta/methods_PERK2.jl | 6 +----- .../paired_explicit_runge_kutta/methods_PERK3.jl | 6 +----- .../paired_explicit_runge_kutta/methods_PERK4.jl | 6 +----- .../relaxation_methods/methods_subdiagonal.jl | 6 +----- .../relaxation_methods/methods_vanderHouwen.jl | 6 +----- src/time_integration/time_integration.jl | 14 ++++++++++++-- 9 files changed, 20 insertions(+), 42 deletions(-) diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index ccc0c413e86..8351314105f 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -165,11 +165,7 @@ function step!(integrator::SimpleIntegrator2N) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index d83310d3995..820f46342c5 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -213,11 +213,7 @@ function step!(integrator::SimpleIntegrator3Sstar) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index 8dfbbc9b734..13ab129355e 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -211,11 +211,7 @@ function step!(integrator::SimpleIntegratorSSP) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl index 4a6e52a4b81..a9bbafb9565 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl @@ -281,11 +281,7 @@ function step!(integrator::PairedExplicitRK2Integrator) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl index 072a9736359..cb60a49e3cc 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl @@ -286,11 +286,7 @@ function step!(integrator::PairedExplicitRK3Integrator) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl index 789388aafb6..68cbb4ba157 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl @@ -313,11 +313,7 @@ function step!(integrator::PairedExplicitRK4Integrator) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/relaxation_methods/methods_subdiagonal.jl b/src/time_integration/relaxation_methods/methods_subdiagonal.jl index 7a6e228cf8c..6e27107eecd 100644 --- a/src/time_integration/relaxation_methods/methods_subdiagonal.jl +++ b/src/time_integration/relaxation_methods/methods_subdiagonal.jl @@ -266,11 +266,7 @@ function step!(integrator::SubDiagonalRelaxationIntegrator) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl index 7daa3a646d6..5fdae531661 100644 --- a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl +++ b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl @@ -332,11 +332,7 @@ function step!(integrator::vanderHouwenRelaxationIntegrator) @trixi_timeit timer() "Step-Callbacks" handle_callbacks!(callbacks, integrator) - # respect maximum number of iterations - if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep - @warn "Interrupted. Larger maxiters is needed." - terminate!(integrator) - end + check_max_iter!(integrator) return nothing end diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index c268697892c..c0e656fcff9 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -32,14 +32,14 @@ function Base.getproperty(integrator::AbstractTimeIntegrator, field::Symbol) end # used by adaptive timestepping algorithms in DiffEq -function set_proposed_dt!(integrator::AbstractTimeIntegrator, dt) +@inline function set_proposed_dt!(integrator::AbstractTimeIntegrator, dt) (integrator.dt = dt; integrator.dtcache = dt) return nothing end # Required e.g. for `glm_speed_callback` -function get_proposed_dt(integrator::AbstractTimeIntegrator) +@inline function get_proposed_dt(integrator::AbstractTimeIntegrator) return integrator.dt end @@ -73,6 +73,16 @@ function handle_callbacks!(callbacks::Union{CallbackSet, Nothing}, return nothing end +@inline function check_max_iter!(integrator::AbstractTimeIntegrator) + # respect maximum number of iterations + if integrator.iter >= integrator.opts.maxiters && !integrator.finalstep + @warn "Interrupted. Larger maxiters is needed." + terminate!(integrator) + end + + return nothing +end + """ Trixi.solve(ode::ODEProblem, alg::AbstractTimeIntegrationAlgorithm; dt, callbacks, kwargs...) From 8c7621e47b34648d327e123b348632f9239eaae9 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 13:30:47 +0200 Subject: [PATCH 7/8] limit dt --- src/time_integration/methods_2N.jl | 7 +------ src/time_integration/methods_3Sstar.jl | 7 +------ src/time_integration/methods_SSP.jl | 7 +------ .../paired_explicit_runge_kutta/methods_PERK2.jl | 7 +------ .../paired_explicit_runge_kutta/methods_PERK3.jl | 7 +------ .../paired_explicit_runge_kutta/methods_PERK4.jl | 7 +------ .../relaxation_methods/methods_subdiagonal.jl | 7 +------ .../relaxation_methods/methods_vanderHouwen.jl | 7 +------ src/time_integration/time_integration.jl | 11 +++++++++++ 9 files changed, 19 insertions(+), 48 deletions(-) diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index 8351314105f..d28bf8e25ad 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -137,12 +137,7 @@ function step!(integrator::SimpleIntegrator2N) error("time step size `dt` is NaN") end - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) # one time step integrator.u_tmp .= 0 diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index 820f46342c5..dd5d36b9620 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -179,12 +179,7 @@ function step!(integrator::SimpleIntegrator3Sstar) error("time step size `dt` is NaN") end - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) # one time step integrator.u_tmp1 .= zero(eltype(integrator.u_tmp1)) diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index 13ab129355e..b1fc74cf213 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -181,12 +181,7 @@ function step!(integrator::SimpleIntegratorSSP) modify_dt_for_tstops!(integrator) - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) @. integrator.u_tmp = integrator.u for stage in eachindex(alg.c) diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl index a9bbafb9565..ca9519eb4c4 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl @@ -252,12 +252,7 @@ function step!(integrator::PairedExplicitRK2Integrator) modify_dt_for_tstops!(integrator) - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) @trixi_timeit timer() "Paired Explicit Runge-Kutta ODE integration step" begin # First and second stage are identical across all single/standalone PERK methods diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl index cb60a49e3cc..588843276f7 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl @@ -248,12 +248,7 @@ function step!(integrator::PairedExplicitRK3Integrator) modify_dt_for_tstops!(integrator) - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) @trixi_timeit timer() "Paired Explicit Runge-Kutta ODE integration step" begin # First and second stage are identical across all single/standalone PERK methods diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl index 68cbb4ba157..7b1b27d4000 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl @@ -289,12 +289,7 @@ function step!(integrator::PairedExplicitRK4Integrator) modify_dt_for_tstops!(integrator) - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) @trixi_timeit timer() "Paired Explicit Runge-Kutta ODE integration step" begin PERK_k1!(integrator, prob.p) diff --git a/src/time_integration/relaxation_methods/methods_subdiagonal.jl b/src/time_integration/relaxation_methods/methods_subdiagonal.jl index 6e27107eecd..13da4e9a3d6 100644 --- a/src/time_integration/relaxation_methods/methods_subdiagonal.jl +++ b/src/time_integration/relaxation_methods/methods_subdiagonal.jl @@ -200,12 +200,7 @@ function step!(integrator::SubDiagonalRelaxationIntegrator) error("time step size `dt` is NaN") end - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) @trixi_timeit timer() "Relaxation sub-diagonal RK integration step" begin mesh, equations, dg, cache = mesh_equations_solver_cache(prob.p) diff --git a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl index 5fdae531661..5851e27c4a7 100644 --- a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl +++ b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl @@ -237,12 +237,7 @@ function step!(integrator::vanderHouwenRelaxationIntegrator) error("time step size `dt` is NaN") end - # if the next iteration would push the simulation beyond the end time, set dt accordingly - if integrator.t + integrator.dt > t_end || - isapprox(integrator.t + integrator.dt, t_end) - integrator.dt = t_end - integrator.t - terminate!(integrator) - end + limit_dt!(integrator) @trixi_timeit timer() "Relaxation vdH RK integration step" begin num_stages = length(alg.c) diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index c0e656fcff9..aa04d9941af 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -38,6 +38,17 @@ end return nothing end +@inline function limit_dt!(integrator::AbstractTimeIntegrator) + # if the next iteration would push the simulation beyond the end time, set dt accordingly + if integrator.t + integrator.dt > t_end || + isapprox(integrator.t + integrator.dt, t_end) + integrator.dt = t_end - integrator.t + terminate!(integrator) + end + + return nothing +end + # Required e.g. for `glm_speed_callback` @inline function get_proposed_dt(integrator::AbstractTimeIntegrator) return integrator.dt From 1b52b56f5cea00100134b7f22d85e8f261a29bc2 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Mon, 11 Aug 2025 13:37:27 +0200 Subject: [PATCH 8/8] bf --- src/time_integration/methods_2N.jl | 2 +- src/time_integration/methods_3Sstar.jl | 2 +- src/time_integration/methods_SSP.jl | 2 +- .../paired_explicit_runge_kutta/methods_PERK2.jl | 2 +- .../paired_explicit_runge_kutta/methods_PERK3.jl | 2 +- .../paired_explicit_runge_kutta/methods_PERK4.jl | 2 +- .../relaxation_methods/methods_subdiagonal.jl | 2 +- .../relaxation_methods/methods_vanderHouwen.jl | 2 +- src/time_integration/time_integration.jl | 12 ++++++------ 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index d28bf8e25ad..9348ab7fc5f 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -137,7 +137,7 @@ function step!(integrator::SimpleIntegrator2N) error("time step size `dt` is NaN") end - limit_dt!(integrator) + limit_dt!(integrator, t_end) # one time step integrator.u_tmp .= 0 diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index dd5d36b9620..ae852a6bc12 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -179,7 +179,7 @@ function step!(integrator::SimpleIntegrator3Sstar) error("time step size `dt` is NaN") end - limit_dt!(integrator) + limit_dt!(integrator, t_end) # one time step integrator.u_tmp1 .= zero(eltype(integrator.u_tmp1)) diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index b1fc74cf213..dda6f2e026c 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -181,7 +181,7 @@ function step!(integrator::SimpleIntegratorSSP) modify_dt_for_tstops!(integrator) - limit_dt!(integrator) + limit_dt!(integrator, t_end) @. integrator.u_tmp = integrator.u for stage in eachindex(alg.c) diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl index ca9519eb4c4..bb990406261 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK2.jl @@ -252,7 +252,7 @@ function step!(integrator::PairedExplicitRK2Integrator) modify_dt_for_tstops!(integrator) - limit_dt!(integrator) + limit_dt!(integrator, t_end) @trixi_timeit timer() "Paired Explicit Runge-Kutta ODE integration step" begin # First and second stage are identical across all single/standalone PERK methods diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl index 588843276f7..e63ec81616d 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK3.jl @@ -248,7 +248,7 @@ function step!(integrator::PairedExplicitRK3Integrator) modify_dt_for_tstops!(integrator) - limit_dt!(integrator) + limit_dt!(integrator, t_end) @trixi_timeit timer() "Paired Explicit Runge-Kutta ODE integration step" begin # First and second stage are identical across all single/standalone PERK methods diff --git a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl index 7b1b27d4000..96cbf641a3a 100644 --- a/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl +++ b/src/time_integration/paired_explicit_runge_kutta/methods_PERK4.jl @@ -289,7 +289,7 @@ function step!(integrator::PairedExplicitRK4Integrator) modify_dt_for_tstops!(integrator) - limit_dt!(integrator) + limit_dt!(integrator, t_end) @trixi_timeit timer() "Paired Explicit Runge-Kutta ODE integration step" begin PERK_k1!(integrator, prob.p) diff --git a/src/time_integration/relaxation_methods/methods_subdiagonal.jl b/src/time_integration/relaxation_methods/methods_subdiagonal.jl index 13da4e9a3d6..2b1c3dbfd5a 100644 --- a/src/time_integration/relaxation_methods/methods_subdiagonal.jl +++ b/src/time_integration/relaxation_methods/methods_subdiagonal.jl @@ -200,7 +200,7 @@ function step!(integrator::SubDiagonalRelaxationIntegrator) error("time step size `dt` is NaN") end - limit_dt!(integrator) + limit_dt!(integrator, t_end) @trixi_timeit timer() "Relaxation sub-diagonal RK integration step" begin mesh, equations, dg, cache = mesh_equations_solver_cache(prob.p) diff --git a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl index 5851e27c4a7..3b1e7390f2d 100644 --- a/src/time_integration/relaxation_methods/methods_vanderHouwen.jl +++ b/src/time_integration/relaxation_methods/methods_vanderHouwen.jl @@ -237,7 +237,7 @@ function step!(integrator::vanderHouwenRelaxationIntegrator) error("time step size `dt` is NaN") end - limit_dt!(integrator) + limit_dt!(integrator, t_end) @trixi_timeit timer() "Relaxation vdH RK integration step" begin num_stages = length(alg.c) diff --git a/src/time_integration/time_integration.jl b/src/time_integration/time_integration.jl index aa04d9941af..0c542e2f722 100644 --- a/src/time_integration/time_integration.jl +++ b/src/time_integration/time_integration.jl @@ -38,7 +38,12 @@ end return nothing end -@inline function limit_dt!(integrator::AbstractTimeIntegrator) +# Required e.g. for `glm_speed_callback` +@inline function get_proposed_dt(integrator::AbstractTimeIntegrator) + return integrator.dt +end + +@inline function limit_dt!(integrator::AbstractTimeIntegrator, t_end) # if the next iteration would push the simulation beyond the end time, set dt accordingly if integrator.t + integrator.dt > t_end || isapprox(integrator.t + integrator.dt, t_end) @@ -49,11 +54,6 @@ end return nothing end -# Required e.g. for `glm_speed_callback` -@inline function get_proposed_dt(integrator::AbstractTimeIntegrator) - return integrator.dt -end - function initialize_callbacks!(callbacks::Union{CallbackSet, Nothing}, integrator::AbstractTimeIntegrator) # initialize callbacks