From 621df7e59046c4db1de85f38d30095aeafa09a8b Mon Sep 17 00:00:00 2001 From: bennibolm Date: Mon, 23 Mar 2026 12:11:59 +0100 Subject: [PATCH 1/4] Allow local limiting for nonperiodic TreeMeshes --- ...lixir_euler_sedov_blast_wave_sc_subcell.jl | 4 +- src/solvers/dgsem_tree/subcell_limiters_3d.jl | 93 +++++++++++++++++++ 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/examples/tree_3d_dgsem/elixir_euler_sedov_blast_wave_sc_subcell.jl b/examples/tree_3d_dgsem/elixir_euler_sedov_blast_wave_sc_subcell.jl index ead0b003e81..61452ce3174 100644 --- a/examples/tree_3d_dgsem/elixir_euler_sedov_blast_wave_sc_subcell.jl +++ b/examples/tree_3d_dgsem/elixir_euler_sedov_blast_wave_sc_subcell.jl @@ -59,11 +59,11 @@ coordinates_max = (1.0, 1.0, 1.0) mesh = TreeMesh(coordinates_min, coordinates_max, initial_refinement_level = 3, n_cells_max = 100_000, - periodicity = true) + periodicity = false) # create the semi discretization object semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver, - boundary_conditions = boundary_condition_periodic) + boundary_conditions = BoundaryConditionDirichlet(initial_condition)) ############################################################################### # ODE solvers, callbacks etc. diff --git a/src/solvers/dgsem_tree/subcell_limiters_3d.jl b/src/solvers/dgsem_tree/subcell_limiters_3d.jl index 5c8d6c06277..dea170f2eef 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_3d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_3d.jl @@ -68,6 +68,7 @@ end u, t, semi, mesh::TreeMesh3D, equations) _, _, dg, cache = mesh_equations_solver_cache(semi) + (; boundary_conditions) = semi # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) @@ -109,6 +110,52 @@ end end end + # Calc bounds at physical boundaries + for boundary in eachboundary(dg, cache) + element = cache.boundaries.neighbor_ids[boundary] + orientation = cache.boundaries.orientations[boundary] + neighbor_side = cache.boundaries.neighbor_sides[boundary] + + for j in eachnode(dg), i in eachnode(dg) + # Define node indices and boundary index based on the orientation and neighbor_side + if neighbor_side == 2 # Element is on the right, boundary on the left + if orientation == 1 # boundary in x-direction + node_index = (1, i, j) + boundary_index = 1 + elseif orientation == 2 # boundary in y-direction + node_index = (i, 1, j) + boundary_index = 3 + else # orientation == 3 # boundary in z-direction + node_index = (i, j, 1) + boundary_index = 5 + end + else # Element is on the left, boundary on the right + if orientation == 1 # boundary in x-direction + node_index = (nnodes(dg), i, j) + boundary_index = 2 + elseif orientation == 2 # boundary in y-direction + node_index = (i, nnodes(dg), j) + boundary_index = 4 + else # orientation == 3 # boundary in z-direction + node_index = (i, j, nnodes(dg)) + boundary_index = 6 + end + end + u_inner = get_node_vars(u, equations, dg, node_index..., element) + u_outer = get_boundary_outer_state(u_inner, t, + boundary_conditions[boundary_index], + orientation, boundary_index, + mesh, equations, dg, cache, + node_index..., element) + var_outer = u_outer[variable] + + var_min[node_index..., element] = min(var_min[node_index..., element], + var_outer) + var_max[node_index..., element] = max(var_max[node_index..., element], + var_outer) + end + end + return nothing end @@ -171,6 +218,7 @@ end @inline function calc_bounds_onesided_interface!(var_minmax, min_or_max, variable, u, t, semi, mesh::TreeMesh{3}) _, equations, dg, cache = mesh_equations_solver_cache(semi) + (; boundary_conditions) = semi # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) @@ -211,6 +259,51 @@ end end end + # Calc bounds at physical boundaries + for boundary in eachboundary(dg, cache) + element = cache.boundaries.neighbor_ids[boundary] + orientation = cache.boundaries.orientations[boundary] + neighbor_side = cache.boundaries.neighbor_sides[boundary] + + for j in eachnode(dg), i in eachnode(dg) + # Define node indices and boundary index based on the orientation and neighbor_side + if neighbor_side == 2 # Element is on the right, boundary on the left + if orientation == 1 # boundary in x-direction + node_index = (1, i, j) + boundary_index = 1 + elseif orientation == 2 # boundary in y-direction + node_index = (i, 1, j) + boundary_index = 3 + else # orientation == 3 # boundary in z-direction + node_index = (i, j, 1) + boundary_index = 5 + end + else # Element is on the left, boundary on the right + if orientation == 1 # boundary in x-direction + node_index = (nnodes(dg), i, j) + boundary_index = 2 + elseif orientation == 2 # boundary in y-direction + node_index = (i, nnodes(dg), j) + boundary_index = 4 + else # orientation == 3 # boundary in z-direction + node_index = (i, j, nnodes(dg)) + boundary_index = 6 + end + end + u_inner = get_node_vars(u, equations, dg, node_index..., element) + u_outer = get_boundary_outer_state(u_inner, t, + boundary_conditions[boundary_index], + orientation, boundary_index, + mesh, equations, dg, cache, + node_index..., element) + var_outer = variable(u_outer, equations) + + var_minmax[node_index..., element] = min_or_max(var_minmax[node_index..., + element], + var_outer) + end + end + return nothing end From ece9345eccb0c79716f30fc0a5c6ee68c6d28ab6 Mon Sep 17 00:00:00 2001 From: bennibolm Date: Mon, 30 Mar 2026 17:03:19 +0200 Subject: [PATCH 2/4] Introduce `calc_bounds_one/twosided_boundary` for Structured and TreeMesh --- .../dgsem_p4est/subcell_limiters_2d.jl | 19 +------- .../dgsem_p4est/subcell_limiters_3d.jl | 18 +------- .../dgsem_structured/subcell_limiters_2d.jl | 38 +++++++++++---- src/solvers/dgsem_tree/subcell_limiters_2d.jl | 46 ++++++++++++++++++- src/solvers/dgsem_tree/subcell_limiters_3d.jl | 26 ++++++++++- 5 files changed, 100 insertions(+), 47 deletions(-) diff --git a/src/solvers/dgsem_p4est/subcell_limiters_2d.jl b/src/solvers/dgsem_p4est/subcell_limiters_2d.jl index d42b63789b1..214773f42c2 100644 --- a/src/solvers/dgsem_p4est/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_p4est/subcell_limiters_2d.jl @@ -8,7 +8,6 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, u, t, semi, mesh::P4estMesh{2}, equations) _, _, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi (; neighbor_ids, node_indices) = cache.interfaces index_range = eachnode(dg) @@ -69,6 +68,7 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, end # Calc bounds at physical boundaries + (; boundary_conditions) = semi calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh, equations, dg, cache) @@ -76,13 +76,6 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, return nothing end -@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::P4estMesh{2}, - equations, dg, cache) - return nothing -end - @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::P4estMesh{2}, @@ -136,11 +129,9 @@ end function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, semi, mesh::P4estMesh{2}) _, equations, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi (; neighbor_ids, node_indices) = cache.interfaces index_range = eachnode(dg) - index_end = last(index_range) # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) @@ -192,6 +183,7 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem end # Calc bounds at physical boundaries + (; boundary_conditions) = semi calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh, equations, dg, cache) @@ -199,13 +191,6 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem return nothing end -@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::P4estMesh{2}, - equations, dg, cache) - return nothing -end - @inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh::P4estMesh{2}, diff --git a/src/solvers/dgsem_p4est/subcell_limiters_3d.jl b/src/solvers/dgsem_p4est/subcell_limiters_3d.jl index 4b5d3f1a0ce..89df35a54f1 100644 --- a/src/solvers/dgsem_p4est/subcell_limiters_3d.jl +++ b/src/solvers/dgsem_p4est/subcell_limiters_3d.jl @@ -8,7 +8,6 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, u, t, semi, mesh::P4estMesh{3}, equations) _, _, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi (; neighbor_ids, node_indices) = cache.interfaces index_range = eachnode(dg) @@ -96,6 +95,7 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, end # Calc bounds at physical boundaries + (; boundary_conditions) = semi calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh, equations, dg, cache) @@ -103,13 +103,6 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, return nothing end -@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::P4estMesh{3}, - equations, dg, cache) - return nothing -end - @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::P4estMesh{3}, @@ -180,7 +173,6 @@ end function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, semi, mesh::P4estMesh{3}) _, equations, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi (; neighbor_ids, node_indices) = cache.interfaces index_range = eachnode(dg) @@ -260,6 +252,7 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem end # Calc bounds at physical boundaries + (; boundary_conditions) = semi calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh, equations, dg, cache) @@ -267,13 +260,6 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem return nothing end -@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::P4estMesh{3}, - equations, dg, cache) - return nothing -end - @inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh::P4estMesh{3}, diff --git a/src/solvers/dgsem_structured/subcell_limiters_2d.jl b/src/solvers/dgsem_structured/subcell_limiters_2d.jl index 4be1993bdbe..d02c450ebe7 100644 --- a/src/solvers/dgsem_structured/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_structured/subcell_limiters_2d.jl @@ -8,8 +8,6 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, u, t, semi, mesh::StructuredMesh{2}, equations) _, _, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi - (; contravariant_vectors) = cache.elements # Calc bounds at interfaces and periodic boundaries for element in eachelement(dg, cache) @@ -48,9 +46,20 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, end # Calc bounds at physical boundaries - if isperiodic(mesh) - return nothing - end + (; boundary_conditions) = semi + calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions, + mesh, equations, dg, cache) + + return nothing +end + +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions, + mesh::StructuredMesh{2}, + equations, dg, cache) + (; contravariant_vectors) = cache.elements + linear_indices = LinearIndices(size(mesh)) if !isperiodic(mesh, 1) # - xi direction @@ -135,8 +144,6 @@ end function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, semi, mesh::StructuredMesh{2}) _, equations, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi - (; contravariant_vectors) = cache.elements # Calc bounds at interfaces and periodic boundaries for element in eachelement(dg, cache) @@ -172,9 +179,20 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem end # Calc bounds at physical boundaries - if isperiodic(mesh) - return nothing - end + (; boundary_conditions) = semi + calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, + boundary_conditions, + mesh, equations, dg, cache) + + return nothing +end + +@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, + boundary_conditions, + mesh::StructuredMesh{2}, + equations, dg, cache) + (; contravariant_vectors) = cache.elements + linear_indices = LinearIndices(size(mesh)) if !isperiodic(mesh, 1) # - xi direction diff --git a/src/solvers/dgsem_tree/subcell_limiters_2d.jl b/src/solvers/dgsem_tree/subcell_limiters_2d.jl index 2d041ce65ad..09d1e28ffeb 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_2d.jl @@ -57,7 +57,7 @@ end u, t, semi, mesh::TreeMesh2D, equations) _, _, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi + # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) # Get neighboring element ids @@ -93,6 +93,27 @@ end end # Calc bounds at physical boundaries + (; boundary_conditions) = semi + calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions, + mesh, equations, dg, cache) + + return nothing +end + +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::Union{TreeMesh{2}, TreeMesh{3}, + StructuredMesh{2}, + P4estMesh{2}, P4estMesh{3}}, + equations, dg, cache) + return nothing +end + +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions, + mesh::TreeMesh{2}, equations, + dg, cache) for boundary in eachboundary(dg, cache) element = cache.boundaries.neighbor_ids[boundary] orientation = cache.boundaries.orientations[boundary] @@ -179,7 +200,7 @@ end @inline function calc_bounds_onesided_interface!(var_minmax, min_or_max, variable, u, t, semi, mesh::TreeMesh2D) _, equations, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi + # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) # Get neighboring element ids @@ -214,6 +235,27 @@ end end # Calc bounds at physical boundaries + (; boundary_conditions) = semi + calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, + boundary_conditions, + mesh, equations, dg, cache) + + return nothing +end + +@inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::Union{TreeMesh{2}, TreeMesh{3}, + StructuredMesh{2}, + P4estMesh{2}, P4estMesh{3}}, + equations, dg, cache) + return nothing +end + +@inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, + boundary_conditions, + mesh::TreeMesh{2}, equations, + dg, cache) for boundary in eachboundary(dg, cache) element = cache.boundaries.neighbor_ids[boundary] orientation = cache.boundaries.orientations[boundary] diff --git a/src/solvers/dgsem_tree/subcell_limiters_3d.jl b/src/solvers/dgsem_tree/subcell_limiters_3d.jl index dea170f2eef..1b19bef53b3 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_3d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_3d.jl @@ -68,7 +68,6 @@ end u, t, semi, mesh::TreeMesh3D, equations) _, _, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) @@ -111,6 +110,18 @@ end end # Calc bounds at physical boundaries + (; boundary_conditions) = semi + calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions, + mesh, equations, dg, cache) + + return nothing +end + +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, + u, t, boundary_conditions, + mesh::TreeMesh{3}, equations, + dg, cache) for boundary in eachboundary(dg, cache) element = cache.boundaries.neighbor_ids[boundary] orientation = cache.boundaries.orientations[boundary] @@ -218,7 +229,6 @@ end @inline function calc_bounds_onesided_interface!(var_minmax, min_or_max, variable, u, t, semi, mesh::TreeMesh{3}) _, equations, dg, cache = mesh_equations_solver_cache(semi) - (; boundary_conditions) = semi # Calc bounds at interfaces and periodic boundaries for interface in eachinterface(dg, cache) @@ -260,6 +270,18 @@ end end # Calc bounds at physical boundaries + (; boundary_conditions) = semi + calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, + boundary_conditions, + mesh, equations, dg, cache) + + return nothing +end + +@inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, + u, t, boundary_conditions, + mesh::TreeMesh{3}, equations, + dg, cache) for boundary in eachboundary(dg, cache) element = cache.boundaries.neighbor_ids[boundary] orientation = cache.boundaries.orientations[boundary] From a2056b3179151d9afe7791d97e41f9e72ea6e6d9 Mon Sep 17 00:00:00 2001 From: bennibolm Date: Tue, 31 Mar 2026 09:59:51 +0200 Subject: [PATCH 3/4] Fix ambiguity --- src/solvers/dgsem_p4est/subcell_limiters_2d.jl | 14 ++++++++++++++ src/solvers/dgsem_p4est/subcell_limiters_3d.jl | 14 ++++++++++++++ .../dgsem_structured/subcell_limiters_2d.jl | 14 ++++++++++++++ src/solvers/dgsem_tree/subcell_limiters_2d.jl | 12 ++++-------- src/solvers/dgsem_tree/subcell_limiters_3d.jl | 16 ++++++++++++++++ 5 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/solvers/dgsem_p4est/subcell_limiters_2d.jl b/src/solvers/dgsem_p4est/subcell_limiters_2d.jl index 214773f42c2..51a9a823d2d 100644 --- a/src/solvers/dgsem_p4est/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_p4est/subcell_limiters_2d.jl @@ -76,6 +76,13 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, return nothing end +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::P4estMesh{2}, + equations, dg, cache) + return nothing +end + @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::P4estMesh{2}, @@ -191,6 +198,13 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem return nothing end +@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::P4estMesh{2}, + equations, dg, cache) + return nothing +end + @inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh::P4estMesh{2}, diff --git a/src/solvers/dgsem_p4est/subcell_limiters_3d.jl b/src/solvers/dgsem_p4est/subcell_limiters_3d.jl index 89df35a54f1..fefc3fbbbdc 100644 --- a/src/solvers/dgsem_p4est/subcell_limiters_3d.jl +++ b/src/solvers/dgsem_p4est/subcell_limiters_3d.jl @@ -103,6 +103,13 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, return nothing end +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::P4estMesh{3}, + equations, dg, cache) + return nothing +end + @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::P4estMesh{3}, @@ -260,6 +267,13 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem return nothing end +@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::P4estMesh{3}, + equations, dg, cache) + return nothing +end + @inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh::P4estMesh{3}, diff --git a/src/solvers/dgsem_structured/subcell_limiters_2d.jl b/src/solvers/dgsem_structured/subcell_limiters_2d.jl index d02c450ebe7..0623250009e 100644 --- a/src/solvers/dgsem_structured/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_structured/subcell_limiters_2d.jl @@ -54,6 +54,13 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, return nothing end +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::StructuredMesh{2}, + equations, dg, cache) + return nothing +end + @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::StructuredMesh{2}, @@ -187,6 +194,13 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem return nothing end +@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::StructuredMesh{2}, + equations, dg, cache) + return nothing +end + @inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh::StructuredMesh{2}, diff --git a/src/solvers/dgsem_tree/subcell_limiters_2d.jl b/src/solvers/dgsem_tree/subcell_limiters_2d.jl index 09d1e28ffeb..e1934e10dfb 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_2d.jl @@ -103,10 +103,8 @@ end @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions::BoundaryConditionPeriodic, - mesh::Union{TreeMesh{2}, TreeMesh{3}, - StructuredMesh{2}, - P4estMesh{2}, P4estMesh{3}}, - equations, dg, cache) + mesh::TreeMesh{2}, equations, + dg, cache) return nothing end @@ -245,10 +243,8 @@ end @inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, boundary_conditions::BoundaryConditionPeriodic, - mesh::Union{TreeMesh{2}, TreeMesh{3}, - StructuredMesh{2}, - P4estMesh{2}, P4estMesh{3}}, - equations, dg, cache) + mesh::TreeMesh{2}, equations, + dg, cache) return nothing end diff --git a/src/solvers/dgsem_tree/subcell_limiters_3d.jl b/src/solvers/dgsem_tree/subcell_limiters_3d.jl index 1b19bef53b3..ffe5996d6cd 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_3d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_3d.jl @@ -118,6 +118,14 @@ end return nothing end +@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, + u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::TreeMesh{3}, equations, + dg, cache) + return nothing +end + @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::TreeMesh{3}, equations, @@ -278,6 +286,14 @@ end return nothing end +@inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, + u, t, + boundary_conditions::BoundaryConditionPeriodic, + mesh::TreeMesh{3}, equations, + dg, cache) + return nothing +end + @inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, boundary_conditions, mesh::TreeMesh{3}, equations, From 12f72d661afebd41d77a56c4fe54de18ae61c7f2 Mon Sep 17 00:00:00 2001 From: bennibolm Date: Tue, 7 Apr 2026 13:51:21 +0200 Subject: [PATCH 4/4] Remove empty functions for StructuredMesh and TreeMesh --- .../dgsem_structured/subcell_limiters_2d.jl | 20 ++++++------------- src/solvers/dgsem_tree/subcell_limiters_2d.jl | 14 ------------- src/solvers/dgsem_tree/subcell_limiters_3d.jl | 16 --------------- 3 files changed, 6 insertions(+), 44 deletions(-) diff --git a/src/solvers/dgsem_structured/subcell_limiters_2d.jl b/src/solvers/dgsem_structured/subcell_limiters_2d.jl index 0623250009e..f0a6b4c6d54 100644 --- a/src/solvers/dgsem_structured/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_structured/subcell_limiters_2d.jl @@ -54,17 +54,13 @@ function calc_bounds_twosided_interface!(var_min, var_max, variable, return nothing end -@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::StructuredMesh{2}, - equations, dg, cache) - return nothing -end - @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::StructuredMesh{2}, equations, dg, cache) + if isperiodic(mesh) + return nothing + end (; contravariant_vectors) = cache.elements linear_indices = LinearIndices(size(mesh)) @@ -194,17 +190,13 @@ function calc_bounds_onesided_interface!(var_minmax, minmax, variable, u, t, sem return nothing end -@inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::StructuredMesh{2}, - equations, dg, cache) - return nothing -end - @inline function calc_bounds_onesided_boundary!(var_minmax, minmax, variable, u, t, boundary_conditions, mesh::StructuredMesh{2}, equations, dg, cache) + if isperiodic(mesh) + return nothing + end (; contravariant_vectors) = cache.elements linear_indices = LinearIndices(size(mesh)) diff --git a/src/solvers/dgsem_tree/subcell_limiters_2d.jl b/src/solvers/dgsem_tree/subcell_limiters_2d.jl index e1934e10dfb..40a9bfe6e1d 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_2d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_2d.jl @@ -101,13 +101,6 @@ end return nothing end -@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::TreeMesh{2}, equations, - dg, cache) - return nothing -end - @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::TreeMesh{2}, equations, @@ -241,13 +234,6 @@ end return nothing end -@inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::TreeMesh{2}, equations, - dg, cache) - return nothing -end - @inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, boundary_conditions, mesh::TreeMesh{2}, equations, diff --git a/src/solvers/dgsem_tree/subcell_limiters_3d.jl b/src/solvers/dgsem_tree/subcell_limiters_3d.jl index ffe5996d6cd..1b19bef53b3 100644 --- a/src/solvers/dgsem_tree/subcell_limiters_3d.jl +++ b/src/solvers/dgsem_tree/subcell_limiters_3d.jl @@ -118,14 +118,6 @@ end return nothing end -@inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, - u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::TreeMesh{3}, equations, - dg, cache) - return nothing -end - @inline function calc_bounds_twosided_boundary!(var_min, var_max, variable, u, t, boundary_conditions, mesh::TreeMesh{3}, equations, @@ -286,14 +278,6 @@ end return nothing end -@inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, - u, t, - boundary_conditions::BoundaryConditionPeriodic, - mesh::TreeMesh{3}, equations, - dg, cache) - return nothing -end - @inline function calc_bounds_onesided_boundary!(var_minmax, min_or_max, variable, u, t, boundary_conditions, mesh::TreeMesh{3}, equations,