Repository: pybamm-team/PyBaMM

Issue:
Add UMBL NMCgraphite cell parameters
**Summary**
Add parameters for UMBL 5 Ah pouch cell NMC/graphite

 **Motivation**
 Why are we doing this? What use cases does it support? What is the expected outcome?

**Additional context**
 Add any other context or screenshots about the feature request here.


Discussion:

Patch:
diff --git a/examples/scripts/drive_cycle.py b/examples/scripts/drive_cycle.py
index f04d24a19..a1b0fb5a2 100644
--- a/examples/scripts/drive_cycle.py
+++ b/examples/scripts/drive_cycle.py
@@ -13,7 +13,7 @@ param["Current function [A]"] = "[current data]US06"
 # create and run simulation using the CasadiSolver in "fast" mode, remembering to
 # pass in the updated parameters
 sim = pybamm.Simulation(
-    model, parameter_values=param, solver=pybamm.CasadiSolver(mode="fast"),
+    model, parameter_values=param, solver=pybamm.CasadiSolver(mode="fast")
 )
 sim.solve()
 sim.plot(
diff --git a/examples/scripts/experimental_protocols/cccv.py b/examples/scripts/experimental_protocols/cccv.py
index c04e4eaae..cfaf6f81d 100644
--- a/examples/scripts/experimental_protocols/cccv.py
+++ b/examples/scripts/experimental_protocols/cccv.py
@@ -13,7 +13,7 @@ experiment = pybamm.Experiment(
         "Hold at 4.1 V until 50 mA",
         "Rest for 1 hour",
     ]
-    * 3,
+    * 3
 )
 model = pybamm.lithium_ion.DFN()
 sim = pybamm.Simulation(model, experiment=experiment, solver=pybamm.CasadiSolver())
diff --git a/examples/scripts/experimental_protocols/gitt.py b/examples/scripts/experimental_protocols/gitt.py
index dfebc7096..0ad881bec 100644
--- a/examples/scripts/experimental_protocols/gitt.py
+++ b/examples/scripts/experimental_protocols/gitt.py
@@ -4,9 +4,7 @@
 import pybamm
 
 pybamm.set_logging_level("INFO")
-experiment = pybamm.Experiment(
-    ["Discharge at C/20 for 1 hour", "Rest for 1 hour"] * 20,
-)
+experiment = pybamm.Experiment(["Discharge at C/20 for 1 hour", "Rest for 1 hour"] * 20)
 model = pybamm.lithium_ion.DFN()
 sim = pybamm.Simulation(model, experiment=experiment, solver=pybamm.CasadiSolver())
 sim.solve()
diff --git a/pybamm/CITATIONS.txt b/pybamm/CITATIONS.txt
index 318c1fcd8..a3ff7baa3 100644
--- a/pybamm/CITATIONS.txt
+++ b/pybamm/CITATIONS.txt
@@ -72,6 +72,14 @@ year={2019},
 publisher={The Electrochemical Society}
 }
 
+@article{Mohtat2020,
+author = {Mohtat, Peyman and Siegel, Jason B and Stefanopoulou, Anna G},
+title = {{High C-rate Differential Expansion and Voltage Model for Li-ion Batteries}},
+journal = {Submitted for publication},
+year = {2019},
+publisher={ECSarXiv}
+}
+
 @article{scikits-odes,
   year  = {2018},
   month = {feb},
diff --git a/pybamm/expression_tree/state_vector.py b/pybamm/expression_tree/state_vector.py
index e0a07cbc7..47a6c28e1 100644
--- a/pybamm/expression_tree/state_vector.py
+++ b/pybamm/expression_tree/state_vector.py
@@ -45,8 +45,9 @@ class StateVectorBase(pybamm.Symbol):
             if y_slices[0].start is None:
                 name = base_name + "[:{:d}]".format(y_slice.stop)
             else:
-                name = base_name + \
-                    "[{:d}:{:d}".format(y_slices[0].start, y_slices[0].stop)
+                name = base_name + "[{:d}:{:d}".format(
+                    y_slices[0].start, y_slices[0].stop
+                )
             if len(y_slices) > 1:
                 name += ",{:d}:{:d}".format(y_slices[1].start, y_slices[1].stop)
                 if len(y_slices) > 2:
@@ -222,10 +223,14 @@ class StateVector(StateVectorBase):
         auxiliary_domains=None,
         evaluation_array=None,
     ):
-        super().__init__(*y_slices,
-                         base_name="y", name=name, domain=domain,
-                         auxiliary_domains=auxiliary_domains,
-                         evaluation_array=evaluation_array)
+        super().__init__(
+            *y_slices,
+            base_name="y",
+            name=name,
+            domain=domain,
+            auxiliary_domains=auxiliary_domains,
+            evaluation_array=evaluation_array,
+        )
 
     def _base_evaluate(self, t=None, y=None, y_dot=None, inputs=None):
         """ See :meth:`pybamm.Symbol._base_evaluate()`. """
@@ -245,10 +250,13 @@ class StateVector(StateVectorBase):
         if variable.id == self.id:
             return pybamm.Scalar(1)
         if variable.id == pybamm.t.id:
-            return StateVectorDot(*self._y_slices, name=self.name + "'",
-                                  domain=self.domain,
-                                  auxiliary_domains=self.auxiliary_domains,
-                                  evaluation_array=self.evaluation_array)
+            return StateVectorDot(
+                *self._y_slices,
+                name=self.name + "'",
+                domain=self.domain,
+                auxiliary_domains=self.auxiliary_domains,
+                evaluation_array=self.evaluation_array,
+            )
         else:
             return pybamm.Scalar(0)
 
@@ -289,10 +297,14 @@ class StateVectorDot(StateVectorBase):
         auxiliary_domains=None,
         evaluation_array=None,
     ):
-        super().__init__(*y_slices,
-                         base_name="y_dot", name=name, domain=domain,
-                         auxiliary_domains=auxiliary_domains,
-                         evaluation_array=evaluation_array)
+        super().__init__(
+            *y_slices,
+            base_name="y_dot",
+            name=name,
+            domain=domain,
+            auxiliary_domains=auxiliary_domains,
+            evaluation_array=evaluation_array,
+        )
 
     def _base_evaluate(self, t=None, y=None, y_dot=None, inputs=None):
         """ See :meth:`pybamm.Symbol._base_evaluate()`. """
