Skip to content

Commit 9800bbd

Browse files
Merge branch 'develop' into issue-2763-latexify
2 parents 256269c + 9d06ea3 commit 9800bbd

File tree

3 files changed

+61
-27
lines changed

3 files changed

+61
-27
lines changed

pybamm/input/parameters/lithium_ion/NCA_Kim2011.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import pybamm
2-
import os
32

43

54
def graphite_diffusivity_Kim2011(sto, T):
@@ -260,16 +259,34 @@ def electrolyte_conductivity_Kim2011(c_e, T):
260259
return sigma_e
261260

262261

263-
# Load data in the appropriate format
264-
path, _ = os.path.split(os.path.abspath(__file__))
265-
nca_ocp_Kim2011_data = pybamm.parameters.process_1D_data(
266-
"nca_ocp_Kim2011_data.csv", path=path
267-
)
262+
def nca_ocp_Kim2011(sto):
263+
"""
264+
Graphite Open Circuit Potential (OCP) as a function of the stochiometry [1].
265+
266+
References
267+
----------
268+
.. [1] Kim, G. H., Smith, K., Lee, K. J., Santhanagopalan, S., & Pesaran, A.
269+
(2011). Multi-domain modeling of lithium-ion batteries encompassing
270+
multi-physics in varied length scales. Journal of The Electrochemical
271+
Society, 158(8), A955-A969.
272+
"""
268273

274+
U_posi = (
275+
1.638 * sto**10
276+
- 2.222 * sto**9
277+
+ 15.056 * sto**8
278+
- 23.488 * sto**7
279+
+ 81.246 * sto**6
280+
- 344.566 * sto**5
281+
+ 621.3475 * sto**4
282+
- 554.774 * sto**3
283+
+ 264.427 * sto**2
284+
- 66.3691 * sto
285+
+ 11.8058
286+
- 0.61386 * pybamm.exp(5.8201 * sto**136.4)
287+
)
269288

270-
def nca_ocp_Kim2011(sto):
271-
name, (x, y) = nca_ocp_Kim2011_data
272-
return pybamm.Interpolant(x, y, sto, name=name, interpolator="linear")
289+
return U_posi
273290

274291

275292
# Call dict via a function to avoid errors when editing in place

tests/unit/test_experiments/test_simulation_with_experiment.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,23 @@ def test_all_empty_solution_errors(self):
546546
with self.assertRaisesRegex(pybamm.SolverError, "All steps in the cycle"):
547547
sim.solve()
548548

549+
def test_solver_error(self):
550+
model = pybamm.lithium_ion.DFN() # load model
551+
parameter_values = pybamm.ParameterValues("Chen2020")
552+
experiment = pybamm.Experiment(
553+
["Discharge at 10C for 6 minutes or until 2.5 V"]
554+
)
555+
556+
sim = pybamm.Simulation(
557+
model,
558+
parameter_values=parameter_values,
559+
experiment=experiment,
560+
solver=pybamm.CasadiSolver(mode="fast"),
561+
)
562+
563+
with self.assertRaisesRegex(pybamm.SolverError, "IDA_CONV_FAIL"):
564+
sim.solve()
565+
549566
def test_run_experiment_half_cell(self):
550567
experiment = pybamm.Experiment(
551568
[("Discharge at C/20 until 3.5V", "Charge at 1C until 3.8 V")]

tests/unit/test_solvers/test_casadi_solver.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -491,27 +491,27 @@ def test_dae_solver_algebraic_model(self):
491491
solver.solve(model, t_eval)
492492

493493
def test_interpolant_extrapolate(self):
494-
model = pybamm.lithium_ion.DFN()
495-
param = pybamm.ParameterValues("NCA_Kim2011")
496-
experiment = pybamm.Experiment(
497-
["Charge at 1C until 4.2 V"], period="10 seconds"
498-
)
494+
x = np.linspace(0, 2)
495+
var = pybamm.Variable("var")
496+
rhs = pybamm.FunctionParameter("func", {"var": var})
499497

500-
param["Upper voltage cut-off [V]"] = 4.8
498+
model = pybamm.BaseModel()
499+
model.rhs[var] = rhs
500+
model.initial_conditions[var] = pybamm.Scalar(1)
501+
502+
# Bug: we need to set the interpolant via parameter values for the extrapolation
503+
# to be detected
504+
def func(var):
505+
return pybamm.Interpolant(x, x, var, interpolator="linear")
506+
507+
parameter_values = pybamm.ParameterValues({"func": func})
508+
parameter_values.process_model(model)
509+
510+
solver = pybamm.CasadiSolver()
511+
t_eval = [0, 5]
501512

502-
sim = pybamm.Simulation(
503-
model,
504-
parameter_values=param,
505-
experiment=experiment,
506-
solver=pybamm.CasadiSolver(
507-
mode="safe",
508-
dt_max=0.001,
509-
extrap_tol=1e-3,
510-
extra_options_setup={"max_num_steps": 500},
511-
),
512-
)
513513
with self.assertRaisesRegex(pybamm.SolverError, "interpolation bounds"):
514-
sim.solve()
514+
solver.solve(model, t_eval)
515515

516516
def test_casadi_safe_no_termination(self):
517517
model = pybamm.BaseModel()

0 commit comments

Comments
 (0)