/*************************************************************************** *cr *cr (C) Copyright 2010 The Board of Trustees of the *cr University of Illinois *cr All Rights Reserved *cr ***************************************************************************/ #ifndef _LBM_MARCOS_H #define _LBM_MACROS_H_ #define OMEGA (1.95f) #define OUTPUT_PRECISION float #define BOOL int #define TRUE (-1) #define FALSE (0) #define DFL1 (1.0f/ 3.0f) #define DFL2 (1.0f/18.0f) #define DFL3 (1.0f/36.0f) /*############################################################################*/ typedef float* LBM_Grid;//float LBM_Grid[PADDED_Z*PADDED_Y*PADDED_X*N_CELL_ENTRIES]; typedef LBM_Grid* LBM_GridPtr; /*############################################################################*/ #define SWEEP_X __temp_x__ #define SWEEP_Y __temp_y__ #define SWEEP_Z __temp_z__ #define SWEEP_VAR int __temp_x__, __temp_y__, __temp_z__; #define SWEEP_START(x1,y1,z1,x2,y2,z2) \ for( __temp_z__ = z1; \ __temp_z__ < z2; \ __temp_z__++) { \ for( __temp_y__ = 0; \ __temp_y__ < SIZE_Y; \ __temp_y__++) { \ for(__temp_x__ = 0; \ __temp_x__ < SIZE_X; \ __temp_x__++) { \ #define SWEEP_END }}} #define GRID_ENTRY(g,x,y,z,e) ((g)[CALC_INDEX( x, y, z, e)]) #define GRID_ENTRY_SWEEP(g,dx,dy,dz,e) ((g)[CALC_INDEX((dx)+SWEEP_X, (dy)+SWEEP_Y, (dz)+SWEEP_Z, e)]) #define LOCAL(g,e) (GRID_ENTRY_SWEEP( g, 0, 0, 0, e )) #define NEIGHBOR_C(g,e) (GRID_ENTRY_SWEEP( g, 0, 0, 0, e )) #define NEIGHBOR_N(g,e) (GRID_ENTRY_SWEEP( g, 0, +1, 0, e )) #define NEIGHBOR_S(g,e) (GRID_ENTRY_SWEEP( g, 0, -1, 0, e )) #define NEIGHBOR_E(g,e) (GRID_ENTRY_SWEEP( g, +1, 0, 0, e )) #define NEIGHBOR_W(g,e) (GRID_ENTRY_SWEEP( g, -1, 0, 0, e )) #define NEIGHBOR_T(g,e) (GRID_ENTRY_SWEEP( g, 0, 0, +1, e )) #define NEIGHBOR_B(g,e) (GRID_ENTRY_SWEEP( g, 0, 0, -1, e )) #define NEIGHBOR_NE(g,e) (GRID_ENTRY_SWEEP( g, +1, +1, 0, e )) #define NEIGHBOR_NW(g,e) (GRID_ENTRY_SWEEP( g, -1, +1, 0, e )) #define NEIGHBOR_SE(g,e) (GRID_ENTRY_SWEEP( g, +1, -1, 0, e )) #define NEIGHBOR_SW(g,e) (GRID_ENTRY_SWEEP( g, -1, -1, 0, e )) #define NEIGHBOR_NT(g,e) (GRID_ENTRY_SWEEP( g, 0, +1, +1, e )) #define NEIGHBOR_NB(g,e) (GRID_ENTRY_SWEEP( g, 0, +1, -1, e )) #define NEIGHBOR_ST(g,e) (GRID_ENTRY_SWEEP( g, 0, -1, +1, e )) #define NEIGHBOR_SB(g,e) (GRID_ENTRY_SWEEP( g, 0, -1, -1, e )) #define NEIGHBOR_ET(g,e) (GRID_ENTRY_SWEEP( g, +1, 0, +1, e )) #define NEIGHBOR_EB(g,e) (GRID_ENTRY_SWEEP( g, +1, 0, -1, e )) #define NEIGHBOR_WT(g,e) (GRID_ENTRY_SWEEP( g, -1, 0, +1, e )) #define NEIGHBOR_WB(g,e) (GRID_ENTRY_SWEEP( g, -1, 0, -1, e )) #ifdef SCATTER #define SRC_C(g) (LOCAL( g, C )) #define SRC_N(g) (LOCAL( g, N )) #define SRC_S(g) (LOCAL( g, S )) #define SRC_E(g) (LOCAL( g, E )) #define SRC_W(g) (LOCAL( g, W )) #define SRC_T(g) (LOCAL( g, T )) #define SRC_B(g) (LOCAL( g, B )) #define SRC_NE(g) (LOCAL( g, NE )) #define SRC_NW(g) (LOCAL( g, NW )) #define SRC_SE(g) (LOCAL( g, SE )) #define SRC_SW(g) (LOCAL( g, SW )) #define SRC_NT(g) (LOCAL( g, NT )) #define SRC_NB(g) (LOCAL( g, NB )) #define SRC_ST(g) (LOCAL( g, ST )) #define SRC_SB(g) (LOCAL( g, SB )) #define SRC_ET(g) (LOCAL( g, ET )) #define SRC_EB(g) (LOCAL( g, EB )) #define SRC_WT(g) (LOCAL( g, WT )) #define SRC_WB(g) (LOCAL( g, WB )) #define DST_C(g) (NEIGHBOR_C ( g, C )) #define DST_N(g) (NEIGHBOR_N ( g, N )) #define DST_S(g) (NEIGHBOR_S ( g, S )) #define DST_E(g) (NEIGHBOR_E ( g, E )) #define DST_W(g) (NEIGHBOR_W ( g, W )) #define DST_T(g) (NEIGHBOR_T ( g, T )) #define DST_B(g) (NEIGHBOR_B ( g, B )) #define DST_NE(g) (NEIGHBOR_NE( g, NE )) #define DST_NW(g) (NEIGHBOR_NW( g, NW )) #define DST_SE(g) (NEIGHBOR_SE( g, SE )) #define DST_SW(g) (NEIGHBOR_SW( g, SW )) #define DST_NT(g) (NEIGHBOR_NT( g, NT )) #define DST_NB(g) (NEIGHBOR_NB( g, NB )) #define DST_ST(g) (NEIGHBOR_ST( g, ST )) #define DST_SB(g) (NEIGHBOR_SB( g, SB )) #define DST_ET(g) (NEIGHBOR_ET( g, ET )) #define DST_EB(g) (NEIGHBOR_EB( g, EB )) #define DST_WT(g) (NEIGHBOR_WT( g, WT )) #define DST_WB(g) (NEIGHBOR_WB( g, WB )) #else /* GATHER */ #define SRC_C(g) (NEIGHBOR_C ( g, C )) #define SRC_N(g) (NEIGHBOR_S ( g, N )) #define SRC_S(g) (NEIGHBOR_N ( g, S )) #define SRC_E(g) (NEIGHBOR_W ( g, E )) #define SRC_W(g) (NEIGHBOR_E ( g, W )) #define SRC_T(g) (NEIGHBOR_B ( g, T )) #define SRC_B(g) (NEIGHBOR_T ( g, B )) #define SRC_NE(g) (NEIGHBOR_SW( g, NE )) #define SRC_NW(g) (NEIGHBOR_SE( g, NW )) #define SRC_SE(g) (NEIGHBOR_NW( g, SE )) #define SRC_SW(g) (NEIGHBOR_NE( g, SW )) #define SRC_NT(g) (NEIGHBOR_SB( g, NT )) #define SRC_NB(g) (NEIGHBOR_ST( g, NB )) #define SRC_ST(g) (NEIGHBOR_NB( g, ST )) #define SRC_SB(g) (NEIGHBOR_NT( g, SB )) #define SRC_ET(g) (NEIGHBOR_WB( g, ET )) #define SRC_EB(g) (NEIGHBOR_WT( g, EB )) #define SRC_WT(g) (NEIGHBOR_EB( g, WT )) #define SRC_WB(g) (NEIGHBOR_ET( g, WB )) #define DST_C(g) (LOCAL( g, C )) #define DST_N(g) (LOCAL( g, N )) #define DST_S(g) (LOCAL( g, S )) #define DST_E(g) (LOCAL( g, E )) #define DST_W(g) (LOCAL( g, W )) #define DST_T(g) (LOCAL( g, T )) #define DST_B(g) (LOCAL( g, B )) #define DST_NE(g) (LOCAL( g, NE )) #define DST_NW(g) (LOCAL( g, NW )) #define DST_SE(g) (LOCAL( g, SE )) #define DST_SW(g) (LOCAL( g, SW )) #define DST_NT(g) (LOCAL( g, NT )) #define DST_NB(g) (LOCAL( g, NB )) #define DST_ST(g) (LOCAL( g, ST )) #define DST_SB(g) (LOCAL( g, SB )) #define DST_ET(g) (LOCAL( g, ET )) #define DST_EB(g) (LOCAL( g, EB )) #define DST_WT(g) (LOCAL( g, WT )) #define DST_WB(g) (LOCAL( g, WB )) #endif /* GATHER */ #define MAGIC_CAST(v) ((unsigned int*) ((void*) (&(v)))) #define FLAG_VAR(v) unsigned int* _aux_ = MAGIC_CAST(v) #define TEST_FLAG_SWEEP(g,f) ((*MAGIC_CAST(LOCAL(g, FLAGS))) & (f)) #define SET_FLAG_SWEEP(g,f) {FLAG_VAR(LOCAL(g, FLAGS)); (*_aux_) |= (f);} #define CLEAR_FLAG_SWEEP(g,f) {FLAG_VAR(LOCAL(g, FLAGS)); (*_aux_) &= ~(f);} #define CLEAR_ALL_FLAGS_SWEEP(g) {FLAG_VAR(LOCAL(g, FLAGS)); (*_aux_) = 0;} #define TEST_FLAG(g,x,y,z,f) ((*MAGIC_CAST(GRID_ENTRY(g, x, y, z, FLAGS))) & (f)) #define SET_FLAG(g,x,y,z,f) {FLAG_VAR(GRID_ENTRY(g, x, y, z, FLAGS)); (*_aux_) |= (f);} #define CLEAR_FLAG(g,x,y,z,f) {FLAG_VAR(GRID_ENTRY(g, x, y, z, FLAGS)); (*_aux_) &= ~(f);} #define CLEAR_ALL_FLAGS(g,x,y,z) {FLAG_VAR(GRID_ENTRY(g, x, y, z, FLAGS)); (*_aux_) = 0;} /*############################################################################*/ #endif /* _CONFIG_H_ */