Nek5000
SEM for Incompressible NS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
types.h
Go to the documentation of this file.
1 #ifndef TYPES_H
2 #define TYPES_H
3 
4 /*
5  Define the integer types used throughout the code,
6  controlled by preprocessor macros.
7 
8  The integer type sint/uint (signed/unsigned) is used
9  most frequently, e.g., for indexing into local arrays,
10  and for processor ids. It can be one of
11 
12  macro sint/uint type
13 
14  (default) int
15  USE_LONG long
16  USE_LONG_LONG long long
17 
18  The slong/ulong type is used in relatively few places
19  for global identifiers and indices. It can be one of
20 
21  macro slong/ulong type
22 
23  (default) int
24  GLOBAL_LONG long
25  GLOBAL_LONG_LONG long long
26 
27  Since the long long type is not ISO C90, it is never
28  used unless explicitly asked for.
29 */
30 
31 #if defined(USE_LONG_LONG) || defined(GLOBAL_LONG_LONG)
32 typedef long long long_long;
33 # define WHEN_LONG_LONG(x) x
34 # if !defined(LLONG_MAX)
35 # if defined(LONG_LONG_MAX)
36 # define LLONG_MAX LONG_LONG_MAX
37 # else
38 # define LLONG_MAX 9223372036854775807
39 # endif
40 # endif
41 # if !defined(LLONG_MIN)
42 # if defined(LONG_LONG_MIN)
43 # define LLONG_MIN LONG_LONG_MIN
44 # else
45 # define LLONG_MIN -9223372036854775807
46 # endif
47 # endif
48 #else
49 # define WHEN_LONG_LONG(x)
50 #endif
51 
52 #if !defined(USE_LONG) && !defined(USE_LONG_LONG)
53 # define TYPE_LOCAL(i,l,ll) i
54 #elif defined(USE_LONG)
55 # define TYPE_LOCAL(i,l,ll) l
56 #elif defined(USE_LONG_LONG)
57 # define TYPE_LOCAL(i,l,ll) ll
58 #endif
59 
60 #if !defined(GLOBAL_LONG) && !defined(GLOBAL_LONG_LONG)
61 # define TYPE_GLOBAL(i,l,ll) i
62 #elif defined(GLOBAL_LONG)
63 # define TYPE_GLOBAL(i,l,ll) l
64 #else
65 # define TYPE_GLOBAL(i,l,ll) ll
66 #endif
67 
68 /* local integer type: for quantities O(N/P) */
69 #define sint signed TYPE_LOCAL(int,long,long long)
70 #define uint unsigned TYPE_LOCAL(int,long,long long)
71 #define iabs TYPE_LOCAL(abs,labs,llabs)
72 
73 /* global integer type: for quantities O(N) */
74 #define slong signed TYPE_GLOBAL(int,long,long long)
75 #define ulong unsigned TYPE_GLOBAL(int,long,long long)
76 #define iabsl TYPE_GLOBAL(abs,labs,llabs)
77 
78 #endif
79