Skip to content

Commit

Permalink
Merge pull request #1025 from pybamm-team/issue-1023-sim-disc-model
Browse files Browse the repository at this point in the history
#1023 add case for already discretised model
  • Loading branch information
valentinsulzer authored May 27, 2020
2 parents bb5f204 + 4b9870c commit 665f6c0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
17 changes: 10 additions & 7 deletions pybamm/simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,13 +298,16 @@ def build(self, check_model=True):

if self.built_model:
return None

self.set_parameters()
self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
self._built_model = self._disc.process_model(
self._model_with_set_params, inplace=False, check_model=check_model
)
elif self.model.is_discretised:
self._model_with_set_params = self.model
self._built_model = self.model
else:
self.set_parameters()
self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
self._built_model = self._disc.process_model(
self._model_with_set_params, inplace=False, check_model=check_model
)

def solve(
self,
Expand Down
21 changes: 21 additions & 0 deletions tests/unit/test_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,27 @@ def test_solve_non_battery_model(self):
sim.solution["v"].entries, np.exp(-np.linspace(0, 1, 100))
)

def test_solve_already_partially_processed_model(self):

model = pybamm.lithium_ion.SPM()

# Process model manually
geometry = model.default_geometry
param = model.default_parameter_values
param.process_model(model)
param.process_geometry(geometry)
# Let simulation take over
sim = pybamm.Simulation(model)
sim.solve()

# Discretised manually
mesh = pybamm.Mesh(geometry, model.default_submesh_types, model.default_var_pts)
disc = pybamm.Discretisation(mesh, model.default_spatial_methods)
disc.process_model(model)
# Let simulation take over
sim = pybamm.Simulation(model)
sim.solve()

def test_reuse_commands(self):

sim = pybamm.Simulation(pybamm.lithium_ion.SPM())
Expand Down

0 comments on commit 665f6c0

Please sign in to comment.