Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 27 additions & 20 deletions src/solvers/dgsem_tree/subcell_limiters_2d.jl
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,33 @@
mesh, _, dg, cache = mesh_equations_solver_cache(semi)
# Calc bounds inside elements
@threaded for element in eachelement(dg, cache)
var_min[:, :, element] .= typemax(eltype(var_min))
var_max[:, :, element] .= typemin(eltype(var_max))
# Calculate bounds at Gauss-Lobatto nodes using u
# Calculate bounds at Gauss-Lobatto nodes
for j in eachnode(dg), i in eachnode(dg)
var = u[variable, i, j, element]
var_min[i, j, element] = var
var_max[i, j, element] = var
end

# Apply values in x direction
for j in eachnode(dg), i in 2:nnodes(dg)
var = u[variable, i - 1, j, element]
var_min[i, j, element] = min(var_min[i, j, element], var)
var_max[i, j, element] = max(var_max[i, j, element], var)

if i > 1
var_min[i - 1, j, element] = min(var_min[i - 1, j, element], var)
var_max[i - 1, j, element] = max(var_max[i - 1, j, element], var)
end
if i < nnodes(dg)
var_min[i + 1, j, element] = min(var_min[i + 1, j, element], var)
var_max[i + 1, j, element] = max(var_max[i + 1, j, element], var)
end
if j > 1
var_min[i, j - 1, element] = min(var_min[i, j - 1, element], var)
var_max[i, j - 1, element] = max(var_max[i, j - 1, element], var)
end
if j < nnodes(dg)
var_min[i, j + 1, element] = min(var_min[i, j + 1, element], var)
var_max[i, j + 1, element] = max(var_max[i, j + 1, element], var)
end
var = u[variable, i, j, element]
var_min[i - 1, j, element] = min(var_min[i - 1, j, element], var)
var_max[i - 1, j, element] = max(var_max[i - 1, j, element], var)
end

# Apply values in y direction
for j in 2:nnodes(dg), i in eachnode(dg)
var = u[variable, i, j - 1, element]
var_min[i, j, element] = min(var_min[i, j, element], var)
var_max[i, j, element] = max(var_max[i, j, element], var)

var = u[variable, i, j, element]
var_min[i, j - 1, element] = min(var_min[i, j - 1, element], var)
var_max[i, j - 1, element] = max(var_max[i, j - 1, element], var)
end
end

Expand Down Expand Up @@ -120,6 +123,10 @@ end
@inline function calc_bounds_onesided!(var_minmax, min_or_max, variable,
u::AbstractArray{<:Any, 4}, t, semi)
mesh, equations, dg, cache = mesh_equations_solver_cache(semi)

# The approach used in `calc_bounds_twosided!` is not used here because it requires more
# evaluations of the variable and is therefore slower.

# Calc bounds inside elements
@threaded for element in eachelement(dg, cache)
# Reset bounds
Expand All @@ -131,7 +138,7 @@ end
end
end

# Calculate bounds at Gauss-Lobatto nodes using u
# Calculate bounds at Gauss-Lobatto nodes
for j in eachnode(dg), i in eachnode(dg)
var = variable(get_node_vars(u, equations, dg, i, j, element), equations)
var_minmax[i, j, element] = min_or_max(var_minmax[i, j, element], var)
Expand Down
Loading