Simulate Burstein-Moss shift from effective mass

Download script from BMshift.py


import sys
import numpy as np
from numpy import sqrt, exp, sin, cos, tan, pi
import numpy.linalg as LA
import csv
from matplotlib import pyplot as plt


"""
Simulate Burstein-Moss shift from effective mass
"""



#===================================
# physical constants
#===================================
pi = 3.14159265358979323846
pi2 = 2.0 * pi
h = 6.6260755e-34 # Js";
hbar = 1.05459e-34 # "Js";
c = 2.99792458e8 # m/s";
e = 1.60218e-19 # C";
e0 = 8.854418782e-12; # C2N-1m-2";
kB = 1.380658e-23 # JK-1";
me = 9.1093897e-31 # kg";
R = 8.314462618 # J/K/mol
a0 = 5.29177e-11 # m";


# parameters
logNemin = 19.0 # in log10(cm-3)
logNemax = 23.0 # in log10(cm-3)
nlogNe = 101

#===================================
# figure configuration
#===================================
fontsize = 12
legend_fontsize = 8


def main():
    global logNemin,logNemax, nlogNe

    logNestep = (logNemax - logNemin) / (nlogNe - 1)
    Ne = []
    dEg = []
    for i in range(nlogNe):
        logNe = logNemin + i * logNestep
        n = 10.0**logNe * 1.0e6 # in m^-3
        de = (h*h / me) * pow(3.0 * n / 16.0 / sqrt(2) / pi, 2.0/3.0) / e # in eV
        Ne.append(n * 1.0e-6)
        dEg.append(de)

    print("")
    print("plot")
    fig = plt.figure(figsize = (8, 4))
    ax1 = fig.add_subplot(1, 2, 1)
    ax2 = fig.add_subplot(1, 2, 2)

    ax1.plot(Ne, dEg)
    ax1.set_xscale("log")
    ax1.set_yscale("log")
    ax1.set_xlabel("Ne (cm$^{-3}$)", fontsize = fontsize)
    ax1.set_ylabel("$\Delta$Eg (eV)", fontsize = fontsize)
    ax2.plot(Ne, dEg)
    ax2.set_xscale("log")
    ax2.set_xlabel("Ne (cm$^{-3}$)", fontsize = fontsize)
    ax2.set_ylabel("$\Delta$Eg (eV)", fontsize = fontsize)
    plt.tight_layout()

    plt.pause(0.1)
    input()



if __name__ == "__main__":
    main()