Skip to content

Commit ab9d5a6

Browse files
#492 fix bugs
1 parent 8ff9640 commit ab9d5a6

16 files changed

+90
-35
lines changed

examples/scripts/compare_lead_acid_3D.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,22 @@
2121
# {"current collector": "potential pair", "dimensionality": 2}, name="2+1D LOQS"
2222
# ),
2323
pybamm.lead_acid.Full(
24-
{"current collector": "uniform", "dimensionality": 1}, name="1+1D Full"
24+
{"current collector": "potential pair", "dimensionality": 1}, name="1+1D Full"
2525
),
2626
# pybamm.lead_acid.Full(
2727
# {"dimensionality": 1}, name="1+1D uniform Full"
2828
# ),
2929
pybamm.lead_acid.Composite(
30-
{"current collector": "uniform", "dimensionality": 1}, name="1+1D composite"
30+
{"current collector": "potential pair quite conductive", "dimensionality": 1},
31+
name="1+1D composite",
3132
),
3233
pybamm.lead_acid.Composite(
33-
{"current collector": "uniform", "dimensionality": 1}, name="1+1D composite"
34+
{"current collector": "potential pair", "dimensionality": 1},
35+
name="1+1D composite",
3436
),
3537
# # pybamm.lead_acid.Composite({"dimensionality": 1}, name="composite"),
3638
pybamm.lead_acid.LOQS(
37-
{"current collector": "uniform", "dimensionality": 1}, name="1+1D LOQS"
39+
{"current collector": "potential pair", "dimensionality": 1}, name="1+1D LOQS"
3840
),
3941
# pybamm.lead_acid.LOQS({"dimensionality": 1}, name="LOQS"),
4042
]

pybamm/models/full_battery_models/base_battery_model.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -493,11 +493,11 @@ def set_external_circuit_submodel(self):
493493
if self.options["operating mode"] == "current":
494494
self.submodels[
495495
"external circuit"
496-
] = pybamm.external_circuit.ConstantCurrent(self.param)
496+
] = pybamm.external_circuit.CurrentControl(self.param)
497497
if self.options["operating mode"] == "voltage":
498498
self.submodels[
499499
"external circuit"
500-
] = pybamm.external_circuit.ConstantVoltage(self.param)
500+
] = pybamm.external_circuit.VoltageControl(self.param)
501501

