Commit d6739db2 authored by James Willis's avatar James Willis
Browse files

Defined vector kernel constants prior to function call, so that they are set only once.

parent 5597fb55
......@@ -220,10 +220,34 @@ __attribute__((always_inline)) INLINE static void kernel_eval(float u,
* Return 0 if $u > \\gamma = H/h$
*
* @param u The ratio of the distance to the smoothing length $u = x/h$.
* @param W (return) The value of the kernel function $W(x,h)$.
* @param dW_dx (return) The norm of the gradient of $|\\nabla W(x,h)|$.
* @param w (return) The value of the kernel function $W(x,h)$.
* @param dw_dx (return) The norm of the gradient of $|\\nabla W(x,h)|$.
*/
static const vector kernel_igamma_vec = {.f[0] = (float)kernel_igamma, .f[1] = (float)kernel_igamma,
.f[2] = (float)kernel_igamma, .f[3] = (float)kernel_igamma,
.f[4] = (float)kernel_igamma, .f[5] = (float)kernel_igamma,
.f[6] = (float)kernel_igamma, .f[7] = (float)kernel_igamma};
static const vector kernel_ivals_vec = {.f[0] = (float)kernel_ivals, .f[1] = (float)kernel_ivals,
.f[2] = (float)kernel_ivals, .f[3] = (float)kernel_ivals,
.f[4] = (float)kernel_ivals, .f[5] = (float)kernel_ivals,
.f[6] = (float)kernel_ivals, .f[7] = (float)kernel_ivals};
static const vector kernel_constant_vec = {.f[0] = (float)kernel_constant, .f[1] = (float)kernel_constant,
.f[2] = (float)kernel_constant, .f[3] = (float)kernel_constant,
.f[4] = (float)kernel_constant, .f[5] = (float)kernel_constant,
.f[6] = (float)kernel_constant, .f[7] = (float)kernel_constant};
static const vector kernel_igamma3_vec = {.f[0] = (float)kernel_igamma3, .f[1] = (float)kernel_igamma3,
.f[2] = (float)kernel_igamma3, .f[3] = (float)kernel_igamma3,
.f[4] = (float)kernel_igamma3, .f[5] = (float)kernel_igamma3,
.f[6] = (float)kernel_igamma3, .f[7] = (float)kernel_igamma3};
static const vector kernel_igamma4_vec = {.f[0] = (float)kernel_igamma4, .f[1] = (float)kernel_igamma4,
.f[2] = (float)kernel_igamma4, .f[3] = (float)kernel_igamma4,
.f[4] = (float)kernel_igamma4, .f[5] = (float)kernel_igamma4,
.f[6] = (float)kernel_igamma4, .f[7] = (float)kernel_igamma4};
__attribute__((always_inline))
INLINE static void kernel_deval_vec(vector *u, vector *w, vector *dw_dx) {
......@@ -231,10 +255,10 @@ __attribute__((always_inline))
int j, k;
/* Go to the range [0,1[ from [0,H[ */
x.v = u->v * vec_set1((float)kernel_igamma);
x.v = u->v * kernel_igamma_vec.v;
/* Load x and get the interval id. */
ind.m = vec_ftoi(vec_fmin(x.v * vec_set1((float)kernel_ivals), vec_set1((float)kernel_ivals)));
ind.m = vec_ftoi(vec_fmin(x.v * kernel_ivals_vec.v, kernel_ivals_vec.v));
/* load the coefficients. */
for (k = 0; k < VEC_SIZE; k++)
......@@ -252,8 +276,8 @@ __attribute__((always_inline))
}
/* Return everything */
w->v = w->v * vec_set1((float)kernel_constant) * vec_set1((float)kernel_igamma3);
dw_dx->v = dw_dx->v * vec_set1((float)kernel_constant) * vec_set1((float)kernel_igamma4);
w->v = w->v * kernel_constant_vec.v * kernel_igamma3_vec.v;
dw_dx->v = dw_dx->v * kernel_constant_vec.v * kernel_igamma4_vec.v;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment