Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 704 surface extrapolation #707

Merged
merged 34 commits into from
Nov 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
a373d03
Merge branch 'master' of https://github.com/pybamm-team/PyBaMM
Scottmar93 Nov 1, 2019
0981c5b
Merge branch 'master' of https://github.com/pybamm-team/PyBaMM
Scottmar93 Nov 4, 2019
fb69f96
Merge branch 'master' of https://github.com/pybamm-team/PyBaMM
Scottmar93 Nov 5, 2019
86bf852
#704 updated boundary value to work on non-uniform grids
Scottmar93 Nov 5, 2019
6511376
#704 added tests for linear and quadratic and on nonuniform grids
Scottmar93 Nov 5, 2019
8340f40
#704 updated docs
Scottmar93 Nov 5, 2019
9bf4bc1
#704 added option to finite element boundary_value_or_flux
Scottmar93 Nov 6, 2019
22dc55c
#704 added to spatial method aswell
Scottmar93 Nov 6, 2019
b6f3546
#704 removed the option in other functions
Scottmar93 Nov 6, 2019
094ee49
#704 tested that the extrapolation is behaving properly
Scottmar93 Nov 6, 2019
cb1e5d0
#704 added new extrapolation methods
Scottmar93 Nov 7, 2019
c435a1e
#704 converted to using options in finite volume
Scottmar93 Nov 7, 2019
1c5c42b
#704 changed init of spatial methods
Scottmar93 Nov 7, 2019
8df9b22
#704 fixed multiple unit tests as result of change of finite volume
Scottmar93 Nov 7, 2019
89d0d16
#704 passes unit tests
Scottmar93 Nov 7, 2019
fb794ff
#704 updated tests
Scottmar93 Nov 7, 2019
8555a64
#704 added convergence tests for all types of extrapolation
Scottmar93 Nov 7, 2019
a3eb545
#704 tidied up head of extrapolation file
Scottmar93 Nov 7, 2019
b8d4335
#704 changed defaults to be linear
Scottmar93 Nov 7, 2019
a8852fa
#704 finite volumes tests all pass
Scottmar93 Nov 7, 2019
569aeb5
#704 fixed finite volume integration tests
Scottmar93 Nov 7, 2019
92aa22b
#704 added a short script to demonstrate comparison between extrapola…
Scottmar93 Nov 7, 2019
2e27f47
Merge remote-tracking branch 'origin/master' into issue-704-surface-e…
Scottmar93 Nov 8, 2019
0dde075
#704 fixed errors in scripts and notebooks
Scottmar93 Nov 8, 2019
a2df853
#704 changed to has_bc_of_form
Scottmar93 Nov 8, 2019
269dadb
#704 updated as suggested by rob and tino
Scottmar93 Nov 8, 2019
86240c3
Merge remote-tracking branch 'origin/master' into issue-704-surface-e…
Scottmar93 Nov 8, 2019
d26ff16
Merge branch 'master' of https://github.com/pybamm-team/PyBaMM
Scottmar93 Nov 8, 2019
f267ded
#704 fixed issue in notebook
Scottmar93 Nov 11, 2019
743693e
Merge branch 'master' of https://github.com/pybamm-team/PyBaMM
Scottmar93 Nov 11, 2019
34d077d
Merge branch 'master' into issue-704-surface-extrapolation
Scottmar93 Nov 11, 2019
4951e17
#704 fixed spm notebook
Scottmar93 Nov 11, 2019
d1ddbd3
#704 fixed neg_pos test
Scottmar93 Nov 11, 2019
8e2c72c
#704 fixed doc in scikit?
Scottmar93 Nov 11, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 89 additions & 79 deletions examples/notebooks/change-settings.ipynb

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions examples/notebooks/create-model.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@
"var_pts = {x: 100}\n",
"mesh = pybamm.Mesh(geometry, submesh_types, var_pts)\n",
" \n",
"spatial_methods = {\"SEI layer\": pybamm.FiniteVolume}\n",
"spatial_methods = {\"SEI layer\": pybamm.FiniteVolume()}\n",
"disc = pybamm.Discretisation(mesh, spatial_methods)\n",
"disc.process_model(model)"
]
Expand Down Expand Up @@ -710,7 +710,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
"version": "3.7.3"
}
},
"nbformat": 4,
Expand Down
36 changes: 22 additions & 14 deletions examples/notebooks/models/SPM.ipynb

