From bcc67122331d63e38768e7c6c9633be4fc7bd09b Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 2 Apr 2019 10:24:11 +0200 Subject: egs: optimize applying reflection boundaries --- ell_grid_solve.c | 11 ++++++++--- 1 file 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]; + } } } -- cgit v1.2.3