From d0846763dac3fc942ca41a030aa7329ca95ff60d Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 26 Aug 2021 11:13:02 +0200 Subject: [PATCH] Change initialization order to fix FPE trapping mess PETSc was initialized after FPEManager and could replace its defined policy leading to unexpected trapping (underflows for instance when multiplying very small numbers) --- src/utils/PETScWrapper.cpp | 1 + src/utils/PugsUtils.cpp | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/utils/PETScWrapper.cpp b/src/utils/PETScWrapper.cpp index f88bbfd8a..18b16aa14 100644 --- a/src/utils/PETScWrapper.cpp +++ b/src/utils/PETScWrapper.cpp @@ -13,6 +13,7 @@ initialize([[maybe_unused]] int& argc, [[maybe_unused]] char* argv[]) { #ifdef PUGS_HAS_PETSC PetscOptionsSetValue(NULL, "-no_signal_handler", "true"); + PetscOptionsSetValue(NULL, "-fp_trap", "false"); PetscInitialize(&argc, &argv, 0, 0); #endif // PUGS_HAS_PETSC } diff --git a/src/utils/PugsUtils.cpp b/src/utils/PugsUtils.cpp index d35fa95f4..696dd8f86 100644 --- a/src/utils/PugsUtils.cpp +++ b/src/utils/PugsUtils.cpp @@ -79,6 +79,8 @@ std::string initialize(int& argc, char* argv[]) { parallel::Messenger::create(argc, argv); + bool enable_fpe = true; + bool enable_signals = true; std::string filename; { @@ -100,10 +102,8 @@ initialize(int& argc, char* argv[]) bool enable_color = true; app.add_flag("--color,!--no-color", enable_color, "Colorize console output [default: true]"); - bool enable_fpe = true; app.add_flag("--fpe,!--no-fpe", enable_fpe, "Trap floating point exceptions [default: true]"); - bool enable_signals = true; app.add_flag("--signal,!--no-signal", enable_signals, "Catches signals [default: true]"); bool pause_on_error = false; @@ -119,14 +119,15 @@ initialize(int& argc, char* argv[]) } ConsoleManager::init(enable_color); - FPEManager::init(enable_fpe); SignalManager::setPauseForDebug(pause_on_error); - SignalManager::init(enable_signals); } PETScWrapper::initialize(argc, argv); SLEPcWrapper::initialize(argc, argv); + FPEManager::init(enable_fpe); + SignalManager::init(enable_signals); + setDefaultOMPEnvironment(); Kokkos::initialize(argc, argv); std::cout << "----------------- " << rang::fg::green << "pugs exec info" << rang::fg::reset -- GitLab