Large diffs are not rendered by default.

Binary file modified examples/notebooks/models/spm1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified examples/notebooks/models/spm2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions examples/notebooks/spatial_methods/finite-volumes.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@
"outputs": [],
"source": [
"spatial_methods = {\n",
" \"macroscale\": pybamm.FiniteVolume,\n",
" \"negative particle\": pybamm.FiniteVolume,\n",
" \"positive particle\": pybamm.FiniteVolume,\n",
" \"macroscale\": pybamm.FiniteVolume(),\n",
" \"negative particle\": pybamm.FiniteVolume(),\n",
" \"positive particle\": pybamm.FiniteVolume(),\n",
"}\n",
"disc = pybamm.Discretisation(mesh, spatial_methods)"
]
Expand Down Expand Up @@ -1282,7 +1282,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
"version": "3.7.3"
}
},
"nbformat": 4,
Expand Down
4 changes: 2 additions & 2 deletions examples/notebooks/unsteady_heat_equation.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@
"submesh_types = {\"rod\": pybamm.Uniform1DSubMesh}\n",
"var_pts = {x: 30}\n",
"mesh = pybamm.Mesh(geometry, submesh_types, var_pts)\n",
"spatial_methods = {\"rod\": pybamm.FiniteVolume}\n",
"spatial_methods = {\"rod\": pybamm.FiniteVolume()}\n",
"disc = pybamm.Discretisation(mesh, spatial_methods)"
]
},
Expand Down Expand Up @@ -421,7 +421,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
"version": "3.7.3"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
"version": "3.7.3"
}
},
"nbformat": 4,
Expand Down
32 changes: 32 additions & 0 deletions examples/scripts/compare_extrapolations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import pybamm


x_n = pybamm.standard_spatial_vars.x_n
x_s = pybamm.standard_spatial_vars.x_s
x_p = pybamm.standard_spatial_vars.x_p

var_pts = {x_n: 10, x_s: 3, x_p: 10}
model_lin = pybamm.lead_acid.Full()
sim_lin = pybamm.Simulation(model_lin, var_pts=var_pts)
sim_lin.solve()

model_quad = pybamm.lead_acid.Full()
method_options = {"extrapolation": {"order": "quadratic", "use bcs": False}}
spatial_methods = {
"negative particle": pybamm.FiniteVolume(method_options),
"positive particle": pybamm.FiniteVolume(method_options),
"macroscale": pybamm.FiniteVolume(method_options),
"current collector": pybamm.ZeroDimensionalMethod(),
}
sim_quad = pybamm.Simulation(
model_quad, spatial_methods=spatial_methods, var_pts=var_pts
)
sim_quad.solve()


# plot the two sols
models = [sim_lin.built_model, sim_quad.built_model]
solutions = [sim_lin.solution, sim_quad.solution]
plot = pybamm.QuickPlot(models, sim_lin.mesh, solutions)
plot.dynamic_plot()

2 changes: 1 addition & 1 deletion examples/scripts/create-model.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def Diffusivity(cc):
var_pts = {x: 50}
mesh = pybamm.Mesh(geometry, submesh_types, var_pts)

