From 933e0694a0d896305f479622e9b2105339d4e03f Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Wed, 26 Nov 2025 15:42:40 +0100 Subject: [PATCH 1/2] `set_zero!` instead of `reset_du` --- src/solvers/dgmulti/dg.jl | 4 ++-- src/solvers/dgmulti/dg_parabolic.jl | 8 ++++---- src/solvers/dgmulti/flux_differencing.jl | 4 ++-- src/solvers/dgmulti/flux_differencing_gauss_sbp.jl | 2 +- src/solvers/dgsem_p4est/dg_2d_parabolic.jl | 6 +++--- src/solvers/dgsem_p4est/dg_3d_parabolic.jl | 6 +++--- src/solvers/dgsem_p4est/dg_3d_parallel.jl | 2 +- src/solvers/dgsem_structured/dg.jl | 2 +- src/solvers/dgsem_tree/dg_1d_parabolic.jl | 4 ++-- src/solvers/dgsem_tree/dg_2d.jl | 2 +- src/solvers/dgsem_tree/dg_2d_parabolic.jl | 6 +++--- src/solvers/dgsem_tree/dg_2d_parallel.jl | 2 +- src/solvers/dgsem_tree/dg_3d_parabolic.jl | 6 +++--- src/solvers/dgsem_tree/subcell_limiters.jl | 3 +-- src/solvers/dgsem_unstructured/dg_2d.jl | 2 +- src/solvers/solvers.jl | 2 +- 16 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/solvers/dgmulti/dg.jl b/src/solvers/dgmulti/dg.jl index 5a1036487af..57ad45da3d7 100644 --- a/src/solvers/dgmulti/dg.jl +++ b/src/solvers/dgmulti/dg.jl @@ -154,7 +154,7 @@ function allocate_nested_array(uEltype, nvars, array_dimensions, dg) nvars)) end -function reset_du!(du, dg::DGMulti, other_args...) +function set_zero!(du, dg::DGMulti, other_args...) @threaded for i in eachindex(du) du[i] = zero(eltype(du)) end @@ -665,7 +665,7 @@ end function rhs!(du, u, t, mesh, equations, boundary_conditions::BC, source_terms::Source, dg::DGMulti, cache) where {BC, Source} - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) @trixi_timeit timer() "volume integral" begin calc_volume_integral!(du, u, mesh, diff --git a/src/solvers/dgmulti/dg_parabolic.jl b/src/solvers/dgmulti/dg_parabolic.jl index b855326f29d..ed8f9772b36 100644 --- a/src/solvers/dgmulti/dg_parabolic.jl +++ b/src/solvers/dgmulti/dg_parabolic.jl @@ -166,7 +166,7 @@ function calc_gradient!(gradients, u::StructArray, t, mesh::DGMultiMesh, boundary_conditions, dg::DGMulti, parabolic_scheme, cache, cache_parabolic) for dim in eachindex(gradients) - reset_du!(gradients[dim], dg) + set_zero!(gradients[dim], dg) end calc_gradient_volume_integral!(gradients, u, mesh, equations, dg, cache, @@ -303,7 +303,7 @@ function calc_viscous_fluxes!(flux_viscous, u, gradients, mesh::DGMultiMesh, equations::AbstractEquationsParabolic, dg::DGMulti, cache, cache_parabolic) for dim in eachdim(mesh) - reset_du!(flux_viscous[dim], dg) + set_zero!(flux_viscous[dim], dg) end (; local_u_values_threaded) = cache_parabolic @@ -430,7 +430,7 @@ function calc_divergence!(du, u::StructArray, t, flux_viscous, mesh::DGMultiMesh equations::AbstractEquationsParabolic, boundary_conditions, dg::DGMulti, parabolic_scheme, cache, cache_parabolic) - reset_du!(du, dg) + set_zero!(du, dg) calc_divergence_volume_integral!(du, u, flux_viscous, mesh, equations, dg, cache, cache_parabolic) @@ -474,7 +474,7 @@ function rhs_parabolic!(du, u, t, mesh::DGMultiMesh, equations_parabolic::AbstractEquationsParabolic, boundary_conditions, source_terms, dg::DGMulti, parabolic_scheme, cache, cache_parabolic) - reset_du!(du, dg) + set_zero!(du, dg) @trixi_timeit timer() "transform variables" begin (; u_transformed, gradients, flux_viscous) = cache_parabolic diff --git a/src/solvers/dgmulti/flux_differencing.jl b/src/solvers/dgmulti/flux_differencing.jl index 0c7530a558b..bd3c6972364 100644 --- a/src/solvers/dgmulti/flux_differencing.jl +++ b/src/solvers/dgmulti/flux_differencing.jl @@ -618,7 +618,7 @@ end # Also called by DGMultiFluxDiff{<:GaussSBP} solvers. function rhs!(du, u, t, mesh, equations, boundary_conditions::BC, source_terms::Source, dg::DGMultiFluxDiff, cache) where {Source, BC} - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # this function evaluates the solution at volume and face quadrature points (which was previously # done in `prolong2interfaces` and `calc_volume_integral`) @@ -664,7 +664,7 @@ end function rhs!(du, u, t, mesh, equations, boundary_conditions::BC, source_terms::Source, dg::DGMultiFluxDiffSBP, cache) where {BC, Source} - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) @trixi_timeit timer() "volume integral" calc_volume_integral!(du, u, mesh, have_nonconservative_terms(equations), diff --git a/src/solvers/dgmulti/flux_differencing_gauss_sbp.jl b/src/solvers/dgmulti/flux_differencing_gauss_sbp.jl index f02d05e5a97..75e0b808afd 100644 --- a/src/solvers/dgmulti/flux_differencing_gauss_sbp.jl +++ b/src/solvers/dgmulti/flux_differencing_gauss_sbp.jl @@ -585,7 +585,7 @@ end function rhs!(du, u, t, mesh, equations, boundary_conditions::BC, source_terms::Source, dg::DGMultiFluxDiff{<:GaussSBP}, cache) where {Source, BC} - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # this function evaluates the solution at volume and face quadrature points (which was previously # done in `prolong2interfaces` and `calc_volume_integral`) diff --git a/src/solvers/dgsem_p4est/dg_2d_parabolic.jl b/src/solvers/dgsem_p4est/dg_2d_parabolic.jl index 778bccff717..4f46c4ebdc6 100644 --- a/src/solvers/dgsem_p4est/dg_2d_parabolic.jl +++ b/src/solvers/dgsem_p4est/dg_2d_parabolic.jl @@ -89,7 +89,7 @@ function rhs_parabolic!(du, u, t, mesh::Union{P4estMesh{2}, P4estMesh{3}}, # TODO: parabolic; reconsider current data structure reuse strategy # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin @@ -158,8 +158,8 @@ function calc_gradient!(gradients, u_transformed, t, # Reset du @trixi_timeit timer() "reset gradients" begin - reset_du!(gradients_x, dg, cache) - reset_du!(gradients_y, dg, cache) + set_zero!(gradients_x, dg, cache) + set_zero!(gradients_y, dg, cache) end # Calculate volume integral diff --git a/src/solvers/dgsem_p4est/dg_3d_parabolic.jl b/src/solvers/dgsem_p4est/dg_3d_parabolic.jl index bc4ac8f875b..9f811f38e59 100644 --- a/src/solvers/dgsem_p4est/dg_3d_parabolic.jl +++ b/src/solvers/dgsem_p4est/dg_3d_parabolic.jl @@ -35,9 +35,9 @@ function calc_gradient!(gradients, u_transformed, t, # Reset du @trixi_timeit timer() "reset gradients" begin - reset_du!(gradients_x, dg, cache) - reset_du!(gradients_y, dg, cache) - reset_du!(gradients_z, dg, cache) + set_zero!(gradients_x, dg, cache) + set_zero!(gradients_y, dg, cache) + set_zero!(gradients_z, dg, cache) end # Calculate volume integral diff --git a/src/solvers/dgsem_p4est/dg_3d_parallel.jl b/src/solvers/dgsem_p4est/dg_3d_parallel.jl index 5314beec7b8..1e485474941 100644 --- a/src/solvers/dgsem_p4est/dg_3d_parallel.jl +++ b/src/solvers/dgsem_p4est/dg_3d_parallel.jl @@ -29,7 +29,7 @@ function rhs!(du, u, t, end # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin diff --git a/src/solvers/dgsem_structured/dg.jl b/src/solvers/dgsem_structured/dg.jl index 6cc2791c27e..923f1ac18ba 100644 --- a/src/solvers/dgsem_structured/dg.jl +++ b/src/solvers/dgsem_structured/dg.jl @@ -40,7 +40,7 @@ function rhs!(du, u, t, boundary_conditions, source_terms::Source, dg::DG, cache) where {Source} # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin diff --git a/src/solvers/dgsem_tree/dg_1d_parabolic.jl b/src/solvers/dgsem_tree/dg_1d_parabolic.jl index b8fd31d37df..a6923611bb1 100644 --- a/src/solvers/dgsem_tree/dg_1d_parabolic.jl +++ b/src/solvers/dgsem_tree/dg_1d_parabolic.jl @@ -54,7 +54,7 @@ function rhs_parabolic!(du, u, t, mesh::TreeMesh{1}, # TODO: parabolic; reconsider current data structure reuse strategy # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin @@ -508,7 +508,7 @@ function calc_gradient!(gradients, u_transformed, t, mesh::TreeMesh{1}, # Reset du @trixi_timeit timer() "reset gradients" begin - reset_du!(gradients, dg, cache) + set_zero!(gradients, dg, cache) end # Calculate volume integral diff --git a/src/solvers/dgsem_tree/dg_2d.jl b/src/solvers/dgsem_tree/dg_2d.jl index 59f192ba266..cff154d6be3 100644 --- a/src/solvers/dgsem_tree/dg_2d.jl +++ b/src/solvers/dgsem_tree/dg_2d.jl @@ -111,7 +111,7 @@ function rhs!(du, u, t, boundary_conditions, source_terms::Source, dg::DG, cache) where {Source} # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin diff --git a/src/solvers/dgsem_tree/dg_2d_parabolic.jl b/src/solvers/dgsem_tree/dg_2d_parabolic.jl index cbbc8ea6593..67f44d594c4 100644 --- a/src/solvers/dgsem_tree/dg_2d_parabolic.jl +++ b/src/solvers/dgsem_tree/dg_2d_parabolic.jl @@ -54,7 +54,7 @@ function rhs_parabolic!(du, u, t, mesh::Union{TreeMesh{2}, TreeMesh{3}}, # TODO: parabolic; reconsider current data structure reuse strategy # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin @@ -906,8 +906,8 @@ function calc_gradient!(gradients, u_transformed, t, # Reset du @trixi_timeit timer() "reset gradients" begin - reset_du!(gradients_x, dg, cache) - reset_du!(gradients_y, dg, cache) + set_zero!(gradients_x, dg, cache) + set_zero!(gradients_y, dg, cache) end # Calculate volume integral diff --git a/src/solvers/dgsem_tree/dg_2d_parallel.jl b/src/solvers/dgsem_tree/dg_2d_parallel.jl index 381ca713d82..ab9e9b492da 100644 --- a/src/solvers/dgsem_tree/dg_2d_parallel.jl +++ b/src/solvers/dgsem_tree/dg_2d_parallel.jl @@ -472,7 +472,7 @@ function rhs!(du, u, t, end # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin diff --git a/src/solvers/dgsem_tree/dg_3d_parabolic.jl b/src/solvers/dgsem_tree/dg_3d_parabolic.jl index fa6f42561c5..747a34707af 100644 --- a/src/solvers/dgsem_tree/dg_3d_parabolic.jl +++ b/src/solvers/dgsem_tree/dg_3d_parabolic.jl @@ -1091,9 +1091,9 @@ function calc_gradient!(gradients, u_transformed, t, # Reset du @trixi_timeit timer() "reset gradients" begin - reset_du!(gradients_x, dg, cache) - reset_du!(gradients_y, dg, cache) - reset_du!(gradients_z, dg, cache) + set_zero!(gradients_x, dg, cache) + set_zero!(gradients_y, dg, cache) + set_zero!(gradients_z, dg, cache) end # Calculate volume integral diff --git a/src/solvers/dgsem_tree/subcell_limiters.jl b/src/solvers/dgsem_tree/subcell_limiters.jl index efbe2ab7304..31cd75c734f 100644 --- a/src/solvers/dgsem_tree/subcell_limiters.jl +++ b/src/solvers/dgsem_tree/subcell_limiters.jl @@ -263,8 +263,7 @@ function (limiter::SubcellLimiterIDP)(u, semi, equations, dg::DGSEM, t, dt; kwargs...) @unpack alpha = limiter.cache.subcell_limiter_coefficients - # TODO: Do not abuse `reset_du!` but maybe implement a generic `set_zero!` - @trixi_timeit timer() "reset alpha" reset_du!(alpha, dg, semi.cache) + @trixi_timeit timer() "reset alpha" set_zero!(alpha, dg, semi.cache) if limiter.local_twosided @trixi_timeit timer() "local twosided" idp_local_twosided!(alpha, limiter, diff --git a/src/solvers/dgsem_unstructured/dg_2d.jl b/src/solvers/dgsem_unstructured/dg_2d.jl index 1c785765d73..dc8f178a564 100644 --- a/src/solvers/dgsem_unstructured/dg_2d.jl +++ b/src/solvers/dgsem_unstructured/dg_2d.jl @@ -39,7 +39,7 @@ function rhs!(du, u, t, boundary_conditions, source_terms::Source, dg::DG, cache) where {Source} # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin diff --git a/src/solvers/solvers.jl b/src/solvers/solvers.jl index 9eb7bdfa0b2..8988a42bdab 100644 --- a/src/solvers/solvers.jl +++ b/src/solvers/solvers.jl @@ -6,7 +6,7 @@ #! format: noindent # Used by both `dg::DGSEM` and `dg::FDSBP` -function reset_du!(du, dg, cache) +function set_zero!(du, dg, cache) # du .= zero(eltype(du)) doesn't scale when using multiple threads. # See https://github.com/trixi-framework/Trixi.jl/pull/924 for a performance comparison. @threaded for element in eachelement(dg, cache) From 2b9f6e5f0cc2dcc01be081d6d35dc2bf998f1e86 Mon Sep 17 00:00:00 2001 From: Daniel_Doehring Date: Wed, 26 Nov 2025 15:49:47 +0100 Subject: [PATCH 2/2] fix --- src/solvers/dgsem_tree/dg_1d.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/solvers/dgsem_tree/dg_1d.jl b/src/solvers/dgsem_tree/dg_1d.jl index 7186587c40b..178bdb78a71 100644 --- a/src/solvers/dgsem_tree/dg_1d.jl +++ b/src/solvers/dgsem_tree/dg_1d.jl @@ -69,7 +69,7 @@ function rhs!(du, u, t, boundary_conditions, source_terms::Source, dg::DG, cache) where {Source} # Reset du - @trixi_timeit timer() "reset ∂u/∂t" reset_du!(du, dg, cache) + @trixi_timeit timer() "reset ∂u/∂t" set_zero!(du, dg, cache) # Calculate volume integral @trixi_timeit timer() "volume integral" begin