/* ************************************************************************* */ int compare_array_2d(N_array_2d * a, N_array_2d * b) { int rows, cols, type; int i, j, res = 0; cols = a->cols; rows = a->rows; type = N_get_array_2d_type(a); #pragma omp parallel for private (i, j) shared (cols, rows, type, a, b) reduction(+:res) for (j = 0; j < rows; j++) { for (i = 0; i < cols; i++) { if (type == CELL_TYPE) { if (N_get_array_2d_c_value(a, i, j) != N_get_array_2d_c_value(b, i, j)) res++; } if (type == FCELL_TYPE) { if (N_get_array_2d_f_value(a, i, j) != N_get_array_2d_f_value(b, i, j)) res++; } if (type == DCELL_TYPE) { if (N_get_array_2d_d_value(a, i, j) != N_get_array_2d_d_value(b, i, j)) res++; } } } return res; }
/* ************************************************************************* */ int fill_array_2d(N_array_2d * a) { int rows, cols, type; int i, j, res = 0; rows = a->rows; cols = a->cols; type = N_get_array_2d_type(a); #pragma omp parallel for private (i, j) shared (cols, rows, type, a) reduction(+:res) for (j = 0; j < rows; j++) { for (i = 0; i < cols; i++) { if (type == CELL_TYPE) { N_put_array_2d_c_value(a, i, j, (CELL) i * (CELL) j); if (N_get_array_2d_c_value(a, i, j) != (CELL) i * (CELL) j) res++; } if (type == FCELL_TYPE) { N_put_array_2d_f_value(a, i, j, (FCELL) i * (FCELL) j); if (N_get_array_2d_f_value(a, i, j) != (FCELL) i * (FCELL) j) res++; } if (type == DCELL_TYPE) { N_put_array_2d_d_value(a, i, j, (DCELL) i * (DCELL) j); if (N_get_array_2d_d_value(a, i, j) != (DCELL) i * (DCELL) j) res++; } } } return res; }
/*! * \brief Write info and content of the N_array_2d struct to stdout * * Offsets are ignored * * \param data N_array_2d * * \return void * */ void N_print_array_2d(N_array_2d * data) { int i, j; N_print_array_2d_info(data); for (j = 0 - data->offset; j < data->rows + data->offset; j++) { for (i = 0 - data->offset; i < data->cols + data->offset; i++) { if (data->type == CELL_TYPE) fprintf(stdout, "%6d ", N_get_array_2d_c_value(data, i, j)); else if (data->type == FCELL_TYPE) fprintf(stdout, "%6.6f ", N_get_array_2d_f_value(data, i, j)); else if (data->type == DCELL_TYPE) printf("%6.6f ", N_get_array_2d_d_value(data, i, j)); } fprintf(stdout, "\n"); } fprintf(stdout, "\n"); return; }