diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index 4ac50483ad3..8b2cc2c33f1 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -306,6 +306,9 @@ WarpX::Evolve (int numsteps) multi_diags->FilterComputePackFlushLastTimestep( istep[0] ); if (m_exit_loop_due_to_interrupt_signal) { ExecutePythonCallback("onbreaksignal"); } } + + amrex::Print() << + ablastr::warn_manager::GetWMInstance().PrintGlobalWarnings("THE END"); } /* /brief Perform one PIC iteration, without subcycling diff --git a/Source/Initialization/CMakeLists.txt b/Source/Initialization/CMakeLists.txt index 8931de740ad..e5e2334fd7e 100644 --- a/Source/Initialization/CMakeLists.txt +++ b/Source/Initialization/CMakeLists.txt @@ -11,6 +11,7 @@ foreach(D IN LISTS WarpX_DIMS) TemperatureProperties.cpp VelocityProperties.cpp WarpXAMReXInit.cpp + WarpXInit.cpp WarpXInitData.cpp ) endforeach() diff --git a/Source/Initialization/Make.package b/Source/Initialization/Make.package index 8b4a4c1d669..831e3fc3f89 100644 --- a/Source/Initialization/Make.package +++ b/Source/Initialization/Make.package @@ -7,6 +7,7 @@ CEXE_sources += PlasmaInjector.cpp CEXE_sources += TemperatureProperties.cpp CEXE_sources += VelocityProperties.cpp CEXE_sources += WarpXAMReXInit.cpp +CEXE_sources += WarpXInit.cpp CEXE_sources += WarpXInitData.cpp VPATH_LOCATIONS += $(WARPX_HOME)/Source/Initialization diff --git a/Source/Initialization/WarpXInit.H b/Source/Initialization/WarpXInit.H new file mode 100644 index 00000000000..ce179e2e997 --- /dev/null +++ b/Source/Initialization/WarpXInit.H @@ -0,0 +1,30 @@ +/* Copyright 2024 Luca Fedeli + * + * This file is part of WarpX. + * + * License: BSD-3-Clause-LBNL + */ +#ifndef WARPX_INIT_H_ +#define WARPX_INIT_H_ + +namespace warpx::initialization +{ + /** Initializes, in the following order: + * - the MPI library through the mpi_init helper function in ablastr + * - the AMReX library + * - the FFT library through the anyfft::setup() function in ablastr + * + * @param[in] argc number of arguments from main() + * @param[in] argv argument strings from main() + */ + void initialize_external_libraries(int argc, char* argv[]); + + /** Initializes, in the following order: + * - the FFT library through the anyfft::cleanup() function in ablastr + * - the AMReX library + * - the MPI library through the mpi_finalize helper function in ablastr + */ + void finalize_external_libraries(); +} + +#endif //WARPX_INIT_H_ diff --git a/Source/Initialization/WarpXInit.cpp b/Source/Initialization/WarpXInit.cpp new file mode 100644 index 00000000000..7e00760bf30 --- /dev/null +++ b/Source/Initialization/WarpXInit.cpp @@ -0,0 +1,29 @@ +/* Copyright 2024 Luca Fedeli + * + * This file is part of WarpX. + * + * License: BSD-3-Clause-LBNL + */ + +#include "WarpXInit.H" + +#include "Initialization/WarpXAMReXInit.H" + +#include + +#include +#include + +void warpx::initialization::initialize_external_libraries(int argc, char* argv[]) +{ + ablastr::parallelization::mpi_init(argc, argv); + warpx::initialization::amrex_init(argc, argv); + ablastr::math::anyfft::setup(); +} + +void warpx::initialization::finalize_external_libraries() +{ + ablastr::math::anyfft::cleanup(); + amrex::Finalize(); + ablastr::parallelization::mpi_finalize(); +} diff --git a/Source/main.cpp b/Source/main.cpp index 2a1b828c64f..9273cd3928b 100644 --- a/Source/main.cpp +++ b/Source/main.cpp @@ -8,25 +8,16 @@ */ #include "WarpX.H" -#include "Initialization/WarpXAMReXInit.H" +#include "Initialization/WarpXInit.H" #include "Utils/WarpXProfilerWrapper.H" -#include -#include #include -#include #include - int main(int argc, char* argv[]) { - ablastr::parallelization::mpi_init(argc, argv); - - warpx::initialization::amrex_init(argc, argv); - - ablastr::math::anyfft::setup(); - + warpx::initialization::initialize_external_libraries(argc, argv); { WARPX_PROFILE_VAR("main()", pmain); @@ -34,29 +25,18 @@ int main(int argc, char* argv[]) timer.record_start_time(); auto& warpx = WarpX::GetInstance(); - warpx.InitData(); - warpx.Evolve(); - - amrex::Print() << - ablastr::warn_manager::GetWMInstance().PrintGlobalWarnings("THE END"); + const auto is_warpx_verbose = warpx.Verbose(); + WarpX::Finalize(); timer.record_stop_time(); - if (warpx.Verbose()) - { + if (is_warpx_verbose){ amrex::Print() << "Total Time : " << timer.get_global_duration() << '\n'; } WARPX_PROFILE_VAR_STOP(pmain); - - WarpX::Finalize(); } - - ablastr::math::anyfft::cleanup(); - - amrex::Finalize(); - - ablastr::parallelization::mpi_finalize (); + warpx::initialization::finalize_external_libraries(); }