Skip to content

Commit 30939b4

Browse files
fix: build pred-prey fit example, fix compile errors (#225)
* fix: build pred-prey fit example, fix compile errors * fix in statements in diffsl code
1 parent 5e15b98 commit 30939b4

File tree

10 files changed

+41
-39
lines changed

10 files changed

+41
-39
lines changed

book/src/primer/src/spm.ds

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
in = [currentfunctiona]
2-
currentfunctiona {
3-
1
1+
in {
2+
currentfunctiona = 1
43
}
54
constant0_i {
65
(0:19): 0.0,

diffsol/benches/pybamm_dfn.diffsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
in = []
21
constant0_i {
32
(0:1): 0.00018906,
43
}

diffsol/src/ode_equations/test_models/foodweb.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ where
6969

7070
let code = format!(
7171
"
72-
in = []
7372
AA {{ 1.0 }}
7473
EE {{ 10000.0 }}
7574
GG {{ 0.5e-6 }}

diffsol/src/ode_equations/test_models/heat2d.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ pub fn heat2d_diffsl_problem<
5858

5959
let code = format!(
6060
"
61-
in = []
6261
D_ij {{
6362
{}
6463
}}

examples/intro-logistic-diffsl/src/main.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ fn main() {
99
.p([1.0, 10.0])
1010
.build_from_diffsl::<CG>(
1111
"
12-
in = [r, k]
13-
r { 1.0 }
14-
k { 1.0 }
12+
in_i { r = 1.0, k = 1.0 }
1513
u { 0.1 }
1614
F { r * u * (1.0 - u / k) }
1715
",

examples/mass-spring-fitting-adjoint/src/main_llvm.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ pub fn main() {
9393
.out_rtol(1e-6)
9494
.build_from_diffsl(
9595
"
96-
in = [k, c]
97-
k { 1.0 } m { 1.0 } c { 0.1 }
96+
in_i { k = 1.0, c = 0.1 }
97+
m { 1.0 }
9898
u_i {
9999
x = 1,
100100
v = 0,

examples/population-dynamics/src/main.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ fn phase_plane() {
6161
.p([1.0])
6262
.build_from_diffsl::<CG>(
6363
"
64-
in = [ y0 ]
65-
y0 { 1.0 }
64+
in { y0 = 1.0 }
6665
a { 2.0/3.0 } b { 4.0/3.0 } c { 1.0 } d { 1.0 }
6766
u_i {
6867
y1 = y0,

examples/predator-prey-fitting-forward/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ edition.workspace = true
55
publish = false
66

77
[features]
8-
diffsl-llvm15 = ["diffsol/diffsl-llvm15"]
9-
diffsl-llvm16 = ["diffsol/diffsl-llvm16"]
10-
diffsl-llvm17 = ["diffsol/diffsl-llvm17"]
11-
diffsl-llvm18 = ["diffsol/diffsl-llvm18"]
8+
diffsl-llvm15 = ["diffsol/diffsl-llvm15", "diffsl-llvm"]
9+
diffsl-llvm16 = ["diffsol/diffsl-llvm16", "diffsl-llvm"]
10+
diffsl-llvm17 = ["diffsol/diffsl-llvm17", "diffsl-llvm"]
11+
diffsl-llvm18 = ["diffsol/diffsl-llvm18", "diffsl-llvm"]
1212
diffsl-llvm = []
1313

1414
[dependencies]

examples/predator-prey-fitting-forward/src/main_llvm.rs

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ use argmin::{
44
};
55
use argmin_observer_slog::SlogLogger;
66
use diffsol::{
7-
DiffSl, OdeBuilder, OdeEquations, OdeSolverMethod, OdeSolverProblem,
8-
SensitivitiesOdeSolverMethod,
7+
DiffSl, MatrixCommon, OdeBuilder, OdeEquations, OdeSolverMethod, OdeSolverProblem, Op,
8+
SensitivitiesOdeSolverMethod, Vector,
99
};
10-
use nalgebra::{DMatrix, DVector};
1110
use std::cell::RefCell;
1211

13-
type M = DMatrix<f64>;
14-
type V = DVector<f64>;
12+
type M = diffsol::NalgebraMat<f64>;
13+
type V = diffsol::NalgebraVec<f64>;
1514
type T = f64;
1615
type LS = diffsol::NalgebraLU<f64>;
1716
type CG = diffsol::LlvmModule;
@@ -29,15 +28,19 @@ impl CostFunction for Problem {
2928

3029
fn cost(&self, param: &Self::Param) -> Result<Self::Output, argmin_math::Error> {
3130
let mut problem = self.problem.borrow_mut();
32-
problem.eqn_mut().set_params(&V::from_vec(param.clone()));
31+
let ctx = *problem.eqn().context();
32+
problem
33+
.eqn_mut()
34+
.set_params(&V::from_vec(param.clone(), ctx));
3335
let mut solver = problem.bdf::<LS>().unwrap();
3436
let ys = match solver.solve_dense(&self.ts_data) {
3537
Ok(ys) => ys,
3638
Err(_) => return Ok(f64::MAX / 1000.),
3739
};
3840
let loss = ys
41+
.inner()
3942
.column_iter()
40-
.zip(self.ys_data.column_iter())
43+
.zip(self.ys_data.inner().column_iter())
4144
.map(|(a, b)| (a - b).norm_squared())
4245
.sum::<f64>();
4346
Ok(loss)
@@ -50,7 +53,10 @@ impl Gradient for Problem {
5053

5154
fn gradient(&self, param: &Self::Param) -> Result<Self::Gradient, argmin_math::Error> {
5255
let mut problem = self.problem.borrow_mut();
53-
problem.eqn_mut().set_params(&V::from_vec(param.clone()));
56+
let ctx = *problem.eqn().context();
57+
problem
58+
.eqn_mut()
59+
.set_params(&V::from_vec(param.clone(), ctx));
5460
let mut solver = problem.bdf_sens::<LS>().unwrap();
5561
let (ys, sens) = match solver.solve_dense_sensitivities(&self.ts_data) {
5662
Ok((ys, sens)) => (ys, sens),
@@ -59,8 +65,13 @@ impl Gradient for Problem {
5965
let dlossdp = sens
6066
.into_iter()
6167
.map(|s| {
62-
s.column_iter()
63-
.zip(ys.column_iter().zip(self.ys_data.column_iter()))
68+
s.inner()
69+
.column_iter()
70+
.zip(
71+
ys.inner()
72+
.column_iter()
73+
.zip(self.ys_data.inner().column_iter()),
74+
)
6475
.map(|(si, (yi, di))| 2.0 * (yi - di).dot(&si))
6576
.sum::<f64>()
6677
})
@@ -70,10 +81,9 @@ impl Gradient for Problem {
7081
}
7182

7283
pub fn main() {
73-
let eqn = DiffSl::<M, CG>::compile(
74-
"
75-
in = [ b, d ]
76-
a { 2.0/3.0 } b { 4.0/3.0 } c { 1.0 } d { 1.0 } x0 { 1.0 } y0 { 1.0 }
84+
let code = "
85+
in_i { b = 4.0/3.0, d = 1.0 }
86+
a { 2.0/3.0 } c { 1.0 } x0 { 1.0 } y0 { 1.0 }
7787
u_i {
7888
y1 = x0,
7989
y2 = y0,
@@ -82,9 +92,7 @@ pub fn main() {
8292
a * y1 - b * y1 * y2,
8393
c * y1 * y2 - d * y2,
8494
}
85-
",
86-
)
87-
.unwrap();
95+
";
8896

8997
let (b_true, d_true) = (4.0 / 3.0, 1.0);
9098
let t_data = (0..101)
@@ -94,10 +102,12 @@ pub fn main() {
94102
.p([b_true, d_true])
95103
.sens_atol([1e-6])
96104
.sens_rtol(1e-6)
97-
.build_from_eqn(eqn)
105+
.build_from_diffsl(code)
98106
.unwrap();
99-
let mut solver = problem.bdf::<LS>().unwrap();
100-
let ys_data = solver.solve_dense(&t_data).unwrap();
107+
let ys_data = {
108+
let mut solver = problem.bdf::<LS>().unwrap();
109+
solver.solve_dense(&t_data).unwrap()
110+
};
101111

102112
let cost = Problem {
103113
ys_data,

examples/python-diffsol/test/test_solve.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ class TestStringMethods(unittest.TestCase):
77
def test_solve(self):
88
model = PyDiffsol(
99
"""
10-
in = [r, k]
11-
r { 1 } k { 1 }
10+
in_i { r = 1, k = 1 }
1211
u_i { y = 0.1 }
1312
F_i { (r * y) * (1 - (y / k)) }
1413
"""

0 commit comments

Comments
 (0)