Make integrate generic over D
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use super::Float;
|
||||
use ndarray::{ArrayView3, ArrayViewMut3};
|
||||
use ndarray::{ArrayView, ArrayViewMut};
|
||||
|
||||
pub trait ButcherTableau {
|
||||
const S: usize = Self::B.len();
|
||||
@@ -137,7 +137,7 @@ impl EmbeddedButcherTableau for BogackiShampine {
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn integrate<BTableau: ButcherTableau, F, RHS>(
|
||||
pub fn integrate<BTableau: ButcherTableau, F, RHS, D>(
|
||||
mut rhs: RHS,
|
||||
prev: &F,
|
||||
fut: &mut F,
|
||||
@@ -145,8 +145,9 @@ pub fn integrate<BTableau: ButcherTableau, F, RHS>(
|
||||
dt: Float,
|
||||
k: &mut [F],
|
||||
) where
|
||||
for<'r> &'r F: std::convert::Into<ArrayView3<'r, Float>>,
|
||||
for<'r> &'r mut F: std::convert::Into<ArrayViewMut3<'r, Float>>,
|
||||
for<'r> &'r F: std::convert::Into<ArrayView<'r, Float, D>>,
|
||||
for<'r> &'r mut F: std::convert::Into<ArrayViewMut<'r, Float, D>>,
|
||||
D: ndarray::Dimension,
|
||||
RHS: FnMut(&mut F, &F, Float),
|
||||
{
|
||||
assert_eq!(prev.into().shape(), fut.into().shape());
|
||||
@@ -190,7 +191,7 @@ pub fn integrate<BTableau: ButcherTableau, F, RHS>(
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn integrate_embedded_rk<BTableau: EmbeddedButcherTableau, F, RHS>(
|
||||
pub fn integrate_embedded_rk<BTableau: EmbeddedButcherTableau, F, RHS, D>(
|
||||
rhs: RHS,
|
||||
prev: &F,
|
||||
fut: &mut F,
|
||||
@@ -199,11 +200,12 @@ pub fn integrate_embedded_rk<BTableau: EmbeddedButcherTableau, F, RHS>(
|
||||
dt: Float,
|
||||
k: &mut [F],
|
||||
) where
|
||||
for<'r> &'r F: std::convert::Into<ArrayView3<'r, Float>>,
|
||||
for<'r> &'r mut F: std::convert::Into<ArrayViewMut3<'r, Float>>,
|
||||
for<'r> &'r F: std::convert::Into<ArrayView<'r, Float, D>>,
|
||||
for<'r> &'r mut F: std::convert::Into<ArrayViewMut<'r, Float, D>>,
|
||||
RHS: FnMut(&mut F, &F, Float),
|
||||
D: ndarray::Dimension,
|
||||
{
|
||||
integrate::<BTableau, F, RHS>(rhs, prev, fut, time, dt, k);
|
||||
integrate::<BTableau, F, RHS, D>(rhs, prev, fut, time, dt, k);
|
||||
fut2.into().assign(&prev.into());
|
||||
for (&b, k) in BTableau::BSTAR.iter().zip(k.iter()) {
|
||||
if b == 0.0 {
|
||||
@@ -215,7 +217,7 @@ pub fn integrate_embedded_rk<BTableau: EmbeddedButcherTableau, F, RHS>(
|
||||
|
||||
#[cfg(feature = "rayon")]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn integrate_multigrid<BTableau: ButcherTableau, F, RHS>(
|
||||
pub fn integrate_multigrid<BTableau: ButcherTableau, F, RHS, D>(
|
||||
mut rhs: RHS,
|
||||
prev: &[F],
|
||||
fut: &mut [F],
|
||||
@@ -225,10 +227,11 @@ pub fn integrate_multigrid<BTableau: ButcherTableau, F, RHS>(
|
||||
|
||||
pool: &rayon::ThreadPool,
|
||||
) where
|
||||
for<'r> &'r F: std::convert::Into<ArrayView3<'r, Float>>,
|
||||
for<'r> &'r mut F: std::convert::Into<ArrayViewMut3<'r, Float>>,
|
||||
for<'r> &'r F: std::convert::Into<ArrayView<'r, Float, D>>,
|
||||
for<'r> &'r mut F: std::convert::Into<ArrayViewMut<'r, Float, D>>,
|
||||
RHS: FnMut(&mut [F], &[F], Float),
|
||||
F: Send + Sync,
|
||||
D: ndarray::Dimension,
|
||||
{
|
||||
for i in 0.. {
|
||||
let simtime;
|
||||
|
||||
Reference in New Issue
Block a user