diff --git a/src/core/tamaas.hh b/src/core/tamaas.hh index d932db5..d7083f1 100644 --- a/src/core/tamaas.hh +++ b/src/core/tamaas.hh @@ -1,186 +1,184 @@ /** * @mainpage Tamaas - A high-performance periodic contact library * * @section Introduction * Tamaas is a spectral-integral-equation based contact library. It is made * with love to be fast and friendly! * * @author Lucas Frérot * @author Guillaume Anciaux * @author Valentine Rey * @author Son Pham-Ba * @author Jean-François Molinari * * @section License * * Copyright (©) 2016-2023 EPFL (École Polytechnique Fédérale de Lausanne), * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) * Copyright (©) 2020-2023 Lucas Frérot * * 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 . * */ /* -------------------------------------------------------------------------- */ #ifndef TAMAAS_HH #define TAMAAS_HH /* -------------------------------------------------------------------------- */ #ifndef TAMAAS_USE_CUDA #define TAMAAS_USE_FFTW #endif // Values for fftw backends #define TAMAAS_FFTW_BACKEND_OMP 2 #define TAMAAS_FFTW_BACKEND_THREADS 2 #define TAMAAS_FFTW_BACKEND_NONE 3 // Values for thrust backends #define TAMAAS_LOOP_BACKEND_OMP 1 #define TAMAAS_LOOP_BACKEND_TBB 2 #define TAMAAS_LOOP_BACKEND_CPP 3 #define TAMAAS_LOOP_BACKEND_CUDA 4 // Default loop backend is OpenMP #ifndef TAMAAS_LOOP_BACKEND #define TAMAAS_LOOP_BACKEND TAMAAS_LOOP_BACKEND_OMP #endif // Default FFTW backend is none #ifndef TAMAAS_FFTW_BACKEND #define TAMAAS_FFTW_BACKEND TAMAAS_FFTW_BACKEND_NONE #endif // If the thrust device hasn't been set, set OpenMP #ifndef THRUST_DEVICE_SYSTEM #define THRUST_DEVICE_SYSTEM THRUST_DEVICE_SYSTEM_OMP #endif /// Convenience macros #define TAMAAS_DEBUG_MSG(mesg) \ - __FILE__ << ':' << __LINE__ << ": " << mesg << '\n' + __FILE__ << ':' << __LINE__ << ':' << __func__ << "(): " << mesg << '\n' #define TAMAAS_EXCEPTION(mesg) \ { \ std::stringstream sstr; \ sstr << TAMAAS_DEBUG_MSG("FATAL: " << mesg); \ throw ::tamaas::Exception(sstr.str()); \ } -#define SURFACE_FATAL(mesg) TAMAAS_EXCEPTION(mesg) - #if defined(TAMAAS_DEBUG) #define TAMAAS_ASSERT(cond, reason) \ do { \ if (not(cond)) { \ TAMAAS_EXCEPTION(#cond " assert failed: " << reason); \ } \ } while (0) #define TAMAAS_DEBUG_EXCEPTION(reason) TAMAAS_EXCEPTION(reason) #else #define TAMAAS_ASSERT(cond, reason) #define TAMAAS_DEBUG_EXCEPTION(reason) #endif #define TAMAAS_ACCESSOR(var, type, name) \ type& get##name() { return var; } \ void set##name(const type& new_var) { var = new_var; } /* -------------------------------------------------------------------------- */ // Standard includes #include #include #include #include #include /* -------------------------------------------------------------------------- */ // Special thrust includes #include #include /* -------------------------------------------------------------------------- */ namespace tamaas { /* -------------------------------------------------------------------------- */ /// Cuda specific definitions #define CUDA_LAMBDA __device__ __host__ /// Common types definitions // If type macros have not been set, put default values #ifndef TAMAAS_REAL_TYPE #define TAMAAS_REAL_TYPE double #endif #ifndef TAMAAS_INT_TYPE #define TAMAAS_INT_TYPE int #endif using Real = TAMAAS_REAL_TYPE; ///< default floating point type using Int = TAMAAS_INT_TYPE; ///< default signed integer type using UInt = std::make_unsigned_t; ///< default unsigned integer type template using complex = thrust::complex; ///< template complex wrapper using Complex = complex; ///< default floating point complex type /// Defining random toolbox using ::thrust::random::normal_distribution; using ::thrust::random::uniform_real_distribution; using random_engine = ::thrust::random::default_random_engine; namespace detail { template class Trait, typename Head, typename... Tail> struct fold_trait_tail_rec : std::integral_constant::value, Trait, Tail...>::value> {}; template class Trait, typename Head> struct fold_trait_tail_rec : std::integral_constant::value> {}; } // namespace detail template