Skip to content

Commit 693f963

Browse files
committed
also handle overset grid with ragged array
1 parent cb6f022 commit 693f963

2 files changed

Lines changed: 16 additions & 4 deletions

File tree

src/semidiscretization/semidiscretization.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,14 @@ and simple second order finite difference to compute the Jacobian `J`
245245
of the semidiscretization `semi` at state `u0_ode`.
246246
"""
247247

248-
# Iterate over all indices of `u` while handling ragged VectorOfArray inputs.
249-
function fd_indices(u)
250-
return Iterators.flatten((((idx.I..., element) for idx in CartesianIndices(arr))
251-
for (element, arr) in enumerate(u.u)))
248+
# Iterate over all indices of `u`, handling nested VectorOfArray inputs with ragged
249+
# inner dimensions. Each outer VectorOfArray level adds one trailing index.
250+
# Designed to work for both usual DG and overset grid DG methods with
251+
# potentially different nodes per element.
252+
fd_indices(u) = (idx.I for idx in CartesianIndices(u))
253+
function fd_indices(u::VectorOfArray)
254+
Iterators.flatten((((inner..., outer) for inner in fd_indices(arr))
255+
for (outer, arr) in enumerate(u.u)))
252256
end
253257

254258
function jacobian_fd(semi;

test/test_unit.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,14 @@ end
291291
@test count(real.(eigvals(J)) .> 1e-7) == 10
292292
@test maximum(real, eigvals(J)) < 1e-3
293293

294+
trixi_include(@__MODULE__,
295+
joinpath(EXAMPLES_DIR_ADVECTION,
296+
"linear_advection_overset_grid_per_element.jl"),
297+
tspan = (0.0, 0.01))
298+
J = @test_nowarn jacobian_fd(semi)
299+
# This is stable
300+
@test maximum(real, eigvals(J)) < 1e-7
301+
294302
trixi_include(@__MODULE__, joinpath(EXAMPLES_DIR_MAXWELL, "maxwell_overset_grid.jl"),
295303
tspan = (0.0, 0.01))
296304
J = @test_nowarn jacobian_fd(semi)

0 commit comments

Comments
 (0)