Skip to content

Commit

Permalink
#546 reformat options
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinsulzer committed Jul 21, 2019
1 parent 8d83c9c commit b2707ba
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 35 deletions.
29 changes: 15 additions & 14 deletions examples/scripts/compare_lead_acid.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@

# load models
models = [
# pybamm.lead_acid.LOQS(),
pybamm.lead_acid.FOQS(),
pybamm.lead_acid.Composite(),
# pybamm.lead_acid.Composite({"surface form": "algebraic"}),
pybamm.lead_acid.NewmanTiedemann(),
pybamm.lead_acid.LOQS({"bc_options": {"dimensionality": 2}}),
pybamm.lead_acid.LOQS(),
# pybamm.lead_acid.FOQS(),
# pybamm.lead_acid.Composite(),
# # pybamm.lead_acid.Composite({"surface form": "algebraic"}),
# pybamm.lead_acid.NewmanTiedemann(),
]

# create geometry
Expand Down Expand Up @@ -49,15 +50,15 @@

# plot
output_variables = [
[
"Average negative electrode interfacial current density [A.m-2]",
"Average positive electrode interfacial current density [A.m-2]",
],
"Average negative electrode surface potential difference [V]",
"Average positive electrode surface potential difference [V]",
"Electrolyte concentration",
"Electrolyte flux",
"Terminal voltage [V]",
# [
# "Average negative electrode interfacial current density [A.m-2]",
# "Average positive electrode interfacial current density [A.m-2]",
# ],
# "Average negative electrode surface potential difference [V]",
# "Average positive electrode surface potential difference [V]",
# "Electrolyte concentration",
# "Electrolyte flux",
"Terminal voltage [V]"
]
plot = pybamm.QuickPlot(models, mesh, solutions, output_variables)
plot.dynamic_plot()
14 changes: 12 additions & 2 deletions pybamm/models/full_battery_models/base_battery_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,27 @@ def options(self, extra_options):
and options["surface form"] is False
):
if options["bc_options"]["dimensionality"] == 1:
raise pybamm.ModelError(
raise pybamm.OptionError(
"must use surface formulation to solve {!s} in 2D".format(self)
)
if len(options["side reactions"]) > 0:
raise pybamm.ModelError(
raise pybamm.OptionError(
"""
must use surface formulation to solve {!s} with side reactions
""".format(
self
)
)
if options["surface form"] not in [False, "differential", "algebraic"]:
raise pybamm.OptionError(
"surface form '{}' not recognised".format(options["surface form"])
)
if options["bc_options"]["dimensionality"] not in [0, 1, 2]:
raise pybamm.OptionError(
"Dimension of current collectors must be 0, 1, or 2, not {}".format(
options["bc_options"]["dimensionality"]
)
)

self._options = options

Expand Down
18 changes: 15 additions & 3 deletions pybamm/models/full_battery_models/lead_acid/loqs.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,21 @@ def __init__(self, options=None, name="LOQS model"):

def set_current_collector_submodel(self):

self.submodels["current collector"] = pybamm.current_collector.Uniform(
self.param
)
if self.options["bc_options"]["dimensionality"] == 0:
self.submodels["current collector"] = pybamm.current_collector.Uniform(
self.param
)
elif self.options["bc_options"]["dimensionality"] == 1:
self.submodels["current collector"] = pybamm.current_collector.Uniform(
self.param
)
# raise NotImplementedError(
# "One-dimensional current collector submodel not implemented."
# )
elif self.options["bc_options"]["dimensionality"] == 2:
self.submodels[
"current collector"
] = pybamm.current_collector.SingleParticlePotentialPair(self.param)

def set_porosity_submodel(self):

Expand Down
6 changes: 0 additions & 6 deletions pybamm/models/full_battery_models/lithium_ion/spm.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,6 @@ def set_current_collector_submodel(self):
self.submodels[
"current collector"
] = pybamm.current_collector.SingleParticlePotentialPair(self.param)
else:
raise pybamm.ModelError(
"Dimension of current collectors must be 0, 1, or 2, not {}".format(
self.options["bc_options"]["dimensionality"]
)
)

def set_porosity_submodel(self):

Expand Down
6 changes: 0 additions & 6 deletions pybamm/models/full_battery_models/lithium_ion/spme.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,6 @@ def set_current_collector_submodel(self):
self.submodels[
"current collector"
] = pybamm.current_collector.SingleParticlePotentialPair(self.param)
else:
raise pybamm.ModelError(
"Dimension of current collectors must be 0, 1, or 2, not {}".format(
self.options["bc_options"]["dimensionality"]
)
)

def set_porosity_submodel(self):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def test_default_spatial_methods(self):

def test_incompatible_options(self):
options = {"bc_options": {"dimensionality": 1}}
with self.assertRaises(pybamm.ModelError):
with self.assertRaises(pybamm.OptionError):
pybamm.lead_acid.LOQS(options)


Expand All @@ -56,7 +56,7 @@ def test_varying_surface_area(self):

def test_incompatible_options(self):
options = {"side reactions": ["something"]}
with self.assertRaises(pybamm.ModelError):
with self.assertRaises(pybamm.OptionError):
pybamm.lead_acid.LOQS(options)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def test_well_posed_2plus1D(self):
model = pybamm.lithium_ion.SPM(options)

options = {"bc_options": {"dimensionality": 5}}
with self.assertRaises(pybamm.ModelError):
with self.assertRaises(pybamm.OptionError):
model = pybamm.lithium_ion.SPM(options)

@unittest.skipIf(pybamm.have_scikits_odes(), "scikits.odes not installed")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def test_well_posed_2plus1D(self):
model = pybamm.lithium_ion.SPMe(options)

options = {"bc_options": {"dimensionality": 5}}
with self.assertRaises(pybamm.ModelError):
with self.assertRaises(pybamm.OptionError):
model = pybamm.lithium_ion.SPM(options)

@unittest.skipIf(pybamm.have_scikits_odes(), "scikits.odes not installed")
Expand Down

0 comments on commit b2707ba

Please sign in to comment.