summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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];
+ }
}
}