Skip to content

Commit c50eaab

Browse files
committed
#492 pulled in mcmb file with activation energies
1 parent fcf7553 commit c50eaab

10 files changed

+195
-24
lines changed

input/parameters/lithium-ion/mcmb2528_lif6-in-ecdmc_lico2_parameters_Dualfoil.csv

+32-24
Original file line numberDiff line numberDiff line change
@@ -66,34 +66,42 @@ Charge transfer coefficient,0.5,Scott Moura FastDFN,
6666
Double-layer capacity [F.m-2],0.2,,
6767
,,,
6868
# Density,,,
69-
Negative current collector density [kg.m-3], 8954,,
70-
Negative electrode density [kg.m-3], 1657,,
71-
Separator density [kg.m-3], 397,,
72-
Positive electrode density [kg.m-3], 3262,,
73-
Positive current collector density [kg.m-3], 2707,,
69+
Negative current collector density [kg.m-3],8954,,
70+
Negative electrode density [kg.m-3],1657,,
71+
Separator density [kg.m-3],397,,
72+
Positive electrode density [kg.m-3],3262,,
73+
Positive current collector density [kg.m-3],2707,,
7474
,,,
75-
# Specific heat capacity
76-
Negative current collector specific heat capacity [J.kg-1.K-1], 385,,
77-
Negative electrode specific heat capacity [J.kg-1.K-1], 700,,
78-
Separator specific heat capacity [J.kg-1.K-1], 700,,
79-
Negative electrode specific heat capacity [J.kg-1.K-1], 700,,
80-
Positive current collector specific heat capacity [J.kg-1.K-1], 897,,
75+
# Specific heat capacity,,,
76+
Negative current collector specific heat capacity [J.kg-1.K-1],385,,
77+
Negative electrode specific heat capacity [J.kg-1.K-1],700,,
78+
Separator specific heat capacity [J.kg-1.K-1],700,,
79+
Negative electrode specific heat capacity [J.kg-1.K-1],700,,
80+
Positive current collector specific heat capacity [J.kg-1.K-1],897,,
8181
,,,
82-
# Thermal conductivity
83-
Negative current collector thermal conductivity [W.m-1.K-1], 401,,
84-
Negative electrode thermal conductivity [W.m-1.K-1], 1.7,,
85-
Separator thermal conductivity [W.m-1.K-1], 0.16,,
86-
Positive electrode thermal conductivity [W.m-1.K-1], 2.1,,
87-
Positive current collector thermal conductivity [W.m-1.K-1], 237,,
82+
# Thermal conductivity,,,
83+
Negative current collector thermal conductivity [W.m-1.K-1],401,,
84+
Negative electrode thermal conductivity [W.m-1.K-1],1.7,,
85+
Separator thermal conductivity [W.m-1.K-1],0.16,,
86+
Positive electrode thermal conductivity [W.m-1.K-1],2.1,,
87+
Positive current collector thermal conductivity [W.m-1.K-1],237,,
88+
,,,
89+
# Thermal parameters,,,
90+
Heat transfer coefficient [W.m-2.K-1],10,,
91+
Typical temperature variation [K],2.4,,
92+
Lumped effective thermal density [J.K-1.m-3],1811600,,
93+
Effective thermal conductivity [W.m-1.K-1],59.3964,,
94+
,,,
95+
# Activation energies,,,
96+
Negative reaction rate activation energy [J.mol-1],3.75E+04,,
97+
Positive reaction rate activation energy [J.mol-1],3.98E+04,,
98+
Negative solid diffusion activation energy [J.mol-1],4.28E+04,,
99+
Positive solid diffusion activation energy [J.mol-1],1.86E+04,,
100+
Electrolyte diffusion activation energy [J.mol-1],3.70E+04,,
101+
Electrolyte conductivity activation energy [J.mol-1],3.47E+04,,
88102
,,,
89-
# Thermal parameters
90-
Heat transfer coefficient [W.m-2.K-1], 10,,
91-
Typical temperature variation [K], 2.4,,
92-
Lumped effective thermal density [J.K-1.m-3], 1.8116E6,,
93-
Effective thermal conductivity [W.m-1.K-1], 59.3964,,
94-
95103
# Initial Conditions,,,
96104
Initial concentration in electrolyte [mol.m-3],1000,Scott Moura FastDFN,
97105
Initial concentration in negative electrode [mol.m-3],19986.609595075,Scott Moura FastDFN,
98106
Initial concentration in positive electrode [mol.m-3],30730.7554385565,Scott Moura FastDFN,
99-
Initial temperature [K], 298.15,
107+
Initial temperature [K],298.15,,

