diff --git a/src/tamaas.cpp b/src/tamaas.cpp index 85f4145..c479258 100644 --- a/src/tamaas.cpp +++ b/src/tamaas.cpp @@ -1,46 +1,48 @@ /** * * @author Lucas Frérot * * @section LICENSE * * Copyright (©) 2016 EPFL (Ecole Polytechnique Fédérale de * Lausanne) Laboratory (LSMS - Laboratoire de Simulation en Mécanique des * Solides) * * Tamaas is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * Tamaas 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 Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with Tamaas. If not, see . * */ /* -------------------------------------------------------------------------- */ #include #include #include "tamaas.hh" /* -------------------------------------------------------------------------- */ __BEGIN_TAMAAS__ -void initialize() { +void initialize(UInt num_threads) { fftw_init_threads(); + + if (num_threads) omp_set_num_threads(num_threads); fftw_plan_with_nthreads(omp_get_max_threads()); } /* -------------------------------------------------------------------------- */ void finalize() { fftw_cleanup_threads(); } __END_TAMAAS__ diff --git a/src/tamaas.hh b/src/tamaas.hh index 5adccf4..40ad29b 100644 --- a/src/tamaas.hh +++ b/src/tamaas.hh @@ -1,86 +1,89 @@ /** * * @author Lucas Frérot * @author Guillaume Anciaux * * @section LICENSE * * Copyright (©) 2016 EPFL (Ecole Polytechnique Fédérale de * Lausanne) Laboratory (LSMS - Laboratoire de Simulation en Mécanique des * Solides) * * Tamaas is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * Tamaas 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 Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with Tamaas. If not, see . * */ /* -------------------------------------------------------------------------- */ #ifndef TAMAAS_HH #define TAMAAS_HH /* -------------------------------------------------------------------------- */ #include #include #include /* -------------------------------------------------------------------------- */ /// Namespace macros #define __BEGIN_TAMAAS__ namespace tamaas { #define __END_TAMAAS__ } /* -------------------------------------------------------------------------- */ __BEGIN_TAMAAS__ /* -------------------------------------------------------------------------- */ -void initialize(); -void finalize(); -/* -------------------------------------------------------------------------- */ /// Common types definitions typedef double Real; typedef unsigned int UInt; typedef int Int; typedef std::complex complex; static const Real zero_threshold = 1e-14; /* -------------------------------------------------------------------------- */ +/// initialize tamaas (0 threads => let OMP_NUM_THREADS decide) +void initialize(UInt num_threads = 0); +/// cleanup tamaas +void finalize(); +/* -------------------------------------------------------------------------- */ + class SurfaceException : public std::exception { public: SurfaceException(const std::string & mesg) throw() { msg = mesg; } virtual const char* what() const throw() { return msg.c_str(); } private: std::string msg; }; /* -------------------------------------------------------------------------- */ __END_TAMAAS__ /* -------------------------------------------------------------------------- */ #define SURFACE_FATAL(mesg) { \ std::stringstream sstr; \ sstr \ << __FILE__ \ << ":" << __LINE__ << ":FATAL: " \ << mesg << std::endl; \ std::cerr.flush(); \ throw ::tamaas::SurfaceException(sstr.str()); \ } /* -------------------------------------------------------------------------- */ #endif // TAMAAS_HH