diff --git a/examples/notebooks/create-model.ipynb b/examples/notebooks/create-model.ipynb
index c5f587282..19b53871b 100644
--- a/examples/notebooks/create-model.ipynb
+++ b/examples/notebooks/create-model.ipynb
@@ -538,7 +538,8 @@
    "source": [
     "# define geometry\n",
     "x = pybamm.SpatialVariable(\"x\", domain=\"SEI layer\", coord_sys=\"cartesian\")\n",
-    "geometry = {\"SEI layer\": {\"primary\": {x: {\"min\": pybamm.Scalar(0), \"max\": pybamm.Scalar(1)}}}}"
+    "geometry = pybamm.Geometry()\n",
+    "geometry.add_domain(\"SEI layer\", {\"primary\": {x: {\"min\": pybamm.Scalar(0), \"max\": pybamm.Scalar(1)}}})"
    ]
   },
   {
@@ -580,7 +581,7 @@
     {
      "data": {
       "text/plain": [
-       "<pybamm.models.base_model.BaseModel at 0x7f662c5055f8>"
+       "<pybamm.models.base_model.BaseModel at 0x7f634b6c3400>"
       ]
      },
      "execution_count": 17,
@@ -636,13 +637,13 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "954e4883b8ae4be6979962b15f33efb3",
+       "model_id": "ff4cc73b0ec7462d9428558c54cb4f1b",
        "version_major": 2,
        "version_minor": 0
       },
@@ -686,13 +687,6 @@
    "source": [
     "The purpose of this notebook has been to go through the steps involved in getting a simple model working within PyBaMM. However, if you plan on reusing your model and want greater flexibility then we recommend that you create a new class for your model. We have set out instructions on how to do this in the \"Adding a Model\" tutorial in the documentation. "
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {
diff --git a/pybamm/geometry/geometry.py b/pybamm/geometry/geometry.py
index fadb82733..bb7389b8c 100644
--- a/pybamm/geometry/geometry.py
+++ b/pybamm/geometry/geometry.py
@@ -5,22 +5,60 @@ import pybamm
 
 
 class Geometry(dict):
-    """A geometry class to store the details features of the cell geometry.
-        Geometry extends the class dictionary and uses the key words:
-        "negative electrode", "positive electrode", etc to indicate the subdomain.
-        Within each subdomain, there are "primary" and "secondary" dimensions.
-        "primary" dimensions correspond to dimensiones on which spatial
-        operators will be applied (e.g. the gradient and divergence). In contrast,
-        spatial operators do not act along "secondary" dimensions. This allows for
-        multiple independent particles to be included into a model.
 
-     **Extends**: :class:`dict`
+    """
+    A geometry class to store the details features of the cell geometry.
+
+    Geometry extends the class dictionary and uses the key words: "negative electrode",
+    "positive electrode", etc to indicate the subdomain.  Within each subdomain, there
+    are "primary", "secondary" or "tabs" dimensions.  "primary" dimensions correspond to
+    dimensions on which spatial operators will be applied (e.g. the gradient and
+    divergence). In contrast, spatial operators do not act along "secondary" dimensions.
+    This allows for multiple independent particles to be included into a model.
+
+    The values assigned to each domain are dictionaries containing the spatial variables
+    in that domain, along with expression trees giving their min and maximum extents.
+    For example, the following dictionary structure would represent a Geometry with a
+    single domain "negative electrode", defined using the variable `x_n` which has a
+    range from 0 to the pre-defined parameter `l_n`.
+
+    .. code-block:: python
+
+       {
+           "negative electrode": {
+               "primary": {x_n: {"min": pybamm.Scalar(0), "max": l_n}}
+           }
+       }
+
+    A user can create a new Geometry by combining one or more of the pre-defined
+    geometries defined with the names given below.
+
+    - "1D macro": macroscopic 1D cell geometry (i.e. electrodes)
+    - "3D macro": macroscopic 3D cell geometry
+    - "1+1D macro": 1D macroscopic cell geometry with a 1D current collector
+    - "1+2D macro": 1D macroscopic cell geometry with a 2D current collector
+    - "1D micro": 1D microscopic cell geometry (i.e. particles)
+    - "1+1D micro": This is the geometry used in the standard DFN or P2D model
+    - "(1+0)+1D micro": 0D macroscopic cell geometry with 1D current collector,
+                        along with the microscopic 1D particle geometry.
+    - "(2+0)+1D micro": 0D macroscopic cell geometry with 1D current collector,
+                        along with the microscopic 1D particle geometry.
+    - "(1+1)+1D micro": 1D macroscopic cell geometry, with 1D current collector model,
+                        along with the microscopic 1D particle geometry.
+    - "(2+1)+1D micro": 1D macroscopic cell geometry, with 2D current collector model,
+                        along with the microscopic 1D particle geometry.
+    - "2D current collector": macroscopic 2D current collector geometry
+
+    **Extends**: :class:`dict`
+
+    Parameters
+    ----------
 
-     Parameters
-     ----------
+    geometries: one or more strings or Geometry objects. A string will be assumed to be
+                one of the predefined Geometries given above
 
-     custom_geometry : dict containing any extra user defined geometry
-     """
+    custom_geometry : dict containing any extra user defined geometry
+    """
 
     def __init__(self, *geometries, custom_geometry={}):
         for geometry in geometries:
@@ -49,9 +87,66 @@ class Geometry(dict):
             # avoid combining geometries that clash
             if any([k in self.keys() for k in geometry.keys()]):
                 raise ValueError("trying to overwrite existing geometry")
-            self.update(geometry)
+
+            for k, v in geometry.items():
+                self.add_domain(k, v)
+
         # Allow overwriting with a custom geometry
-        self.update(custom_geometry)
+        for k, v in custom_geometry.items():
+            self.add_domain(k, v)
+
+    def add_domain(self, name, geometry):
+        """
+        Add a new domain to the geometry
+
+        Parameters
+        ----------
+
+        name: string giving the name of the domain
+
+        geometry: dict of variables in the domain, along with the minimum and maximum
+                extents (e.g. {"primary": {x_n: {"min": pybamm.Scalar(0), "max": l_n}}}
+        """
+        if not isinstance(name, str):
+            raise ValueError("name must be a string")
+
+        for k, v in geometry.items():
+            if k not in ["primary", "secondary", "tabs"]:
+                raise ValueError(
+                    "keys of geometry must be either \"primary\", \"secondary\" or "
+                    "\"tabs\""
+                )
+            if k != "tabs":
+                for variable, rnge in v.items():
+                    if not isinstance(variable, pybamm.SpatialVariable):
+                        raise ValueError(
+                            "inner dict of geometry must have pybamm.SpatialVariable "
+                            "as keys"
+                        )
+                    if list(rnge.keys()) != ["position"]:
+                        if "min" not in rnge.keys():
+                            raise ValueError(
+                                "no minimum extents for variable {}".format(variable)
+                            )
+                        if "max" not in rnge.keys():
+                            raise ValueError(
+                                "no maximum extents for variable {}".format(variable)
+                            )
+            else:
+                for region, params in v.items():
+                    if region not in ["negative", "positive"]:
+                        raise ValueError(
+                            "tabs region must be \"negative\" or \"positive\""
+
+                        )
+                    for pname in params.keys():
+                        if pname not in ["y_centre", "z_centre", "width"]:
+                            raise ValueError(
+                                "tabs region params must be \"y_centre\", "
+                                "\"z_centre\" or \"width\""
+                            )
+
+        self.update({name: geometry})
 
 
 class Geometry1DMacro(Geometry):
diff --git a/pybamm/processed_variable.py b/pybamm/processed_variable.py
index c7dbefa43..c7842ea10 100644
--- a/pybamm/processed_variable.py
+++ b/pybamm/processed_variable.py
@@ -195,6 +195,9 @@ class ProcessedVariable(object):
         elif self.domain == ["current collector"]:
             self.spatial_var_name = "z"
             self.z_sol = space
+        else:
+            self.spatial_var_name = "x"
+            self.x_sol = space
 
         # set up interpolation
         # note that the order of 't' and 'space' is the reverse of what you'd expect

Fixes for Geometry class
- [ ] update notebooks/examples to use Geometry class
- [ ] add `add_domain` function
- [ ] fill in Geometry documentation
diff --git a/tests/unit/test_geometry/test_geometry.py b/tests/unit/test_geometry/test_geometry.py
index 3c6daa6bc..b4030bc0e 100644
--- a/tests/unit/test_geometry/test_geometry.py
+++ b/tests/unit/test_geometry/test_geometry.py
@@ -167,6 +167,62 @@ class TestGeometryxp1p1DMicro(unittest.TestCase):
 
 
 class TestGeometry(unittest.TestCase):
+    def test_add_domain(self):
+        L = pybamm.Parameter('L')
+        zero = pybamm.Scalar(0)
+        x = pybamm.SpatialVariable('x', domain=["negative electrode"])
+        geometry = pybamm.Geometry()
+
+        geometry.add_domain("name_of_domain",
+                            {"primary": {x: {"min": zero, "max": L}}}
+                            )
+
+        geometry.add_domain("name_of_domain",
+                            {"tabs": {"negative": {"z_centre": L}}}
+                            )
+
+        # name must be a string
+        with self.assertRaisesRegex(ValueError, "name must be a string"):
+            geometry.add_domain(123,
+                                {"primary": {x: {"min": zero, "max": L}}}
+                                )
+
+        # keys of geometry must be either \"primary\" or \"secondary\"
+        with self.assertRaisesRegex(ValueError, "primary.*secondary"):
+            geometry.add_domain("name_of_domain",
+                                {"primaryy": {x: {"min": zero, "max": L}}}
+                                )
+
+        # inner dict of geometry must have pybamm.SpatialVariable as keys
+        with self.assertRaisesRegex(ValueError, "pybamm\.SpatialVariable as keys"):
+            geometry.add_domain("name_of_domain",
+                                {"primary": {L: {"min": zero, "max": L}}}
+                                )
+
+        # no minimum extents for variable
+        with self.assertRaisesRegex(ValueError, "minimum"):
+            geometry.add_domain("name_of_domain",
+                                {"primary": {x: {"max": L}}}
+                                )
+
+        # no maximum extents for variable
+        with self.assertRaisesRegex(ValueError, "maximum"):
+            geometry.add_domain("name_of_domain",
+                                {"primary": {x: {"min": zero}}}
+                                )
+
+        # tabs region must be \"negative\" or \"positive\"
+        with self.assertRaisesRegex(ValueError, "negative.*positive"):
+            geometry.add_domain("name_of_domain",
+                                {"tabs": {"negativee": {"z_centre": L}}}
+                                )
+
+        # tabs region params must be \"y_centre\", "\"z_centre\" or \"width\"
+        with self.assertRaisesRegex(ValueError, "y_centre.*z_centre.*width"):
+            geometry.add_domain("name_of_domain",
+                                {"tabs": {"negative": {"z_centree": L}}}
+                                )
+
     def test_combine_geometries(self):
         geometry1Dmacro = pybamm.Geometry1DMacro()
         geometry1Dmicro = pybamm.Geometry1DMicro()
diff --git a/tests/unit/test_processed_variable.py b/tests/unit/test_processed_variable.py
index 7600aeb0e..d17fa7ac9 100644
--- a/tests/unit/test_processed_variable.py
+++ b/tests/unit/test_processed_variable.py
@@ -55,6 +55,33 @@ class TestProcessedVariable(unittest.TestCase):
             x_s_edge.entries[:, 0], processed_x_s_edge.entries[1:-1, 0]
         )
 
+    def test_processed_variable_2D_unknown_domain(self):
+        x = pybamm.SpatialVariable("x", domain="SEI layer", coord_sys="cartesian")
+        geometry = pybamm.Geometry()
+        geometry.add_domain("SEI layer",
+                            {"primary":
+                                {x: {"min": pybamm.Scalar(0), "max": pybamm.Scalar(1)}}}
+                            )
+
+        submesh_types = {"SEI layer": pybamm.Uniform1DSubMesh}
+        var_pts = {x: 100}
+        mesh = pybamm.Mesh(geometry, submesh_types, var_pts)
+
+        nt = 100
+
+        solution = pybamm.Solution(
+            np.linspace(0, 1, nt),
+            np.zeros((var_pts[x], nt)),
+            np.linspace(0, 1, 1),
+            np.zeros((var_pts[x])),
+            "test"
+        )
+
+        c = pybamm.StateVector(slice(0, var_pts[x]), domain=["SEI layer"])
+        pybamm.ProcessedVariable(
+            c, solution.t, solution.y, mesh
+        )
+
     def test_processed_variable_3D(self):
         var = pybamm.Variable("var", domain=["negative particle"])
         x = pybamm.SpatialVariable("x", domain=["negative electrode"])

pip install -e .[dev,docs]
parse_log_pytest
pytest
flake8 pytest
apt-get update apt-get install -y gcc gfortran libopenblas-dev liblapack-dev
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.16
anyio==4.9.0
anytree==2.12.1
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.3.0
asttokens==3.0.0
async-lru==2.0.5
attrs==25.3.0
autograd==1.7.0
babel==2.17.0
beautifulsoup4==4.13.3
bleach==6.2.0
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
comm==0.2.2
contourpy==1.3.0
cycler==0.12.1
debugpy==1.8.13
decorator==5.2.1
defusedxml==0.7.1
docutils==0.21.2
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
executing==2.2.0
fastjsonschema==2.21.1
flake8==7.2.0
fonttools==4.56.0
fqdn==1.5.1
guzzle_sphinx_theme==0.7.11
h11==0.14.0
httpcore==1.0.7
httpx==0.28.1
idna==3.10
imagesize==1.4.1
importlib_metadata==8.6.1
importlib_resources==6.5.2
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
ipykernel==6.29.5
ipython==8.18.1
ipywidgets==8.1.5
isoduration==20.11.0
jedi==0.19.2
Jinja2==3.1.6
json5==0.10.0
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
jupyter==1.1.1
jupyter-console==6.6.3
jupyter-events==0.12.0
jupyter-lsp==2.2.5
jupyter_client==8.6.3
jupyter_core==5.7.2
jupyter_server==2.15.0
jupyter_server_terminals==0.5.3
jupyterlab==4.3.6
jupyterlab_pygments==0.3.0
jupyterlab_server==2.27.3
jupyterlab_widgets==3.0.13
kiwisolver==1.4.7
MarkupSafe==3.0.2
matplotlib==3.9.4
matplotlib-inline==0.1.7
mccabe==0.7.0
mistune==3.1.3
nbclient==0.10.2
nbconvert==7.16.6
nbformat==5.10.4
nest-asyncio==1.6.0
notebook==7.3.3
notebook_shim==0.2.4
numpy==2.0.2
overrides==7.7.0
packaging @ file:///croot/packaging_1734472117206/work
pandas==2.2.3
pandocfilters==1.5.1
parso==0.8.4
pexpect==4.9.0
pillow==11.1.0
platformdirs==4.3.7
pluggy @ file:///croot/pluggy_1733169602837/work
prometheus_client==0.21.1
prompt_toolkit==3.0.50
psutil==7.0.0
ptyprocess==0.7.0
pure_eval==0.2.3
-e git+https://github.com/pybamm-team/PyBaMM.git@96ea15f446a911863c80bbf9278eb079ba84a501#egg=pybamm
pycodestyle==2.13.0
pycparser==2.22
pyflakes==3.3.1
Pygments==2.19.1
pyparsing==3.2.3
pytest @ file:///croot/pytest_1738938843180/work
python-dateutil==2.9.0.post0
python-json-logger==3.3.0
pytz==2025.2
PyYAML==6.0.2
pyzmq==26.3.0
referencing==0.36.2
requests==2.32.3
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rpds-py==0.24.0
scipy==1.13.1
Send2Trash==1.8.3
six==1.17.0
sniffio==1.3.1
snowballstemmer==2.2.0
soupsieve==2.6
Sphinx==7.4.7
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
stack-data==0.6.3
terminado==0.18.1
tinycss2==1.4.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
tornado==6.4.2
traitlets==5.14.3
types-python-dateutil==2.9.0.20241206
typing_extensions==4.13.0
tzdata==2025.2
uri-template==1.3.0
urllib3==2.3.0
wcwidth==0.2.13
webcolors==24.11.1
webencodings==0.5.1
websocket-client==1.8.0
widgetsnbextension==4.0.13
zipp==3.21.0

name: PyBaMM
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.16
      - anyio==4.9.0
      - anytree==2.12.1
      - argon2-cffi==23.1.0
      - argon2-cffi-bindings==21.2.0
      - arrow==1.3.0
      - asttokens==3.0.0
      - async-lru==2.0.5
      - attrs==25.3.0
      - autograd==1.7.0
      - babel==2.17.0
      - beautifulsoup4==4.13.3
      - bleach==6.2.0
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - comm==0.2.2
      - contourpy==1.3.0
      - cycler==0.12.1
      - debugpy==1.8.13
      - decorator==5.2.1
      - defusedxml==0.7.1
      - docutils==0.21.2
      - executing==2.2.0
      - fastjsonschema==2.21.1
      - flake8==7.2.0
      - fonttools==4.56.0
      - fqdn==1.5.1
      - guzzle-sphinx-theme==0.7.11
      - h11==0.14.0
      - httpcore==1.0.7
      - httpx==0.28.1
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==8.6.1
      - importlib-resources==6.5.2
      - ipykernel==6.29.5
      - ipython==8.18.1
      - ipywidgets==8.1.5
      - isoduration==20.11.0
      - jedi==0.19.2
      - jinja2==3.1.6
      - json5==0.10.0
      - jsonpointer==3.0.0
      - jsonschema==4.23.0
      - jsonschema-specifications==2024.10.1
      - jupyter==1.1.1
      - jupyter-client==8.6.3
      - jupyter-console==6.6.3
      - jupyter-core==5.7.2
      - jupyter-events==0.12.0
      - jupyter-lsp==2.2.5
      - jupyter-server==2.15.0
      - jupyter-server-terminals==0.5.3
      - jupyterlab==4.3.6
      - jupyterlab-pygments==0.3.0
      - jupyterlab-server==2.27.3
      - jupyterlab-widgets==3.0.13
      - kiwisolver==1.4.7
      - markupsafe==3.0.2
      - matplotlib==3.9.4
      - matplotlib-inline==0.1.7
      - mccabe==0.7.0
      - mistune==3.1.3
      - nbclient==0.10.2
      - nbconvert==7.16.6
      - nbformat==5.10.4
      - nest-asyncio==1.6.0
      - notebook==7.3.3
      - notebook-shim==0.2.4
      - numpy==2.0.2
      - overrides==7.7.0
      - pandas==2.2.3
      - pandocfilters==1.5.1
      - parso==0.8.4
      - pexpect==4.9.0
      - pillow==11.1.0
      - platformdirs==4.3.7
      - prometheus-client==0.21.1
      - prompt-toolkit==3.0.50
      - psutil==7.0.0
      - ptyprocess==0.7.0
      - pure-eval==0.2.3
      - pycodestyle==2.13.0
      - pycparser==2.22
      - pyflakes==3.3.1
      - pygments==2.19.1
      - pyparsing==3.2.3
      - python-dateutil==2.9.0.post0
      - python-json-logger==3.3.0
      - pytz==2025.2
      - pyyaml==6.0.2
      - pyzmq==26.3.0
      - referencing==0.36.2
      - requests==2.32.3
      - rfc3339-validator==0.1.4
      - rfc3986-validator==0.1.1
      - rpds-py==0.24.0
      - scipy==1.13.1
      - send2trash==1.8.3
      - six==1.17.0
      - sniffio==1.3.1
      - snowballstemmer==2.2.0
      - soupsieve==2.6
      - sphinx==7.4.7
      - sphinxcontrib-applehelp==2.0.0
      - sphinxcontrib-devhelp==2.0.0
      - sphinxcontrib-htmlhelp==2.1.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==2.0.0
      - sphinxcontrib-serializinghtml==2.0.0
      - stack-data==0.6.3
      - terminado==0.18.1
      - tinycss2==1.4.0
      - tornado==6.4.2
      - traitlets==5.14.3
      - types-python-dateutil==2.9.0.20241206
      - typing-extensions==4.13.0
      - tzdata==2025.2
      - uri-template==1.3.0
      - urllib3==2.3.0
      - wcwidth==0.2.13
      - webcolors==24.11.1
      - webencodings==0.5.1
      - websocket-client==1.8.0
      - widgetsnbextension==4.0.13
      - zipp==3.21.0
prefix: /opt/conda/envs/PyBaMM

tests/unit/test_geometry/test_geometry.py::TestGeometry::test_add_domain tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_variable_2D_unknown_domain
tests/unit/test_geometry/test_geometry.py::TestGeometry1DMacro::test_add_custom_geometry tests/unit/test_geometry/test_geometry.py::TestGeometry1DMacro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometry1DMicro::test_add_custom_geometry tests/unit/test_geometry/test_geometry.py::TestGeometry1DMicro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometry3DMacro::test_add_custom_geometry tests/unit/test_geometry/test_geometry.py::TestGeometry3DMacro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometry1p1DMacro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometry2p1DMacro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometry1p1DMicro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometryxp0p1DMicro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometryxp0p1DMicro::test_init_failure tests/unit/test_geometry/test_geometry.py::TestGeometryxp1p1DMicro::test_geometry_keys tests/unit/test_geometry/test_geometry.py::TestGeometryxp1p1DMicro::test_init_failure tests/unit/test_geometry/test_geometry.py::TestGeometry::test_combine_geometries tests/unit/test_geometry/test_geometry.py::TestGeometry::test_combine_geometries_3D tests/unit/test_geometry/test_geometry.py::TestGeometry::test_combine_geometries_strings tests/unit/test_geometry/test_geometry.py::TestGeometry2DCurrentCollector::test_add_custom_geometry tests/unit/test_geometry/test_geometry.py::TestGeometry2DCurrentCollector::test_geometry_keys tests/unit/test_processed_variable.py::TestProcessedVariable::test_call_failure tests/unit/test_processed_variable.py::TestProcessedVariable::test_failure tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_var_1D_interpolation tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_var_2D_interpolation tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_var_3D_interpolation tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_var_3D_r_first_dimension tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_variable_1D tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_variable_2D tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_variable_3D tests/unit/test_processed_variable.py::TestProcessedVariable::test_processed_variable_ode_pde_solution
pybamm/geometry/geometry.py pybamm/processed_variable.py examples/notebooks/create-model.ipynb
pybamm/geometry/geometry.py pybamm/processed_variable.py examples/notebooks/create-model.ipynb