summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-04-02 10:24:11 +0200
committerAnton Khirnov <anton@khirnov.net>2019-04-02 10:24:11 +0200
commitbcc67122331d63e38768e7c6c9633be4fc7bd09b (patch)
treedd5cb1ee00171a233f907ab8af198f360074cd50
parent05fa685402151ad86563a1b9d2ef9b7294cb2d75 (diff)
egs: optimize applying reflection boundaries
-rw-r--r--ell_grid_solve.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/ell_grid_solve.c b/ell_grid_solve.c
index 6c8a863..9aee0e8 100644
--- a/ell_grid_solve.c
+++ b/ell_grid_solve.c
@@ -147,11 +147,16 @@ static void boundaries_apply_reflect(double *dst, const ptrdiff_t dst_stride[2],
const double *src, ptrdiff_t src_stride,
size_t boundary_size)
{
- for (size_t i = 0; i < boundary_size; i++) {
+ if (dst_stride[0] == 1) {
for (int j = 1; j <= FD_STENCIL_MAX; j++)
- dst[dst_stride[1] * j] = dst[-dst_stride[1] * j];
+ memcpy(dst + j * dst_stride[1], dst - j * dst_stride[1], sizeof(*dst) * boundary_size);
+ } else {
+ for (size_t i = 0; i < boundary_size; i++) {
+ for (int j = 1; j <= FD_STENCIL_MAX; j++)
+ dst[dst_stride[1] * j] = dst[-dst_stride[1] * j];
- dst += dst_stride[0];
+ dst += dst_stride[0];
+ }
}
}