Move integrate to separate crate

This commit is contained in:
2021-03-22 17:49:35 +01:00
parent be1330ec02
commit 7aadda3de9
16 changed files with 187 additions and 118 deletions

View File

@@ -10,6 +10,7 @@ sbp = { path = "../sbp", features = ["sparse"] }
ndarray = "0.14.0"
plotters = { version = "0.3.0", default-features = false, features = ["bitmap_gif", "bitmap_backend", "line_series"] }
sprs = { version = "0.10.0", default-features = false }
integrate = { path = "../utils/integrate" }
[dev-dependencies]
arpack = { git = "https://github.com/mulimoen/arpack-rs", branch = "main" }

View File

@@ -1,11 +1,24 @@
use integrate::{integrate, Rk4};
use ndarray::{Array1, ArrayView1};
use plotters::prelude::*;
use sbp::{
integrate::{integrate, Rk4},
operators::{SbpOperator1d, SbpOperator1d2, SBP4},
Float,
};
struct Field(Array1<Float>);
impl integrate::Integrable for Field {
type State = Array1<Float>;
type Diff = Array1<Float>;
fn assign(s: &mut Self::State, o: &Self::State) {
s.assign(o)
}
fn scaled_add(s: &mut Self::State, o: &Self::Diff, scale: Float) {
s.scaled_add(scale, o)
}
}
fn main() {
let nx: usize = 101;
let x = Array1::from_shape_fn((nx,), |i| i as Float / (nx - 1) as Float);
@@ -76,7 +89,7 @@ fn dual_dirichlet(v: ArrayView1<Float>, v0: Float, vn: Float) {
.unwrap();
drawing_area.present().unwrap();
}
integrate::<Rk4, _, _, _>(rhs, &v1, &mut v2, &mut 0.0, dt, &mut k);
integrate::<Rk4, Field, _>(rhs, &v1, &mut v2, &mut 0.0, dt, &mut k);
std::mem::swap(&mut v1, &mut v2);
}
}
@@ -143,7 +156,7 @@ fn neumann_dirichlet(v: ArrayView1<Float>, v0: Float, vn: Float) {
.unwrap();
drawing_area.present().unwrap();
}
integrate::<Rk4, _, _, _>(rhs, &v1, &mut v2, &mut 0.0, dt, &mut k);
integrate::<Rk4, Field, _>(rhs, &v1, &mut v2, &mut 0.0, dt, &mut k);
std::mem::swap(&mut v1, &mut v2);
}
}
@@ -231,7 +244,7 @@ fn dual_dirichlet_sparse(v: ArrayView1<Float>, v0: Float, vn: Float) {
.unwrap();
drawing_area.present().unwrap();
}
integrate::<Rk4, _, _, _>(rhs, &v1, &mut v2, &mut 0.0, dt, &mut k);
integrate::<Rk4, Field, _>(rhs, &v1, &mut v2, &mut 0.0, dt, &mut k);
std::mem::swap(&mut v1, &mut v2);
}
}