Skip to content

Commit

Permalink
Merge pull request #2751 from 1836005678/patch-2
Browse files Browse the repository at this point in the history
Update NCA_Kim2011.py
  • Loading branch information
valentinsulzer authored Mar 19, 2023
2 parents 7ff45ec + d773b8d commit 9d06ea3
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 27 deletions.
35 changes: 26 additions & 9 deletions pybamm/input/parameters/lithium_ion/NCA_Kim2011.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import pybamm
import os


def graphite_diffusivity_Kim2011(sto, T):
Expand Down Expand Up @@ -260,16 +259,34 @@ def electrolyte_conductivity_Kim2011(c_e, T):
return sigma_e


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

U_posi = (
1.638 * sto**10
- 2.222 * sto**9
+ 15.056 * sto**8
- 23.488 * sto**7
+ 81.246 * sto**6
- 344.566 * sto**5
+ 621.3475 * sto**4
- 554.774 * sto**3
+ 264.427 * sto**2
- 66.3691 * sto
+ 11.8058
- 0.61386 * pybamm.exp(5.8201 * sto**136.4)
)

def nca_ocp_Kim2011(sto):
name, (x, y) = nca_ocp_Kim2011_data
return pybamm.Interpolant(x, y, sto, name=name, interpolator="linear")
return U_posi


# Call dict via a function to avoid errors when editing in place
Expand Down
17 changes: 17 additions & 0 deletions tests/unit/test_experiments/test_simulation_with_experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,23 @@ def test_all_empty_solution_errors(self):
with self.assertRaisesRegex(pybamm.SolverError, "All steps in the cycle"):
sim.solve()

def test_solver_error(self):
model = pybamm.lithium_ion.DFN() # load model
parameter_values = pybamm.ParameterValues("Chen2020")
experiment = pybamm.Experiment(
["Discharge at 10C for 6 minutes or until 2.5 V"]
)

sim = pybamm.Simulation(
model,
parameter_values=parameter_values,
experiment=experiment,
solver=pybamm.CasadiSolver(mode="fast"),
)

with self.assertRaisesRegex(pybamm.SolverError, "IDA_CONV_FAIL"):
sim.solve()

def test_run_experiment_half_cell(self):
experiment = pybamm.Experiment(
[("Discharge at C/20 until 3.5V", "Charge at 1C until 3.8 V")]
Expand Down
36 changes: 18 additions & 18 deletions tests/unit/test_solvers/test_casadi_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,27 +491,27 @@ def test_dae_solver_algebraic_model(self):
solver.solve(model, t_eval)

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

param["Upper voltage cut-off [V]"] = 4.8
model = pybamm.BaseModel()
model.rhs[var] = rhs
model.initial_conditions[var] = pybamm.Scalar(1)

# Bug: we need to set the interpolant via parameter values for the extrapolation
# to be detected
def func(var):
return pybamm.Interpolant(x, x, var, interpolator="linear")

parameter_values = pybamm.ParameterValues({"func": func})
parameter_values.process_model(model)

solver = pybamm.CasadiSolver()
t_eval = [0, 5]

sim = pybamm.Simulation(
model,
parameter_values=param,
experiment=experiment,
solver=pybamm.CasadiSolver(
mode="safe",
dt_max=0.001,
extrap_tol=1e-3,
extra_options_setup={"max_num_steps": 500},
),
)
with self.assertRaisesRegex(pybamm.SolverError, "interpolation bounds"):
sim.solve()
solver.solve(model, t_eval)

def test_casadi_safe_no_termination(self):
model = pybamm.BaseModel()
Expand Down

0 comments on commit 9d06ea3

Please sign in to comment.