PLUTO
|
PLUTO header file for function-like macros. More...
Go to the source code of this file.
Macros | |
#define | BOX_LOOP(B, k, j, i) |
#define | FOR_EACH(nv, beg, list) |
#define | INT_FLOOR(z) ((int)((z) + 32768.) - 32768) |
#define | MAX(a, b) ( (a) >= (b) ? (a) : (b) ) |
#define | MIN(a, b) ( (a) <= (b) ? (a) : (b) ) |
#define | ABS_MIN(a, b) (fabs(a) < fabs(b) ? (a):(b)) |
#define | DSIGN(x) ( (x) >= 0.0 ? (1.0) : (-1.0)) |
#define | MINMOD(a, b) ((a)*(b) > 0.0 ? (fabs(a) < fabs(b) ? (a):(b)):0.0) |
#define | VAN_LEER(a, b) ((a)*(b) > 0.0 ? 2.0*(a)*(b)/((a)+(b)):0.0) |
#define | MC(a, b) (MINMOD(0.5*((a)+(b)), 2.0*MINMOD((a),(b)))) |
#define | SWAP_VAR(x) SwapEndian(&x, sizeof(x)); |
#define | QUIT_PLUTO(e_code) exit(e_code); |
#define | WARNING(a) a |
#define | DOT_PRODUCT(a, b) (EXPAND((a)[0]*(b)[0], + (a)[1]*(b)[1], + (a)[2]*(b)[2])) |
#define | VAR_LOOP(n) for ((n) = NVAR; (n)--; ) |
#define | DIM_LOOP(d) for ((d) = 0; (d) < DIMENSIONS; (d)++) |
#define | FDIFF_X1(b, k, j, i) (b[k][j][i+1] - b[k][j][i]) |
#define | FDIFF_X2(b, k, j, i) (b[k][j+1][i] - b[k][j][i]) |
#define | FDIFF_X3(b, k, j, i) (b[k+1][j][i] - b[k][j][i]) |
#define | CDIFF_X1(b, k, j, i) 0.5*(b[k][j][i+1] - b[k][j][i-1]) |
#define | CDIFF_X2(b, k, j, i) 0.5*(b[k][j+1][i] - b[k][j-1][i]) |
#define | CDIFF_X3(b, k, j, i) 0.5*(b[k+1][j][i] - b[k-1][j][i]) |
#define | AVERAGE_X(q, k, j, i) 0.5*(q[k][j][i] + q[k][j][i+1]) |
#define | AVERAGE_Y(q, k, j, i) 0.5*(q[k][j][i] + q[k][j+1][i]) |
#define | AVERAGE_Z(q, k, j, i) 0.5*(q[k][j][i] + q[k+1][j][i]) |
#define | AVERAGE_XY(q, k, j, i) |
#define | AVERAGE_XZ(q, k, j, i) |
#define | AVERAGE_YZ(q, k, j, i) |
Spatial loop macros. | |
The following macros provide a compact way to perform 1D or multi-D loops in selected regions of the (local) computational domain. The | |
#define | IBEG_LOOP(i) for ((i) = IBEG; (i)--; ) |
#define | JBEG_LOOP(j) for ((j) = JBEG; (j)--; ) |
#define | KBEG_LOOP(k) for ((k) = KBEG; (k)--; ) |
#define | IEND_LOOP(i) for ((i) = IEND + 1; (i) < NX1_TOT; (i)++) |
#define | JEND_LOOP(j) for ((j) = JEND + 1; (j) < NX2_TOT; (j)++) |
#define | KEND_LOOP(k) for ((k) = KEND + 1; (k) < NX3_TOT; (k)++) |
#define | IDOM_LOOP(i) for ((i) = IBEG; (i) <= IEND; (i)++) |
#define | JDOM_LOOP(j) for ((j) = JBEG; (j) <= JEND; (j)++) |
#define | KDOM_LOOP(k) for ((k) = KBEG; (k) <= KEND; (k)++) |
#define | ITOT_LOOP(i) for ((i) = 0; (i) < NX1_TOT; (i)++) |
#define | JTOT_LOOP(j) for ((j) = 0; (j) < NX2_TOT; (j)++) |
#define | KTOT_LOOP(k) for ((k) = 0; (k) < NX3_TOT; (k)++) |
#define | DOM_LOOP(k, j, i) KDOM_LOOP(k) JDOM_LOOP(j) IDOM_LOOP(i) |
#define | TOT_LOOP(k, j, i) KTOT_LOOP(k) JTOT_LOOP(j) ITOT_LOOP(i) |
#define | X1_BEG_LOOP(k, j, i) KTOT_LOOP(k) JTOT_LOOP(j) IBEG_LOOP(i) |
#define | X2_BEG_LOOP(k, j, i) KTOT_LOOP(k) JBEG_LOOP(j) ITOT_LOOP(i) |
#define | X3_BEG_LOOP(k, j, i) KBEG_LOOP(k) JTOT_LOOP(j) ITOT_LOOP(i) |
#define | X1_END_LOOP(k, j, i) KTOT_LOOP(k) JTOT_LOOP(j) IEND_LOOP(i) |
#define | X2_END_LOOP(k, j, i) KTOT_LOOP(k) JEND_LOOP(j) ITOT_LOOP(i) |
#define | X3_END_LOOP(k, j, i) KEND_LOOP(k) JTOT_LOOP(j) ITOT_LOOP(i) |
#define | TRANSVERSE_LOOP(indx, ip, i, j, k) |
The BOX_LOOP() macro implements a loop over (i,j,k) in a rectangular portion of the domain with indices defined by the (pointer to) RBox structure B. The loop increments (di,dj,dk) are members of the structure which are here initialized to either 1 or -1 depending on whether the lower corner index lies below or above the upper index (e.g. B->ib <= B->ie or not).
#define DIM_LOOP | ( | d | ) | for ((d) = 0; (d) < DIMENSIONS; (d)++) |
#define DSIGN | ( | x | ) | ( (x) >= 0.0 ? (1.0) : (-1.0)) |
#define FOR_EACH | ( | nv, | |
beg, | |||
list | |||
) |
The FOR_EACH(p, beg, intList) macro implements a loop over the elements of the array intList->indx
starting at beg
(in a similar way to Python lists).
Example:
#define INT_FLOOR | ( | z | ) | ((int)((z) + 32768.) - 32768) |
#define QUIT_PLUTO | ( | e_code | ) | exit(e_code); |
#define SWAP_VAR | ( | x | ) | SwapEndian(&x, sizeof(x)); |