502502
def set_tortuosity_submodels(self):
503503
self.submodels["electrolyte tortuosity"] = pybamm.tortuosity.Bruggeman(

pybamm/models/full_battery_models/lead_acid/full.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Full(BaseModel):
3434
def __init__(self, options=None, name="Full model", build=True):
3535
super().__init__(options, name)
3636

37+
self.set_external_circuit_submodel()
3738
self.set_reactions()
3839
self.set_interfacial_submodel()
3940
self.set_porosity_submodel()

pybamm/models/full_battery_models/lead_acid/higher_order.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class BaseHigherOrderModel(BaseModel):
3434
def __init__(self, options=None, name="Composite model", build=True):
3535
super().__init__(options, name)
3636

37+
self.set_external_circuit_submodel()
3738
self.set_leading_order_model()
3839
self.set_reactions()
3940
# Electrolyte submodel to get first-order concentrations

pybamm/models/full_battery_models/lead_acid/loqs.py

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class LOQS(BaseModel):
3333
def __init__(self, options=None, name="LOQS model", build=True):
3434
super().__init__(options, name)
3535

36+
self.set_external_circuit_submodel()
3637
self.set_reactions()
3738
self.set_interfacial_submodel()
3839
self.set_convection_submodel()

pybamm/models/full_battery_models/lithium_ion/dfn.py

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class DFN(BaseModel):
3333
def __init__(self, options=None, name="Doyle-Fuller-Newman model", build=True):
3434
super().__init__(options, name)
3535

36+
self.set_external_circuit_submodel()
3637
self.set_reactions()
3738
self.set_porosity_submodel()
3839
self.set_tortuosity_submodels()

pybamm/models/full_battery_models/lithium_ion/spm.py

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class SPM(BaseModel):
3232
def __init__(self, options=None, name="Single Particle Model", build=True):
3333
super().__init__(options, name)
3434

35+
self.set_external_circuit_submodel()
3536
self.set_porosity_submodel()
3637
self.set_tortuosity_submodels()
3738
self.set_convection_submodel()

pybamm/models/full_battery_models/lithium_ion/spme.py

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def __init__(
3535
):
3636
super().__init__(options, name)
3737

38+
self.set_external_circuit_submodel()
3839
self.set_reactions()
3940
self.set_porosity_submodel()
4041
self.set_tortuosity_submodels()

pybamm/models/submodels/current_collector/base_current_collector.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ def _get_standard_negative_potential_variables(self, phi_s_cn):
3535
3636
Parameters
3737
----------
38-
phi_cc : :class:`pybamm.Symbol`
39-
The potential in the current collector.
38+
phi_s_cn : :class:`pybamm.Symbol`
39+
The potential in the negative current collector.
4040
4141
Returns
4242
-------
@@ -61,8 +61,10 @@ def _get_standard_potential_variables(self, phi_s_cn, phi_s_cp):
6161
6262
Parameters
6363
----------
64-
phi_cc : :class:`pybamm.Symbol`
65-
The potential in the current collector.
64+
phi_s_cn : :class:`pybamm.Symbol`
65+
The potential in the negative current collector.
66+
phi_s_cp : :class:`pybamm.Symbol`
67+
The potential in the positive current collector.
6668
6769
Returns
6870
-------

pybamm/models/submodels/current_collector/homogeneous_current_collector.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,10 @@ class Uniform(BaseModel):
2121
def __init__(self, param):
2222
super().__init__(param)
2323

24-
def get_derived_variables(self, variables):
24+
def get_coupled_variables(self, variables):
2525

2626
# TODO: grad not implemented for 2D yet
2727
i_cc = pybamm.Scalar(0)
28-
import ipdb
29-
30-
ipdb.set_trace()
3128
i_boundary_cc = pybamm.PrimaryBroadcast(
3229
variables["Total current density"], "current collector"
3330
)
@@ -43,4 +40,5 @@ def get_derived_variables(self, variables):
4340
variables["Leading-order current collector current density"] = variables[
4441
"Current collector current density"
4542
]
43+
4644
return variables

pybamm/models/submodels/current_collector/quite_conductive_potential_pair.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def set_algebraic(self, variables):
7373
def set_initial_conditions(self, variables):
7474

7575
param = self.param
76-
applied_current = variables["Total current density"]
76+
applied_current = param.current_with_time
7777
cc_area = self._get_effective_current_collector_area()
7878
phi_s_cn = variables["Negative current collector potential"]
7979
i_boundary_cc = variables["Current collector current density"]

pybamm/models/submodels/electrode/base_electrode.py

+60-17
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,23 @@ def _get_standard_potential_variables(self, phi_s):
4040
electrode.
4141
"""
4242
param = self.param
43+
pot = param.potential_scale
4344
phi_s_av = pybamm.x_average(phi_s)
4445

4546
if self.domain == "Negative":
46-
phi_s_dim = param.potential_scale * phi_s
47-
phi_s_av_dim = param.potential_scale * phi_s_av
47+
phi_s_dim = pot * phi_s
48+
phi_s_av_dim = pot * phi_s_av
4849
delta_phi_s = phi_s
4950

5051
elif self.domain == "Positive":
51-
phi_s_dim = param.U_p_ref - param.U_n_ref + param.potential_scale * phi_s
52-
phi_s_av_dim = (
53-
param.U_p_ref - param.U_n_ref + param.potential_scale * phi_s_av
54-
)
52+
phi_s_dim = param.U_p_ref - param.U_n_ref + pot * phi_s
53+
phi_s_av_dim = param.U_p_ref - param.U_n_ref + pot * phi_s_av
5554

5655
v = pybamm.boundary_value(phi_s, "right")
5756
delta_phi_s = phi_s - pybamm.PrimaryBroadcast(v, ["positive electrode"])
5857
delta_phi_s_av = pybamm.x_average(delta_phi_s)
59-
delta_phi_s_dim = delta_phi_s * param.potential_scale
60-
delta_phi_s_av_dim = delta_phi_s_av * param.potential_scale
58+
delta_phi_s_dim = delta_phi_s * pot
59+
delta_phi_s_av_dim = delta_phi_s_av * pot
6160

6261
variables = {
6362
self.domain + " electrode potential": phi_s,
@@ -108,6 +107,41 @@ def _get_standard_current_variables(self, i_s):
108107

109108
return variables
110109

110+
def _get_standard_current_collector_potential_variables(self, phi_s_cn, phi_s_cp):
111+
"""
112+
A private function to obtain the standard variables which
113+
can be derived from the potentials in the current collector.
114+
115+
Parameters
116+
----------
117+
phi_cc : :class:`pybamm.Symbol`
118+
The potential in the current collector.
119+
120+
Returns
121+
-------
122+
variables : dict
123+
The variables which can be derived from the potential in the
124+
current collector.
125+
"""
126+
127+
pot_scale = self.param.potential_scale
128+
U_ref = self.param.U_p_ref - self.param.U_n_ref
129+
130+
# Local potential difference
131+
V_cc = phi_s_cp - phi_s_cn
132+
133+
variables = {
134+
"Negative current collector potential": phi_s_cn,
135+
"Negative current collector potential [V]": phi_s_cn * pot_scale,
136+
"Positive current collector potential": phi_s_cp,
137+
"Positive current collector potential [V]": U_ref + phi_s_cp * pot_scale,
138+
"Local current collector potential difference": V_cc,
139+
"Local current collector potential difference [V]": U_ref
140+
+ V_cc * pot_scale,
141+
}
142+
143+
return variables
144+
111145
def _get_standard_whole_cell_variables(self, variables):
112146
"""
113147
A private function to obtain the whole-cell versions of the
@@ -131,14 +165,23 @@ def _get_standard_whole_cell_variables(self, variables):
131165

132166
i_s = pybamm.Concatenation(i_s_n, i_s_s, i_s_p)
133167

168+
variables.update({"Electrode current density": i_s})
134169
if self.set_positive_potential:
135-
phi_s_p = variables["Positive electrode potential"]
136-
phi_s_cp = pybamm.boundary_value(phi_s_p, "right")
137-
variables = {
138-
"Electrode current density": i_s,
139-
"Positive current collector potential": phi_s_cp,
140-
}
141-
else:
142-
variables = {"Electrode current density": i_s}
143-
170+
# don't overwrite current collector potentials
171+
try:
172+
phi_s_cn = variables["Negative current collector potential"]
173+
except KeyError:
174+
phi_s_n = variables["Negative electrode potential"]
175+
phi_s_cn = pybamm.boundary_value(phi_s_n, "left")
176+
try:
177+
phi_s_cp = variables["Positive current collector potential"]
178+
except KeyError:
179+
phi_s_p = variables["Positive electrode potential"]
180+
phi_s_cp = pybamm.boundary_value(phi_s_p, "right")
181+
variables.update(
182+
self._get_standard_current_collector_potential_variables(
183+
phi_s_cn, phi_s_cp
184+
)
185+
)
144186
return variables
187+
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
from .base_external_circuit import BaseModel
22
from .current_control_external_circuit import CurrentControl
3-
4-
# from .voltage_control_external_circuit import VoltageControl
3+
from .voltage_control_external_circuit import VoltageControl

pybamm/models/submodels/external_circuit/current_control_external_circuit.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def get_fundamental_variables(self):
2121
"Total current density": i_cell,
2222
"Total current density [A.m-2]": i_cell_dim,
2323
"Current [A]": I,
24-
"Discharge capacity [A.h]": I * pybamm.t * self.param.time_scale / 3600,
24+
"Discharge capacity [A.h]": I * pybamm.t * self.param.timescale / 3600,
2525
}
2626

2727
return variables

pybamm/parameters/standard_parameters_lead_acid.py

+2
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,8 @@ def U_p_dimensional(c_e, T):
277277
# Electrolyte diffusion timescale
278278
tau_diffusion_e = L_x ** 2 / D_e_typ
279279

280+
# Choose discharge timescale
281+
timescale = tau_discharge
280282

281283
# --------------------------------------------------------------------------------------
282284
"4. Dimensionless Parameters"

pybamm/parameters/standard_parameters_lithium_ion.py

+3
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,9 @@ def U_p_dimensional(sto, T):
235235
# Thermal diffusion timescale
236236
tau_th_yz = pybamm.thermal_parameters.tau_th_yz
237237

238+
# Choose discharge timescale
239+
timescale = tau_discharge
240+
238241
# --------------------------------------------------------------------------------------
239242
"4. Dimensionless Parameters"
240243
# Timescale ratios

0 commit comments

Comments
 (0)