1 /*
2 ** Fortran to C index translation macros for Mark Govett's ctof for
3 ** GPU kernels.
4 **
5 ** Tom Henderson
6 ** 9/25/08
7 **
8 */
9 
10 #ifndef _FTOC_MACROS_
11 #define _FTOC_MACROS_
12 
13 #define FTNREF1D(i_index,i_lb) ((i_index)-(i_lb))
14 #define FTNREF2D(i_index,j_index,i_size,i_lb,j_lb) ((i_size)*(j_index-(j_lb))+(i_index)-(i_lb))
15 #define FTNREF3D(i_index,j_index,k_index,i_size,j_size,i_lb,j_lb,k_lb) (i_size)*(j_size)*(k_index-k_lb)+(i_size)*(j_index-j_lb)+i_index-i_lb
16 #define FTNREF4D(i_index,j_index,k_index,l_index,i_size,j_size,k_size,i_lb,j_lb,k_lb,l_lb) (i_size)*(j_size)*(k_size)*(l_index-l_lb)+(i_size)*(j_size)*(k_index-k_lb)+(i_size)*(j_index-j_lb)+i_index-i_lb
17 #define FTNREF5D(i_index,j_index,k_index,l_index,m_index,i_size,j_size,k_size,l_size,i_lb,j_lb,k_lb,l_lb,m_lb) (i_size)*(j_size)*(k_size)*(l_size)*(m_index-m_lb)+(i_size)*(j_size)*(k_size)*(l_index-l_lb)+(i_size)*(j_size)*(k_index-k_lb)+(i_size)*(j_index-j_lb)+i_index-i_lb
18 
19 #define FTNSIZE1D(i_lb,i_ub) (i_ub-i_lb+1)
20 #define FTNSIZE2D(i_lb,i_ub,j_lb,j_ub) (i_ub-i_lb+1)*(j_ub-j_lb+1)
21 #define FTNSIZE3D(i_lb,i_ub,j_lb,j_ub,k_lb,k_ub) (i_ub-i_lb+1)*(j_ub-j_lb+1)*(k_ub-k_lb+1)
22 #ifndef MAX
23 #define MAX(a, b) ((a) >= (b) ? (a) : (b))
24 #endif
25 #ifndef MIN
26 #define MIN(a, b) ((a) >= (b) ? (b) : (a))
27 #endif
28 #define SIGN(a,b) (((b) <  (0) && (a > (0))||((b) > (0) && ((a)<(0)))) ? (-a) : (a))
29 #define SQR(a) ((a)*(a))
30 #endif /* _FTOC_MACROS_ */
31 
32