Files
@ 215974bd7440
Branch filter:
Location: MD/arcos/include/rz_array.h - annotation
215974bd7440
2.4 KiB
text/x-chdr
Edited file README via RhodeCode
d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf | /** @file rz_array.h
* @brief Definitions for 2D/3D arrays
*/
#ifndef _RZ_ARRAY_H_
#include "cstream.h"
typedef struct rz_array_t rz_array_t;
struct rz_array_t {
REAL *data;
int strides[3];
int r0, z0, theta0, nr, nz;
int ntheta;
int dim;
int len;
rz_array_t *host;
};
#define R_INDX 0
#define Z_INDX 1
#define THETA_INDX 2
/* The 3D macros */
#define RZTP_OK(_A, _R, _Z, _T) \
((_R) >= (_A)->r0 && (_R) < (_A)->nr + (_A)->r0 + 4 \
&& (_Z) >= (_A)->z0 && (_Z) < (_A)->nz + (_A)->z0 + 4 \
&& (_T) >= (_A)->theta0 && (_T) < (_A)->ntheta + (_A)->theta0 + 4) \
#define __RZTP(_A, _R, _Z, _T) ((_A)->data \
+ ((_R) - (_A)->r0) * (_A)->strides[R_INDX] \
+ ((_Z) - (_A)->z0) * (_A)->strides[Z_INDX] \
+ (((_T) - (_A)->theta0) * (_A)->strides[THETA_INDX]))
#if defined (DEBUG_LEVEL) && DEBUG_LEVEL > 4
/* Look, mum! I am also doing array bound checking.
* But, alas, since in some parts of the code we perform direct pointer
* arithmetic, this check will not detect all possible out-of-indexes
* (but we catch most of them).
*/
# define RZTP(_A, _R, _Z, _T) (RZTP_OK (_A, _R, _Z, _T)? \
__RZTP (_A, _R, _Z, _T): \
(fprintf (stderr, \
"%s:%d: Out of bounds ir = %d, iz = %d, itheta = %d\n", \
__FILE__, __LINE__, _R, _Z, _T), \
fprintf (stderr, \
"->r0 = %d ->z0 = %d ->theta0 = %d ->nr = %d ->nz = %d ->ntheta = %d\n", \
(_A)->r0, (_A)->z0, (_A)->theta0, \
(_A)->nr, (_A)->nz, (_A)->ntheta), \
exit(-1), (double*) NULL))
#else
# define RZTP(_A, _R, _Z, _T) __RZTP(_A, _R, _Z, _T)
#endif
#define RZT(_A,_R,_Z,_T) (*RZTP(_A, _R, _Z, _T))
#define RZTm(_A,_R,_Z,_T) ((fprintf (stderr, \
"%s:%d: CHECK ir = %d, iz = %d, itheta = %d\n", \
__FILE__, __LINE__, _R, _Z, _T), \
fprintf (stderr, \
"->r0 = %d ->z0 = %d ->theta0 = %d ->nr = %d ->nz = %d ->ntheta = %d\n", \
(_A)->r0, (_A)->z0, (_A)->theta0, \
(_A)->nr, (_A)->nz, (_A)->ntheta), \
fprintf (stderr, \
"->data = %g\n", \
(_A)->data), \
exit(-1), (double*) NULL))
/* These are valid for 2D arrays. When applied to a 3D array, they
* return the value with theta=0.
*/
#define RZP(_A,_R,_Z) RZTP(_A, _R, _Z, (_A)->theta0)
#define RZ(_A,_R,_Z) RZT(_A, _R, _Z, (_A)->theta0)
#define BND_CND_HNEUMANN 1
#define BND_CND_HDIRICHLET -1
#define BND_INWARD -1
#define BND_OUTWARD 1
#define _RZ_ARRAY_H_
#endif
|