Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: Automatically finalize t8code objects when Trixi.jl shuts down #2172

Merged
merged 50 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
d28ad00
Fixing shutodnwo order issue with t8code.
Nov 19, 2024
c548020
Applied formatter.
Nov 19, 2024
8ec51b9
Update src/auxiliary/t8code.jl
jmark Nov 19, 2024
1fba953
Update src/auxiliary/t8code.jl
jmark Nov 19, 2024
14f55ae
Merge branch 'fix-t8code-finalize-before-shutdown' of github.com:trix…
Nov 20, 2024
585f886
Extending to MPI support.
Nov 21, 2024
04ef9a3
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Nov 21, 2024
4449e00
Outsourcing t8code clean up logic to T8code.jl.
Nov 21, 2024
4720b90
Merge branch 'fix-t8code-finalize-before-shutdown' of github.com:trix…
Nov 21, 2024
088f985
Bumping t8code.jl version.
Nov 22, 2024
e8f6f62
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Nov 22, 2024
ff192ee
Merge branch 'main' into fix-t8code-finalize-before-shutdown
JoshuaLampert Nov 24, 2024
07c7f70
Refining code with new ForestWrapper.
Nov 25, 2024
73025f9
Adding new tests.
Nov 25, 2024
15f81c8
Applied formatter.
Nov 25, 2024
7595082
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Nov 25, 2024
2fd6c3d
Fixed typo.
Nov 25, 2024
eb4476c
Merge branch 'main' into fix-t8code-finalize-before-shutdown
Nov 27, 2024
ce6c797
Fixing type method dispatch error.
Nov 27, 2024
5376c9d
Added dummy variable to test.
Nov 27, 2024
bfac5c8
Fixed typo.
Nov 27, 2024
36fa246
Updating function calls.
Nov 27, 2024
7b2af6c
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Nov 27, 2024
12d25e6
Removed unknown variable.
Nov 27, 2024
694afa4
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
bac9e9f
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
76fafd4
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
85268f0
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
c26b3fc
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
a5fa2b9
Update src/solvers/dgsem_t8code/containers_2d.jl
jmark Nov 27, 2024
45ce9d4
Update src/solvers/dgsem_t8code/containers_2d.jl
jmark Nov 27, 2024
a5fd170
Update src/solvers/dgsem_t8code/containers_3d.jl
jmark Nov 27, 2024
ad529b8
Update src/solvers/dgsem_t8code/containers_3d.jl
jmark Nov 27, 2024
aca550b
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
f179819
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
d6328ce
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
9ad676a
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
517df58
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
154aa98
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
c2a970d
Update src/meshes/t8code_mesh.jl
jmark Nov 27, 2024
667c5eb
Disabling test.
Nov 27, 2024
3136c61
Deleted failing forest wrapper test since it leads to segfaults in th…
Nov 27, 2024
ab4f4fb
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Nov 27, 2024
6bb21f9
Removing ForestWrapper test alltogether.
Nov 28, 2024
115f89a
Merge branch 'fix-t8code-finalize-before-shutdown' of github.com:trix…
Nov 28, 2024
80ce7cf
Update test/runtests.jl
jmark Dec 2, 2024
5af65fb
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Dec 2, 2024
e9be3f6
Merge branch 'main' into fix-t8code-finalize-before-shutdown
ranocha Dec 2, 2024
38c2d73
Merge branch 'main' into fix-t8code-finalize-before-shutdown
jmark Dec 3, 2024
5458fb8
Merge branch 'main' into fix-t8code-finalize-before-shutdown
sloede Dec 3, 2024
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
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ jobs:
- p4est_part2
- t8code_part1
- t8code_part2
- t8code_part3
- unstructured_dgmulti
- parabolic
- paper_self_gravitating_gas_dynamics
Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ StaticArrays = "1.5"
StrideArrays = "0.1.26"
StructArrays = "0.6.11"
SummationByPartsOperators = "0.5.41"
T8code = "0.7"
T8code = "0.7.2"
TimerOutputs = "0.5.7"
Triangulate = "2.2"
TriplotBase = "0.1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
save_everystep = false, callback = callbacks);

summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_advection_basic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
5 changes: 0 additions & 5 deletions examples/t8code_2d_dgsem/elixir_advection_extended.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

