diff --git a/examples/tree_2d_dgsem/elixir_advection_callbacks.jl b/examples/tree_2d_dgsem/elixir_advection_callbacks.jl index 51048b4bcee..e38e32dc3c5 100644 --- a/examples/tree_2d_dgsem/elixir_advection_callbacks.jl +++ b/examples/tree_2d_dgsem/elixir_advection_callbacks.jl @@ -5,7 +5,14 @@ using Trixi module TrixiExtensionExample using Trixi -using OrdinaryDiffEqSSPRK: DiscreteCallback, u_modified! +using OrdinaryDiffEqSSPRK: OrdinaryDiffEqSSPRK, DiscreteCallback +# To keep backwards compatibility with SciMLBase v2, see +# https://github.com/trixi-framework/Trixi.jl/pull/2918#issuecomment-4233720339 +@static if isdefined(OrdinaryDiffEqSSPRK, :derivative_discontinuity!) + import OrdinaryDiffEqSSPRK: derivative_discontinuity! +else + const derivative_discontinuity! = OrdinaryDiffEqSSPRK.u_modified! +end # This is an example implementation for a simple stage callback (i.e., a callable # that is executed after each Runge-Kutta *stage*), which records some values @@ -67,7 +74,7 @@ function (example_callback::ExampleStepCallback)(integrator) push!(example_callback.max_values, max_val) # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/Trixi.jl b/src/Trixi.jl index 0d021cb7158..ac57e30845c 100644 --- a/src/Trixi.jl +++ b/src/Trixi.jl @@ -41,13 +41,20 @@ using Reexport: @reexport using MPI: MPI @reexport using SciMLBase: CallbackSet -using SciMLBase: DiscreteCallback, +using SciMLBase: SciMLBase, DiscreteCallback, ODEProblem, ODESolution, SplitODEProblem -import SciMLBase: get_du, get_tmp_cache, u_modified!, +import SciMLBase: get_du, get_tmp_cache, init, step!, check_error, get_proposed_dt, set_proposed_dt!, terminate!, remake, add_tstop!, has_tstop, first_tstop +# To keep backwards compatibility with SciMLBase v2, see +# https://github.com/trixi-framework/Trixi.jl/pull/2918#issuecomment-4233720339 +@static if isdefined(SciMLBase, :derivative_discontinuity!) + import SciMLBase: derivative_discontinuity! +else + const derivative_discontinuity! = SciMLBase.u_modified! +end using DelimitedFiles: readdlm using Downloads: Downloads diff --git a/src/callbacks_step/alive.jl b/src/callbacks_step/alive.jl index 374a1f68383..b4e63edceb4 100644 --- a/src/callbacks_step/alive.jl +++ b/src/callbacks_step/alive.jl @@ -98,7 +98,7 @@ function (alive_callback::AliveCallback)(integrator) end # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end end # @muladd diff --git a/src/callbacks_step/amr.jl b/src/callbacks_step/amr.jl index 0a1995e5dd8..4c0ff99517a 100644 --- a/src/callbacks_step/amr.jl +++ b/src/callbacks_step/amr.jl @@ -141,7 +141,7 @@ function initialize!(cb::DiscreteCallback{Condition, Affect!}, u, t, iterations = 1 while has_changed compute_coefficients!(integrator.u, t, semi) - u_modified!(integrator, true) + derivative_discontinuity!(integrator, true) has_changed = amr_callback(integrator, only_refine = amr_callback.adapt_initial_condition_only_refine) iterations = iterations + 1 @@ -195,7 +195,7 @@ function (amr_callback::AMRCallback)(integrator; kwargs...) integrator.t, integrator.iter; kwargs...) if has_changed resize!(integrator, length(u_ode)) - u_modified!(integrator, true) + derivative_discontinuity!(integrator, true) end end diff --git a/src/callbacks_step/analysis.jl b/src/callbacks_step/analysis.jl index 54dd99e9279..4de3f6c2194 100644 --- a/src/callbacks_step/analysis.jl +++ b/src/callbacks_step/analysis.jl @@ -358,7 +358,7 @@ function (analysis_callback::AnalysisCallback)(u_ode, du_ode, integrator, semi) end # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) # Reset performance measurements analysis_callback.start_time_last_analysis = time_ns() diff --git a/src/callbacks_step/averaging.jl b/src/callbacks_step/averaging.jl index 0bde0f3679e..490c04c226d 100644 --- a/src/callbacks_step/averaging.jl +++ b/src/callbacks_step/averaging.jl @@ -79,7 +79,7 @@ function initialize!(cb::DiscreteCallback{Condition, Affect!}, u_ode, t, mesh, equations, solver, cache) # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end @@ -111,7 +111,7 @@ function (averaging_callback::AveragingCallback)(integrator) end # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/callbacks_step/euler_acoustics_coupling.jl b/src/callbacks_step/euler_acoustics_coupling.jl index 15b14304962..0fe9dcde175 100644 --- a/src/callbacks_step/euler_acoustics_coupling.jl +++ b/src/callbacks_step/euler_acoustics_coupling.jl @@ -211,8 +211,8 @@ function (euler_acoustics_coupling::EulerAcousticsCouplingCallback)(integrator_a end # avoid re-evaluation possible FSAL stages - u_modified!(integrator_acoustics, false) - u_modified!(integrator_euler, false) + derivative_discontinuity!(integrator_acoustics, false) + derivative_discontinuity!(integrator_euler, false) return nothing end diff --git a/src/callbacks_step/glm_speed.jl b/src/callbacks_step/glm_speed.jl index b094a439ef6..7072734f466 100644 --- a/src/callbacks_step/glm_speed.jl +++ b/src/callbacks_step/glm_speed.jl @@ -109,7 +109,7 @@ end update_cleaning_speed!(semi, glm_speed_callback, dt, integrator.t) # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/callbacks_step/save_restart.jl b/src/callbacks_step/save_restart.jl index 0d6a355dbfe..387316b898d 100644 --- a/src/callbacks_step/save_restart.jl +++ b/src/callbacks_step/save_restart.jl @@ -102,7 +102,7 @@ function (restart_callback::SaveRestartCallback)(integrator) end # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/callbacks_step/save_solution.jl b/src/callbacks_step/save_solution.jl index 62c1973d169..eef76e8c615 100644 --- a/src/callbacks_step/save_solution.jl +++ b/src/callbacks_step/save_solution.jl @@ -42,7 +42,7 @@ function get_node_variable(::Val{symbol}, u, mesh, equations, dg, cache, end ``` -For hyperbolic-parabolic equations, `equations_parabolic` and `cache_parabolic` must be +For hyperbolic-parabolic equations, `equations_parabolic` and `cache_parabolic` must be added: ```julia function get_node_variable(::Val{symbol}, u, mesh, equations, dg, cache, @@ -253,7 +253,7 @@ function (solution_callback::SaveSolutionCallback)(integrator) end # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/callbacks_step/stepsize.jl b/src/callbacks_step/stepsize.jl index a3258a147ef..e32221131c4 100644 --- a/src/callbacks_step/stepsize.jl +++ b/src/callbacks_step/stepsize.jl @@ -121,7 +121,7 @@ end integrator.dtcache = dt # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/callbacks_step/summary.jl b/src/callbacks_step/summary.jl index 9a06f3ff124..554e779e1ec 100644 --- a/src/callbacks_step/summary.jl +++ b/src/callbacks_step/summary.jl @@ -6,7 +6,7 @@ #! format: noindent summary_callback(u, t, integrator) = false # when used as condition; never call the summary callback during the simulation -summary_callback(integrator) = u_modified!(integrator, false) # the summary callback does nothing when called accidentally +summary_callback(integrator) = derivative_discontinuity!(integrator, false) # the summary callback does nothing when called accidentally """ SummaryCallback() diff --git a/src/callbacks_step/time_series.jl b/src/callbacks_step/time_series.jl index ff56e32baa6..e3687b7f89a 100644 --- a/src/callbacks_step/time_series.jl +++ b/src/callbacks_step/time_series.jl @@ -212,7 +212,7 @@ function (time_series_callback::TimeSeriesCallback)(integrator) end # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/callbacks_step/trivial.jl b/src/callbacks_step/trivial.jl index 54b00ea384e..dd4fdb6ba8b 100644 --- a/src/callbacks_step/trivial.jl +++ b/src/callbacks_step/trivial.jl @@ -17,7 +17,7 @@ function TrivialCallback() end trivial_callback(u, t, integrator) = false -trivial_callback(integrator) = u_modified!(integrator, false) +trivial_callback(integrator) = derivative_discontinuity!(integrator, false) function Base.show(io::IO, cb::DiscreteCallback{<:Any, <:typeof(trivial_callback)}) @nospecialize cb # reduce precompilation time diff --git a/src/callbacks_step/visualization.jl b/src/callbacks_step/visualization.jl index a7d6a31e4e6..bfcc5b31a1d 100644 --- a/src/callbacks_step/visualization.jl +++ b/src/callbacks_step/visualization.jl @@ -157,7 +157,7 @@ function (visualization_callback::VisualizationCallback)(integrator) time = integrator.t, timestep = integrator.stats.naccept) # avoid re-evaluating possible FSAL stages - u_modified!(integrator, false) + derivative_discontinuity!(integrator, false) return nothing end diff --git a/src/time_integration/methods_2N.jl b/src/time_integration/methods_2N.jl index 6bf1314c054..7c693225374 100644 --- a/src/time_integration/methods_2N.jl +++ b/src/time_integration/methods_2N.jl @@ -170,7 +170,7 @@ end get_tmp_cache(integrator::SimpleIntegrator2N) = (integrator.u_tmp,) # some algorithms from DiffEq like FSAL-ones need to be informed when a callback has modified u -u_modified!(integrator::SimpleIntegrator2N, ::Bool) = false +derivative_discontinuity!(integrator::SimpleIntegrator2N, ::Bool) = false # stop the time integration function terminate!(integrator::SimpleIntegrator2N) diff --git a/src/time_integration/methods_3Sstar.jl b/src/time_integration/methods_3Sstar.jl index e677e33518d..a5e57bddcb5 100644 --- a/src/time_integration/methods_3Sstar.jl +++ b/src/time_integration/methods_3Sstar.jl @@ -220,7 +220,7 @@ function get_tmp_cache(integrator::SimpleIntegrator3Sstar) end # some algorithms from DiffEq like FSAL-ones need to be informed when a callback has modified u -u_modified!(integrator::SimpleIntegrator3Sstar, ::Bool) = false +derivative_discontinuity!(integrator::SimpleIntegrator3Sstar, ::Bool) = false # stop the time integration function terminate!(integrator::SimpleIntegrator3Sstar) diff --git a/src/time_integration/methods_SSP.jl b/src/time_integration/methods_SSP.jl index e09eddd32d2..a92af77a9f3 100644 --- a/src/time_integration/methods_SSP.jl +++ b/src/time_integration/methods_SSP.jl @@ -213,7 +213,7 @@ end get_tmp_cache(integrator::SimpleIntegratorSSP) = (integrator.u_tmp,) # some algorithms from DiffEq like FSAL-ones need to be informed when a callback has modified u -u_modified!(integrator::SimpleIntegratorSSP, ::Bool) = false +derivative_discontinuity!(integrator::SimpleIntegratorSSP, ::Bool) = false # stop the time integration function terminate!(integrator::SimpleIntegratorSSP) 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 5de2164fa3e..4dfc44b2089 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 @@ -136,7 +136,7 @@ end get_tmp_cache(integrator::AbstractPairedExplicitRKIntegrator) = (integrator.u_tmp,) # some algorithms from DiffEq like FSAL-ones need to be informed when a callback has modified u -u_modified!(integrator::AbstractPairedExplicitRKIntegrator, ::Bool) = false +derivative_discontinuity!(integrator::AbstractPairedExplicitRKIntegrator, ::Bool) = false # stop the time integration function terminate!(integrator::AbstractPairedExplicitRKIntegrator) diff --git a/src/time_integration/relaxation_methods/relaxation_methods.jl b/src/time_integration/relaxation_methods/relaxation_methods.jl index b0a793dfae4..a8ccac97039 100644 --- a/src/time_integration/relaxation_methods/relaxation_methods.jl +++ b/src/time_integration/relaxation_methods/relaxation_methods.jl @@ -5,7 +5,7 @@ abstract type RelaxationIntegrator <: AbstractTimeIntegrator end get_tmp_cache(integrator::RelaxationIntegrator) = (integrator.u_tmp,) # some algorithms from DiffEq like FSAL-ones need to be informed when a callback has modified u -u_modified!(integrator::RelaxationIntegrator, ::Bool) = false +derivative_discontinuity!(integrator::RelaxationIntegrator, ::Bool) = false # stop the time integration function terminate!(integrator::RelaxationIntegrator) diff --git a/test/test_aqua.jl b/test/test_aqua.jl index 154088995ca..8e9aaea1ccf 100644 --- a/test/test_aqua.jl +++ b/test/test_aqua.jl @@ -24,6 +24,7 @@ include("test_trixi.jl") ignore = (:derivative_operator, :periodic_derivative_operator, :upwind_operators, + :derivative_discontinuity!, Symbol("@batch")))) end