アクセスカウンター

Transmission ratio through single barrier (Python3)

Transmission ratio (t) of a particle through single barrier is calculated and shown by Python3. This is preparation for another case of double barriers and a quantum well shown in the next page.

Following equations used here are a set of solution obtained by one-dimensional Schrödinger equation with typical initial condition. Height (V0) and thickness (a = Db) of the barrier are 0.5 eV and 2.8 nm, respectively. Effective mass (m) of a particle is 0.35 m0 (m0: electron mass in vacuum).





Quantum tunneling can be observed at lower energy below the barrier height (the green plots). Additionally, even at higher energy beyond the barrier height (the red plots), lowering of transmission ratio due to scattering is clearly shown.


#   Tunneling_single_barrier_01.py
#   on Python 3.4.1, Nov. 29, 2014
#   by Masao Sakuraba

import math
import numpy
import scipy
import pylab

def main():

    meff = 0.35   # effective mass ratio of a particle
    V0 = 0.5   # barrier height (eV)
    Db = 2.5e-9   # barrier thickness (m)

    q = 1.602e-19    # elementary charge (C)
    hbar = 1.0546e-34   # reduced Planck constant (J s)
    hbar2 = hbar ** 2
    m = meff * 9.1095e-31   # absolute mass of a particle (kg)

    # parameters for lower energy
(0 < E < V0)
    M = 50   # number of energy step
    Alpha_d = []
    Alpha_d2 = []
    Beta_d = []
    Beta_d2 = []
    Sinh = []
    Sinh2 = []
    t
_d = []

    # parameters for higher energy
(E > V0)
    N = 100   # number of energy step
    Alpha_u = []
    Alpha_u2 = []
    Beta_u = []
    Beta_u2 = []
    Sin = []
    Sin2 = []
    t
_u = []

    E_d = numpy.linspace(V0 / M, V0 - V0 / M, M - 1)
   
for i in range(M - 1):
        Alpha_d2.append(2 * m / hbar2 * E_d[i] * q)
        Alpha_d.append(math.sqrt(Alpha_d2[i]))
        Beta_d2.append(2 * m / hbar2 * (V0 - E_d[i]) * q)
        Beta_d.append(math.sqrt(Beta_d2[i]))
        Sinh.append(numpy.sinh((Beta_d[i]) * Db))
        Sinh2.append(Sinh[i] ** 2)
        t_d.append(
            4 * Alpha_d2[i] * Beta_d2[i] /
                         ((Alpha_d2[i] + Beta_d2[i]) ** 2 * Sinh2[i]
                          + 4 * Alpha_d2[i] * Beta_d2[i])
            )

    E_u = numpy.linspace(V0 + V0 / N, V0 * 3.5 - V0 / N, N - 1)
   
for j in range(N - 1):
        Alpha_u2.append(2 * m / hbar2 * E_u[j] * q)
        Alpha_u.append(math.sqrt(Alpha_u2[j]))
        Beta_u2.append(2 * m / hbar2 * (E_u[j] - V0) * q)
        Beta_u.append(math.sqrt(Beta_u2[j]))
        Sin.append(math.sin(Alpha_u[j] * Db))
        Sin2.append(Sin[j] ** 2)
        t_u.append(
            4 * Alpha_u2[j] * Beta_u2[j] /
                         ((Alpha_u2[j] - Beta_u2[j]) ** 2 * Sin2[j]
                          + 4 * Alpha_u2[j] * Beta_u2[j])
            )

    # 'option' : color (r,g,b,c,m,y,k,w) & line style (-,--,:,-.,.,o,^)
    pylab.plot(E
_d, t_d, 'g:.', label='0 < E < V0')
    pylab.plot(E_u, t_u, 'r:.', label='E > V0')
    pylab.legend(loc='upper right')

    pylab.title('Transmission through single barrier')
    pylab.xlabel('Energy (eV)')
    pylab.ylabel('Transmission Ratio')
    pylab.xlim(-0.1, V0 * 4)
    pylab.yscale('log')    # Delete this line, if linear y.
#    pylab.ylim(-0.1, 1.4)
    pylab.show()

if __name__ == '__main__':
    main()




< Return to Computer-Related Skills >
< Return to Home >

This home page is produced by KompoZer (free and open software).