diff --git a/src/core/tamaas.cpp b/src/core/tamaas.cpp index eae221b..f70bb08 100644 --- a/src/core/tamaas.cpp +++ b/src/core/tamaas.cpp @@ -1,93 +1,96 @@ /** * @file * @section LICENSE * * Copyright (©) 2016-2020 EPFL (École Polytechnique Fédérale de Lausanne), * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /* -------------------------------------------------------------------------- */ #include "tamaas.hh" #include "fftw_interface.hh" #include "fftw_mpi_interface.hh" #include "mpi_interface.hh" +#include "logger.hh" #if TAMAAS_BACKEND == TAMAAS_BACKEND_OMP #include #endif /* -------------------------------------------------------------------------- */ namespace tamaas { void initialize(UInt num_threads) { mpi::thread provided = mpi::thread::single; if (not mpi::initialized()) mpi::init_thread(nullptr, nullptr, mpi::thread::single, &provided); bool should_init_threads = (provided > mpi::thread::single); if (num_threads) { #if TAMAAS_BACKEND == TAMAAS_BACKEND_OMP omp_set_num_threads(num_threads); // set user-defined number of threads #endif } else { num_threads = 1; } #if TAMAAS_BACKEND != TAMAAS_BACKEND_CPP if (should_init_threads and (not fftw::init_threads())) { TAMAAS_EXCEPTION("FFTW could not initialize threads!"); } #endif - if (mpi::initialized()) + if (mpi::initialized()) { + Logger().get(LogLevel::warning) << "MPI support in tamaas is experimental!\n"; fftw::mpi::init(); + } if (should_init_threads) { #if TAMAAS_BACKEND == TAMAAS_BACKEND_OMP fftw::plan_with_nthreads(omp_get_max_threads()); #elif TAMAAS_BACKEND == TAMAAS_BACKEND_TBB fftw::plan_with_nthreads(num_threads); #endif } } /* -------------------------------------------------------------------------- */ void finalize() { if (not mpi::finalized()) { #if TAMAAS_BACKEND != TAMAAS_BACKEND_CPP fftw::cleanup_threads(); #endif fftw::mpi::cleanup(); mpi::finalize(); } } namespace { /// Manager for initialize + finalize struct entry_exit_points { entry_exit_points() { initialize(); } ~entry_exit_points() { finalize(); } static const entry_exit_points singleton; }; const entry_exit_points entry_exit_points::singleton; } // namespace } // namespace tamaas