@@ -204,7 +204,10 @@ def set_up(self, model, inputs=None):
204
204
model .convert_to_format = "casadi"
205
205
206
206
# Only allow solving sensitivity equations with the casadi format for now
207
- if self .sensitivity is True and model .convert_to_format != "casadi" :
207
+ if (
208
+ self .sensitivity is "explicit forward"
209
+ and model .convert_to_format != "casadi"
210
+ ):
208
211
raise NotImplementedError (
209
212
"model should be converted to casadi format in order to solve "
210
213
"sensitivity equations"
@@ -231,7 +234,7 @@ def set_up(self, model, inputs=None):
231
234
p_casadi [name ] = casadi .MX .sym (name , value .shape [0 ])
232
235
p_casadi_stacked = casadi .vertcat (* [p for p in p_casadi .values ()])
233
236
# sensitivity vectors
234
- if self .sensitivity is True :
237
+ if self .sensitivity == "explicit forward" :
235
238
S_x = casadi .MX .sym ("S_x" , model .len_rhs * p_casadi_stacked .shape [0 ])
236
239
S_z = casadi .MX .sym ("S_z" , model .len_alg * p_casadi_stacked .shape [0 ])
237
240
y_and_S = casadi .vertcat (y_diff , S_x , y_alg , S_z )
@@ -286,7 +289,7 @@ def report(string):
286
289
report (f"Converting { name } to CasADi" )
287
290
func = func .to_casadi (t_casadi , y_casadi , inputs = p_casadi )
288
291
# Add sensitivity vectors to the rhs and algebraic equations
289
- if self .sensitivity is True :
292
+ if self .sensitivity == "explicit forward" :
290
293
if name == "rhs" and model .len_rhs > 0 :
291
294
report ("Creating sensitivity equations for rhs using CasADi" )
292
295
df_dx = casadi .jacobian (func , y_diff )
@@ -408,7 +411,7 @@ def report(string):
408
411
)[0 ]
409
412
init_eval = InitialConditions (initial_conditions , model )
410
413
411
- if self .sensitivity is True :
414
+ if self .sensitivity == "explicit forward" :
412
415
init_eval .y_dummy = np .zeros (
413
416
(
414
417
model .len_rhs_and_alg * (np .vstack (list (inputs .values ())).size + 1 ),
@@ -456,7 +459,7 @@ def report(string):
456
459
):
457
460
# can use DAE solver to solve model with algebraic equations only
458
461
if len (model .rhs ) > 0 :
459
- if self .sensitivity is True :
462
+ if self .sensitivity == "explicit forward" :
460
463
# Copy mass matrix blocks diagonally
461
464
single_mass_matrix_inv = model .mass_matrix_inv .entries .toarray ()
462
465
n_inputs = p_casadi_stacked .shape [0 ]
@@ -946,7 +949,7 @@ def _set_up_ext_and_inputs(self, model, external_variables, inputs):
946
949
name = input_param .name
947
950
if name not in inputs :
948
951
# Don't allow symbolic inputs if using `sensitivity`
949
- if self .sensitivity is True :
952
+ if self .sensitivity == "explicit forward" :
950
953
raise pybamm .SolverError (
951
954
"Cannot have symbolic inputs if explicitly solving forward"
952
955
"sensitivity equations"
0 commit comments