Skip to content

Commit d422d84

Browse files
committed
#2789 add "all" to sensitivities for idaklu solver
1 parent 1d6bd48 commit d422d84

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

pybamm/solvers/idaklu_solver.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,14 +532,18 @@ def _integrate(self, model, t_eval, inputs_dict=None):
532532
y_out = sol.y.reshape((number_of_timesteps, number_of_states))
533533

534534
# return sensitivity solution, we need to flatten yS to
535-
# (#timesteps * #states,) to match format used by Solution
535+
# (#timesteps * #states (where t is changing the quickest),) to match format used by Solution
536+
# note that yS is (n_p, n_t, n_y)
536537
if number_of_sensitivity_parameters != 0:
537538
yS_out = {
538539
name: sol.yS[i].reshape(-1, 1)
539540
for i, name in enumerate(sensitivity_names)
540541
}
542+
# add "all" stacked sensitivities ((#timesteps * #states,#sens_params))
543+
yS_out["all"] = np.hstack([yS_out[name] for name in sensitivity_names])
541544
else:
542545
yS_out = False
546+
543547
if sol.flag in [0, 2]:
544548
# 0 = solved for all t_eval
545549
if sol.flag == 0:

tests/unit/test_solvers/test_idaklu_solver.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ def test_ida_roberts_klu_sensitivities(self):
200200
model.rhs = {u: a * v}
201201
model.algebraic = {v: 1 - v}
202202
model.initial_conditions = {u: 0, v: 1}
203+
model.variables = {"2u": 2 * u}
203204

204205
disc = pybamm.Discretisation()
205206
disc.process_model(model)
@@ -250,6 +251,11 @@ def test_ida_roberts_klu_sensitivities(self):
250251
dyda_fd = dyda_fd.transpose().reshape(-1, 1)
251252

252253
np.testing.assert_array_almost_equal(dyda_ida, dyda_fd)
254+
255+
# get the sensitivities for the variable
256+
d2uda = sol["2u"].sensitivities["a"]
257+
np.testing.assert_array_almost_equal(2 * dyda_ida[0:200:2], d2uda)
258+
253259

254260
def test_sensitivities_with_events(self):
255261
# this test implements a python version of the ida Roberts

0 commit comments

Comments
 (0)