@@ -130,6 +130,31 @@ def test_set_atol(self):
130
130
variable_tols = {"Porosity times concentration" : 1e-3 }
131
131
solver .set_atol_by_variable (variable_tols , model )
132
132
133
+ model = pybamm .BaseModel ()
134
+ u = pybamm .Variable ("u" )
135
+ model .rhs = {u : - 0.1 * u }
136
+ model .initial_conditions = {u : 1 }
137
+ t_eval = np .linspace (0 , 3 , 100 )
138
+
139
+ disc = pybamm .Discretisation ()
140
+ disc .process_model (model )
141
+
142
+ # numpy array atol
143
+ atol = np .zeros (1 )
144
+ solver = pybamm .IDAKLUSolver (root_method = "lm" , atol = atol )
145
+ solver .solve (model , t_eval )
146
+
147
+ # list atol
148
+ atol = [1 ]
149
+ solver = pybamm .IDAKLUSolver (root_method = "lm" , atol = atol )
150
+ solver .solve (model , t_eval )
151
+
152
+ # wrong size (should fail)
153
+ atol = [1 , 2 ]
154
+ solver = pybamm .IDAKLUSolver (root_method = "lm" , atol = atol )
155
+ with self .assertRaisesRegex (pybamm .SolverError , 'Absolute tolerances' ):
156
+ solver .solve (model , t_eval )
157
+
133
158
def test_failures (self ):
134
159
# this test implements a python version of the ida Roberts
135
160
# example provided in sundials
@@ -149,6 +174,23 @@ def test_failures(self):
149
174
with self .assertRaisesRegex (pybamm .SolverError , "KLU requires the Jacobian" ):
150
175
solver .solve (model , t_eval )
151
176
177
+ model = pybamm .BaseModel ()
178
+ u = pybamm .Variable ("u" )
179
+ model .rhs = {u : - 0.1 * u }
180
+ model .initial_conditions = {u : 1 }
181
+
182
+ disc = pybamm .Discretisation ()
183
+ disc .process_model (model )
184
+
185
+ solver = pybamm .IDAKLUSolver (root_method = "lm" )
186
+
187
+ # will give solver error
188
+ t_eval = np .linspace (0 , - 3 , 100 )
189
+ with self .assertRaisesRegex (
190
+ pybamm .SolverError , 't_eval must increase monotonically'
191
+ ):
192
+ solver .solve (model , t_eval )
193
+
152
194
def test_dae_solver_algebraic_model (self ):
153
195
model = pybamm .BaseModel ()
154
196
var = pybamm .Variable ("var" )
0 commit comments