1 /* Copyright (C) 2003-2007 CAMP 2 Copyright (C) 2010 CSC - IT Center for Science Ltd. 3 4 * Please see the accompanying LICENSE file for further information. */ 5 6 #include "../extensions.h" 7 #include "bmgs.h" 8 9 void Z(bmgs_fd)10Z(bmgs_fd)(const bmgsstencil* s, const T* a, T* b) 11 { 12 /* Skip the leading halo area. */ 13 a += (s->j[0] + s->j[1] + s->j[2]) / 2; 14 15 for (int i0 = 0; i0 < s->n[0]; i0++) { 16 for (int i1 = 0; i1 < s->n[1]; i1++) { 17 #ifdef _OPENMP 18 #pragma omp simd 19 #endif 20 for (int i2 = 0; i2 < s->n[2]; i2++) { 21 int i = i2 22 + i1 * (s->j[2] + s->n[2]) 23 + i0 * (s->j[1] + s->n[1] * (s->j[2] + s->n[2])); 24 int j = i2 + i1 * s->n[2] + i0 * s->n[1] * s->n[2]; 25 T x = 0.0; 26 27 for (int c = 0; c < s->ncoefs; c++) 28 x += a[i + s->offsets[c]] * s->coefs[c]; 29 b[j] = x; 30 } 31 } 32 } 33 } 34