diff --git a/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_diffusivity_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_diffusivity_PeymanMPM.py
new file mode 100644
index 000000000..abc787cae
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_diffusivity_PeymanMPM.py
@@ -0,0 +1,38 @@
+import pybamm
+
+
+def graphite_diffusivity_PeymanMPM(sto, T, T_inf, E_D_s, R_g):
+    """
+    Graphite diffusivity as a function of stochiometry, in this case the
+    diffusivity is taken to be a constant. The value is taken from Peyman MPM.
+
+    References
+    ----------
+    .. [1] http://www.cchem.berkeley.edu/jsngrp/fortran.html
+
+    Parameters
+    ----------
+    sto: :class: `numpy.Array`
+        Electrode stochiometry
+    T: :class: `numpy.Array`
+        Dimensional temperature
+    T_inf: double
+        Reference temperature
+    E_D_s: double
+        Solid diffusion activation energy
+    R_g: double
+        The ideal gas constant
+
+    Returns
+    -------
+    : double
+        Solid diffusivity
+   """
+
+    D_ref = 5.0 * 10 ** (-15)
+    arrhenius = pybamm.exp(E_D_s / R_g * (1 / T_inf - 1 / T))
+
+    # Removing the fudge factor 0 * sto requires different handling of either
+    # either simplifications or how sto is passed into this function.
+    # See #547
+    return D_ref * arrhenius + 0 * sto
diff --git a/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_reaction_rate_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_reaction_rate_PeymanMPM.py
new file mode 100644
index 000000000..2b4ed3999
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_reaction_rate_PeymanMPM.py
@@ -0,0 +1,32 @@
+import pybamm
+
+
+def graphite_electrolyte_reaction_rate_PeymanMPM(T, T_inf, E_r, R_g):
+    """
+    Reaction rate for Butler-Volmer reactions between graphite and LiPF6 in EC:DMC.
+    Check the unit of Reaction rate constant k0 is from Peyman MPM.
+
+    References
+    ----------
+    .. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html
+
+    Parameters
+    ----------
+    T: :class: `numpy.Array`
+        Dimensional temperature
+    T_inf: double
+        Reference temperature
+    E_r: double
+        Reaction activation energy
+    R_g: double
+        The ideal gas constant
+
+    Returns
+    -------
+    :`numpy.Array`
+        Reaction rate
+    """
+    m_ref = 1.061 * 10 ** (-6)  # unit has been converted
+    arrhenius = pybamm.exp(E_r / R_g * (1 / T_inf - 1 / T))
+
+    return m_ref * arrhenius
diff --git a/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_entropic_change_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_entropic_change_PeymanMPM.py
new file mode 100644
index 000000000..6fa29bb85
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_entropic_change_PeymanMPM.py
@@ -0,0 +1,28 @@
+def graphite_entropic_change_PeymanMPM(sto, c_n_max):
+    """
+        Graphite entropic change in open circuit potential (OCP) at a temperature of
+        298.15K as a function of the stochiometry taken from [1]
+
+        References
+        ----------
+        .. [1] K.E. Thomas, J. Newman, "Heats of mixing and entropy in porous insertion
+               electrode", J. of Power Sources 119 (2003) 844-849
+
+          Parameters
+          ----------
+          sto: double
+               Stochiometry of material (li-fraction)
+
+    """
+
+    du_dT = 10 ** (-3) * (
+        0.28
+        - 1.56 * sto
+        - 8.92 * sto ** (2)
+        + 57.21 * sto ** (3)
+        - 110.7 * sto ** (4)
+        + 90.71 * sto ** (5)
+        - 27.14 * sto ** (6)
+    )
+
+    return du_dT
diff --git a/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_ocp_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_ocp_PeymanMPM.py
new file mode 100644
index 000000000..3c134120f
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/graphite_ocp_PeymanMPM.py
@@ -0,0 +1,36 @@
+import pybamm
+
+
+def graphite_ocp_PeymanMPM(sto):
+    """
+       Graphite Open Circuit Potential (OCP) as a function of the
+       stochiometry. The fit is taken from Peyman MPM [1].
+
+       References
+       ----------
+       .. [1] Peyman Mohtat et al, MPM (to be submitted)
+       """
+
+    u_eq = (
+        0.063
+        + 0.8 * pybamm.exp(-75 * (sto + 0.007))
+        - 0.0120 * pybamm.tanh((sto - 0.127) / 0.016)
+        - 0.0118 * pybamm.tanh((sto - 0.155) / 0.016)
+        - 0.0035 * pybamm.tanh((sto - 0.220) / 0.020)
+        - 0.0095 * pybamm.tanh((sto - 0.190) / 0.013)
+        - 0.0145 * pybamm.tanh((sto - 0.490) / 0.020)
+        - 0.0800 * pybamm.tanh((sto - 1.030) / 0.055)
+    )
+
+    # u_eq = 1.0 + (0 * sto)
+
+    return u_eq
+
+
+# if __name__ == "__main__": # pragma: no cover
+#     import matplotlib.pyplot as plt
+#     import numpy as np
+
+#     x = np.linspace(0, 1)
+#     plt.plot(x, graphite_ocp_PeymanMPM(x))
+#     plt.show()
diff --git a/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/parameters.csv b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/parameters.csv
new file mode 100644
index 000000000..0665e170e
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/anodes/graphite_UMBL_Mohtat2020/parameters.csv
@@ -0,0 +1,41 @@
+Name [units],Value,Reference,Notes
+# Empty rows and rows starting with ‘#’ will be ignored,,,
+,,,
+# Electrode properties,,,
+Negative electrode conductivity [S.m-1],100,Scott Moura FastDFN,no info from Peyman MPM 
+Maximum concentration in negative electrode [mol.m-3],28746,Peyman MPM,
+Negative electrode diffusion coefficient [m2.s-1],5.0E-15,Peyman MPM,
+Negative electrode diffusivity [m2.s-1],[function]graphite_diffusivity_PeymanMPM,,
+Negative electrode OCP [V],[function]graphite_ocp_PeymanMPM,Peyman MPM,
+,,,
+# Microstructure,,,
+Negative electrode porosity,0.3,Peyman MPM, 
+Negative electrode active material volume fraction,0.61,Peyman MPM,rest is binder
+Negative particle radius [m],2.5E-06,Peyman MPM,
+Negative particle distribution in x,1,,
+Negative electrode surface area density [m-1],732000,Peyman MPM,Eq. (48)
+Negative electrode Bruggeman coefficient (electrode),1.5,Peyman MPM,
+Negative electrode Bruggeman coefficient (electrolyte),1.5,Peyman MPM,
+Negative electrode tortuosity, 0.16,
+,,,
+# Interfacial reactions,,,
+Negative electrode cation signed stoichiometry,-1,,no info from Peyman MPM
+Negative electrode electrons in reaction,1,,no info from Peyman MPM
+Negative electrode reference exchange-current density [A.m-2(m3.mol)1.5],1.061E-6,Peyman MPM,convert unit
+Reference OCP vs SHE in the negative electrode [V],,,
+Negative electrode charge transfer coefficient,0.5,Peyman MPM,
+Negative electrode double-layer capacity [F.m-2],0.2,,no info from Peyman MPM
+,,,
+# Density,,,
+Negative electrode density [kg.m-3],3100,Peyman MPM, cell lumped value 
+,,,
+# Thermal parameters,,,
+Negative electrode specific heat capacity [J.kg-1.K-1],1100,Peyman MPM,cell lumped value
+Negative electrode thermal conductivity [W.m-1.K-1],1.7,,no info from Peyman MPM
+Negative electrode OCP entropic change [V.K-1],[function]graphite_entropic_change_PeymanMPM,,
+,,,
+# Activation energies,,,
+Reference temperature [K],298.15,25C,
+Negative electrode reaction rate,[function]graphite_electrolyte_reaction_rate_PeymanMPM,,
+Negative reaction rate activation energy [J.mol-1],37480,,no info from Peyman MPM
+Negative solid diffusion activation energy [J.mol-1],42770,,no info from Peyman MPM
diff --git a/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_diffusivity_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_diffusivity_PeymanMPM.py
new file mode 100644
index 000000000..e6cf75644
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_diffusivity_PeymanMPM.py
@@ -0,0 +1,38 @@
+import pybamm
+
+
+def NMC_diffusivity_PeymanMPM(sto, T, T_inf, E_D_s, R_g):
+    """
+    NMC diffusivity as a function of stochiometry, in this case the
+    diffusivity is taken to be a constant. The value is taken from Peyman MPM.
+
+    References
+    ----------
+    .. [1] http://www.cchem.berkeley.edu/jsngrp/fortran.html
+
+    Parameters
+    ----------
+    sto: :class: `numpy.Array`
+        Electrode stochiometry
+    T: :class: `numpy.Array`
+        Dimensional temperature
+    T_inf: double
+        Reference temperature
+    E_D_s: double
+        Solid diffusion activation energy
+    R_g: double
+        The ideal gas constant
+
+    Returns
+    -------
+    : double
+        Solid diffusivity
+    """
+
+    D_ref = 8 * 10 ** (-15)
+    arrhenius = pybamm.exp(E_D_s / R_g * (1 / T_inf - 1 / T))
+
+    # Removing the fudge factor 0 * sto requires different handling of either
+    # either simplifications or how sto is passed into this function.
+    # See #547
+    return D_ref * arrhenius + 0 * sto
diff --git a/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_reaction_rate_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_reaction_rate_PeymanMPM.py
new file mode 100644
index 000000000..03963470d
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_reaction_rate_PeymanMPM.py
@@ -0,0 +1,31 @@
+import pybamm
+
+
+def NMC_electrolyte_reaction_rate_PeymanMPM(T, T_inf, E_r, R_g):
+    """
+    Reaction rate for Butler-Volmer reactions between NMC and LiPF6 in EC:DMC.
+
+    References
+    ----------
+    .. Peyman MPM manuscript (to be submitted)
+
+    Parameters
+    ----------
+    T: :class: `numpy.Array`
+        Dimensional temperature
+    T_inf: double
+        Reference temperature
+    E_r: double
+        Reaction activation energy
+    R_g: double
+        The ideal gas constant
+
+    Returns
+    -------
+    : double
+        Reaction rate
+    """
+    m_ref = 4.824 * 10 ** (-6)
+    arrhenius = pybamm.exp(E_r / R_g * (1 / T_inf - 1 / T))
+
+    return m_ref * arrhenius
diff --git a/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_entropic_change_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_entropic_change_PeymanMPM.py
new file mode 100644
index 000000000..233ec0c90
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_entropic_change_PeymanMPM.py
@@ -0,0 +1,39 @@
+import pybamm
+
+
+def NMC_entropic_change_PeymanMPM(sto, c_p_max):
+    """
+        Nickel Manganese Cobalt (NMC) entropic change in open circuit potential (OCP) at
+        a temperature of 298.15K as a function of the OCP. The fit is taken from [1].
+
+        References
+        ----------
+        .. [1] W. Le, I. Belharouak, D. Vissers, K. Amine, "In situ thermal study of
+        li1+ x [ni1/ 3co1/ 3mn1/ 3] 1- x o2 using isothermal micro-clorimetric
+        techniques",
+        J. of the Electrochemical Society 153 (11) (2006) A2147–A2151.
+
+          Parameters
+          ----------
+          sto: double
+               Stochiometry of material (li-fraction)
+
+    """
+
+    # Since the equation uses the OCP at each stoichiometry as input,
+    # we need OCP function here
+
+    u_eq = (
+        4.3452
+        - 1.6518 * sto
+        + 1.6225 * sto ** 2
+        - 2.0843 * sto ** 3
+        + 3.5146 * sto ** 4
+        - 0.5623 * 10 ** (-4) * pybamm.exp(109.451 * sto - 100.006)
+    )
+
+    du_dT = (
+        -800 + 779 * u_eq - 284 * u_eq ** 2 + 46 * u_eq ** 3 - 2.8 * u_eq ** 4
+    ) * 10 ** (-3)
+
+    return du_dT
diff --git a/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_ocp_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_ocp_PeymanMPM.py
new file mode 100644
index 000000000..f0bb8f3cc
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/NMC_ocp_PeymanMPM.py
@@ -0,0 +1,38 @@
+import pybamm
+
+
+def NMC_ocp_PeymanMPM(sto):
+    """
+    Nickel Managanese Cobalt Oxide (NMC) Open Circuit Potential (OCP) as a
+    function of the stochiometry. The fit is taken from Peyman MPM.
+
+    References
+    ----------
+    Peyman MPM manuscript (to be submitted)
+
+    Parameters
+    ----------
+    sto: double
+       Stochiometry of material (li-fraction)
+
+    """
+
+    u_eq = (
+        4.3452
+        - 1.6518 * sto
+        + 1.6225 * sto ** 2
+        - 2.0843 * sto ** 3
+        + 3.5146 * sto ** 4
+        - 2.2166 * sto ** 5
+        - 0.5623 * 10 ** (-4) * pybamm.exp(109.451 * sto - 100.006)
+    )
+
+    return u_eq
+
+
+# if __name__ == "__main__": # pragma: no cover
+#     import matplotlib.pyplot as plt
+
+#     x = np.linspace(0, 1)
+#     plt.plot(x, NMC_ocp_PeymanMPM(x))
+#     plt.show()
diff --git a/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/parameters.csv b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/parameters.csv
new file mode 100644
index 000000000..a5425494c
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/cathodes/NMC_UMBL_Mohtat2020/parameters.csv
@@ -0,0 +1,40 @@
+Name [units],Value,Reference,Notes
+# Empty rows and rows starting with ‘#’ will be ignored,,,
+,,,
+# Electrode properties,,,
+Positive electrode conductivity [S.m-1],100,Scott Moura FastDFN,no info from Peyman MPM
+Maximum concentration in positive electrode [mol.m-3],35380,Peyman MPM, nickel manganese cobalt oxide
+Positive electrode diffusivity [m2.s-1],[function]NMC_diffusivity_PeymanMPM,,
+Positive electrode OCP [V],[function]NMC_ocp_PeymanMPM,,
+,,,
+# Microstructure,,,
+Positive electrode porosity,0.3,Peyman MPM,
+Positive electrode active material volume fraction,0.445,Peyman MPM,rest is binder
+Positive particle radius [m],3.5E-06,Peyman MPM,
+Positive particle distribution in x,1,,
+Positive electrode surface area density [m-1],3.8143E+5,Peyman MPM,Eq. (48)
+Positive electrode Bruggeman coefficient (electrode),1.5,Peyman MPM,
+Positive electrode Bruggeman coefficient (electrolyte),1.5,Peyman MPM,
+Positive electrode tortuosity,0.16,
+,,,
+# Interfacial reactions,,,
+Positive electrode cation signed stoichiometry,-1,,no info from Peyman MPM
+Positive electrode electrons in reaction,1,,no info from Peyman MPM
+Positive electrode reference exchange-current density [A.m-2(m3.mol)1.5],4.824E-06,Peyman MPM,converted unit
+Reference OCP vs SHE in the positive electrode [V],,,
+Positive electrode charge transfer coefficient,0.5,Peyman MPM,
+Positive electrode double-layer capacity [F.m-2],0.2,,no info from Peyman MPM
+,,,
+# Density,,,
+Positive electrode density [kg.m-3],3100,Peyman MPM, cell lumped value 
+,,,
+# Thermal parameters,,,
+Positive electrode specific heat capacity [J.kg-1.K-1],1100,Peyman MPM, cell lumped value
+Positive electrode thermal conductivity [W.m-1.K-1],2.1,,no info from Peyman MPM
+Positive electrode OCP entropic change [V.K-1],[function]NMC_entropic_change_PeymanMPM,
+,,,
+# Activation energies,,,
+Reference temperature [K],298.15,25C,
+Positive electrode reaction rate,[function]NMC_electrolyte_reaction_rate_PeymanMPM,,
+Positive reaction rate activation energy [J.mol-1],39570,,no info from Peyman MPM
+Positive solid diffusion activation energy [J.mol-1],18550,,no info from Peyman MPM
diff --git a/pybamm/input/parameters/lithium-ion/cells/UMBL_Mohtat2020/parameters.csv b/pybamm/input/parameters/lithium-ion/cells/UMBL_Mohtat2020/parameters.csv
new file mode 100644
index 000000000..b45cd098c
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/cells/UMBL_Mohtat2020/parameters.csv
@@ -0,0 +1,37 @@
+Name [units],Value,Reference,Notes
+# Empty rows and rows starting with ‘#’ will be ignored,,,
+,,,
+# Macroscale geometry,,,
+Negative current collector thickness [m],2.5E-05,Scott Moura FastDFN,no info from Peyman MPM
+Negative electrode thickness [m],62E-06,Peyman MPM,
+Separator thickness [m],12E-06,Peyman MPM,
+Positive electrode thickness [m],67E-06,Peyman MPM,
+Positive current collector thickness [m],2.5E-05,Scott Moura FastDFN,no info from Peyman MPM
+Electrode height [m],1,KOKAM SLPB78205130H,Not needed for 1D
+Electrode width [m],0.2050,KOKAM SLPB78205130H,Not needed for 1D
+Negative tab width [m],0.04,,Need to find actual value for KOKAM cell
+Negative tab centre y-coordinate [m],0.06,,Need to find actual value for KOKAM cell
+Negative tab centre z-coordinate [m],0.137,,Need to find actual value for KOKAM cell
+Positive tab width [m],0.04,,Need to find actual value for KOKAM cell
+Positive tab centre y-coordinate [m],0.147,,Need to find actual value for KOKAM cell
+Positive tab centre z-coordinate [m],0.137,,Need to find actual value for KOKAM cell
+,,,
+# Current collector properties ,,,
+Negative current collector conductivity [S.m-1],59600000,LIONSIMBA,carbon
+Positive current collector conductivity [S.m-1],35500000,LIONSIMBA,aluminium
+,,,
+# Density,,,
+Negative current collector density [kg.m-3],8954,,
+Positive current collector density [kg.m-3],2707,,
+,,,
+# Specific heat capacity,,,
+Negative current collector specific heat capacity [J.kg-1.K-1],385,,
+Positive current collector specific heat capacity [J.kg-1.K-1],897,,
+,,,
+# Thermal conductivity,,,
+Negative current collector thermal conductivity [W.m-1.K-1],401,,
+Positive current collector thermal conductivity [W.m-1.K-1],237,,
+,,,
+# Electrical,,,
+Cell capacity [A.h],5,Peyman MPM,
+Typical current [A],5,,1C current
diff --git a/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/electrolyte_conductivity_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/electrolyte_conductivity_PeymanMPM.py
new file mode 100644
index 000000000..a350f3065
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/electrolyte_conductivity_PeymanMPM.py
@@ -0,0 +1,38 @@
+import pybamm
+
+
+def electrolyte_conductivity_PeymanMPM(c_e, T, T_inf, E_k_e, R_g):
+    """
+    Conductivity of LiPF6 in EC:DMC as a function of ion concentration. The original
+    data is from [1]. The fit is from Dualfoil [2].
+
+    References
+    ----------
+    .. [1] C Capiglia et al. 7Li and 19F diffusion coefficients and thermal
+    properties of non-aqueous electrolyte solutions for rechargeable lithium batteries.
+    Journal of power sources 81 (1999): 859-862.
+    .. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html
+    Parameters
+    ----------
+    c_e: :class: `numpy.Array`
+        Dimensional electrolyte concentration
+    T: :class: `numpy.Array`
+        Dimensional temperature
+    T_inf: double
+        Reference temperature
+    E_k_e: double
+        Electrolyte conductivity activation energy
+    R_g: double
+        The ideal gas constant
+
+    Returns
+    -------
+    :`numpy.Array`
+        Electrolyte conductivity
+    """
+
+    sigma_e = 1.3
+
+    arrhenius = pybamm.exp(E_k_e / R_g * (1 / T_inf - 1 / T))
+
+    return sigma_e * arrhenius
diff --git a/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/electrolyte_diffusivity_PeymanMPM.py b/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/electrolyte_diffusivity_PeymanMPM.py
new file mode 100644
index 000000000..0861a4328
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/electrolyte_diffusivity_PeymanMPM.py
@@ -0,0 +1,38 @@
+import pybamm
+
+
+def electrolyte_diffusivity_PeymanMPM(c_e, T, T_inf, E_D_e, R_g):
+    """
+    Diffusivity of LiPF6 in EC:DMC as a function of ion concentration. The original data
+    is from [1]. The fit from Dualfoil [2].
+
+    References
+    ----------
+    .. [1] C Capiglia et al. 7Li and 19F diffusion coefficients and thermal
+    properties of non-aqueous electrolyte solutions for rechargeable lithium batteries.
+    Journal of power sources 81 (1999): 859-862.
+    .. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html
+
+    Parameters
+    ----------
+    c_e: :class: `numpy.Array`
+        Dimensional electrolyte concentration
+    T: :class: `numpy.Array`
+        Dimensional temperature
+    T_inf: double
+        Reference temperature
+    E_D_e: double
+        Electrolyte diffusion activation energy
+    R_g: double
+        The ideal gas constant
+
+    Returns
+    -------
+    :`numpy.Array`
+        Electrolyte diffusivity
+    """
+
+    D_c_e = 5.35 * 10 ** (-10)
+    arrhenius = pybamm.exp(E_D_e / R_g * (1 / T_inf - 1 / T))
+
+    return D_c_e * arrhenius
diff --git a/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/parameters.csv b/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/parameters.csv
new file mode 100644
index 000000000..46ef9693c
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/parameters.csv
@@ -0,0 +1,15 @@
+Name [units],Value,Reference,Notes
+# Empty rows and rows starting with ‘#’ will be ignored,,,
+,,,
+# Electrolyte properties,,,
+Typical electrolyte concentration [mol.m-3],1000,Peyman MPM,from MPM code
+Cation transference number,0.38,Peyman MPM,
+1 + dlnf/dlnc,1,,
+Typical lithium ion diffusivity [m2.s-1],5.34E-10,Scott Moura FastDFN,
+Electrolyte diffusivity [m2.s-1],[function]electrolyte_diffusivity_PeymanMPM,, 
+Electrolyte conductivity [S.m-1],[function]electrolyte_conductivity_PeymanMPM,, 
+,,,
+# Activation energies,,,
+Reference temperature [K],298.15,25C,
+Electrolyte diffusion activation energy [J.mol-1],37040,,no info from Peyman MPM
+Electrolyte conductivity activation energy [J.mol-1],34700,,no info from Peyman MPM
diff --git a/pybamm/input/parameters/lithium-ion/experiments/1C_charge_from_empty_Mohtat2020/parameters.csv b/pybamm/input/parameters/lithium-ion/experiments/1C_charge_from_empty_Mohtat2020/parameters.csv
new file mode 100644
index 000000000..622587d35
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/experiments/1C_charge_from_empty_Mohtat2020/parameters.csv
@@ -0,0 +1,20 @@
+Name [units],Value,Reference,Notes
+# Empty rows and rows starting with ‘#’ will be ignored,,,
+,,,
+# Temperature
+Reference temperature [K],298.15,25C,
+Heat transfer coefficient [W.m-2.K-1],5,Peyman MPM,
+Ambient temperature [K], 298.15,,
+,,,
+# Electrical			
+Number of electrodes connected in parallel to make a cell,1,,
+Number of cells connected in series to make a battery,1,,
+Lower voltage cut-off [V],2.5,,
+Upper voltage cut-off [V],4.2,,
+C-rate,-1,,
+,,,
+# Initial conditions
+Initial concentration in negative electrode [mol.m-3],48.8682,Peyman MPM, x0 (0.0017) * Csmax_n
+Initial concentration in positive electrode [mol.m-3],31513.0,Peyman MPM, y0 (0.8907) * Csmax_p
+Initial concentration in electrolyte [mol.m-3],1000,Peyman MPM,
+Initial temperature [K],298.15,,
diff --git a/pybamm/input/parameters/lithium-ion/separators/separator_Mohtat2020/parameters.csv b/pybamm/input/parameters/lithium-ion/separators/separator_Mohtat2020/parameters.csv
new file mode 100644
index 000000000..814388a22
--- /dev/null
+++ b/pybamm/input/parameters/lithium-ion/separators/separator_Mohtat2020/parameters.csv
@@ -0,0 +1,10 @@
+Name [units],Value,Reference,Notes
+# Empty rows and rows starting with ‘#’ will be ignored,,,
+,,,
+Separator porosity,0.4,Peyman MPM,
+Separator Bruggeman coefficient (electrode),1.5,Peyman MPM,
+Separator Bruggeman coefficient (electrolyte),1.5,Peyman MPM,
+Separator density [kg.m-3],397,,no info from Peyman MPM
+Separator specific heat capacity [J.kg-1.K-1],700,,no info from Peyman MPM
+Separator thermal conductivity [W.m-1.K-1],0.16,,no info from Peyman MPM
+Separator tortuosity, 0.25,
diff --git a/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py b/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py
index 96310b217..d52780e2e 100644
--- a/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py
+++ b/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py
@@ -42,13 +42,13 @@ class BasicDFN(BaseModel):
         Q = pybamm.Variable("Discharge capacity [A.h]")
         # Variables that vary spatially are created with a domain
         c_e_n = pybamm.Variable(
-            "Negative electrolyte concentration", domain="negative electrode",
+            "Negative electrolyte concentration", domain="negative electrode"
         )
         c_e_s = pybamm.Variable(
-            "Separator electrolyte concentration", domain="separator",
+            "Separator electrolyte concentration", domain="separator"
         )
         c_e_p = pybamm.Variable(
-            "Positive electrolyte concentration", domain="positive electrode",
+            "Positive electrolyte concentration", domain="positive electrode"
         )
         # Concatenations combine several variables into a single variable, to simplify
         # implementing equations that hold over several domains
