From 4c2daf59334f3a44311f84e26a8e48a5c9302a07 Mon Sep 17 00:00:00 2001 From: Magnus Ulimoen Date: Fri, 29 Jan 2021 00:08:31 +0100 Subject: [PATCH] minor thingys --- sbp/src/operators/algos.rs | 14 ++++++-------- sbp/src/operators/traditional4.rs | 13 ++++++++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sbp/src/operators/algos.rs b/sbp/src/operators/algos.rs index 9717a98..917d9e0 100644 --- a/sbp/src/operators/algos.rs +++ b/sbp/src/operators/algos.rs @@ -3,6 +3,7 @@ use super::*; pub(crate) mod constmatrix { /// A row-major matrix #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] + #[repr(transparent)] pub struct Matrix { data: [[T; N]; M], } @@ -94,12 +95,8 @@ pub(crate) mod constmatrix { } } } - pub fn iter(&self) -> impl ExactSizeIterator + DoubleEndedIterator { - (0..N * M).map(move |x| { - let i = x / N; - let j = x % N; - &self[(i, j)] - }) + pub fn iter(&self) -> impl Iterator { + self.data.iter().flatten() } pub fn iter_mut(&mut self) -> impl Iterator { self.data.iter_mut().flatten() @@ -352,7 +349,8 @@ pub(crate) fn diff_op_1d_slice_matrix().last().unwrap(); + let prev = prev.array_windows::().next_back().unwrap(); let prev = ColVector::<_, N>::map_to_col(prev); let fut = ColVector::<_, M>::map_to_col_mut((&mut fut[nx - M..]).try_into().unwrap()); diff --git a/sbp/src/operators/traditional4.rs b/sbp/src/operators/traditional4.rs index 4e5abad..352a92b 100644 --- a/sbp/src/operators/traditional4.rs +++ b/sbp/src/operators/traditional4.rs @@ -92,7 +92,7 @@ impl SbpOperator1d for SBP4 { fn diff_op_row_local(prev: ndarray::ArrayView2, mut fut: ndarray::ArrayViewMut2) { // Magic two lines that prevents or enables optimisation // (doubles instructions when not included) - let mut flipmatrix = SBP4::BLOCK_MATRIX.flip(); + let mut flipmatrix = SBP4::BLOCK_MATRIX; flipmatrix *= &-1.0; for (p, mut f) in prev @@ -228,3 +228,14 @@ fn test_trad4() { 1e-1, ); } + +#[test] +fn block_equality() { + let mut flipped_inverted = SBP4::BLOCK_MATRIX.flip(); + flipped_inverted *= &-1.0; + + assert!(flipped_inverted + .iter() + .zip(SBP4::BLOCKEND_MATRIX.iter()) + .all(|(x, y)| (x - y).abs() < 1e-3)) +}