Skip to content

Commit 72560c5

Browse files
committed
#1477 got some more casadi tests working
1 parent f5699c4 commit 72560c5

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

pybamm/solvers/base_solver.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from scipy.sparse import block_diag
1212
import multiprocessing as mp
1313
import warnings
14+
import numbers
1415

1516

1617
class BaseSolver(object):
@@ -231,8 +232,15 @@ def set_up(self, model, inputs=None, t_eval=None,
231232
# (FYI: this is used in the Solution class)
232233
model.calculate_sensitivities = calculate_sensitivites
233234
if calculate_sensitivites_explicit:
234-
model.len_rhs_sens = model.len_rhs * len(calculate_sensitivites)
235-
model.len_alg_sens = model.len_alg * len(calculate_sensitivites)
235+
num_parameters = 0
236+
for name in calculate_sensitivites:
237+
# if not a number, assume its a vector
238+
if isinstance(inputs[name], numbers.Number):
239+
num_parameters += 1
240+
else:
241+
num_parameters += len(inputs[name])
242+
model.len_rhs_sens = model.len_rhs * num_parameters
243+
model.len_alg_sens = model.len_alg * num_parameters
236244

237245
if model.convert_to_format != "casadi":
238246
# Create Jacobian from concatenated rhs and algebraic
@@ -615,7 +623,7 @@ def jacp(*args, **kwargs):
615623
# if we have changed the equations to include the explicit sensitivity
616624
# equations, then we also need to update the mass matrix
617625
if calculate_sensitivites_explicit:
618-
n_inputs = len(calculate_sensitivites)
626+
n_inputs = model.len_rhs_sens // model.len_rhs
619627
model.mass_matrix_inv = pybamm.Matrix(
620628
block_diag(
621629
[model.mass_matrix_inv.entries] * (n_inputs + 1), format="csr"

pybamm/solvers/processed_variable.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ def __init__(self, base_variables, base_variables_casadi, solution, warn=True):
4949

5050
self.symbolic_inputs = solution.has_symbolic_inputs
5151

52-
self.u_sol = solution.y
53-
5452
# Sensitivity starts off uninitialized, only set when called
5553
self._sensitivities = None
5654
self.solution_sensitivities = solution.sensitivities
@@ -518,7 +516,7 @@ def initialise_sensitivity_explicit_forward(self):
518516

519517
# Set up symbolic variables
520518
t_casadi = casadi.MX.sym("t")
521-
y_casadi = casadi.MX.sym("y", self.u_sol.shape[0])
519+
y_casadi = casadi.MX.sym("y", self.all_ys[0].shape[0])
522520
p_casadi = {
523521
name: casadi.MX.sym(name, value.shape[0])
524522
for name, value in self.all_inputs[0].items()
@@ -539,10 +537,9 @@ def initialise_sensitivity_explicit_forward(self):
539537
)
540538
for idx in range(len(self.all_ts[0])):
541539
t = self.all_ts[0][idx]
542-
u = self.u_sol[:, idx]
543-
inp = inputs_stacked[:, idx]
544-
next_dvar_dy_eval = dvar_dy_func(t, u, inp)
545-
next_dvar_dp_eval = dvar_dp_func(t, u, inp)
540+
u = self.all_ys[0][:, idx]
541+
next_dvar_dy_eval = dvar_dy_func(t, u, inputs_stacked)
542+
next_dvar_dp_eval = dvar_dp_func(t, u, inputs_stacked)
546543
if idx == 0:
547544
dvar_dy_eval = next_dvar_dy_eval
548545
dvar_dp_eval = next_dvar_dp_eval

tests/unit/test_solvers/test_casadi_solver.py

-1
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,6 @@ def test_solve_sensitivity_scalar_var_vector_input(self):
823823
print("Add -v for more debug output")
824824
import sys
825825

826-
pybamm.set_logging_level('DEBUG')
827826
if "-v" in sys.argv:
828827
debug = True
829828
pybamm.settings.debug_mode = True

0 commit comments

Comments
 (0)