Skip to content

Commit 34186fe

Browse files
perf: speed up time loop in processed var init sens (#5000)
* perf: speed up time loop in processed var init sens * add changelog
1 parent dce8938 commit 34186fe

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Add a solver option to change `on_extrapolation` behavior to `"error"`, `"warn"`, or `"ignore"` on extrapolation events. ([#4993](https://github.com/pybamm-team/PyBaMM/pull/4993))
66
- Improve reliability of `CasadiAlgebraicSolver` and added an option for the `step_tol` of the Newton iteration. ([#4985](https://github.com/pybamm-team/PyBaMM/pull/4985))
7+
- Speed up calculation of variable sensitivities in `ProcessedVariable` ([#5000](https://github.com/pybamm-team/PyBaMM/pull/5000))
78

89
## Bug fixes
910

src/pybamm/solvers/processed_variable.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -443,16 +443,18 @@ def initialise_sensitivity_explicit_forward(self):
443443
dvar_dp_func = casadi.Function(
444444
"dvar_dp", [t_casadi, y_casadi, p_casadi_stacked], [dvar_dp]
445445
)
446-
for idx, t in enumerate(ts):
447-
u = ys[:, idx]
448-
next_dvar_dy_eval = dvar_dy_func(t, u, inputs_stacked)
449-
next_dvar_dp_eval = dvar_dp_func(t, u, inputs_stacked)
450-
if idx == 0:
451-
dvar_dy_eval = next_dvar_dy_eval
452-
dvar_dp_eval = next_dvar_dp_eval
453-
else:
454-
dvar_dy_eval = casadi.diagcat(dvar_dy_eval, next_dvar_dy_eval)
455-
dvar_dp_eval = casadi.vertcat(dvar_dp_eval, next_dvar_dp_eval)
446+
dvar_dy_eval = casadi.diagcat(
447+
*[
448+
dvar_dy_func(t, ys[:, idx], inputs_stacked)
449+
for idx, t in enumerate(ts)
450+
]
451+
)
452+
dvar_dp_eval = casadi.vertcat(
453+
*[
454+
dvar_dp_func(t, ys[:, idx], inputs_stacked)
455+
for idx, t in enumerate(ts)
456+
]
457+
)
456458

457459
# Compute sensitivity
458460
S_var = dvar_dy_eval @ dy_dp + dvar_dp_eval

0 commit comments

Comments
 (0)