@@ -56,22 +56,20 @@ class BasicDFN(BaseModel):
 
         # Electrolyte potential
         phi_e_n = pybamm.Variable(
-            "Negative electrolyte potential", domain="negative electrode",
-        )
-        phi_e_s = pybamm.Variable(
-            "Separator electrolyte potential", domain="separator",
+            "Negative electrolyte potential", domain="negative electrode"
         )
+        phi_e_s = pybamm.Variable("Separator electrolyte potential", domain="separator")
         phi_e_p = pybamm.Variable(
-            "Positive electrolyte potential", domain="positive electrode",
+            "Positive electrolyte potential", domain="positive electrode"
         )
         phi_e = pybamm.Concatenation(phi_e_n, phi_e_s, phi_e_p)
 
         # Electrode potential
         phi_s_n = pybamm.Variable(
-            "Negative electrode potential", domain="negative electrode",
+            "Negative electrode potential", domain="negative electrode"
         )
         phi_s_p = pybamm.Variable(
-            "Positive electrode potential", domain="positive electrode",
+            "Positive electrode potential", domain="positive electrode"
         )
         # Particle concentrations are variables on the particle domain, but also vary in
         # the x-direction (electrode domain) and so must be provided with auxiliary
diff --git a/pybamm/models/full_battery_models/lithium_ion/basic_spm.py b/pybamm/models/full_battery_models/lithium_ion/basic_spm.py
index 60956d210..4dbbeff0f 100644
--- a/pybamm/models/full_battery_models/lithium_ion/basic_spm.py
+++ b/pybamm/models/full_battery_models/lithium_ion/basic_spm.py
@@ -42,10 +42,10 @@ class BasicSPM(BaseModel):
         Q = pybamm.Variable("Discharge capacity [A.h]")
         # Variables that vary spatially are created with a domain
         c_s_n = pybamm.Variable(
-            "X-averaged negative particle concentration", domain="negative particle",
+            "X-averaged negative particle concentration", domain="negative particle"
         )
         c_s_p = pybamm.Variable(
-            "X-averaged positive particle concentration", domain="positive particle",
+            "X-averaged positive particle concentration", domain="positive particle"
         )
 
         # Constant temperature
