summaryrefslogtreecommitdiff
path: root/src/include/cctk_Types.h
blob: 5bc203f7c7e4fab985eee3b0a38f9c7443d4d300 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
 /*@@
   @header    cctk_types.h
   @date      Mon Jun 21 21:03:27 1999
   @author    Tom Goodale
   @desc 
   Defines the appropriate types based upon the precision.
   Should be included by cctk_Config.h .
   @enddesc 
 @@*/

#ifndef _CCTK_TYPES_H_
#define _CCTK_TYPES_H_

/* Make sure that cctk_config.h is available in case someone includes
 * this by hand.
 */
#ifndef _CCTK_CONFIG_H_
#include "cctk_Config.h"
#endif

/* Define stuff for C. */
#ifdef CCODE

/* Structures for complex types */

#ifdef CCTK_REAL16
typedef struct
{
  CCTK_REAL16 Re;
  CCTK_REAL16 Im;
} CCTK_COMPLEX32;
#endif

#ifdef CCTK_REAL8
typedef struct
{
  CCTK_REAL8 Re;
  CCTK_REAL8 Im;
} CCTK_COMPLEX16;
#endif

#ifdef CCTK_REAL4
typedef struct
{
  CCTK_REAL4 Re;
  CCTK_REAL4 Im;
} CCTK_COMPLEX8;
#endif

/* Character type */
typedef unsigned char CCTK_CHAR;

#endif /* CCODE */

/* Define stuff for fortran. */
#ifdef FCODE

#define CCTK_POINTER integer*SIZEOF_CHAR_P

#define CCTK_STRING CCTK_POINTER

#define CCTK_REAL16 REAL*16
#define CCTK_REAL8  REAL*8
#define CCTK_REAL4  REAL*4

#define CCTK_INT8 INTEGER*8
#define CCTK_INT4 INTEGER*4
#define CCTK_INT2 INTEGER*2

#define CCTK_COMPLEX32  COMPLEX*32
#define CCTK_COMPLEX16  COMPLEX*16
#define CCTK_COMPLEX8   COMPLEX*8

#define CCTK_CHAR CHARACTER

#endif /*FCODE */

/* Now pick the types based upon the precision variable. */

/* Floating point precision */
#ifdef CCTK_REAL_PRECISION_16
#define CCTK_REAL CCTK_REAL16
#endif

#ifdef CCTK_REAL_PRECISION_8
#define CCTK_REAL CCTK_REAL8
#endif

#ifdef CCTK_REAL_PRECISION_4
#define CCTK_REAL CCTK_REAL4
#endif

/* Integer precision */

#ifdef CCTK_INTEGER_PRECISION_8
#define CCTK_INT CCTK_INT8
#endif

#ifdef CCTK_INTEGER_PRECISION_4
#define CCTK_INT CCTK_INT4
#endif

#ifdef CCTK_INTEGER_PRECISION_2
#define CCTK_INT CCTK_INT2
#endif

/* Complex precision */
#ifdef CCTK_REAL_PRECISION_16
#define CCTK_COMPLEX CCTK_COMPLEX32
#endif

#ifdef CCTK_REAL_PRECISION_8
#define CCTK_COMPLEX CCTK_COMPLEX16
#endif

#ifdef CCTK_REAL_PRECISION_4
#define CCTK_COMPLEX CCTK_COMPLEX8
#endif

#endif /*_CCTK_TYPES_H_ */