CALreal calGetNextX3Dr(struct CALModel3D* ca3D, struct CALSubstate3Dr* Q, int i, int j, int k, int n) { if (ca3D->T == CAL_SPACE_FLAT) return calGetBuffer3DElement(Q->next, ca3D->rows, ca3D->columns, i + ca3D->X[n].i, j + ca3D->X[n].j, k + ca3D->X[n].k); else return calGetBuffer3DElement(Q->next, ca3D->rows, ca3D->columns, calGetToroidalX(i + ca3D->X[n].i, ca3D->rows), calGetToroidalX(j + ca3D->X[n].j, ca3D->columns), calGetToroidalX(k + ca3D->X[n].k, ca3D->columns)); }
void calSetX3Di(struct CALModel3D* ca3D, struct CALSubstate3Di* Q, int i, int j, int k, int n, CALint value) { if (ca3D->T == CAL_SPACE_FLAT) calSetBuffer3DElement(Q->next, ca3D->rows, ca3D->columns, i + ca3D->X[n].i, j + ca3D->X[n].j, k + ca3D->X[n].k, value); else calSetBuffer3DElement(Q->next, ca3D->rows, ca3D->columns, calGetToroidalX(i + ca3D->X[n].i, ca3D->rows), calGetToroidalX(j + ca3D->X[n].j, ca3D->columns), calGetToroidalX(k + ca3D->X[n].k, ca3D->slices), value); }
void calAddActiveCellX3D(struct CALModel3D* ca3D, int i, int j, int k, int n) { if (ca3D->T == CAL_SPACE_FLAT) { if(ca3D->OPTIMIZATION == CAL_OPT_ACTIVE_CELLS_NAIVE) calAddActiveCellNaive3D(ca3D->A, (i + ca3D->X[n].i), (j + ca3D->X[n].j), (k + ca3D->X[n].k), ca3D->columns, ca3D->rows); else if(ca3D->OPTIMIZATION == CAL_OPT_ACTIVE_CELLS) calAddActiveCellCLL3D(ca3D, (i + ca3D->X[n].i), (j + ca3D->X[n].j), (k + ca3D->X[n].k)); } else { if(ca3D->OPTIMIZATION == CAL_OPT_ACTIVE_CELLS_NAIVE) calAddActiveCellNaive3D(ca3D->A, calGetToroidalX(i + ca3D->X[n].i, ca3D->rows), calGetToroidalX(j + ca3D->X[n].j, ca3D->columns), calGetToroidalX(k + ca3D->X[n].k, ca3D->slices), ca3D->columns, ca3D->rows); else if(ca3D->OPTIMIZATION == CAL_OPT_ACTIVE_CELLS) calAddActiveCellCLL3D(ca3D, calGetToroidalX(i + ca3D->X[n].i, ca3D->rows), calGetToroidalX(j + ca3D->X[n].j, ca3D->columns), calGetToroidalX(k + ca3D->X[n].k, ca3D->slices)); } }
CALreal calGetX2Dr(MODEL_DEFINITION2D, int i, int j, int n,CALint substateNum) { __global CALreal * current = calGetCurrentSubstate2Dr(MODEL2D,substateNum); if ((get_neighborhood_id() == CAL_HEXAGONAL_NEIGHBORHOOD_2D && j % 2 == 1) || (get_neighborhood_id() == CAL_HEXAGONAL_NEIGHBORHOOD_ALT_2D && i % 2 == 1)) n += CAL_HEXAGONAL_SHIFT; if (get_boundary_condition() == CAL_SPACE_FLAT) return calGetBufferElement2D(current, get_columns(), i + CALCLneighborhood[n].i, j + CALCLneighborhood[n].j); else return calGetBufferElement2D(current, get_columns(), calGetToroidalX(i + CALCLneighborhood[n].i, get_rows()), calGetToroidalX(j + CALCLneighborhood[n].j, get_columns())); }