diff --git a/pybamm/parameters/parameter_sets.py b/pybamm/parameters/parameter_sets.py
index b3d42c028..fb4dc5e24 100644
--- a/pybamm/parameters/parameter_sets.py
+++ b/pybamm/parameters/parameter_sets.py
@@ -53,6 +53,17 @@ Chen2020 = {
     "experiment": "1C_discharge_from_full_Chen2020",
     "citation": "Chen2020",
 }
+
+Mohtat2020 = {
+    "chemistry": "lithium-ion",
+    "cell": "UMBL_Mohtat2020",
+    "anode": "graphite_UMBL_Mohtat2020",
+    "separator": "separator_Mohtat2020",
+    "cathode": "NMC_UMBL_Mohtat2020",
+    "electrolyte": "LiPF6_Mohtat2020",
+    "experiment": "1C_charge_from_empty_Mohtat2020",
+    "citation": "Mohtat2020",
+}
 #
 # Lead-acid
 #
diff --git a/pybamm/parameters_cli.py b/pybamm/parameters_cli.py
index 7b85af5f7..a9a69194f 100644
--- a/pybamm/parameters_cli.py
+++ b/pybamm/parameters_cli.py
@@ -151,6 +151,7 @@ def list_parameters(arguments=None):
       * graphite_Ecker2015
       * graphite_Chen2020
       * graphite_mcmb2528_Marquis2019
