Repository: pybamm-team/PyBaMM

Issue:
Create simpler "getting started" notebooks 
**Summary**
Use the simulation class to create simpler "getting started" notebooks. The other notebooks can still remain to show more details of what is actually going on within the simulation class.


Discussion:

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e8b6f28f3..d33b72437 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@
 -   Added submodels for tortuosity ([#726](https://github.com/pybamm-team/PyBaMM/pull/726))
 -   Simplified the interface for setting current functions ([#723](https://github.com/pybamm-team/PyBaMM/pull/723))
 -   Added Heaviside operator ([#723](https://github.com/pybamm-team/PyBaMM/pull/723))
+-   Added some "Getting Started" documentation ([#703](https://github.com/pybamm-team/PyBaMM/pull/703))
 -   Added Simulation class ([#693](https://github.com/pybamm-team/PyBaMM/pull/693))
 -   Added interface to CasADi solver ([#687](https://github.com/pybamm-team/PyBaMM/pull/687), [#691](https://github.com/pybamm-team/PyBaMM/pull/691), [#714](https://github.com/pybamm-team/PyBaMM/pull/714)). This makes the SUNDIALS DAE solvers (Scikits and KLU) truly optional (though IDA KLU is recommended for solving the DFN).
 -   Added option to use CasADi's Algorithmic Differentiation framework to calculate Jacobians ([#687](https://github.com/pybamm-team/PyBaMM/pull/687))
diff --git a/README.md b/README.md
index 8e4ca96df..e302eeb08 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,8 @@ sim.plot()
 ```
 However, much greater customisation is available. It is possible to change the physics, parameter values, geometry, submesh type,  number of submesh points, methods for spatial discretisation and solver for integration (see DFN [script](examples/scripts/DFN.py) or [notebook](examples/notebooks/models/dfn.ipynb)).
 
+For new users we recommend the [Getting Started](examples/notebooks/Getting%20Started/) guides. These are intended to be very simple step-by-step guides to show the basic functionality of PyBaMM.
+
 Further details can be found in a number of [detailed examples](examples/notebooks/README.md), hosted here on
 github. In addition, there is a [full API documentation](http://pybamm.readthedocs.io/),
 hosted on [Read The Docs](readthedocs.io). A set of slides giving an overview of PyBaMM
diff --git a/examples/notebooks/Getting Started/Tutorial 1 - How to run a model.ipynb b/examples/notebooks/Getting Started/Tutorial 1 - How to run a model.ipynb
new file mode 100644
index 000000000..9603f7e4c
--- /dev/null
+++ b/examples/notebooks/Getting Started/Tutorial 1 - How to run a model.ipynb
@@ -0,0 +1,147 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Tutorial 1 - How to run a model"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Welcome to PyBaMM! In this notebook, we will run your first PyBaMM model in just a few simple lines. \n",
+    "\n",
+    "To run through this jupyter notebook simply shift-enter to run the cells. If you are unfamiliar with jupyter notebooks we recommending checking out this [cheat sheet](https://www.cheatography.com/weidadeyue/cheat-sheets/jupyter-notebook/pdf_bw/).\n",
+    "\n",
+    "We begin by importing the pybamm library into this notebook:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pybamm"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now load the model that we wish to run. For this notebook, we choose the single particle model with electrolyte (SPMe):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model = pybamm.lithium_ion.SPMe()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now use this model to create a PyBaMM Simulation, which is used to process and solve the model:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sim = pybamm.Simulation(model)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can then call 'solve' on our simulation object to solve the model (by default the the model is solved for a 1C constant current discharge):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sim.solve()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Finally, we can call 'plot' to generate a dynamic plot of the key variables:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "089df7a7f1f24690b734df6cf83bd550",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.9999999999999999, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sim.plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this tutorial, we have solved a model with the inbuilt default settings. However, PyBaMM is designed to be highly customisable. Over the course of the getting started tutorials, we will see how various settings can be changed so that the model is appropriate for your situation. \n",
+    "\n",
+    "In [Tutorial 2](./Tutorial%202%20-%20Setting%20Parameter%20Values.ipynb) we cover setting and changing parameter values."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.6.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/notebooks/Getting Started/Tutorial 2 - Setting Parameter Values.ipynb b/examples/notebooks/Getting Started/Tutorial 2 - Setting Parameter Values.ipynb
new file mode 100644
index 000000000..61bb53611
--- /dev/null
+++ b/examples/notebooks/Getting Started/Tutorial 2 - Setting Parameter Values.ipynb
@@ -0,0 +1,388 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Tutorial 2 - Setting Parameter Values"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In [Tutorial 1](./Tutorial%201%20-%20How%20to%20run%20a%20model.ipynb), we saw how to run a PyBaMM model with all the default settings. However, PyBaMM also allows you to tweak these settings for your application. In this tutorial, we will see how to build a parameter set in PyBaMM and also how parameter values can be quickly changed temporarily."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pybamm"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Build a parameter set"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "PyBaMM allows you to build a full battery parameter set from parameter values for each component of the battery: anode, cathode, etc. The parameters for each component of the cell are stored within `input/parameters/lithium_ion/anode`, `input/parameters/lithium_ion/cathode`, etc. Each component consists of folders of parameter values (e.g. graphite_mcmb2528_Marquis2019). For information on how to add your own folder of parameter values see [Additional Information](#adding_parameters). We select the parameter set to use for each component by creating the following python dictionary:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameter_options = {\n",
+    "    \"chemistry\": \"lithium-ion\",\n",
+    "    \"cell\": \"kokam_Marquis2019\",\n",
+    "    \"anode\": \"graphite_mcmb2528_Marquis2019\",\n",
+    "    \"separator\": \"separator_Marquis2019\",\n",
+    "    \"cathode\": \"lico2_Marquis2019\",\n",
+    "    \"electrolyte\": \"lipf6_Marquis2019\",\n",
+    "    \"experiment\": \"1C_discharge_from_full_Marquis2019\",\n",
+    "}"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "where the keys (i.e. left of the ':') are the various cell components and the values (i.e. right of the ':') correspond to the parameter sets in each component."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now pass this set of options into a `ParameterValues` object, which builds the full parameter set:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameter_values = pybamm.ParameterValues(chemistry=parameter_options)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now perform the same process as in Tutorial 1 but this time we also pass our parameter values when we create the `Simulation`:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "4e12f3f5188c4c47b9055d2a0cbd66ea",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.9999999999999999, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "model = pybamm.lithium_ion.SPMe()\n",
+    "sim = pybamm.Simulation(model, parameter_values=parameter_values)\n",
+    "sim.solve()\n",
+    "sim.plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Tweak a parameter value"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We often want to quickly change a small number of parameter values to investigate how the behaviour or the battery changes. In such cases, creating and building a full parameter set is not ideal. However, PyBaMM also makes it easy to change parameter values without having to leave the notebook or script you are working in. \n",
+    "\n",
+    "We begin by loading a model and creating a simulation as we have done before:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model2 = pybamm.lithium_ion.SPMe()\n",
+    "sim2 = pybamm.Simulation(model2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now extract the parameter values that have been automatically loaded into our simulation:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameter_values2 = sim2.parameter_values"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The values of the parameters are stored within a python dictionary where the keys correspond to that parameter name (e.g. 'Typical current [A]') and the values correspond to the parameter value (e.g. 0.68). For how to to view the full list of parameters and their values, please see [Additional Information](#viewing_values). In this notebook, we will just tweak the typical current from it's default 1C value (0.68 A) to a 2C rate (1.36 A):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameter_values2.update({\"Typical current [A]\": 1.36})"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now load the updated parameter values into the simulation:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sim.specs(parameter_values=parameter_values2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "And then we can solve and plot our model as before, noticing that the cell now discharges in around half the time."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "e89691f9bbf84d6180b793ab2b22bd14",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.4898989898989899, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sim.solve()\n",
+    "sim.plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this tutorial we have seen how to set the parameter values by cell component and how to tweak individual parameter values.\n",
+    "\n",
+    "In [Tutorial 3](./Tutorial%203%20-%20Basic%20Plotting.ipynb) we introduce some basic plotting functionalities."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Additional Information\n",
+    "### Adding your own parameter sets <a name=\"adding_parameters\"></a>\n",
+    "The parameters for each component of the cell are stored within `input/parameters/lithium_ion/anode`, `input/parameters/lithium_ion/cathode`, etc. Each component consists of folders of parameter sets (e.g. `graphite_mcmb2528_Marquis2019`) within which there are python functions for any functional dependancies (e.g. the open-circuit potential is a function of lithium concentration) as well as a `.csv` file containing all other parameters. If you wish to add your own parameter values for a particular component of the cell, simply create a new folder (e.g. `my_anode_params`) within the component folder (e.g. `input/parameters/lithium_ion/anode`) and then input the parameter values in the same format as the inbuilt parameter sets (it is probably easiest to just copy across the contents of `graphite_mcmb2528_Marquis2019` into `my_anode_params` and modify the values as you wish). \n",
+    "\n",
+    "More information on how to add parameter values is provided in our [online documentation](https://pybamm.readthedocs.io/en/latest/tutorials/add-parameter-values.html)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Viewing the list of parameters <a name=\"viewing_values\"></a>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To view the full list of parameters and their associated values, simply type: "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'Negative current collector thickness [m]': 2.5e-05,\n",
+       " 'Negative electrode thickness [m]': 0.0001,\n",
+       " 'Separator thickness [m]': 2.5e-05,\n",
+       " 'Positive electrode thickness [m]': 0.0001,\n",
+       " 'Positive current collector thickness [m]': 2.5e-05,\n",
+       " 'Electrode height [m]': 0.13699999999999998,\n",
+       " 'Electrode width [m]': 0.207,\n",
+       " 'Negative tab width [m]': 0.04,\n",
+       " 'Negative tab centre y-coordinate [m]': 0.06,\n",
+       " 'Negative tab centre z-coordinate [m]': 0.13699999999999998,\n",
+       " 'Positive tab width [m]': 0.04,\n",
+       " 'Positive tab centre y-coordinate [m]': 0.147,\n",
+       " 'Positive tab centre z-coordinate [m]': 0.13699999999999998,\n",
+       " 'Negative current collector conductivity [S.m-1]': 59600000.0,\n",
+       " 'Positive current collector conductivity [S.m-1]': 35500000.0,\n",
+       " 'Negative current collector density [kg.m-3]': 8954.0,\n",
+       " 'Positive current collector density [kg.m-3]': 2707.0,\n",
+       " 'Negative current collector specific heat capacity [J.kg-1.K-1]': 385.0,\n",
+       " 'Positive current collector specific heat capacity [J.kg-1.K-1]': 897.0,\n",
+       " 'Negative current collector thermal conductivity [W.m-1.K-1]': 401.0,\n",
+       " 'Positive current collector thermal conductivity [W.m-1.K-1]': 237.0,\n",
+       " 'Cell capacity [A.h]': 0.68,\n",
+       " 'Negative electrode conductivity [S.m-1]': 100.0,\n",
+       " 'Maximum concentration in negative electrode [mol.m-3]': 24983.2619938437,\n",
+       " 'Negative electrode diffusivity [m2.s-1]': <function graphite_mcmb2528_diffusivity_Dualfoil1998.graphite_mcmb2528_diffusivity_Dualfoil1998(sto, T, T_inf, E_D_s, R_g)>,\n",
+       " 'Negative electrode OCP [V]': <function graphite_mcmb2528_ocp_Dualfoil1998.graphite_mcmb2528_ocp_Dualfoil1998(sto)>,\n",
+       " 'Negative electrode porosity': 0.3,\n",
+       " 'Negative electrode active material volume fraction': 0.7,\n",
+       " 'Negative particle radius [m]': 1e-05,\n",
+       " 'Negative electrode surface area density [m-1]': 180000.0,\n",
+       " 'Negative electrode Bruggeman coefficient (electrolyte)': 1.5,\n",
+       " 'Negative electrode Bruggeman coefficient (electrode)': 1.5,\n",
+       " 'Negative electrode cation signed stoichiometry': -1.0,\n",
+       " 'Negative electrode electrons in reaction': 1.0,\n",
+       " 'Negative electrode reference exchange-current density [A.m-2(m3.mol)1.5]': 2e-05,\n",
+       " 'Reference OCP vs SHE in the negative electrode [V]': nan,\n",
+       " 'Negative electrode charge transfer coefficient': 0.5,\n",
+       " 'Negative electrode double-layer capacity [F.m-2]': 0.2,\n",
+       " 'Negative electrode density [kg.m-3]': 1657.0,\n",
+       " 'Negative electrode specific heat capacity [J.kg-1.K-1]': 700.0,\n",
+       " 'Negative electrode thermal conductivity [W.m-1.K-1]': 1.7,\n",
+       " 'Negative electrode OCP entropic change [V.K-1]': <function graphite_entropic_change_Moura2016.graphite_entropic_change_Moura2016(sto, c_n_max)>,\n",
+       " 'Reference temperature [K]': 298.15,\n",
+       " 'Negative electrode reaction rate': <function graphite_electrolyte_reaction_rate_Dualfoil1998.graphite_electrolyte_reaction_rate_Dualfoil1998(T, T_inf, E_r, R_g)>,\n",
+       " 'Negative reaction rate activation energy [J.mol-1]': 37480.0,\n",
+       " 'Negative solid diffusion activation energy [J.mol-1]': 42770.0,\n",
+       " 'Positive electrode conductivity [S.m-1]': 10.0,\n",
+       " 'Maximum concentration in positive electrode [mol.m-3]': 51217.9257309275,\n",
+       " 'Positive electrode diffusivity [m2.s-1]': <function lico2_diffusivity_Dualfoil1998.lico2_diffusivity_Dualfoil1998(sto, T, T_inf, E_D_s, R_g)>,\n",
+       " 'Positive electrode OCP [V]': <function lico2_ocp_Dualfoil1998.lico2_ocp_Dualfoil1998(sto)>,\n",
+       " 'Positive electrode porosity': 0.3,\n",
+       " 'Positive electrode active material volume fraction': 0.7,\n",
+       " 'Positive particle radius [m]': 1e-05,\n",
+       " 'Positive electrode surface area density [m-1]': 150000.0,\n",
+       " 'Positive electrode Bruggeman coefficient (electrolyte)': 1.5,\n",
+       " 'Positive electrode Bruggeman coefficient (electrode)': 1.5,\n",
+       " 'Positive electrode cation signed stoichiometry': -1.0,\n",
+       " 'Positive electrode electrons in reaction': 1.0,\n",
+       " 'Positive electrode reference exchange-current density [A.m-2(m3.mol)1.5]': 6e-07,\n",
+       " 'Reference OCP vs SHE in the positive electrode [V]': nan,\n",
+       " 'Positive electrode charge transfer coefficient': 0.5,\n",
+       " 'Positive electrode double-layer capacity [F.m-2]': 0.2,\n",
+       " 'Positive electrode density [kg.m-3]': 3262.0,\n",
+       " 'Positive electrode specific heat capacity [J.kg-1.K-1]': 700.0,\n",
+       " 'Positive electrode thermal conductivity [W.m-1.K-1]': 2.1,\n",
+       " 'Positive electrode OCP entropic change [V.K-1]': <function lico2_entropic_change_Moura2016.lico2_entropic_change_Moura2016(sto, c_p_max)>,\n",
+       " 'Positive electrode reaction rate': <function lico2_electrolyte_reaction_rate_Dualfoil1998.lico2_electrolyte_reaction_rate_Dualfoil1998(T, T_inf, E_r, R_g)>,\n",
+       " 'Positive reaction rate activation energy [J.mol-1]': 39570.0,\n",
+       " 'Positive solid diffusion activation energy [J.mol-1]': 18550.0,\n",
+       " 'Separator porosity': 1.0,\n",
+       " 'Separator Bruggeman coefficient (electrolyte)': 1.5,\n",
+       " 'Separator Bruggeman coefficient (electrode)': 1.5,\n",
+       " 'Separator density [kg.m-3]': 397.0,\n",
+       " 'Separator specific heat capacity [J.kg-1.K-1]': 700.0,\n",
+       " 'Separator thermal conductivity [W.m-1.K-1]': 0.16,\n",
+       " 'Typical electrolyte concentration [mol.m-3]': 1000.0,\n",
+       " 'Cation transference number': 0.4,\n",
+       " 'Electrolyte diffusivity [m2.s-1]': <function electrolyte_diffusivity_Capiglia1999.electrolyte_diffusivity_Capiglia1999(c_e, T, T_inf, E_D_e, R_g)>,\n",
+       " 'Electrolyte conductivity [S.m-1]': <function electrolyte_conductivity_Capiglia1999.electrolyte_conductivity_Capiglia1999(c_e, T, T_inf, E_k_e, R_g)>,\n",
+       " 'Electrolyte diffusion activation energy [J.mol-1]': 37040.0,\n",
+       " 'Electrolyte conductivity activation energy [J.mol-1]': 34700.0,\n",
+       " 'Heat transfer coefficient [W.m-2.K-1]': 10.0,\n",
+       " 'Number of electrodes connected in parallel to make a cell': 1.0,\n",
+       " 'Number of cells connected in series to make a battery': 1.0,\n",
+       " 'Lower voltage cut-off [V]': 3.105,\n",
+       " 'Upper voltage cut-off [V]': 4.7,\n",
+       " 'C-rate': 2.0,\n",
+       " 'Current function': 1.36,\n",
+       " 'Initial concentration in negative electrode [mol.m-3]': 19986.609595075,\n",
+       " 'Initial concentration in positive electrode [mol.m-3]': 30730.7554385565,\n",
+       " 'Initial concentration in electrolyte [mol.m-3]': 1000.0,\n",
+       " 'Initial temperature [K]': 298.15,\n",
+       " 'Typical current [A]': 1.36}"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "parameter_values2"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/notebooks/Getting Started/Tutorial 3 - Basic Plotting.ipynb b/examples/notebooks/Getting Started/Tutorial 3 - Basic Plotting.ipynb
new file mode 100644
index 000000000..526328988
--- /dev/null
+++ b/examples/notebooks/Getting Started/Tutorial 3 - Basic Plotting.ipynb
@@ -0,0 +1,568 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Tutorial 3 - Basic Plotting"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In [Tutorial 2](./Tutorial%202%20-%20Setting%20Parameter%20Values.ipynb), we made use of PyBaMM's automatic plotting function. This gave a good quick overview of many of the key variables in the model. However, by passing in just a few arguments it is easy to plot any of the many other variables that may be of interest to you. We start by building and solving a model as before:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pybamm\n",
+    "model = pybamm.lithium_ion.SPMe()\n",
+    "sim = pybamm.Simulation(model)\n",
+    "sim.solve()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now want to plot a selection of the model variables. To see a full list of the available variables just type:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['Total current density',\n",
+       " 'Total current density [A.m-2]',\n",
+       " 'Current [A]',\n",
+       " 'Time',\n",
+       " 'Time [s]',\n",
+       " 'Time [min]',\n",
+       " 'Time [h]',\n",
+       " 'Discharge capacity [A.h]',\n",
+       " 'x',\n",
+       " 'x [m]',\n",
+       " 'x_n',\n",
+       " 'x_n [m]',\n",
+       " 'x_s',\n",
+       " 'x_s [m]',\n",
+       " 'x_p',\n",
+       " 'x_p [m]',\n",
+       " 'Negative particle concentration',\n",
+       " 'Positive particle concentration',\n",
+       " 'Negative particle surface concentration',\n",
+       " 'Positive particle surface concentration',\n",
+       " 'Negative particle concentration [mol.m-3]',\n",
+       " 'Positive particle concentration [mol.m-3]',\n",
+       " 'Negative particle surface concentration [mol.m-3]',\n",
+       " 'Positive particle surface concentration [mol.m-3]',\n",
+       " 'r_n',\n",
+       " 'r_n [m]',\n",
+       " 'r_p',\n",
+       " 'r_p [m]',\n",
+       " 'Porosity',\n",
+       " 'Negative electrode porosity',\n",
+       " 'Separator porosity',\n",
+       " 'Positive electrode porosity',\n",
+       " 'X-averaged negative electrode porosity',\n",
+       " 'X-averaged separator porosity',\n",
+       " 'X-averaged positive electrode porosity',\n",
+       " 'Active material volume fraction',\n",
+       " 'Negative electrode active material volume fraction',\n",
+       " 'Separator active material volume fraction',\n",
+       " 'Positive electrode active material volume fraction',\n",
+       " 'X-averaged negative electrode active material volume fraction',\n",
+       " 'X-averaged separator active material volume fraction',\n",
+       " 'X-averaged positive electrode active material volume fraction',\n",
+       " 'Leading-order porosity',\n",
+       " 'Leading-order negative electrode porosity',\n",
+       " 'Leading-order separator porosity',\n",
+       " 'Leading-order positive electrode porosity',\n",
+       " 'Leading-order x-averaged negative electrode porosity',\n",
+       " 'Leading-order x-averaged separator porosity',\n",
+       " 'Leading-order x-averaged positive electrode porosity',\n",
+       " 'Leading-order active material volume fraction',\n",
+       " 'Leading-order negative electrode active material volume fraction',\n",
+       " 'Leading-order separator active material volume fraction',\n",
+       " 'Leading-order positive electrode active material volume fraction',\n",
+       " 'Leading-order x-averaged negative electrode active material volume fraction',\n",
+       " 'Leading-order x-averaged separator active material volume fraction',\n",
+       " 'Leading-order x-averaged positive electrode active material volume fraction',\n",
+       " 'Porosity change',\n",
+       " 'Negative electrode porosity change',\n",
+       " 'Separator porosity change',\n",
+       " 'Positive electrode porosity change',\n",
+       " 'X-averaged porosity change',\n",
+       " 'X-averaged negative electrode porosity change',\n",
+       " 'X-averaged separator porosity change',\n",
+       " 'X-averaged positive electrode porosity change',\n",
+       " 'Leading-order x-averaged negative electrode porosity change',\n",
+       " 'Leading-order x-averaged separator porosity change',\n",
+       " 'Leading-order x-averaged positive electrode porosity change',\n",
+       " 'Volume-averaged velocity',\n",
+       " 'Volume-averaged velocity [m.s-1]',\n",
+       " 'Electrolyte pressure',\n",
+       " 'X-averaged negative particle concentration',\n",
+       " 'X-averaged negative particle concentration [mol.m-3]',\n",
+       " 'X-averaged negative particle surface concentration',\n",
+       " 'X-averaged negative particle surface concentration [mol.m-3]',\n",
+       " 'Negative electrode active volume fraction',\n",
+       " 'Negative electrode volume-averaged concentration',\n",
+       " 'Negative electrode volume-averaged concentration [mol.m-3]',\n",
+       " 'Negative electrode average extent of lithiation',\n",
+       " 'X-averaged positive particle concentration',\n",
+       " 'X-averaged positive particle concentration [mol.m-3]',\n",
+       " 'X-averaged positive particle surface concentration',\n",
+       " 'X-averaged positive particle surface concentration [mol.m-3]',\n",
+       " 'Positive electrode active volume fraction',\n",
+       " 'Positive electrode volume-averaged concentration',\n",
+       " 'Positive electrode volume-averaged concentration [mol.m-3]',\n",
+       " 'Positive electrode average extent of lithiation',\n",
+       " 'Electrolyte concentration',\n",
+       " 'Electrolyte concentration [mol.m-3]',\n",
+       " 'Electrolyte concentration [Molar]',\n",
+       " 'X-averaged electrolyte concentration',\n",
+       " 'X-averaged electrolyte concentration [mol.m-3]',\n",
+       " 'X-averaged electrolyte concentration [Molar]',\n",
+       " 'Negative electrolyte concentration',\n",
+       " 'Negative electrolyte concentration [mol.m-3]',\n",
+       " 'Negative electrolyte concentration [Molar]',\n",
+       " 'Separator electrolyte concentration',\n",
+       " 'Separator electrolyte concentration [mol.m-3]',\n",
+       " 'Separator electrolyte concentration [Molar]',\n",
+       " 'Positive electrolyte concentration',\n",
+       " 'Positive electrolyte concentration [mol.m-3]',\n",
+       " 'Positive electrolyte concentration [Molar]',\n",
+       " 'X-averaged negative electrolyte concentration',\n",
+       " 'X-averaged negative electrolyte concentration [mol.m-3]',\n",
+       " 'X-averaged separator electrolyte concentration',\n",
+       " 'X-averaged separator electrolyte concentration [mol.m-3]',\n",
+       " 'X-averaged positive electrolyte concentration',\n",
+       " 'X-averaged positive electrolyte concentration [mol.m-3]',\n",
+       " 'Negative current collector temperature',\n",
+       " 'Negative current collector temperature [K]',\n",
+       " 'X-averaged negative electrode temperature',\n",
+       " 'X-averaged negative electrode temperature [K]',\n",
+       " 'Negative electrode temperature',\n",
+       " 'Negative electrode temperature [K]',\n",
+       " 'X-averaged separator temperature',\n",
+       " 'X-averaged separator temperature [K]',\n",
+       " 'Separator temperature',\n",
+       " 'Separator temperature [K]',\n",
+       " 'X-averaged positive electrode temperature',\n",
+       " 'X-averaged positive electrode temperature [K]',\n",
+       " 'Positive electrode temperature',\n",
+       " 'Positive electrode temperature [K]',\n",
+       " 'Positive current collector temperature',\n",
+       " 'Positive current collector temperature [K]',\n",
+       " 'Cell temperature',\n",
+       " 'Cell temperature [K]',\n",
+       " 'X-averaged cell temperature',\n",
+       " 'X-averaged cell temperature [K]',\n",
+       " 'Volume-averaged cell temperature',\n",
+       " 'Volume-averaged cell temperature [K]',\n",
+       " 'Heat flux',\n",
+       " 'Heat flux [W.m-2]',\n",
+       " 'Negative current collector potential',\n",
+       " 'Negative current collector potential [V]',\n",
+       " 'Current collector current density',\n",
+       " 'Current collector current density [A.m-2]',\n",
+       " 'Leading-order current collector current density',\n",
+       " 'Electrolyte tortuosity',\n",
+       " 'Negative electrolyte tortuosity',\n",
+       " 'Positive electrolyte tortuosity',\n",
+       " 'X-averaged negative electrolyte tortuosity',\n",
+       " 'X-averaged positive electrolyte tortuosity',\n",
+       " 'Separator tortuosity',\n",
+       " 'X-averaged separator tortuosity',\n",
+       " 'Leading-order electrolyte tortuosity',\n",
+       " 'Leading-order negative electrolyte tortuosity',\n",
+       " 'Leading-order positive electrolyte tortuosity',\n",
+       " 'Leading-order x-averaged negative electrolyte tortuosity',\n",
+       " 'Leading-order x-averaged positive electrolyte tortuosity',\n",
+       " 'Leading-order separator tortuosity',\n",
+       " 'Leading-order x-averaged separator tortuosity',\n",
+       " 'Electrode tortuosity',\n",
+       " 'Negative electrode tortuosity',\n",
+       " 'Positive electrode tortuosity',\n",
+       " 'X-averaged negative electrode tortuosity',\n",
+       " 'X-averaged positive electrode tortuosity',\n",
+       " 'Leading-order electrode tortuosity',\n",
+       " 'Leading-order negative electrode tortuosity',\n",
+       " 'Leading-order positive electrode tortuosity',\n",
+       " 'Leading-order x-averaged negative electrode tortuosity',\n",
+       " 'Leading-order x-averaged positive electrode tortuosity',\n",
+       " 'Negative electrode interfacial current density',\n",
+       " 'X-averaged negative electrode interfacial current density',\n",
+       " 'Negative electrode interfacial current density [A.m-2]',\n",
+       " 'X-averaged negative electrode interfacial current density [A.m-2]',\n",
+       " 'Negative electrode interfacial current density per volume [A.m-3]',\n",
+       " 'X-averaged negative electrode interfacial current density per volume [A.m-3]',\n",
+       " 'X-averaged negative electrode total interfacial current density',\n",
+       " 'X-averaged negative electrode total interfacial current density [A.m-2]',\n",
+       " 'X-averaged negative electrode total interfacial current density per volume [A.m-3]',\n",
+       " 'Negative electrode exchange current density',\n",
+       " 'X-averaged negative electrode exchange current density',\n",
+       " 'Negative electrode exchange current density [A.m-2]',\n",
+       " 'X-averaged negative electrode exchange current density [A.m-2]',\n",
+       " 'Negative electrode exchange current density per volume [A.m-3]',\n",
+       " 'X-averaged negative electrode exchange current density per volume [A.m-3]',\n",
+       " 'Negative electrode reaction overpotential',\n",
+       " 'X-averaged negative electrode reaction overpotential',\n",
+       " 'Negative electrode reaction overpotential [V]',\n",
+       " 'X-averaged negative electrode reaction overpotential [V]',\n",
+       " 'Negative electrode surface potential difference',\n",
+       " 'X-averaged negative electrode surface potential difference',\n",
+       " 'Negative electrode surface potential difference [V]',\n",
+       " 'X-averaged negative electrode surface potential difference [V]',\n",
+       " 'Negative electrode open circuit potential',\n",
+       " 'Negative electrode open circuit potential [V]',\n",
+       " 'X-averaged negative electrode open circuit potential',\n",
+       " 'X-averaged negative electrode open circuit potential [V]',\n",
+       " 'Negative electrode entropic change',\n",
+       " 'X-averaged negative electrode entropic change',\n",
+       " 'Positive electrode interfacial current density',\n",
+       " 'X-averaged positive electrode interfacial current density',\n",
+       " 'Positive electrode interfacial current density [A.m-2]',\n",
+       " 'X-averaged positive electrode interfacial current density [A.m-2]',\n",
+       " 'Positive electrode interfacial current density per volume [A.m-3]',\n",
+       " 'X-averaged positive electrode interfacial current density per volume [A.m-3]',\n",
+       " 'X-averaged positive electrode total interfacial current density',\n",
+       " 'X-averaged positive electrode total interfacial current density [A.m-2]',\n",
+       " 'X-averaged positive electrode total interfacial current density per volume [A.m-3]',\n",
+       " 'Positive electrode exchange current density',\n",
+       " 'X-averaged positive electrode exchange current density',\n",
+       " 'Positive electrode exchange current density [A.m-2]',\n",
+       " 'X-averaged positive electrode exchange current density [A.m-2]',\n",
+       " 'Positive electrode exchange current density per volume [A.m-3]',\n",
+       " 'X-averaged positive electrode exchange current density per volume [A.m-3]',\n",
+       " 'Positive electrode reaction overpotential',\n",
+       " 'X-averaged positive electrode reaction overpotential',\n",
+       " 'Positive electrode reaction overpotential [V]',\n",
+       " 'X-averaged positive electrode reaction overpotential [V]',\n",
+       " 'Positive electrode surface potential difference',\n",
+       " 'X-averaged positive electrode surface potential difference',\n",
+       " 'Positive electrode surface potential difference [V]',\n",
+       " 'X-averaged positive electrode surface potential difference [V]',\n",
+       " 'Positive electrode open circuit potential',\n",
+       " 'Positive electrode open circuit potential [V]',\n",
+       " 'X-averaged positive electrode open circuit potential',\n",
+       " 'X-averaged positive electrode open circuit potential [V]',\n",
+       " 'Positive electrode entropic change',\n",
+       " 'X-averaged positive electrode entropic change',\n",
+       " 'Interfacial current density',\n",
+       " 'Interfacial current density [A.m-2]',\n",
+       " 'Interfacial current density per volume [A.m-3]',\n",
+       " 'Exchange current density',\n",
+       " 'Exchange current density [A.m-2]',\n",
+       " 'Exchange current density per volume [A.m-3]',\n",
+       " 'Negative particle flux',\n",
+       " 'X-averaged negative particle flux',\n",
+       " 'Positive particle flux',\n",
+       " 'X-averaged positive particle flux',\n",
+       " 'Negative electrode potential',\n",
+       " 'Negative electrode potential [V]',\n",
+       " 'X-averaged negative electrode potential',\n",
+       " 'X-averaged negative electrode potential [V]',\n",
+       " 'Negative electrode ohmic losses',\n",
+       " 'Negative electrode ohmic losses [V]',\n",
+       " 'X-averaged negative electrode ohmic losses',\n",
+       " 'X-averaged negative electrode ohmic losses [V]',\n",
+       " 'Gradient of negative electrode potential',\n",
+       " 'Negative electrode current density',\n",
+       " 'Negative electrode current density [A.m-2]',\n",
+       " 'Negative electrolyte potential',\n",
+       " 'Negative electrolyte potential [V]',\n",
+       " 'Separator electrolyte potential',\n",
+       " 'Separator electrolyte potential [V]',\n",
+       " 'Positive electrolyte potential',\n",
+       " 'Positive electrolyte potential [V]',\n",
+       " 'Electrolyte potential',\n",
+       " 'Electrolyte potential [V]',\n",
+       " 'X-averaged electrolyte potential',\n",
+       " 'X-averaged electrolyte potential [V]',\n",
+       " 'X-averaged negative electrolyte potential',\n",
+       " 'X-averaged negative electrolyte potential [V]',\n",
+       " 'X-averaged separator electrolyte potential',\n",
+       " 'X-averaged separator electrolyte potential [V]',\n",
+       " 'X-averaged positive electrolyte potential',\n",
+       " 'X-averaged positive electrolyte potential [V]',\n",
+       " 'X-averaged electrolyte overpotential',\n",
+       " 'X-averaged electrolyte overpotential [V]',\n",
+       " 'Gradient of negative electrolyte potential',\n",
+       " 'Gradient of separator electrolyte potential',\n",
+       " 'Gradient of positive electrolyte potential',\n",
+       " 'Gradient of electrolyte potential',\n",
+       " 'Electrolyte current density',\n",
+       " 'Electrolyte current density [A.m-2]',\n",
+       " 'Negative electrolyte current density',\n",
+       " 'Negative electrolyte current density [A.m-2]',\n",
+       " 'Positive electrolyte current density',\n",
+       " 'Positive electrolyte current density [A.m-2]',\n",
+       " 'X-averaged concentration overpotential',\n",
+       " 'X-averaged electrolyte ohmic losses',\n",
+       " 'X-averaged concentration overpotential [V]',\n",
+       " 'X-averaged electrolyte ohmic losses [V]',\n",
+       " 'Electrolyte flux',\n",
+       " 'Electrolyte flux [mol.m-2.s-1]',\n",
+       " 'Positive electrode potential',\n",
+       " 'Positive electrode potential [V]',\n",
+       " 'X-averaged positive electrode potential',\n",
+       " 'X-averaged positive electrode potential [V]',\n",
+       " 'Positive electrode ohmic losses',\n",
+       " 'Positive electrode ohmic losses [V]',\n",
+       " 'X-averaged positive electrode ohmic losses',\n",
+       " 'X-averaged positive electrode ohmic losses [V]',\n",
+       " 'Gradient of positive electrode potential',\n",
+       " 'Positive electrode current density',\n",
+       " 'Positive electrode current density [A.m-2]',\n",
+       " 'Electrode current density',\n",
+       " 'Positive current collector potential',\n",
+       " 'Ohmic heating',\n",
+       " 'Ohmic heating [W.m-3]',\n",
+       " 'Irreversible electrochemical heating',\n",
+       " 'Irreversible electrochemical heating [W.m-3]',\n",
+       " 'Reversible heating',\n",
+       " 'Reversible heating [W.m-3]',\n",
+       " 'Total heating',\n",
+       " 'Total heating [W.m-3]',\n",
+       " 'X-averaged total heating',\n",
+       " 'X-averaged total heating [W.m-3]',\n",
+       " 'Volume-averaged total heating',\n",
+       " 'Volume-averaged total heating [W.m-3]',\n",
+       " 'Positive current collector potential [V]',\n",
+       " 'Local current collector potential difference',\n",
+       " 'Local current collector potential difference [V]',\n",
+       " 'X-averaged open circuit voltage',\n",
+       " 'Measured open circuit voltage',\n",
+       " 'X-averaged open circuit voltage [V]',\n",
+       " 'Measured open circuit voltage [V]',\n",
+       " 'X-averaged reaction overpotential',\n",
+       " 'X-averaged reaction overpotential [V]',\n",
+       " 'X-averaged solid phase ohmic losses',\n",
+       " 'X-averaged solid phase ohmic losses [V]',\n",
+       " 'Terminal voltage',\n",
+       " 'Terminal voltage [V]',\n",
+       " 'X-averaged battery open circuit voltage [V]',\n",
+       " 'Measured battery open circuit voltage [V]',\n",
+       " 'X-averaged battery reaction overpotential [V]',\n",
+       " 'X-averaged battery solid phase ohmic losses [V]',\n",
+       " 'X-averaged battery electrolyte ohmic losses [V]',\n",
+       " 'X-averaged battery concentration overpotential [V]',\n",
+       " 'Battery voltage [V]']"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "model.variable_names()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We have tried to make variables names fairly self explanatory. However, there are two variables for most quantities. This is because PyBaMM utilises both dimensionless and dimensional variables for these quantities. As a rule, the dimensionless variables have no units in their name and the dimensional variables have units in their name. If in doubt, we recommend using the dimensional variable with units."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "As a first example, we choose to plot the terminal voltage. We add this to a list and then pass this list to the `plot` method of our simulation:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "56d365a33d924a8a9ae3a71f20179b68",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.9999999999999999, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "quick_plot_vars = [\"Terminal voltage [V]\"]\n",
+    "sim.plot(quick_plot_vars=quick_plot_vars)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Alternatively, we may be interested in plotting both the electrolyte concentration and the terminal voltage. In which case, we would do:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "5c5aca037ec34f3386839a61a2ec68dd",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.9999999999999999, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "quick_plot_vars = [\"Electrolyte concentration [mol.m-3]\", \"Terminal voltage [V]\"]\n",
+    "sim.plot(quick_plot_vars=quick_plot_vars)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Overwriting default plot variables"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "If you plan on plotting a specific set of variables repeatedly you can also overwrite the default set of quick plot variables in the simulation class. Currently, if we run `plot` with no arguments, we produces the standard plot we observed in previous tutorials:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "2768ef604ebe46d98ebe74bec3bcd67c",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.9999999999999999, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sim.plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "But, if we set:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "quick_plot_vars = [\"Electrolyte concentration [mol.m-3]\", \"Terminal voltage [V]\"]\n",
+    "sim.specs(quick_plot_vars=quick_plot_vars)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "then running `plot` will automatically produce a plot using your plot variables:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "28ee08a7b6634a0f8fc30a27b657610d",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.9999999999999999, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sim.plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this tutorial we have seen how to use the plotting functionality in PyBaMM.\n",
+    "\n",
+    "In [Tutorial 4](./Tutorial%204%20-%20Model%20Options.ipynb) we show how to change model options."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/notebooks/Getting Started/Tutorial 4 - Model Options.ipynb b/examples/notebooks/Getting Started/Tutorial 4 - Model Options.ipynb
new file mode 100644
index 000000000..3b21989fc
--- /dev/null
+++ b/examples/notebooks/Getting Started/Tutorial 4 - Model Options.ipynb
@@ -0,0 +1,133 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Tutorial 4 - Model Options"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In [Tutorial 3](/Tutorial%203%20-%20Basic%20Plotting.ipynb) we saw how to use the in-built plotting functionality. In all of the previous tutorials, we have made use of the default forms of the inbuilt models in PyBaMM. However, PyBaMM provides a high-level interface for tweaking these models for your particular application. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pybamm"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this tutorial, we add a thermal model to the SPMe. From the [documentation](https://pybamm.readthedocs.io/en/latest/source/models/base_models/base_battery_model.html), we see that we have a choice of either a 'x-full' thermal model or a number of different lumped thermal models. We choose the full thermal model, which solves the spatially-dependent heat equation on our battery geometry, and couples the temperature with the electrochemistry. We set the model options by creating a python dictionary:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "options = {\"thermal\": \"x-full\"}"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "and then passing this to the model and solving it as we have already done. We also increase the current so as to amplify the thermal effects:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model = pybamm.lithium_ion.SPMe(options=options) # loading in options\n",
+    "sim = pybamm.Simulation(model)\n",
+    "\n",
+    "# Increasing the current\n",
+    "parameter_values = sim.parameter_values\n",
+    "parameter_values.update({\"Typical current [A]\": 3})\n",
+    "sim.specs(parameter_values=parameter_values)\n",
+    "\n",
+    "sim.solve()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We now plot the cell temperature and the total heating by passing these variables to the `plot` method as we saw in Tutorial 3:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "17368df63d2b44d3982c151286110d41",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=0.2014814814814815, step=0.05), Output()), _…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sim.plot([\"Cell temperature [K]\", \"Total heating [W.m-3]\", \"Terminal voltage [V]\"])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this tutorial we have seen how to adjust the model options. To see all of the options currently available in PyBaMM, please take a look at the documentation [here](https://pybamm.readthedocs.io/en/latest/source/models/base_models/base_battery_model.html)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.6.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/notebooks/README.md b/examples/notebooks/README.md
index 14a4ae956..6aff7646e 100644
--- a/examples/notebooks/README.md
+++ b/examples/notebooks/README.md
@@ -1,3 +1,7 @@
+# Getting started
+
+For new users we recommend the [Getting Started](./Getting%20Started/) notebooks. These are intended to be very simple step-by-step guides to show the basic functionality of PyBaMM. For more detailed notebooks, please see the examples listed below.
+
 # Examples
 
 [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pybamm-team/PyBaMM/master)
@@ -11,7 +15,7 @@ $ jupyter notebook
 ```
 from your local PyBaMM repository, or used online through [Binder](https://mybinder.org/v2/gh/pybamm-team/PyBaMM/master), or you can simply copy/paste the relevant code.
 
-## Getting started
+## Using PyBaMM
 
 The easiest way to start with PyBaMM is by running and comparing some of the inbuilt models:
 - [Run the Single Particle Model (SPM)](./models/SPM.ipynb)
@@ -31,11 +35,15 @@ For more advanced usage, new sets of parameters, spatial methods and solvers can
 - [Add a spatial method](https://pybamm.readthedocs.io/en/latest/tutorials/add-spatial-method.html)
 - [Add a solver](https://pybamm.readthedocs.io/en/latest/tutorials/add-solver.html)
 
+
+
 ## Expression tree structure
 
 PyBaMM is built around an expression tree structure.
 [This](expression_tree/expression-tree.ipynb) notebook explains how this works, from
-model creation to solution.
+model creation to solution. 
+
+The following notebooks are specific to different stages of the PyBaMM pipeline, such as choosing a model, spatial method, or solver.
 
 ### Models
 
@@ -67,5 +75,6 @@ The following solvers are implemented
 - Scipy ODE solver
 - [Scikits ODE solver](./solvers/scikits-ode-solver.ipynb)
 - [Scikits DAE solver](./solvers/scikits-dae-solver.ipynb)
+- CasADi DAE solver
 
 See [here](https://pybamm.readthedocs.io/en/latest/tutorials/add-solver.html) for instructions on adding new solvers.
diff --git a/examples/notebooks/expression_tree/expression-tree.ipynb b/examples/notebooks/expression_tree/expression-tree.ipynb
index 8e4a700a6..9bcfeb319 100644
--- a/examples/notebooks/expression_tree/expression-tree.ipynb
+++ b/examples/notebooks/expression_tree/expression-tree.ipynb
@@ -220,7 +220,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.8"
+   "version": "3.7.3"
   }
  },
  "nbformat": 4,
diff --git a/examples/notebooks/parameter-values.ipynb b/examples/notebooks/parameter-values.ipynb
index 0ece13828..1a2e2b798 100644
--- a/examples/notebooks/parameter-values.ipynb
+++ b/examples/notebooks/parameter-values.ipynb
@@ -482,7 +482,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.7.3"
+   "version": "3.6.8"
   }
  },
  "nbformat": 4,
diff --git a/examples/notebooks/using-model-options_thermal-example.ipynb b/examples/notebooks/using-model-options_thermal-example.ipynb
index 3039bc97c..a1d6dee7c 100644
--- a/examples/notebooks/using-model-options_thermal-example.ipynb
+++ b/examples/notebooks/using-model-options_thermal-example.ipynb
@@ -204,7 +204,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.7.3"
+   "version": "3.6.8"
   }
  },
  "nbformat": 4,
diff --git a/pybamm/models/base_model.py b/pybamm/models/base_model.py
index 08b33033e..3956fce42 100644
--- a/pybamm/models/base_model.py
+++ b/pybamm/models/base_model.py
@@ -195,6 +195,9 @@ class BaseModel(object):
     def variables(self, variables):
         self._variables = variables
 
+    def variable_names(self):
+        return list(self._variables.keys())
+
     @property
     def events(self):
         return self._events
diff --git a/pybamm/simulation.py b/pybamm/simulation.py
index cb9b0e4ed..ae8ae094e 100644
--- a/pybamm/simulation.py
+++ b/pybamm/simulation.py
@@ -3,6 +3,19 @@ import numpy as np
 import copy
 
 
+def isnotebook():
+    try:
+        shell = get_ipython().__class__.__name__
+        if shell == "ZMQInteractiveShell":
+            return True  # Jupyter notebook or qtconsole
+        elif shell == "TerminalInteractiveShell":
+            return False  # Terminal running IPython
+        else:
+            return False  # Other type (?)
+    except NameError:
+        return False  # Probably standard Python interpreter
+
+
 class Simulation:
     """A Simulation class for easy building and running of PyBaMM simulations.
 
@@ -35,6 +48,12 @@ class Simulation:
 
         self.reset()
 
+        # ignore runtime warnings in notebooks
+        if isnotebook():
+            import warnings
+
+            warnings.filterwarnings("ignore")
+
     def set_defaults(self):
         """
         A method to set all the simulation specs to default values for the
@@ -99,29 +118,41 @@ class Simulation:
 
         Parameters
         ----------
-        t_eval : numeric type (optional)
-            The times at which to compute the solution
+        t_eval : numeric type, optional
+            The times at which to compute the solution. If None the model will
+            be solved for a full discharge (1 hour / C_rate) if the discharge
+            timescale is provided. Otherwise the model will be solved up to a
+            non-dimensional time of 1.
         solver : :class:`pybamm.BaseSolver`
             The solver to use to solve the model.
         """
         self.build()
 
         if t_eval is None:
-            t_eval = np.linspace(0, 1, 100)
+            try:
+                # Try to compute discharge time
+                tau = self._parameter_values.evaluate(self.model.param.tau_discharge)
+                C_rate = self._parameter_values["C-rate"]
+                t_end = 3600 / tau / C_rate
+                t_eval = np.linspace(0, t_end, 100)
+            except AttributeError:
+                t_eval = np.linspace(0, 1, 100)
 
         if solver is None:
             solver = self.solver
 
         self._solution = solver.solve(self.built_model, t_eval)
 
-    def plot(self, quick_plot_vars=None):
+    def plot(self, quick_plot_vars=None, testing=False):
         """
         A method to quickly plot the outputs of the simulation.
 
         Parameters
         ----------
-        quick_plot_vars: list
+        quick_plot_vars: list, optional
             A list of the variables to plot.
+        testing, bool, optional
+            If False the plot will not be displayed
         """
 
         if self._solution is None:
@@ -138,7 +169,16 @@ class Simulation:
             self._solution,
             output_variables=quick_plot_vars,
         )
-        plot.dynamic_plot()
+
+        if isnotebook():
+            import ipywidgets as widgets
+
+            widgets.interact(
+                plot.plot,
+                t=widgets.FloatSlider(min=0, max=plot.max_t, step=0.05, value=0),
+            )
+        else:
+            plot.dynamic_plot(testing=testing)
 
     @property
     def model(self):
@@ -232,19 +272,19 @@ class Simulation:
 
         Parameters
         ----------
-        model_options: dict (optional)
+        model_options: dict, optional
             A dictionary of options to tweak the model you are using
-        geometry: :class:`pybamm.Geometry` (optional)
+        geometry: :class:`pybamm.Geometry`, optional
             The geometry upon which to solve the model
-        parameter_values: dict (optional)
+        parameter_values: dict, optional
             A dictionary of parameters and their corresponding numerical
             values
-        submesh_types: dict (optional)
+        submesh_types: dict, optional
             A dictionary of the types of submesh to use on each subdomain
-        var_pts: dict (optional)
+        var_pts: dict, optional
             A dictionary of the number of points used by each spatial
             variable
-        spatial_methods: dict (optional)
+        spatial_methods: dict, optional
             A dictionary of the types of spatial method to use on each
             domain (e.g. pybamm.FiniteVolume)
         solver: :class:`pybamm.BaseSolver`


Test patch:
diff --git a/tests/unit/test_simulation.py b/tests/unit/test_simulation.py
index 8dd3aa1b3..81bf3992b 100644
--- a/tests/unit/test_simulation.py
+++ b/tests/unit/test_simulation.py
@@ -1,5 +1,6 @@
 import pybamm
 import unittest
+import numpy as np
 
 
 class TestSimulation(unittest.TestCase):
@@ -129,6 +130,48 @@ class TestSimulation(unittest.TestCase):
         sim.specs(spatial_methods=spatial_methods)
         sim.build()
 
+    def test_set_defaults(self):
+        model = pybamm.lithium_ion.SPM()
+
+        # make simulation with silly options (should this be allowed?)
+        sim = pybamm.Simulation(
+            model,
+            geometry=1,
+            parameter_values=1,
+            submesh_types=1,
+            var_pts=1,
+            spatial_methods=1,
+            solver=1,
+            quick_plot_vars=1,
+        )
+
+        # reset and check
+        sim.set_defaults()
+        # Not sure of best way to test nested dicts?
+        # self.geometry = model.default_geometry
+        self.assertEqual(sim._parameter_values, model.default_parameter_values)
+        for domain, submesh in model.default_submesh_types.items():
+            self.assertEqual(
+                sim._submesh_types[domain].submesh_type, submesh.submesh_type
+            )
+        self.assertEqual(sim._var_pts, model.default_var_pts)
+        for domain, method in model.default_spatial_methods.items():
+            self.assertIsInstance(sim._spatial_methods[domain], type(method))
+        self.assertIsInstance(sim._solver, type(model.default_solver))
+        self.assertEqual(sim._quick_plot_vars, None)
+
+    def test_plot(self):
+        sim = pybamm.Simulation(pybamm.lithium_ion.SPM())
+
+        # test exception if not solved
+        with self.assertRaises(ValueError):
+            sim.plot()
+
+        # now solve and plot
+        t_eval = np.linspace(0, 0.01, 5)
+        sim.solve(t_eval=t_eval)
+        sim.plot(testing=True)
+
 
 if __name__ == "__main__":
     print("Add -v for more debug output")
@@ -137,4 +180,3 @@ if __name__ == "__main__":
     if "-v" in sys.argv:
         debug = True
     unittest.main()
-