Source code for Stoner.analysis.fitting.models.tunnelling

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""":py:class:`lmfit.Model` model classes and functions for various models of electron tunnelling."""
# pylint: disable=invalid-name
__all__ = [
    "BDR",
    "FowlerNordheim",
    "Model",
    "Simmons",
    "TersoffHammann",
    "bdr",
    "fowlerNordheim",
    "simmons",
    "tersoffHammann",
]

import numpy as np

from lmfit import Model
from lmfit.models import update_param_vals


[docs]def simmons(V, A, phi, d): """Simmons model of electron tunnelling. Args: V (array): Bias voltage A (float): Area of barrier in micron^2 phi (float): barrier height in eV d (float): barrier width in angstroms Return: Data for tunneling rate according to the Sommons model. .. note:: Simmons model from Simmons J. App. Phys. 34 6 1963 Example: .. plot:: samples/Fitting/Simmons.py :include-source: :outname: simmons """ I = ( 6.2e2 * A / d**2 * ( (phi - V / 2) * np.exp(-1.025 * d * np.sqrt(phi - V / 2)) - (phi + V / 2) * np.exp(-1.025 * d * np.sqrt(phi + V / 2)) ) ) return I
[docs]def bdr(V, A, phi, dphi, d, mass): """BDR model tunnelling. Args: V (array): ias voltage A (float): barrier area in m^2 phi (float): average barrier height in eV dphi (float): change in barrier height in eV d (float): barrier width in angstrom mass (float): effective electron mass as a fraction of electron rest mass Return: Data for tunneling rate according to the BDR model. .. note:: See Brinkman et. al. J. Appl. Phys. 41 1915 (1970) or Tuan Comm. in Phys. 16, 1, (2006) Example: .. plot:: samples/Fitting/BDR.py :include-source: :outname: bdr """ mass = abs(mass) phi = abs(phi) d = abs(d) I = ( 3.16e10 * A**2 * np.sqrt(phi) / d * np.exp(-1.028 * np.sqrt(phi) * d) * (V - 0.0214 * np.sqrt(mass) * d * dphi / phi**1.5 * V**2 + 0.0110 * mass * d**2 / phi * V**3) ) return I
[docs]def fowlerNordheim(V, A, phi, d): """Fowler Nordhiem Model of electron tunnelling. Args: V (array): Bias voltage A (float): Area of barrier in m^2 phi (float): barrier height in eV d (float): barrier width in angstroms Return: Tunneling rate according to Fowler Nordheim model. Example: .. plot:: samples/Fitting/FowlerNordheim.py :include-source: :outname: fowlernordheim """ I = V / np.abs(V) * 3.38e6 * A * V**2 / (d**2 * phi) * np.exp(-0.689 * phi**1.5 * d / np.abs(V)) return I
[docs]def tersoffHammann(V, A): """Tersoff-Hamman model for tunnelling through STM tip. Args: V (array): bias voltage A (float): Tip conductance Return: A linear fit. """ I = A * V return I
[docs]class Simmons(Model): """Simmons model of electron tunnelling. Args: V (array): Bias voltage A (float): Area of barrier in m^2 phi (float): barrier height in eV d (float): barrier width in angstroms Return: Data for tunneling rate according to the Sommons model. .. note:: Simmons model from Simmons J. App. Phys. 34 6 1963 Example: .. plot:: samples/Fitting/Simmons.py :include-source: :outname: simmons-class """ display_names = ["A", r"\phi", "d"] def __init__(self, *args, **kwargs): """Configure Initial fitting function.""" super().__init__(simmons, *args, **kwargs)
[docs] def guess(self, data, V=None, **kwargs): # pylint: disable=unused-argument """Set the A, phi and d values to typical answers for a small tunnel junction.""" pars = self.make_params(A=1e3, phi=3.0, d=10.0) return update_param_vals(pars, self.prefix, **kwargs)
[docs]class BDR(Model): """BDR model tunnelling. Args: V (array): ias voltage A (float): barrier area in m^2 phi (float): average barrier height in eV dphi (float): change in barrier height in eV d (float): barrier width in angstrom mass (float): effective electron mass as a fraction of electron rest mass Return: Data for tunneling rate according to the BDR model. .. note:: See Brinkman et. al. J. Appl. Phys. 41 1915 (1970) or Tuan Comm. in Phys. 16, 1, (2006) Example: .. plot:: samples/Fitting/BDR.py :include-source: :outname: bdr-class """ def __init__(self, *args, **kwargs): """Configure Initial fitting function.""" super().__init__(bdr, *args, **kwargs)
[docs] def guess(self, data, V=None, **kwargs): # pylint: disable=unused-argument """Set the A, phi,dphi,d and mass values to typical answers for a small tunnel junction.""" pars = self.make_params(A=1e-12, phi=3.0, d=10.0, dphi=1.0, mass=1.0) return update_param_vals(pars, self.prefix, **kwargs)
[docs]class FowlerNordheim(Model): """Fowler Nordhiem Model of electron tunnelling. Args: V (array): Bias voltage A (float): Area of barrier in m^2 phi (float): barrier height in eV d (float): barrier width in angstroms Return: Tunneling rate according to Fowler Nordheim model. Example: .. plot:: samples/Fitting/FowlerNordheim.py :include-source: :outname: fowlernordheim-class """ def __init__(self, *args, **kwargs): """Configure Initial fitting function.""" super().__init__(fowlerNordheim, *args, **kwargs)
[docs] def guess(self, data, V=None, **kwargs): # pylint: disable=unused-argument """Set the A, phi and d values to typical answers for a small tunnel junction.""" pars = self.make_params(A=1e-12, phi=3.0, d=10.0) return update_param_vals(pars, self.prefix, **kwargs)
[docs]class TersoffHammann(Model): """Tersoff-Hamman model for tunnelling through STM tip. Args: V (array): bias voltage A (float): Tip conductance Return: A linear fit. """ def __init__(self, *args, **kwargs): """Configure Initial fitting function.""" super().__init__(tersoffHammann, *args, **kwargs)
[docs] def guess(self, data, V=None, **kwargs): """Set the parameter values from an apporximate line.""" pars = self.make_params(A=np.mean(data / V)) return update_param_vals(pars, self.prefix, **kwargs)