34#define PRAGMIZE(X) __pragma(X)
36#define PRAGMIZE(X) _Pragma(#X)
40#define FORCEINLINE __forceinline
41#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
42#define FORCEINLINE inline __attribute__((always_inline))
44#define FORCEINLINE inline
47#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
48#define NEVERINLINE inline __attribute__((noinline))
50#define NEVERINLINE inline
55#define SU2_CUDA_HOST_DEVICE __host__ __device__
57#define SU2_CUDA_HOST_DEVICE
60#if defined(__INTEL_COMPILER)
62#pragma warning disable 2196
63#pragma warning disable 3415
65#pragma warning disable 654
66#pragma warning disable 1125
67#if defined(CODI_FORWARD_TYPE) || defined(CODI_REVERSE_TYPE)
68#pragma warning disable 1875
74template <
bool condition>
75using su2enable_if =
typename std::enable_if<condition, bool>::type;
78template <
bool B,
class T,
class F>
82template <
class T,
class F>
87template <
bool B,
class T,
class F>
91template <
class Out,
class In>
93 static_assert(std::is_pointer<In>::value,
"This expects a pointer");
95 return static_cast<Out
>(ptr);
97 return dynamic_cast<Out
>(ptr);
111#if defined(HAVE_CUDA) && !defined(CODI_FORWARD_TYPE)
112#define SU2_ENABLE_CUDA_KERNELS
116#if (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) && defined(USE_SINGLE_PRECISION)
117#undef USE_SINGLE_PRECISION
126#ifdef USE_SINGLE_PRECISION
135#ifdef USE_SINGLE_PRECISION
137FORCEINLINE float min(
const float& a,
const double& b) {
return fmin(a,
static_cast<float>(b)); }
138FORCEINLINE float min(
const double& b,
const float& a) {
return fmin(a,
static_cast<float>(b)); }
139FORCEINLINE float max(
const float& a,
const double& b) {
return fmax(a,
static_cast<float>(b)); }
140FORCEINLINE float max(
const double& b,
const float& a) {
return fmax(a,
static_cast<float>(b)); }
147#if defined(CODI_REVERSE_TYPE)
149#include "codi/tools/data/externalFunctionUserData.hpp"
152using su2double = codi::RealReverseIndexOpenMPGen<double, double>;
154#if defined(CODI_JACOBIAN_LINEAR_TAPE)
156#elif defined(CODI_JACOBIAN_REUSE_TAPE)
157using su2double = codi::RealReverseIndexGen<double, double, codi::ReuseIndexManager<int> >;
158#elif defined(CODI_JACOBIAN_MULTIUSE_TAPE)
160#elif defined(CODI_PRIMAL_LINEAR_TAPE)
161using su2double = codi::RealReversePrimal;
162#elif defined(CODI_PRIMAL_REUSE_TAPE)
163using su2double = codi::RealReversePrimalIndexGen<double, double, codi::ReuseIndexManager<int> >;
164#elif defined(CODI_PRIMAL_MULTIUSE_TAPE)
165using su2double = codi::RealReversePrimalIndex;
166#elif defined(CODI_TAG_TAPE)
169#error "Please define a CoDiPack tape."
173#if defined(HAVE_OMP) || defined(CODI_JACOBIAN_REUSE_TAPE) || defined(CODI_JACOBIAN_MULTIUSE_TAPE) || \
174 defined(CODI_PRIMAL_REUSE_TAPE) || defined(CODI_PRIMAL_MULTIUSE_TAPE)
175#define CODI_INDEX_REUSE
177#elif defined(CODI_FORWARD_TYPE)
185#ifndef CODI_FORWARD_TYPE
186#ifdef USE_MIXED_PRECISION
194#ifdef USE_MIXED_PRECISION
195#undef USE_MIXED_PRECISION
201#if defined(HAVE_OMP) && defined(CODI_REVERSE_TYPE)
202#ifndef __INTEL_COMPILER
205#warning Hybrid parallel reverse mode AD cannot be used with Intel compilers.
208#if (_OPENMP >= 201811 && !defined(FORCE_OPDI_MACRO_BACKEND)) || defined(FORCE_OPDI_OMPT_BACKEND)
214#define SU2_IGNORE_WARNING(WARNING) \
215 PRAGMIZE(GCC diagnostic push) \
216 PRAGMIZE(GCC diagnostic ignored WARNING)
217#define SU2_RESTORE_WARNING PRAGMIZE(GCC diagnostic pop)
219#define SU2_IGNORE_WARNING(WARNING)
220#define SU2_RESTORE_WARNING
uint32_t su2uint
Definition code_config.hpp:121
double passivedouble
Definition code_config.hpp:129
typename su2conditional< B, T, F >::type su2conditional_t
Definition code_config.hpp:88
#define FORCEINLINE
Definition code_config.hpp:44
Out su2staticcast_p(In ptr)
Static cast "In" to "Out", in debug builds a dynamic cast is used.
Definition code_config.hpp:92
passivedouble su2mixedfloat
Definition code_config.hpp:189
int32_t su2int
Definition code_config.hpp:122
passivedouble su2double
Definition code_config.hpp:181
typename std::enable_if< condition, bool >::type su2enable_if
Definition code_config.hpp:75
F type
Definition code_config.hpp:84
Definition code_config.hpp:79
T type
Definition code_config.hpp:80