pybamm/__init__.py

+11
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,17 @@ def version(formatted=False):
231231
from .parameters.standard_current_functions.get_user_current import GetUserCurrent
232232
from .parameters.standard_current_functions.get_current_data import GetCurrentData
233233

234+
#
235+
# Voltage profiles
236+
#
237+
238+
from .parameters.standard_voltage_functions.base_voltage import GetVoltage
239+
from .parameters.standard_voltage_functions.get_constant_voltage import (
240+
GetConstantVoltage,
241+
)
242+
from .parameters.standard_voltage_functions.get_user_voltage import GetUserVoltage
243+
from .parameters.standard_voltage_functions.get_voltage_data import GetVoltageData
244+
234245
#
235246
# other
236247
#

pybamm/parameters/electrical_parameters.py

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def abs_non_zero(x):
1515
# --------------------------------------------------------------------------------------
1616
# Dimensional Parameters
1717
I_typ = pybamm.Parameter("Typical current [A]")
18+
V_typ = pybamm.Parameter("Typical voltage [V]")
1819
Q = pybamm.Parameter("Cell capacity [A.h]")
1920
C_rate = abs(I_typ / Q)
2021
n_electrodes_parallel = pybamm.Parameter(
@@ -38,10 +39,18 @@ def abs_non_zero(x):
3839
n_electrodes_parallel * pybamm.geometric_parameters.A_cc
3940
)
4041

42+
# similarly for voltage functions:
43+
dimensional_voltage_with_time = pybamm.FunctionParameter(
44+
"Voltage function", pybamm.t * timescale
45+
)
46+
47+
4148
# Dimensionless current
4249
current_with_time = (
4350
dimensional_current_with_time / I_typ * pybamm.Function(np.sign, I_typ)
4451
)
4552
current_density_with_time = (
4653
dimensional_current_density_with_time / i_typ * pybamm.Function(np.sign, I_typ)
4754
)
55+
56+
voltage_with_time = dimensional_voltage_with_time / V_typ

pybamm/parameters/standard_parameters_lead_acid.py

+8
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
# Electrical
4242
I_typ = pybamm.electrical_parameters.I_typ
43+
V_typ = pybamm.electrical_parameters.V_typ
4344
Q = pybamm.electrical_parameters.Q
4445
C_rate = pybamm.electrical_parameters.C_rate
4546
n_electrodes_parallel = pybamm.electrical_parameters.n_electrodes_parallel
@@ -441,3 +442,10 @@ def U_p(c_e_p):
441442
current_density_with_time = (
442443
dimensional_current_density_with_time / i_typ * pybamm.Function(np.sign, I_typ)
443444
)
445+
446+
# --------------------------------------------------------------------------------------
447+
"7. Input voltage"
448+
dimensional_voltage_with_time = pybamm.FunctionParameter(
449+
"Voltage function", pybamm.t * tau_discharge
450+
)
451+
voltage_with_time = dimensional_voltage_with_time / V_typ

pybamm/parameters/standard_parameters_lithium_ion.py

+8
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050

