From 92c86c2c41e8b9ef6c23344b89d0ac172d618a6f Mon Sep 17 00:00:00 2001 From: Magnus Ulimoen Date: Wed, 29 Jan 2020 20:44:55 +0100 Subject: [PATCH] generalized integrate in euler --- src/euler.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/euler.rs b/src/euler.rs index bf0ae38..02e3f05 100644 --- a/src/euler.rs +++ b/src/euler.rs @@ -224,23 +224,24 @@ impl Field { } } -pub(crate) fn integrate_rk4( +pub(crate) fn integrate_rk4<'a, F: 'a, SBP, RHS, WB>( rhs: RHS, - prev: &Field, - fut: &mut Field, + prev: &F, + fut: &mut F, dt: f32, grid: &Grid, - k: &mut [Field; 4], + k: &mut [F; 4], mut wb: &mut WB, ) where + F: std::ops::Deref> + std::ops::DerefMut>, SBP: SbpOperator, - RHS: Fn(&mut Field, &Field, &Grid, &mut WB), + RHS: Fn(&mut F, &F, &Grid, &mut WB), { - assert_eq!(prev.0.shape(), fut.0.shape()); + assert_eq!(prev.shape(), fut.shape()); for i in 0..4 { // y = y0 + c*kn - fut.assign(&prev); + fut.assign(prev); match i { 0 => {} 1 | 2 => { @@ -257,8 +258,8 @@ pub(crate) fn integrate_rk4( rhs(&mut k[i], &fut, grid, &mut wb); } - Zip::from(&mut fut.0) - .and(&prev.0) + Zip::from(&mut **fut) + .and(&**prev) .and(&*k[0]) .and(&*k[1]) .and(&*k[2])