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()