34#if defined(HAVE_CONFIG_H)
35# include "base/cs_config.h"
47#if defined(ENABLE_NLS) && defined(HAVE_GETTEXT)
50# define _(String) dgettext(PACKAGE, String)
52# define N_(String) gettext_noop(String)
54# define N_(String) String
64# define _(String) (String)
65# define N_(String) String
66# define textdomain(String) (String)
67# define gettext(String) (String)
68# define dgettext(Domain,String) (String)
69# define dcgettext(Domain,String,Type) (String)
70# define bindtextdomain(Domain, Directory) (Domain)
80#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
84# if !defined(MPI_VERSION)
90# define MPI_INFO_NULL 0
95#if defined(HAVE_OPENMP)
100#undef HAVE_OPENMP_SIMD
101#define HAVE_OPENMP_SIMD 1
119#if defined(HAVE_CUDA)
121#elif defined(HAVE_HIP)
123#elif defined(HAVE_SYCL)
125#elif defined(HAVE_OPENMP_TARGET)
133#if defined(HAVE_CUDA) && defined(__CUDACC__)
135#elif defined(HAVE_HIP) && defined(__HIPCC__)
145# if defined(__GNUC__) || defined(__clang__) || defined (__NVCC__)
146# define restrict __restrict__
147# elif defined(_MSC_VER)
148# define restrict __restrict
150# ifndef HAVE_RESTRICT
156#if (defined(__GNUC__) || defined(__clang__)) \
157 && !defined(CS_DONT_SUPPRESS_EXTERNAL_WARNINGS)
158# define DO_PRAGMA(x) _Pragma (#x)
159# define DISABLE_WARNING_PUSH _Pragma("GCC diagnostic push")
160# define DISABLE_WARNING(warningName) \
161 DO_PRAGMA(GCC diagnostic ignored #warningName)
162# define DISABLE_WARNING_POP _Pragma("GCC diagnostic pop")
164# if defined(__llvm__)
165# define DISABLE_WARNING_LLVM(warningName) \
166 DISABLE_WARNING(warningName)
168# define DISABLE_WARNING_LLVM(warningName)
171# define DISABLE_WARNING_PUSH
172# define DISABLE_WARNING(warningName)
173# define DISABLE_WARNING_POP
174# define DISABLE_WARNING_LLVM(warningName)
201# include <inttypes.h>
208#if defined(HAVE_SYS_TYPES_H)
209#include <sys/types.h>
218#if !defined(HAVE_INT32_T)
219# if (SIZEOF_INT == 4)
221# elif (SIZEOF_SHORT == 4)
222typedef short int32_t;
230#if !defined(HAVE_INT64_T)
231# if (SIZEOF_INT == 8)
233# elif (SIZEOF_LONG == 8)
235# elif (HAVE_LONG_LONG == 8)
236typedef long long int64_t;
244#if !defined(HAVE_UINT32_T)
245# if (SIZEOF_INT == 4)
246typedef unsigned uint32_t;
247# elif (SIZEOF_SHORT == 4)
248typedef unsigned short uint32_t;
256#if !defined(HAVE_UINT64_T)
257# if (SIZEOF_INT == 8)
258typedef unsigned uint64_t;
259# elif (SIZEOF_LONG == 8)
260typedef unsigned long uint64_t;
261# elif (HAVE_LONG_LONG)
262typedef unsigned long long uint64_t;
271 #define __has_builtin(x) 0
277#if defined(__INTEL_COMPILER)
278# if __INTEL_COMPILER <= 2000
279# define __has_builtin(x) 0
317#if defined(HAVE_LONG_GNUM)
325#if defined(HAVE_LONG_LNUM)
403#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
405# define CS_MPI_REAL MPI_DOUBLE
409# if defined(HAVE_LONG_GNUM)
410# if (SIZEOF_LONG == 8)
411# define CS_MPI_GNUM MPI_UNSIGNED_LONG
412# elif (SIZEOF_LONG_LONG == 8)
413# if defined(MPI_UNSIGNED_LONG_LONG)
414# define CS_MPI_GNUM MPI_UNSIGNED_LONG_LONG
415# elif defined(MPI_LONG_LONG)
416# define CS_MPI_GNUM MPI_LONG_LONG
419# if !defined(CS_MPI_GNUM)
423# define CS_MPI_GNUM MPI_UNSIGNED
428# if defined(HAVE_LONG_LNUM)
429# define CS_MPI_LNUM MPI_LONG
431# define CS_MPI_LNUM MPI_INT
434# define CS_MPI_EFLAG MPI_UNSIGNED
435# define CS_MPI_FLAG MPI_UNSIGNED_SHORT
436# define CS_MPI_COORD MPI_DOUBLE
443#if defined(HAVE_LONG_GNUM)
444# define CS_GNUM_TYPE CS_UINT64
445#elif (SIZEOF_INT == 8)
446# define CS_GNUM_TYPE CS_UINT64
448# define CS_GNUM_TYPE CS_UINT32
451#if defined(HAVE_LONG_LNUM)
452# if (SIZEOF_LONG == 8)
453# define CS_LNUM_TYPE CS_INT64
455# define CS_LNUM_TYPE CS_INT32
458# if (SIZEOF_INT == 8)
459# define CS_LNUM_TYPE CS_INT64
461# define CS_LNUM_TYPE CS_INT32
466# define CS_INT_TYPE CS_INT64
468# define CS_INT_TYPE CS_INT32
472# define CS_UINT_TYPE CS_UINT64
474# define CS_UINT_TYPE CS_UINT32
477#define CS_FLAG_TYPE CS_UINT16
478#define CS_EFLAG_TYPE CS_UINT_TYPE
479#define CS_REAL_TYPE CS_DOUBLE
480#define CS_COORD_TYPE CS_DOUBLE
486#define CS_THR_MIN 128
497#define CS_ABS(a) ((a) < 0 ? -(a) : (a))
498#define CS_MIN(a,b) ((a) < (b) ? (a) : (b))
499#define CS_MAX(a,b) ((a) > (b) ? (a) : (b))
521#define CS_UNUSED(x) (void)(x)
522#define CS_NO_WARN_IF_UNUSED(x) (void)(x)
531#define BEGIN_C_DECLS extern "C" {
538#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) \
539 || defined(__SYCL_DEVICE_ONLY__)
540#define CS_DEVICE_COMPILE
547#if defined(__CUDACC__) || defined (__HIP_DEVICE_COMPILE__)
549#define CS_F_HOST __host__
550#define CS_F_DEVICE __device__
551#define CS_F_HOST_DEVICE __host__ __device__
552#define CS_V_CONSTANT __constant__
558#define CS_F_HOST_DEVICE
559#define CS_V_CONSTANT static const
567#define CS_LAMBDA [=] CS_F_HOST_DEVICE
568#define CS_HOST_LAMBDA [=] CS_F_HOST
569#define CS_CLASS_LAMBDA [=, *this] CS_F_HOST_DEVICE
586#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
603#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
645 return ((i > 0) ? ((i-1)/m+1)*m : 0);
660#if defined(HAVE_OPENMP)
661 return omp_get_thread_num();
695 return ((a) < 0 ? -(a) : (a));
718 return ((a) < (b) ? (a) : (b));
741 return ((a) > (b) ? (a) : (b));
767 T x_tmp = ((xmin) > (x) ? (xmin) : (x));
768 return ((xmax) < (x_tmp) ? (xmax) : (x_tmp));
777template <
class... Args>
779 enum :
bool {
value =
true};
784template <
typename T,
class... Args>
787 value = (std::is_integral<T>::value || std::is_enum<T>::value)
800template <
typename... Args>
814std::enable_if_t<std::is_move_constructible<T>::value &&
815 std::is_move_assignable<T>::value>
822 T tmp(std::move(obj1));
823 obj1 = std::move(obj2);
824 obj2 = std::move(tmp);
836template <
class T, std::
size_t N>
846 for (std::size_t i = 0; i < N; ++i)
858template<
typename Id1>
867 static_assert(std::is_integral<Id1>::value,
"Non integral input arguments.");
869 unsigned int retval = 1;
884template<
typename Id1>
894 static_assert(std::is_integral<Id1>::value,
"Non integral input arguments.");
898 int pos = n_digits - 1;
907 auto const num = v % 10;
909 dest[pos] =
'0' + num;
931 while (dest[dst_pos] != 0) {
936 while (src[i] != 0) {
937 dest[i + dst_pos] = src[i];
int cs_glob_n_ranks
Definition: cs_defs.cpp:171
cs_datatype_t
Definition: cs_defs.h:290
@ CS_FLOAT
Definition: cs_defs.h:294
@ CS_CHAR
Definition: cs_defs.h:293
@ CS_UINT16
Definition: cs_defs.h:296
@ CS_INT64
Definition: cs_defs.h:298
@ CS_UINT64
Definition: cs_defs.h:300
@ CS_DOUBLE
Definition: cs_defs.h:295
@ CS_UINT32
Definition: cs_defs.h:299
@ CS_INT32
Definition: cs_defs.h:297
@ CS_DATATYPE_NULL
Definition: cs_defs.h:292
cs_lnum_t cs_lnum_3_t[3]
Definition: cs_defs.h:343
const char * cs_datatype_name[]
Definition: cs_defs.cpp:139
void * cs_stream_t
Definition: cs_defs.h:135
#define CS_F_HOST_DEVICE
Definition: cs_defs.h:555
constexpr cs_datatype_t cs_datatype_from_type< int32_t >()
Definition: cs_defs.h:1022
constexpr cs_datatype_t cs_datatype_from_type< uint16_t >()
Definition: cs_defs.h:995
char cs_byte_t
Definition: cs_defs.h:333
double cs_real_t
Floating-point value.
Definition: cs_defs.h:332
void *() cs_destructor_t(void *s)
Destroy a given structure.
Definition: cs_defs.h:621
cs_rreal_t cs_rreal_3_t[3]
Definition: cs_defs.h:378
constexpr cs_datatype_t cs_datatype_from_type< char >()
Definition: cs_defs.h:968
const size_t cs_datatype_size[]
Definition: cs_defs.cpp:129
static cs_datatype_t cs_datatype_from_type()
Definition: cs_defs.h:956
cs_real_33_t cs_real_332_t[2]
vector of 2 3x3 matrices of floating-point values
Definition: cs_defs.h:370
int cs_glob_node_rank_id
Definition: cs_defs.cpp:173
cs_real_t cs_real_69_t[6][9]
Definition: cs_defs.h:368
cs_nreal_t cs_nreal_3_t[3]
Definition: cs_defs.h:375
const char cs_empty_string[]
Definition: cs_defs.cpp:125
int cs_glob_n_threads
Definition: cs_defs.cpp:168
cs_lnum_t cs_lnum_2_t[2]
vector of 2 local mesh-entity ids
Definition: cs_defs.h:342
static int cs_get_thread_id(void)
Retrieve the associated thread id (0 if no OpenMP or if outside an OpenMP region)
Definition: cs_defs.h:655
int cs_glob_node_n_ranks
Definition: cs_defs.cpp:174
cs_real_t cs_real_4_t[4]
vector of 4 floating-point values
Definition: cs_defs.h:350
MPI_Datatype cs_datatype_to_mpi[]
Definition: cs_defs.cpp:153
double cs_dreal_t
Definition: cs_defs.h:337
cs_real_t cs_real_10_t[10]
Definition: cs_defs.h:354
cs_real_t cs_real_99_t[9][9]
Definition: cs_defs.h:360
double cs_coord_t
Definition: cs_defs.h:330
cs_real_t cs_real_34_t[3][4]
Definition: cs_defs.h:364
cs_real_t cs_real_66_t[6][6]
6x6 matrix of floating-point values
Definition: cs_defs.h:359
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:349
cs_coord_t cs_coord_3_t[3]
Definition: cs_defs.h:345
cs_real_66_t cs_real_662_t[2]
Definition: cs_defs.h:372
cs_real_t cs_real_2_t[2]
vector of 2 floating-point values
Definition: cs_defs.h:348
unsigned cs_gnum_t
global mesh entity number
Definition: cs_defs.h:317
constexpr cs_datatype_t cs_datatype_from_type< int64_t >()
Definition: cs_defs.h:1031
constexpr cs_datatype_t cs_datatype_from_type< float >()
Definition: cs_defs.h:977
cs_interlace_t
Definition: cs_defs.h:504
@ CS_INTERLACE
Definition: cs_defs.h:506
@ CS_NO_INTERLACE
Definition: cs_defs.h:507
cs_real_t cs_real_6_t[6]
vector of 6 floating-point values
Definition: cs_defs.h:351
static cs_lnum_t cs_align(cs_lnum_t i, cs_lnum_t m)
Given a base index i, return the next index aligned with a size m.
Definition: cs_defs.h:639
cs_dreal_t cs_dreal_3_t[3]
Definition: cs_defs.h:377
constexpr cs_datatype_t cs_datatype_from_type< double >()
Definition: cs_defs.h:986
cs_real_t cs_real_333_t[3][3][3]
Definition: cs_defs.h:362
double cs_rreal_t
Definition: cs_defs.h:338
constexpr cs_datatype_t cs_datatype_from_type< uint32_t >()
Definition: cs_defs.h:1004
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition: cs_defs.h:358
MPI_Comm cs_glob_mpi_comm
Definition: cs_defs.cpp:179
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
cs_real_t cs_real_63_t[6][3]
Definition: cs_defs.h:366
double cs_nreal_t
Definition: cs_defs.h:336
constexpr cs_datatype_t cs_datatype_from_type< uint64_t >()
Definition: cs_defs.h:1013
cs_real_t cs_real_9_t[9]
Definition: cs_defs.h:353
cs_real_t cs_real_23_t[2][3]
Definition: cs_defs.h:356
unsigned short int cs_flag_t
Definition: cs_defs.h:334
int cs_glob_rank_id
Definition: cs_defs.cpp:170
Definition: cs_algorithm.h:51
CS_F_HOST_DEVICE T max(const T a, const T b)
Definition: cs_defs.h:735
CS_F_HOST_DEVICE unsigned int number_of_digits(Id1 val)
Count number of digits in an integer.
Definition: cs_defs.h:860
CS_F_HOST_DEVICE T clamp(const T x, const T xmin, const T xmax)
Definition: cs_defs.h:760
CS_F_HOST_DEVICE void concatenate_char(char *dest, const char *src)
Concatenate two strings (char *)
Definition: cs_defs.h:922
CS_F_HOST_DEVICE T min(const T a, const T b)
Definition: cs_defs.h:712
CS_F_HOST_DEVICE void uint_to_char(char *dest, Id1 val)
Convert an unsigned integer to an array of char.
Definition: cs_defs.h:886
CS_F_HOST_DEVICE constexpr std::enable_if_t< std::is_move_constructible< T >::value &&std::is_move_assignable< T >::value > swap_objects(T &obj1, T &obj2)
A swap method which is callable from GPU and not only CPU.
Definition: cs_defs.h:814
CS_F_HOST_DEVICE T abs(const T a)
Definition: cs_defs.h:690
Utility template which returns "true" for a given pack. This is necessary of std::enable_if_t<> when ...
Definition: cs_defs.h:798
Utility template to check if a pack of parameters is made of integral types.
Definition: cs_defs.h:775
@ value
Definition: cs_defs.h:776
Definition: cs_defs.h:380
Definition: cs_defs.h:390
Get the cs_datatype_t from a typename.
Definition: cs_defs.h:952