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

Initialize p4est and t8code only if possible #1745

Merged
merged 3 commits into from
Nov 21, 2023
Merged
Show file tree
Hide file tree
Changes from 2 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
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Makie = "0.19"
MuladdMacro = "0.2.2"
Octavian = "0.3.5"
OffsetArrays = "1.3"
P4est = "0.4"
P4est = "0.4.9"
Polyester = "0.7.5"
PrecompileTools = "1.1"
Printf = "1"
Expand All @@ -84,7 +84,7 @@ StaticArrays = "1"
StrideArrays = "0.1.18"
StructArrays = "0.6"
SummationByPartsOperators = "0.5.41"
T8code = "0.4.1"
T8code = "0.4.3"
TimerOutputs = "0.5"
Triangulate = "2.0"
TriplotBase = "0.1"
Expand Down
15 changes: 9 additions & 6 deletions src/auxiliary/p4est.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,17 @@ This function will check if `p4est` is already initialized
and if yes, do nothing, thus it is safe to call it multiple times.
"""
function init_p4est()
p4est_package_id = P4est.package_id()
if p4est_package_id >= 0
return nothing
# Only initialize p4est if P4est.jl can be used
if P4est.preferences_set_correctly()
ranocha marked this conversation as resolved.
Show resolved Hide resolved
p4est_package_id = P4est.package_id()
if p4est_package_id >= 0
return nothing
end

# Initialize `p4est` with log level ERROR to prevent a lot of output in AMR simulations
p4est_init(C_NULL, SC_LP_ERROR)
end

# Initialize `p4est` with log level ERROR to prevent a lot of output in AMR simulations
p4est_init(C_NULL, SC_LP_ERROR)

return nothing
end

Expand Down
53 changes: 28 additions & 25 deletions src/auxiliary/t8code.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,37 @@ is already initialized and if yes, do nothing, thus it is safe to call it
multiple times.
"""
function init_t8code()
t8code_package_id = t8_get_package_id()
if t8code_package_id >= 0
return nothing
end
# Only initialize t8code if T8code.jl can be used
if T8code.preferences_set_correctly()
ranocha marked this conversation as resolved.
Show resolved Hide resolved
t8code_package_id = t8_get_package_id()
if t8code_package_id >= 0
return nothing
end

# Initialize the sc library, has to happen before we initialize t8code.
let catch_signals = 0, print_backtrace = 0, log_handler = C_NULL
T8code.Libt8.sc_init(mpi_comm(), catch_signals, print_backtrace, log_handler,
T8code.Libt8.SC_LP_ERROR)
end
# Initialize the sc library, has to happen before we initialize t8code.
let catch_signals = 0, print_backtrace = 0, log_handler = C_NULL
T8code.Libt8.sc_init(mpi_comm(), catch_signals, print_backtrace, log_handler,
T8code.Libt8.SC_LP_ERROR)
end

if T8code.Libt8.p4est_is_initialized() == 0
# Initialize `p4est` with log level ERROR to prevent a lot of output in AMR simulations
T8code.Libt8.p4est_init(C_NULL, T8code.Libt8.SC_LP_ERROR)
end
if T8code.Libt8.p4est_is_initialized() == 0
# Initialize `p4est` with log level ERROR to prevent a lot of output in AMR simulations
T8code.Libt8.p4est_init(C_NULL, T8code.Libt8.SC_LP_ERROR)
end

# Initialize t8code with log level ERROR to prevent a lot of output in AMR simulations.
t8_init(T8code.Libt8.SC_LP_ERROR)

if haskey(ENV, "TRIXI_T8CODE_SC_FINALIZE")
# Normally, `sc_finalize` should always be called during shutdown of an
# application. It checks whether there is still un-freed memory by t8code
# and/or T8code.jl and throws an exception if this is the case. For
# production runs this is not mandatory, but is helpful during
# development. Hence, this option is only activated when environment
# variable TRIXI_T8CODE_SC_FINALIZE exists.
@warn "T8code.jl: sc_finalize will be called during shutdown of Trixi.jl."
MPI.add_finalize_hook!(T8code.Libt8.sc_finalize)
# Initialize t8code with log level ERROR to prevent a lot of output in AMR simulations.
t8_init(T8code.Libt8.SC_LP_ERROR)

if haskey(ENV, "TRIXI_T8CODE_SC_FINALIZE")
# Normally, `sc_finalize` should always be called during shutdown of an
# application. It checks whether there is still un-freed memory by t8code
# and/or T8code.jl and throws an exception if this is the case. For
# production runs this is not mandatory, but is helpful during
# development. Hence, this option is only activated when environment
# variable TRIXI_T8CODE_SC_FINALIZE exists.
@warn "T8code.jl: sc_finalize will be called during shutdown of Trixi.jl."
MPI.add_finalize_hook!(T8code.Libt8.sc_finalize)
end
end

return nothing
Expand Down