diff options
author | Anton Khirnov <anton@khirnov.net> | 2018-12-19 15:26:32 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2018-12-19 15:26:32 +0100 |
commit | c2ff1f1c4591b1ed2a3369bff259597291087999 (patch) | |
tree | df25d7a8cdc526429e99012cab3c8f8ffa21a355 | |
parent | 02f3be0de1f3b1de3ca3f80b18a70c2da2f26aed (diff) |
ell_relax: factor out the residual calculation kernel
-rw-r--r-- | ell_relax.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/ell_relax.c b/ell_relax.c index 313af4e..aa791d8 100644 --- a/ell_relax.c +++ b/ell_relax.c @@ -103,6 +103,23 @@ derivatives_calc_s2(EllRelaxContext *ctx, double *dst, ptrdiff_t idx, ptrdiff_t / (144.0 * dx * dy); } +static inline double residual_calc_kernel(EllRelaxContext *ctx, ptrdiff_t idx) +{ + EllRelaxInternal *priv = ctx->priv; + + double u[ELL_RELAX_DIFF_COEFF_NB]; + double res; + + priv->derivatives_calc(ctx, u, idx, priv->stride); + + res = -ctx->rhs[idx]; + for (int i = 0; i < ARRAY_ELEMS(u); i++) + res += u[i] * ctx->diff_coeffs[i][idx]; + + return res; + +} + static void residual_calc(EllRelaxContext *ctx) { EllRelaxInternal *priv = ctx->priv; @@ -112,17 +129,7 @@ static void residual_calc(EllRelaxContext *ctx) for (int idx1 = 0; idx1 < ctx->domain_size[1]; idx1++) for (int idx0 = 0; idx0 < ctx->domain_size[0]; idx0++) { ptrdiff_t idx = idx1 * priv->stride + idx0; - - double u[ELL_RELAX_DIFF_COEFF_NB]; - double res; - - priv->derivatives_calc(ctx, u, idx, priv->stride); - - res = -ctx->rhs[idx]; - for (int i = 0; i < ARRAY_ELEMS(u); i++) - res += u[i] * ctx->diff_coeffs[i][idx]; - - ctx->residual[idx] = res; + ctx->residual[idx] = residual_calc_kernel(ctx, idx); } for (int i = 0; i < ARRAY_ELEMS(ctx->boundaries); i++) { |