From 24c38421586e891197b0e47eeef6ba919cc3612e Mon Sep 17 00:00:00 2001 From: Alexander Liemen <47395086+aliemen@users.noreply.github.com> Date: Thu, 17 Sep 2026 13:20:21 +0200 Subject: [PATCH] Resolve include loop in ParallelDispatch and datatypes.h. Add small compile check as a unit test for this specific include order --- src/Manager/datatypes.h | 15 ++++++++------- src/Utility/ParallelDispatch.h | 6 ++++-- unit_tests/Utility/CMakeLists.txt | 1 + unit_tests/Utility/HeaderIncludeOrder.cpp | 13 +++++++++++++ 4 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 unit_tests/Utility/HeaderIncludeOrder.cpp diff --git a/src/Manager/datatypes.h b/src/Manager/datatypes.h index cabcc7da3a..60046719ad 100644 --- a/src/Manager/datatypes.h +++ b/src/Manager/datatypes.h @@ -1,12 +1,14 @@ #ifndef IPPL_DATATYPES_H #define IPPL_DATATYPES_H +#include "Ippl.h" + +#include "PoissonSolvers/FEMPoissonSolver.h" #include "PoissonSolvers/FFTOpenPoissonSolver.h" #include "PoissonSolvers/FFTPeriodicPoissonSolver.h" #include "PoissonSolvers/FFTTruncatedGreenPeriodicPoissonSolver.h" #include "PoissonSolvers/NullSolver.h" #include "PoissonSolvers/PoissonCG.h" -#include "PoissonSolvers/FEMPoissonSolver.h" #include "PoissonSolvers/PreconditionedFEMPoissonSolver.h" // some typedefs @@ -67,16 +69,15 @@ using OpenSolver_t = ConditionalType, Field_t>>; template -using FEMSolver_t = ippl::FEMPoissonSolver, Field>; +using FEMSolver_t = ippl::FEMPoissonSolver, Field>; template -using FEMPreconSolver_t = ippl::PreconditionedFEMPoissonSolver, Field>; +using FEMPreconSolver_t = ippl::PreconditionedFEMPoissonSolver, Field>; template -using Solver_t = VariantFromConditionalTypes, FFTSolver_t, - FFTTruncatedGreenSolver_t, - OpenSolver_t, NullSolver_t, - FEMSolver_t, FEMPreconSolver_t>; +using Solver_t = VariantFromConditionalTypes< + CGSolver_t, FFTSolver_t, FFTTruncatedGreenSolver_t, + OpenSolver_t, NullSolver_t, FEMSolver_t, FEMPreconSolver_t>; extern const char* TestName; diff --git a/src/Utility/ParallelDispatch.h b/src/Utility/ParallelDispatch.h index 4e342aa028..d5cf36ba79 100644 --- a/src/Utility/ParallelDispatch.h +++ b/src/Utility/ParallelDispatch.h @@ -7,8 +7,8 @@ #define IPPL_PARALLEL_DISPATCH_H #include -#include "Ippl.h" +#include #include #include "Types/Vector.h" @@ -198,7 +198,9 @@ namespace ippl { template void parallelForMPI(size_t n, F&& f) { constexpr bool useGPU = isGPUSpace; - const bool threadSafe = Env->threadMultiple(); + int provided = MPI_THREAD_SINGLE; + MPI_Query_thread(&provided); + const bool threadSafe = provided >= MPI_THREAD_MULTIPLE; if constexpr (useGPU) { if (threadSafe) { diff --git a/unit_tests/Utility/CMakeLists.txt b/unit_tests/Utility/CMakeLists.txt index 687806dd2b..aa3765a3ee 100644 --- a/unit_tests/Utility/CMakeLists.txt +++ b/unit_tests/Utility/CMakeLists.txt @@ -2,3 +2,4 @@ file(RELATIVE_PATH _relPath "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR} message(STATUS "Adding unit tests found in ${_relPath}") add_ippl_test(ParameterList) +add_ippl_test(HeaderIncludeOrder COMPILE_ONLY) diff --git a/unit_tests/Utility/HeaderIncludeOrder.cpp b/unit_tests/Utility/HeaderIncludeOrder.cpp new file mode 100644 index 0000000000..17e90b5456 --- /dev/null +++ b/unit_tests/Utility/HeaderIncludeOrder.cpp @@ -0,0 +1,13 @@ +/** + * @file HeaderIncludeOrder.cpp + * @brief Verifies that Manager/datatypes.h compiles without a preceding Ippl.h include. + * + * This small test verifies that we don't get a compiler error in OPALX when including + * `datatypes.h` without first including `Ippl.h`. + */ + +#include "Manager/datatypes.h" + +int main() { + return 0; +}