+      * graphite_UMBL_Mohtat2020
       * graphite_Kim2011
     Available local parameters:
     """
diff --git a/pybamm/solvers/algebraic_solver.py b/pybamm/solvers/algebraic_solver.py
index 7ab1f6cb0..21ae70e8c 100644
--- a/pybamm/solvers/algebraic_solver.py
+++ b/pybamm/solvers/algebraic_solver.py
@@ -87,7 +87,7 @@ class AlgebraicSolver(pybamm.BaseSolver):
             # Otherwise calculate new y0
             else:
                 sol = optimize.root(
-                    root_fun, y0, method=self.method, tol=self.tol, jac=jac,
+                    root_fun, y0, method=self.method, tol=self.tol, jac=jac
                 )
 
                 if sol.success and np.all(abs(sol.fun) < self.tol):
diff --git a/pybamm/solvers/solution.py b/pybamm/solvers/solution.py
index 8734ad8a5..57a2d5457 100644
--- a/pybamm/solvers/solution.py
+++ b/pybamm/solvers/solution.py
@@ -37,13 +37,7 @@ class _BaseSolution(object):
     """
 
     def __init__(
-        self,
-        t,
-        y,
-        t_event=None,
-        y_event=None,
-        termination="final time",
-        copy_this=None,
+        self, t, y, t_event=None, y_event=None, termination="final time", copy_this=None
     ):
         self._t = t
         self._y = y