spatial_methods = {"SEI layer": pybamm.FiniteVolume}
spatial_methods = {"SEI layer": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
disc.process_model(model)

Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/heat_equation.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
submesh_types = {"rod": pybamm.Uniform1DSubMesh}
var_pts = {x: 30}
mesh = pybamm.Mesh(geometry, submesh_types, var_pts)
spatial_methods = {"rod": pybamm.FiniteVolume}
spatial_methods = {"rod": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
disc.process_model(model)

Expand Down
1 change: 1 addition & 0 deletions pybamm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ def version(formatted=False):
# Mesh and Discretisation classes
#
from .discretisations.discretisation import Discretisation
from .discretisations.discretisation import has_bc_of_form
from .meshes.meshes import Mesh, SubMesh, MeshGenerator
from .meshes.zero_dimensional_submesh import SubMesh0D
from .meshes.one_dimensional_submeshes import (
Expand Down
29 changes: 23 additions & 6 deletions pybamm/discretisations/discretisation.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@
from scipy.sparse import block_diag, csr_matrix


def has_bc_of_form(symbol, side, bcs, form):

if symbol.id in bcs:
if bcs[symbol.id][side][1] == form:
return True
else:
return False

else:
return False


class Discretisation(object):
"""The discretisation class, with methods to process a model and replace
Spatial Operators with Matrices and Variables with StateVectors
Expand All @@ -16,8 +28,9 @@ class Discretisation(object):
mesh : pybamm.Mesh
contains all submeshes to be used on each domain
spatial_methods : dict
a dictionary of the spatial method to be used on each
domain. The keys correspond to the keys in a pybamm.Model
a dictionary of the spatial methods to be used on each
domain. The keys correspond to the model domains and the
values to the spatial method.
"""

def __init__(self, mesh=None, spatial_methods=None):
Expand All @@ -31,9 +44,11 @@ def __init__(self, mesh=None, spatial_methods=None):
spatial_methods["negative electrode"] = method
spatial_methods["separator"] = method
spatial_methods["positive electrode"] = method
self._spatial_methods = {
dom: method(mesh) for dom, method in spatial_methods.items()
}

self._spatial_methods = spatial_methods
for method in self._spatial_methods.values():
method.build(mesh)

self.bcs = {}
self.y_slices = {}
self._discretised_symbols = {}
Expand Down Expand Up @@ -714,7 +729,9 @@ def _process_symbol(self, symbol):
mesh = self.mesh[symbol.children[0].domain[0]][0]
if isinstance(mesh, pybamm.SubMesh1D):
symbol.side = mesh.tabs[symbol.side]
return child_spatial_method.boundary_value_or_flux(symbol, disc_child)
return child_spatial_method.boundary_value_or_flux(
symbol, disc_child, self.bcs
)

else:
return symbol._unary_new_copy(disc_child)
Expand Down
12 changes: 6 additions & 6 deletions pybamm/models/full_battery_models/base_battery_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,17 +121,17 @@ def default_submesh_types(self):
@property
def default_spatial_methods(self):
base_spatial_methods = {
"macroscale": pybamm.FiniteVolume,
"negative particle": pybamm.FiniteVolume,
"positive particle": pybamm.FiniteVolume,
"macroscale": pybamm.FiniteVolume(),
"negative particle": pybamm.FiniteVolume(),
"positive particle": pybamm.FiniteVolume(),
}
if self.options["dimensionality"] == 0:
# 0D submesh - use base spatial method
base_spatial_methods["current collector"] = pybamm.ZeroDimensionalMethod
base_spatial_methods["current collector"] = pybamm.ZeroDimensionalMethod()
elif self.options["dimensionality"] == 1:
base_spatial_methods["current collector"] = pybamm.FiniteVolume
base_spatial_methods["current collector"] = pybamm.FiniteVolume()
elif self.options["dimensionality"] == 2:
base_spatial_methods["current collector"] = pybamm.ScikitFiniteElement
base_spatial_methods["current collector"] = pybamm.ScikitFiniteElement()
return base_spatial_methods

@property
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ def default_submesh_types(self):

@property
def default_spatial_methods(self):
return {"current collector": pybamm.ScikitFiniteElement}
return {"current collector": pybamm.ScikitFiniteElement()}

@property
def default_solver(self):
Expand Down
4 changes: 4 additions & 0 deletions pybamm/simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ def parameter_values(self):
def submesh_types(self):
return self._submesh_types

@property
def mesh(self):
return self._mesh

@property
def var_pts(self):
return self._var_pts
Expand Down
Loading