5151
# Electrical
5252
I_typ = pybamm.electrical_parameters.I_typ
53+
V_typ = pybamm.electrical_parameters.V_typ
5354
Q = pybamm.electrical_parameters.Q
5455
C_rate = pybamm.electrical_parameters.C_rate
5556
n_electrodes_parallel = pybamm.electrical_parameters.n_electrodes_parallel
@@ -386,3 +387,10 @@ def dUdT_p(c_s_p):
386387
current_density_with_time = (
387388
dimensional_current_density_with_time / i_typ * pybamm.Function(np.sign, I_typ)
388389
)
390+
391+
# --------------------------------------------------------------------------------------
392+
"7. Input voltage"
393+
dimensional_voltage_with_time = pybamm.FunctionParameter(
394+
"Voltage function", pybamm.t * tau_discharge
395+
)
396+
voltage_with_time = dimensional_voltage_with_time / V_typ
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#
2+
# Tests for voltage input functions
3+
#
4+
import pybamm
5+
import numbers
6+
import unittest
7+
import numpy as np
8+
9+
10+
class TestVoltageFunctions(unittest.TestCase):
11+
def test_base_voltage(self):
12+
function = pybamm.GetVoltage()
13+
self.assertEqual(function(10), 1)
14+
15+
def test_constant_current(self):
16+
function = pybamm.GetConstantVoltage(voltage=4)
17+
assert isinstance(function(0), numbers.Number)
18+
assert isinstance(function(np.zeros(3)), numbers.Number)
19+
assert isinstance(function(np.zeros([3, 3])), numbers.Number)
20+
21+
# test simplify
22+
voltage = pybamm.electrical_parameters.voltage_with_time
23+
parameter_values = pybamm.ParameterValues(
24+
{
25+
"Typical voltage [A]": 2,
26+
"Typical timescale [s]": 1,
27+
"Voltage function": pybamm.GetConstantVoltage(),
28+
}
29+
)
30+
processed_voltage = parameter_values.process_symbol(voltage)
31+
self.assertIsInstance(processed_voltage.simplify(), pybamm.Scalar)
32+
33+
def test_get_current_data(self):
34+
# test units
35+
function_list = [
36+
pybamm.GetVoltageData("US06.csv", units="[V]"),
37+
pybamm.GetVoltageData("car_current.csv", units="[]", voltage_scale=10),
38+
]
39+
for function in function_list:
40+
function.interpolate()
41+
42+
# test process parameters
43+
dimensional_voltage = pybamm.electrical_parameters.dimensional_voltage_with_time
44+
parameter_values = pybamm.ParameterValues(
45+
{
46+
"Typical voltage [V]": 2,
47+
"Typical timescale [s]": 1,
48+
"Voltage function": pybamm.GetCurrentData(
49+
"car_voltage.csv", units="[]"
50+
),
51+
}
52+
)
53+
dimensional_voltage_eval = parameter_values.process_symbol(dimensional_voltage)
54+
55+
def voltage(t):
56+
return dimensional_voltage_eval.evaluate(t=t)
57+
58+
function_list.append(voltage)
59+
60+
standard_tests = StandardVoltageFunctionTests(function_list, always_array=True)
61+
standard_tests.test_all()
62+
63+
def test_user_current(self):
64+
# create user-defined sin function
65+
66+
def my_fun(t, A, omega):
67+
return A * np.sin(2 * np.pi * omega * t)
68+
69+
# choose amplitude and frequency
70+
A = pybamm.electrical_parameters.V_typ
71+
omega = 3
72+
73+
# pass my_fun to GetUserVoltage class, giving the additonal parameters as
74+
# keyword arguments
75+
voltage = pybamm.GetUserVoltage(my_fun, A=A, omega=omega)
76+
77+
# set and process parameters
78+
parameter_values = pybamm.ParameterValues(
79+
{
80+
"Typical voltage [V]": 2,
81+
"Typical timescale [s]": 1,
82+
"Voltage function": voltage,
83+
}
84+
)
85+
dimensional_voltage = pybamm.electrical_parameters.dimensional_voltage_with_time
86+
dimensional_voltage_eval = parameter_values.process_symbol(dimensional_voltage)
87+
88+
def user_voltage(t):
89+
return dimensional_voltage_eval.evaluate(t=t)
90+
91+
# check output types
92+
standard_tests = StandardVoltageFunctionTests([user_voltage])
93+
standard_tests.test_all()
94+
95+
# check output correct value
96+
time = np.linspace(0, 3600, 600)
97+
np.testing.assert_array_almost_equal(
98+
voltage(time), 2 * np.sin(2 * np.pi * 3 * time)
99+
)
100+
101+
102+
class StandardVoltageFunctionTests(object):
103+
def __init__(self, function_list, always_array=False):
104+
self.function_list = function_list
105+
self.always_array = always_array
106+
107+
def test_output_type(self):
108+
for function in self.function_list:
109+
if self.always_array is True:
110+
assert isinstance(function(0), np.ndarray)
111+
else:
112+
assert isinstance(function(0), numbers.Number)
113+
assert isinstance(function(np.zeros(3)), np.ndarray)
114+
assert isinstance(function(np.zeros([3, 3])), np.ndarray)
115+
116+
def test_all(self):
117+
self.test_output_type()
118+
119+
120+
if __name__ == "__main__":
121+
print("Add -v for more debug output")
122+
import sys
123+
124+
if "-v" in sys.argv:
125+
debug = True
126+
pybamm.settings.debug_mode = True
127+
unittest.main()

0 commit comments

Comments
 (0)