@@ -252,9 +246,7 @@ class Solution(_BaseSolution):
 
     """
 
-    def __init__(
-        self, t, y, t_event=None, y_event=None, termination="final time",
-    ):
+    def __init__(self, t, y, t_event=None, y_event=None, termination="final time"):
         super().__init__(t, y, t_event, y_event, termination)
 
     @property
diff --git a/setup.py b/setup.py
index af0b88f0e..f1fca072b 100644
--- a/setup.py
+++ b/setup.py
@@ -517,6 +517,6 @@ setup(
             "pybamm_edit_parameter = pybamm.parameters_cli:edit_parameter",
             "pybamm_add_parameter = pybamm.parameters_cli:add_parameter",
             "pybamm_list_parameters = pybamm.parameters_cli:list_parameters",
-        ],
+        ]
     },
 )


Test patch:
diff --git a/tests/integration/test_experiments.py b/tests/integration/test_experiments.py
index 8f3a3b688..35656d558 100644
--- a/tests/integration/test_experiments.py
+++ b/tests/integration/test_experiments.py
@@ -32,8 +32,7 @@ class TestExperiments(unittest.TestCase):
 
     def test_gitt(self):
         experiment = pybamm.Experiment(
-            ["Discharge at C/20 for 1 hour", "Rest for 1 hour"] * 10,
-            period="6 minutes",
+            ["Discharge at C/20 for 1 hour", "Rest for 1 hour"] * 10, period="6 minutes"
         )
         model = pybamm.lithium_ion.SPM()
         sim = pybamm.Simulation(
diff --git a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_external/test_external_temperature.py b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_external/test_external_temperature.py
index 27b06e179..abe42cbbe 100644
--- a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_external/test_external_temperature.py
+++ b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_external/test_external_temperature.py
@@ -8,10 +8,7 @@ import numpy as np
 
 class TestExternalThermalModels(unittest.TestCase):
     def test_external_lumped_temperature(self):
-        model_options = {
-            "thermal": "x-lumped",
-            "external submodels": ["thermal"],
-        }
+        model_options = {"thermal": "x-lumped", "external submodels": ["thermal"]}
         model = pybamm.lithium_ion.SPMe(model_options)
         sim = pybamm.Simulation(model)
 
@@ -27,10 +24,7 @@ class TestExternalThermalModels(unittest.TestCase):
 
     def test_external_temperature(self):
 
-        model_options = {
-            "thermal": "x-full",
-            "external submodels": ["thermal"],
-        }
+        model_options = {"thermal": "x-full", "external submodels": ["thermal"]}
 
         model = pybamm.lithium_ion.SPM(model_options)
 
@@ -63,10 +57,7 @@ class TestExternalThermalModels(unittest.TestCase):
     @unittest.skipIf(not pybamm.have_idaklu(), "idaklu solver is not installed")
     def test_dae_external_temperature(self):
 
-        model_options = {
-            "thermal": "x-full",
-            "external submodels": ["thermal"],
-        }
+        model_options = {"thermal": "x-full", "external submodels": ["thermal"]}
 
         model = pybamm.lithium_ion.DFN(model_options)
 
diff --git a/tests/integration/test_solvers/test_external_variables.py b/tests/integration/test_solvers/test_external_variables.py
index 03fbb82a6..69ed4fd6a 100644
--- a/tests/integration/test_solvers/test_external_variables.py
+++ b/tests/integration/test_solvers/test_external_variables.py
@@ -33,10 +33,7 @@ class TestExternalVariables(unittest.TestCase):
         sim.solve(t_eval=np.linspace(0, 3600, 100), inputs=inputs)
 
     def test_external_variables_SPMe(self):
-        model_options = {
-            "thermal": "x-lumped",
-            "external submodels": ["thermal"],
-        }
+        model_options = {"thermal": "x-lumped", "external submodels": ["thermal"]}
         model = pybamm.lithium_ion.SPMe(model_options)
         sim = pybamm.Simulation(model)
         t_eval = np.linspace(0, 100, 3)
diff --git a/tests/unit/test_discretisations/test_discretisation.py b/tests/unit/test_discretisations/test_discretisation.py
index 48a09b98a..22c65f06b 100644
--- a/tests/unit/test_discretisations/test_discretisation.py
+++ b/tests/unit/test_discretisations/test_discretisation.py
@@ -705,8 +705,11 @@ class TestDiscretise(unittest.TestCase):
         # test that any time derivatives of variables in rhs raises an
         # error
         model = pybamm.BaseModel()
-        model.rhs = {c: pybamm.div(N) + c.diff(pybamm.t),
-                     T: pybamm.div(q), S: pybamm.div(p)}
+        model.rhs = {
+            c: pybamm.div(N) + c.diff(pybamm.t),
+            T: pybamm.div(q),
+            S: pybamm.div(p),
+        }
         model.initial_conditions = {
             c: pybamm.Scalar(2),
             T: pybamm.Scalar(5),
diff --git a/tests/unit/test_experiments/test_experiment.py b/tests/unit/test_experiments/test_experiment.py
index dbde2faa6..0579ebebb 100644
--- a/tests/unit/test_experiments/test_experiment.py
+++ b/tests/unit/test_experiments/test_experiment.py
@@ -68,7 +68,7 @@ class TestExperiment(unittest.TestCase):
     def test_read_strings_repeat(self):
         experiment = pybamm.Experiment(
             ["Discharge at 10 mA for 0.5 hours"]
-            + ["Charge at 0.5 C for 45 minutes", "Hold at 1 V for 20 seconds"] * 2,
+            + ["Charge at 0.5 C for 45 minutes", "Hold at 1 V for 20 seconds"] * 2
         )
         self.assertEqual(
             experiment.operating_conditions,
diff --git a/tests/unit/test_expression_tree/test_d_dt.py b/tests/unit/test_expression_tree/test_d_dt.py
index f9eb5a2cd..df782f3f8 100644
--- a/tests/unit/test_expression_tree/test_d_dt.py
+++ b/tests/unit/test_expression_tree/test_d_dt.py
@@ -17,29 +17,29 @@ class TestDDT(unittest.TestCase):
         self.assertIsInstance(a, pybamm.Scalar)
         self.assertEqual(a.value, 1)
 
-        a = (pybamm.t**2).diff(pybamm.t)
+        a = (pybamm.t ** 2).diff(pybamm.t)
         self.assertEqual(a.id, (2 * pybamm.t ** 1 * 1).id)
         self.assertEqual(a.simplify().id, (2 * pybamm.t).id)
         self.assertEqual(a.evaluate(t=1), 2)
 
-        a = (2 + pybamm.t**2).diff(pybamm.t)
+        a = (2 + pybamm.t ** 2).diff(pybamm.t)
         self.assertEqual(a.simplify().id, (2 * pybamm.t).id)
         self.assertEqual(a.evaluate(t=1), 2)
 
     def test_time_derivative_of_variable(self):
 
-        a = (pybamm.Variable('a')).diff(pybamm.t)
+        a = (pybamm.Variable("a")).diff(pybamm.t)
         self.assertIsInstance(a, pybamm.VariableDot)
         self.assertEqual(a.name, "a'")
 
-        p = pybamm.Parameter('p')
-        a = (1 + p * pybamm.Variable('a')).diff(pybamm.t).simplify()
+        p = pybamm.Parameter("p")
+        a = (1 + p * pybamm.Variable("a")).diff(pybamm.t).simplify()
         self.assertIsInstance(a, pybamm.Multiplication)
-        self.assertEqual(a.children[0].name, 'p')
+        self.assertEqual(a.children[0].name, "p")
         self.assertEqual(a.children[1].name, "a'")
 
         with self.assertRaises(pybamm.ModelError):
-            a = (pybamm.Variable('a')).diff(pybamm.t).diff(pybamm.t)
+            a = (pybamm.Variable("a")).diff(pybamm.t).diff(pybamm.t)
 
         with self.assertRaises(pybamm.ModelError):
             a = pybamm.ExternalVariable("a", 1).diff(pybamm.t)
diff --git a/tests/unit/test_expression_tree/test_state_vector.py b/tests/unit/test_expression_tree/test_state_vector.py
index 38f3cd2c3..85a022de2 100644
--- a/tests/unit/test_expression_tree/test_state_vector.py
+++ b/tests/unit/test_expression_tree/test_state_vector.py
@@ -74,7 +74,7 @@ class TestStateVectorDot(unittest.TestCase):
         y_dot2 = np.ones(5)
         with self.assertRaisesRegex(
             ValueError,
-            "y_dot is too short, so value with slice is smaller than expected"
+            "y_dot is too short, so value with slice is smaller than expected",
         ):
             sv.evaluate(y_dot=y_dot2)
 
diff --git a/tests/unit/test_models/test_base_model.py b/tests/unit/test_models/test_base_model.py
index fe642ec57..776ceebc0 100644
--- a/tests/unit/test_models/test_base_model.py
+++ b/tests/unit/test_models/test_base_model.py
@@ -260,10 +260,7 @@ class TestBaseModel(unittest.TestCase):
 
         # model must be in semi-explicit form
         model = pybamm.BaseModel()
-        model.algebraic = {
-            c: 2 * d - c,
-            d: c * d.diff(pybamm.t) - d,
-        }
+        model.algebraic = {c: 2 * d - c, d: c * d.diff(pybamm.t) - d}
         model.initial_conditions = {c: 1, d: 1}
         with self.assertRaisesRegex(
             pybamm.ModelError, "time derivative of variable found",
diff --git a/tests/unit/test_parameters/test_parameter_sets/test_LGM50_Chen2020.py b/tests/unit/test_parameters/test_parameter_sets/test_LGM50_Chen2020.py
index 915db76e9..e10ca718d 100644
--- a/tests/unit/test_parameters/test_parameter_sets/test_LGM50_Chen2020.py
+++ b/tests/unit/test_parameters/test_parameter_sets/test_LGM50_Chen2020.py
@@ -9,14 +9,14 @@ class TestChen(unittest.TestCase):
     def test_load_params(self):
         anode = pybamm.ParameterValues({}).read_parameters_csv(
             pybamm.get_parameters_filepath(
-                "input/parameters/lithium-ion/anodes/graphite_Chen2020/parameters.csv",
+                "input/parameters/lithium-ion/anodes/graphite_Chen2020/parameters.csv"
             )
         )
         self.assertEqual(anode["Reference temperature [K]"], "298.15")
 
         cathode = pybamm.ParameterValues({}).read_parameters_csv(
             pybamm.get_parameters_filepath(
-                "input/parameters/lithium-ion/cathodes/nmc_Chen2020/parameters.csv",
+                "input/parameters/lithium-ion/cathodes/nmc_Chen2020/parameters.csv"
             )
         )
         self.assertEqual(cathode["Reference temperature [K]"], "298.15")
@@ -24,14 +24,14 @@ class TestChen(unittest.TestCase):
         electrolyte = pybamm.ParameterValues({}).read_parameters_csv(
             pybamm.get_parameters_filepath(
                 "input/parameters/lithium-ion/electrolytes/lipf6_Nyman2008/"
-                + "parameters.csv",
+                + "parameters.csv"
             )
         )
         self.assertEqual(electrolyte["Reference temperature [K]"], "298.15")
 
         cell = pybamm.ParameterValues({}).read_parameters_csv(
             pybamm.get_parameters_filepath(
-                "input/parameters/lithium-ion/cells/LGM50_Chen2020/parameters.csv",
+                "input/parameters/lithium-ion/cells/LGM50_Chen2020/parameters.csv"
             )
         )
         self.assertAlmostEqual(cell["Negative current collector thickness [m]"], 12e-6)
diff --git a/tests/unit/test_parameters/test_parameter_sets/test_NCA_Kim2011.py b/tests/unit/test_parameters/test_parameter_sets/test_NCA_Kim2011.py
index 0119f499a..89f0653ae 100644
--- a/tests/unit/test_parameters/test_parameter_sets/test_NCA_Kim2011.py
+++ b/tests/unit/test_parameters/test_parameter_sets/test_NCA_Kim2011.py
@@ -9,14 +9,14 @@ class TestKim(unittest.TestCase):
     def test_load_params(self):
         anode = pybamm.ParameterValues({}).read_parameters_csv(
             pybamm.get_parameters_filepath(
-                "input/parameters/lithium-ion/anodes/graphite_Kim2011/parameters.csv",
+                "input/parameters/lithium-ion/anodes/graphite_Kim2011/parameters.csv"
             )
         )
         self.assertEqual(anode["Reference temperature [K]"], "298.15")
 
         cathode = pybamm.ParameterValues({}).read_parameters_csv(
             pybamm.get_parameters_filepath(
-                "input/parameters/lithium-ion/cathodes/nca_Kim2011/parameters.csv",
+                "input/parameters/lithium-ion/cathodes/nca_Kim2011/parameters.csv"
             )
         )
         self.assertEqual(cathode["Reference temperature [K]"], "298.15")
diff --git a/tests/unit/test_parameters/test_parameter_sets/test_UMBL_Mohtat2020.py b/tests/unit/test_parameters/test_parameter_sets/test_UMBL_Mohtat2020.py
new file mode 100644
index 000000000..a909f73bf
--- /dev/null
+++ b/tests/unit/test_parameters/test_parameter_sets/test_UMBL_Mohtat2020.py
@@ -0,0 +1,61 @@
+#
+# Tests for LG M50 parameter set loads
+#
+import pybamm
+import unittest
+
+
+class TestMohtat(unittest.TestCase):
+    def test_load_params(self):
+        anode = pybamm.ParameterValues({}).read_parameters_csv(
+            pybamm.get_parameters_filepath(
+                "input/parameters/lithium-ion/" +
+                "anodes/graphite_UMBL_Mohtat2020/parameters.csv"
+            )
+        )
+        self.assertEqual(anode["Reference temperature [K]"], "298.15")
+
+        cathode = pybamm.ParameterValues({}).read_parameters_csv(
+            pybamm.get_parameters_filepath(
+                "input/parameters/lithium-ion/" +
+                "cathodes/NMC_UMBL_Mohtat2020/parameters.csv"
+            )
+        )
+        self.assertEqual(cathode["Reference temperature [K]"], "298.15")
+
+        electrolyte = pybamm.ParameterValues({}).read_parameters_csv(
+            pybamm.get_parameters_filepath(
+                "input/parameters/lithium-ion/electrolytes/LiPF6_Mohtat2020/"
+                + "parameters.csv"
+            )
+        )
+        self.assertEqual(electrolyte["Reference temperature [K]"], "298.15")
+
+        cell = pybamm.ParameterValues({}).read_parameters_csv(
+            pybamm.get_parameters_filepath(
+                "input/parameters/lithium-ion/cells/UMBL_Mohtat2020/parameters.csv"
+            )
+        )
+        self.assertAlmostEqual(
+            cell["Negative current collector thickness [m]"], 2.5e-05
+        )
+
+    def test_standard_lithium_parameters(self):
+
+        chemistry = pybamm.parameter_sets.Mohtat2020
+        parameter_values = pybamm.ParameterValues(chemistry=chemistry)
+
+        model = pybamm.lithium_ion.DFN()
+        sim = pybamm.Simulation(model, parameter_values=parameter_values)
+        sim.set_parameters()
+        sim.build()
+
+
+if __name__ == "__main__":
+    print("Add -v for more debug output")
+    import sys
+
+    if "-v" in sys.argv:
+        debug = True
+    pybamm.settings.debug_mode = True
+    unittest.main()
diff --git a/tests/unit/test_parameters/test_parameters_cli.py b/tests/unit/test_parameters/test_parameters_cli.py
index 05bb15cf7..f035f0f09 100644
--- a/tests/unit/test_parameters/test_parameters_cli.py
+++ b/tests/unit/test_parameters/test_parameters_cli.py
@@ -20,7 +20,7 @@ class TestParametersCLI(unittest.TestCase):
         # Read a parameter file thta is shipped with PyBaMM
         param_filename = pybamm.get_parameters_filepath(
             "input/parameters/lithium-ion/anodes/"
-            "graphite_mcmb2528_Marquis2019/parameters.csv",
+            "graphite_mcmb2528_Marquis2019/parameters.csv"
         )
         anode = pybamm.ParameterValues({}).read_parameters_csv(param_filename)
 
@@ -50,7 +50,7 @@ class TestParametersCLI(unittest.TestCase):
                 "anodes",
                 os.path.basename(tempdir.name),
                 "parameters.csv",
-            ),
+            )
         )
 
         new_anode = pybamm.ParameterValues({}).read_parameters_csv(
diff --git a/tests/unit/test_quick_plot.py b/tests/unit/test_quick_plot.py
index a9b0779f7..a5daf88bb 100644
--- a/tests/unit/test_quick_plot.py
+++ b/tests/unit/test_quick_plot.py
@@ -237,7 +237,7 @@ class TestQuickPlot(unittest.TestCase):
         # Remove 'x [m]' from the variables and make sure a key error is raise
         del solution.model.variables["x [m]"]
         with self.assertRaisesRegex(
-            KeyError, "Can't find spatial scale for 'negative electrode'",
+            KeyError, "Can't find spatial scale for 'negative electrode'"
         ):
             pybamm.QuickPlot(solution, ["b broadcasted"])
 
@@ -326,7 +326,7 @@ class TestQuickPlot(unittest.TestCase):
 
         with self.assertRaisesRegex(NotImplementedError, "Shape not recognized for"):
             pybamm.QuickPlot(
-                solution_spm, ["Negative particle concentration [mol.m-3]"],
+                solution_spm, ["Negative particle concentration [mol.m-3]"]
             )
 
     def test_failure(self):
diff --git a/tests/unit/test_solvers/test_casadi_algebraic_solver.py b/tests/unit/test_solvers/test_casadi_algebraic_solver.py
index 9a542a354..d69ccf92b 100644
--- a/tests/unit/test_solvers/test_casadi_algebraic_solver.py
+++ b/tests/unit/test_solvers/test_casadi_algebraic_solver.py
@@ -47,12 +47,12 @@ class TestCasadiAlgebraicSolver(unittest.TestCase):
 
         solver = pybamm.CasadiAlgebraicSolver()
         with self.assertRaisesRegex(
-            pybamm.SolverError, "Could not find acceptable solution: .../casadi",
+            pybamm.SolverError, "Could not find acceptable solution: .../casadi"
         ):
             solver._integrate(model, np.array([0]), {})
         solver = pybamm.CasadiAlgebraicSolver(error_on_fail=False)
         with self.assertRaisesRegex(
-            pybamm.SolverError, "Could not find acceptable solution: solver terminated",
+            pybamm.SolverError, "Could not find acceptable solution: solver terminated"
         ):
             solver._integrate(model, np.array([0]), {})
 
diff --git a/tests/unit/test_solvers/test_casadi_solver.py b/tests/unit/test_solvers/test_casadi_solver.py
index 6148a33c6..6d14c77eb 100644
--- a/tests/unit/test_solvers/test_casadi_solver.py
+++ b/tests/unit/test_solvers/test_casadi_solver.py
@@ -186,8 +186,7 @@ class TestCasadiSolver(unittest.TestCase):
         step_sol_2 = solver.step(step_sol, model, dt, npts=5, inputs={"a": -1})
         np.testing.assert_array_equal(step_sol_2.t, np.linspace(0, 2 * dt, 9))
         np.testing.assert_array_equal(
-            step_sol_2["a"].entries,
-            np.array([0.1, 0.1, 0.1, 0.1, 0.1, -1, -1, -1, -1]),
+            step_sol_2["a"].entries, np.array([0.1, 0.1, 0.1, 0.1, 0.1, -1, -1, -1, -1])
         )
         np.testing.assert_allclose(
             step_sol_2.y[0],
diff --git a/tests/unit/test_solvers/test_idaklu_solver.py b/tests/unit/test_solvers/test_idaklu_solver.py
index b440d29a3..80d45d4f5 100644
--- a/tests/unit/test_solvers/test_idaklu_solver.py
+++ b/tests/unit/test_solvers/test_idaklu_solver.py
@@ -20,10 +20,7 @@ class TestIDAKLUSolver(unittest.TestCase):
             model.rhs = {u: 0.1 * v}
             model.algebraic = {v: 1 - v}
             model.initial_conditions = {u: 0, v: 1}
-            model.events = [
-                pybamm.Event("1", u - 0.2),
-                pybamm.Event("2", v),
-            ]
+            model.events = [pybamm.Event("1", u - 0.2), pybamm.Event("2", v)]
 
             disc = pybamm.Discretisation()
             disc.process_model(model)
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py b/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py
index e9ec4d0f2..61e00bc5d 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py
@@ -153,8 +153,8 @@ class TestExtrapolation(unittest.TestCase):
 
         linear = {"extrapolation": {"order": "linear", "use bcs": True}}
         quad = {"extrapolation": {"order": "quadratic", "use bcs": True}}
-        l_errors_lin_no_bc, r_errors_lin_no_bc = get_errors(x_cubed, linear, pts,)
-        l_errors_quad_no_bc, r_errors_quad_no_bc = get_errors(x_cubed, quad, pts,)
+        l_errors_lin_no_bc, r_errors_lin_no_bc = get_errors(x_cubed, linear, pts)
+        l_errors_quad_no_bc, r_errors_quad_no_bc = get_errors(x_cubed, quad, pts)
 
         l_errors_lin_with_bc, r_errors_lin_with_bc = get_errors(
             x_cubed, linear, pts, bcs
@@ -208,8 +208,8 @@ class TestExtrapolation(unittest.TestCase):
 
         linear = {"extrapolation": {"order": "linear", "use bcs": True}}
         quad = {"extrapolation": {"order": "quadratic", "use bcs": True}}
-        l_errors_lin_no_bc, r_errors_lin_no_bc = get_errors(x_cubed, linear, pts,)
-        l_errors_quad_no_bc, r_errors_quad_no_bc = get_errors(x_cubed, quad, pts,)
+        l_errors_lin_no_bc, r_errors_lin_no_bc = get_errors(x_cubed, linear, pts)
+        l_errors_quad_no_bc, r_errors_quad_no_bc = get_errors(x_cubed, quad, pts)
 
         l_errors_lin_with_bc, r_errors_lin_with_bc = get_errors(
             x_cubed, linear, pts, bcs
@@ -398,15 +398,10 @@ class TestExtrapolation(unittest.TestCase):
 
         var = pybamm.standard_spatial_vars
         rpts = 10
-        var_pts = {
-            var.r_n: rpts,
-            var.r_p: rpts,
-        }
+        var_pts = {var.r_n: rpts, var.r_p: rpts}
         mesh = pybamm.Mesh(geometry, submesh_types, var_pts)
         method_options = {"extrapolation": {"order": "linear", "use bcs": False}}
-        spatial_methods = {
-            "negative particle": pybamm.FiniteVolume(method_options),
-        }
+        spatial_methods = {"negative particle": pybamm.FiniteVolume(method_options)}
         disc = pybamm.Discretisation(mesh, spatial_methods)
 
         var = pybamm.Variable("var", domain="negative particle")
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py b/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py
index e4c67b5a3..406bd1f5d 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py
@@ -2,10 +2,7 @@
 # Test for adding ghost nodes in finite volumes class
 #
 import pybamm
-from tests import (
-    get_mesh_for_testing,
-    get_p2d_mesh_for_testing,
-)
+from tests import get_mesh_for_testing, get_p2d_mesh_for_testing
 import numpy as np
 import unittest