using OrdinaryDiffEq
using Trixi

Expand Down Expand Up @@ -83,7 +82,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
5 changes: 0 additions & 5 deletions examples/t8code_2d_dgsem/elixir_advection_restart.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

using OrdinaryDiffEq
using Trixi

Expand Down Expand Up @@ -41,7 +40,3 @@ load_timestep!(integrator, restart_filename)

sol = solve!(integrator)
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
5 changes: 0 additions & 5 deletions examples/t8code_2d_dgsem/elixir_advection_restart_amr.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

using OrdinaryDiffEq
using Trixi

Expand Down Expand Up @@ -60,7 +59,3 @@ load_timestep!(integrator, restart_filename)

sol = solve!(integrator)
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary.
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_euler_free_stream.jl
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_euler_sedov.jl
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_euler_shockcapturing_ec.jl
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
5 changes: 0 additions & 5 deletions examples/t8code_2d_dgsem/elixir_euler_weak_blast_wave_amr.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

using OrdinaryDiffEq
using Trixi

Expand Down Expand Up @@ -108,7 +107,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);#, maxiters=4);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_eulergravity_convergence.jl
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary
println("Number of gravity subcycles: ", semi.gravity_counter.ncalls_since_readout)

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_mhd_alfven_wave.jl
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_mhd_rotor.jl
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_2d_dgsem/elixir_shallowwater_source_terms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,3 @@ callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback, sav
sol = solve(ode, RDPK3SpFSAL49(); abstol = 1.0e-8, reltol = 1.0e-8,
ode_default_options()..., callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_advection_amr.jl
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_advection_basic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_advection_nonconforming.jl
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_advection_restart.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,3 @@ load_timestep!(integrator, restart_filename)

sol = solve!(integrator)
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),

# Print the timer summary
summary_callback()

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_euler_ec.jl
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_euler_free_stream.jl
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_euler_free_stream_extruded.jl
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false), #maxiters=1
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
4 changes: 0 additions & 4 deletions examples/t8code_3d_dgsem/elixir_euler_sedov.jl
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
5 changes: 0 additions & 5 deletions examples/t8code_3d_dgsem/elixir_euler_weak_blast_wave_amr.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

using OrdinaryDiffEq
using Trixi

Expand Down Expand Up @@ -110,7 +109,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# Finalize `T8codeMesh` to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh)
5 changes: 0 additions & 5 deletions examples/tree_3d_dgsem/elixir_euler_convergence_pure_fv.jl
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,3 @@ sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep = false, callback = callbacks);
summary_callback() # print the timer summary

# This elixir is also tested with `T8codeMesh` which needs to be finalized
# explicitly. Call finalize to make sure MPI related objects in t8code are
# released before `MPI` finalizes.
!isinteractive() && finalize(mesh);
10 changes: 6 additions & 4 deletions src/auxiliary/t8code.jl
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ function init_t8code()
T8code.Libt8.p4est_init(C_NULL, LOG_LEVEL)
end

# Clean up t8code before MPI shuts down.
MPI.add_finalize_hook!() do
T8code.clean_up()
jmark marked this conversation as resolved.
Show resolved Hide resolved
status = T8code.Libt8.sc_finalize_noabort()
if status != 0
@warn("Inconsistent state detected after finalizing t8code. Have you finalized all `T8codeMesh` objects and/or properly freed/un-referenced all t8code related objects?")
@warn("Inconsistent state detected after finalizing t8code.")
end
end

Expand Down Expand Up @@ -96,8 +98,8 @@ end
# \return greater zero if the first entry in `elements` should be refined,
# smaller zero if the family `elements` shall be coarsened,
# zero else.
function adapt_callback(forest,
forest_from,
function adapt_callback(forest::Ptr{t8_forest},
forest_from::Ptr{t8_forest},
which_tree,
lelement_id,
ts,
Expand Down Expand Up @@ -189,7 +191,7 @@ function trixi_t8_adapt!(mesh, indicators)

differences = trixi_t8_get_difference(old_levels, new_levels, 2^ndims(mesh))

mesh.forest = forest_cached
update_forest!(mesh, forest_cached)

return differences
end
Loading
Loading