34#if defined(HAVE_CONFIG_H)
35# include "base/cs_config.h"
53#if defined(ENABLE_NLS) && defined(HAVE_GETTEXT)
56# define _(String) dgettext(PACKAGE, String)
58# define N_(String) gettext_noop(String)
60# define N_(String) String
70# define _(String) (String)
71# define N_(String) String
72# define textdomain(String) (String)
73# define gettext(String) (String)
74# define dgettext(Domain,String) (String)
75# define dcgettext(Domain,String,Type) (String)
76# define bindtextdomain(Domain, Directory) (Domain)
88#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
92# if !defined(MPI_VERSION)
98# define MPI_INFO_NULL 0
103#if defined(HAVE_OPENMP)
108#undef HAVE_OPENMP_SIMD
109#define HAVE_OPENMP_SIMD 1
116#if defined(HAVE_CUDA)
118#elif defined(HAVE_SYCL)
120#elif defined(HAVE_OPENMP_TARGET)
132#if !defined(__STDC_VERSION__)
133# define __STDC_VERSION__ 1989
141#if (__STDC_VERSION__ < 199901L)
143# if defined(__GNUC__)
144# define inline __inline__
145# define restrict __restrict__
155# if defined(__GNUC__) || defined(__clang__) || defined (__NVCC__)
156# define restrict __restrict__
157# elif defined(_MSC_VER)
158# define restrict __restrict
160# ifndef HAVE_RESTRICT
169#if defined(__GNUC__) || defined(__clang__)
170# define DEPRECATED __attribute__((deprecated))
171#elif defined(_MSC_VER)
172# define DEPRECATED __declspec(deprecated)
201# include <inttypes.h>
208#if defined(HAVE_SYS_TYPES_H)
209#include <sys/types.h>
219# define _Bool signed char;
227# define __bool_true_false_are_defined 1
231#if defined(__cplusplus)
238#if !defined(HAVE_INT32_T)
239# if (SIZEOF_INT == 4)
241# elif (SIZEOF_SHORT == 4)
242typedef short int32_t;
250#if !defined(HAVE_INT64_T)
251# if (SIZEOF_INT == 8)
253# elif (SIZEOF_LONG == 8)
255# elif (HAVE_LONG_LONG == 8)
256typedef long long int64_t;
264#if !defined(HAVE_UINT32_T)
265# if (SIZEOF_INT == 4)
266typedef unsigned uint32_t;
267# elif (SIZEOF_SHORT == 4)
268typedef unsigned short uint32_t;
276#if !defined(HAVE_UINT64_T)
277# if (SIZEOF_INT == 8)
278typedef unsigned uint64_t;
279# elif (SIZEOF_LONG == 8)
280typedef unsigned long uint64_t;
281# elif (HAVE_LONG_LONG)
282typedef unsigned long long uint64_t;
291 #define __has_builtin(x) 0
297#if defined(__INTEL_COMPILER)
298# if __INTEL_COMPILER <= 2000
299# define __has_builtin(x) 0
342#if defined(HAVE_LONG_GNUM)
350#if defined(HAVE_LONG_LNUM)
428#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
430# define CS_MPI_REAL MPI_DOUBLE
434# if defined(HAVE_LONG_GNUM)
435# if (SIZEOF_LONG == 8)
436# define CS_MPI_GNUM MPI_UNSIGNED_LONG
437# elif (SIZEOF_LONG_LONG == 8)
438# if defined(MPI_UNSIGNED_LONG_LONG)
439# define CS_MPI_GNUM MPI_UNSIGNED_LONG_LONG
440# elif defined(MPI_LONG_LONG)
441# define CS_MPI_GNUM MPI_LONG_LONG
444# if !defined(CS_MPI_GNUM)
448# define CS_MPI_GNUM MPI_UNSIGNED
453# if defined(HAVE_LONG_LNUM)
454# define CS_MPI_LNUM MPI_LONG
456# define CS_MPI_LNUM MPI_INT
459# define CS_MPI_EFLAG MPI_UNSIGNED
460# define CS_MPI_FLAG MPI_UNSIGNED_SHORT
461# define CS_MPI_COORD MPI_DOUBLE
468#if defined(HAVE_LONG_GNUM)
469# define CS_GNUM_TYPE CS_UINT64
470#elif (SIZEOF_INT == 8)
471# define CS_GNUM_TYPE CS_UINT64
473# define CS_GNUM_TYPE CS_UINT32
476#if defined(HAVE_LONG_LNUM)
477# if (SIZEOF_LONG == 8)
478# define CS_LNUM_TYPE CS_INT64
480# define CS_LNUM_TYPE CS_INT32
483# if (SIZEOF_INT == 8)
484# define CS_LNUM_TYPE CS_INT64
486# define CS_LNUM_TYPE CS_INT32
491# define CS_INT_TYPE CS_INT64
493# define CS_INT_TYPE CS_INT32
497# define CS_UINT_TYPE CS_UINT64
499# define CS_UINT_TYPE CS_UINT32
502#define CS_FLAG_TYPE CS_UINT16
503#define CS_EFLAG_TYPE CS_UINT_TYPE
504#define CS_REAL_TYPE CS_DOUBLE
505#define CS_COORD_TYPE CS_DOUBLE
511#define CS_THR_MIN 128
522#define CS_ABS(a) ((a) < 0 ? -(a) : (a))
523#define CS_MIN(a,b) ((a) < (b) ? (a) : (b))
524#define CS_MAX(a,b) ((a) > (b) ? (a) : (b))
546#define CS_UNUSED(x) (void)(x)
547#define CS_NO_WARN_IF_UNUSED(x) (void)(x)
556#if defined(__cplusplus)
557# define BEGIN_C_DECLS extern "C" {
558# define END_C_DECLS }
560# define BEGIN_C_DECLS
568#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) \
569 || defined(__SYCL_DEVICE_ONLY__)
570#define CS_DEVICE_COMPILE
579#define CS_F_HOST __host__
580#define CS_F_DEVICE __device__
581#define CS_F_HOST_DEVICE __host__ __device__
582#define CS_V_CONSTANT __constant__
588#define CS_F_HOST_DEVICE
589#define CS_V_CONSTANT static const
597#define CS_LAMBDA [=] CS_F_HOST_DEVICE
598#define CS_HOST_LAMBDA [=] CS_F_HOST
599#define CS_CLASS_LAMBDA [=, *this] CS_F_HOST_DEVICE
616#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
618extern MPI_Datatype cs_datatype_to_mpi[];
633#if defined(HAVE_MPI) && !defined(CS_IGNORE_MPI)
635extern MPI_Comm cs_glob_mpi_comm;
675 return ((i > 0) ? ((i-1)/m+1)*m : 0);
690#if defined(HAVE_OPENMP)
691 return omp_get_thread_num();
729 return ((a) < 0 ? -(a) : (a));
752 return ((a) < (b) ? (a) : (b));
775 return ((a) > (b) ? (a) : (b));
801 T x_tmp = ((xmin) > (x) ? (xmin) : (x));
802 return ((xmax) < (x_tmp) ? (xmax) : (x_tmp));
811template <
class... Args>
813 enum :
bool {
value =
true};
818template <
typename T,
class... Args>
821 value = (std::is_integral<T>::value || std::is_enum<T>::value)
834template <
typename... Args>
int cs_glob_n_ranks
Definition: cs_defs.cpp:175
cs_datatype_t
Definition: cs_defs.h:315
@ CS_FLOAT
Definition: cs_defs.h:319
@ CS_CHAR
Definition: cs_defs.h:318
@ CS_UINT16
Definition: cs_defs.h:321
@ CS_INT64
Definition: cs_defs.h:323
@ CS_UINT64
Definition: cs_defs.h:325
@ CS_DOUBLE
Definition: cs_defs.h:320
@ CS_UINT32
Definition: cs_defs.h:324
@ CS_INT32
Definition: cs_defs.h:322
@ CS_DATATYPE_NULL
Definition: cs_defs.h:317
cs_lnum_t cs_lnum_3_t[3]
Definition: cs_defs.h:368
const char * cs_datatype_name[]
Definition: cs_defs.cpp:143
#define CS_F_HOST_DEVICE
Definition: cs_defs.h:585
constexpr cs_datatype_t cs_datatype_from_type< int32_t >()
Definition: cs_defs.h:917
constexpr cs_datatype_t cs_datatype_from_type< uint16_t >()
Definition: cs_defs.h:890
char cs_byte_t
Definition: cs_defs.h:358
double cs_real_t
Floating-point value.
Definition: cs_defs.h:357
void *() cs_destructor_t(void *s)
Destroy a given structure.
Definition: cs_defs.h:651
cs_rreal_t cs_rreal_3_t[3]
Definition: cs_defs.h:403
constexpr cs_datatype_t cs_datatype_from_type< char >()
Definition: cs_defs.h:863
const size_t cs_datatype_size[]
Definition: cs_defs.cpp:133
static cs_datatype_t cs_datatype_from_type()
Definition: cs_defs.h:851
cs_real_33_t cs_real_332_t[2]
vector of 2 3x3 matrices of floating-point values
Definition: cs_defs.h:395
int cs_glob_node_rank_id
Definition: cs_defs.cpp:177
cs_real_t cs_real_69_t[6][9]
Definition: cs_defs.h:393
cs_nreal_t cs_nreal_3_t[3]
Definition: cs_defs.h:400
const char cs_empty_string[]
Definition: cs_defs.cpp:129
int cs_glob_n_threads
Definition: cs_defs.cpp:172
cs_lnum_t cs_lnum_2_t[2]
vector of 2 local mesh-entity ids
Definition: cs_defs.h:367
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:685
int cs_glob_node_n_ranks
Definition: cs_defs.cpp:178
cs_real_t cs_real_4_t[4]
vector of 4 floating-point values
Definition: cs_defs.h:375
double cs_dreal_t
Definition: cs_defs.h:362
cs_real_t cs_real_10_t[10]
Definition: cs_defs.h:379
cs_real_t cs_real_99_t[9][9]
Definition: cs_defs.h:385
double cs_coord_t
Definition: cs_defs.h:355
cs_real_t cs_real_34_t[3][4]
Definition: cs_defs.h:389
cs_real_t cs_real_66_t[6][6]
6x6 matrix of floating-point values
Definition: cs_defs.h:384
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:374
cs_coord_t cs_coord_3_t[3]
Definition: cs_defs.h:370
cs_real_66_t cs_real_662_t[2]
Definition: cs_defs.h:397
cs_real_t cs_real_2_t[2]
vector of 2 floating-point values
Definition: cs_defs.h:373
unsigned cs_gnum_t
global mesh entity number
Definition: cs_defs.h:342
constexpr cs_datatype_t cs_datatype_from_type< int64_t >()
Definition: cs_defs.h:926
constexpr cs_datatype_t cs_datatype_from_type< float >()
Definition: cs_defs.h:872
cs_interlace_t
Definition: cs_defs.h:529
@ CS_INTERLACE
Definition: cs_defs.h:531
@ CS_NO_INTERLACE
Definition: cs_defs.h:532
cs_real_t cs_real_6_t[6]
vector of 6 floating-point values
Definition: cs_defs.h:376
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:669
cs_dreal_t cs_dreal_3_t[3]
Definition: cs_defs.h:402
constexpr cs_datatype_t cs_datatype_from_type< double >()
Definition: cs_defs.h:881
cs_real_t cs_real_333_t[3][3][3]
Definition: cs_defs.h:387
double cs_rreal_t
Definition: cs_defs.h:363
constexpr cs_datatype_t cs_datatype_from_type< uint32_t >()
Definition: cs_defs.h:899
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition: cs_defs.h:383
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:350
cs_real_t cs_real_63_t[6][3]
Definition: cs_defs.h:391
double cs_nreal_t
Definition: cs_defs.h:361
constexpr cs_datatype_t cs_datatype_from_type< uint64_t >()
Definition: cs_defs.h:908
cs_real_t cs_real_9_t[9]
Definition: cs_defs.h:378
cs_real_t cs_real_23_t[2][3]
Definition: cs_defs.h:381
unsigned short int cs_flag_t
Definition: cs_defs.h:359
int cs_glob_rank_id
Definition: cs_defs.cpp:174
Definition: cs_array.h:1098
CS_F_HOST_DEVICE T max(const T a, const T b)
Definition: cs_defs.h:769
CS_F_HOST_DEVICE T clamp(const T x, const T xmin, const T xmax)
Definition: cs_defs.h:794
CS_F_HOST_DEVICE T min(const T a, const T b)
Definition: cs_defs.h:746
CS_F_HOST_DEVICE T abs(const T a)
Definition: cs_defs.h:724
Utility template which returns "true" for a given pack. This is necessary of std::enable_if_t<> when ...
Definition: cs_defs.h:832
Utility template to check if a pack of parameters is made of integral types.
Definition: cs_defs.h:809
@ value
Definition: cs_defs.h:810
Definition: cs_defs.h:405
Definition: cs_defs.h:415
Get the cs_datatype_t from a typename.
Definition: cs_defs.h:847