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
"""
概要: 有効質量からバーンスタイン-モスシフトをシミュレートするモジュール。
詳細説明:
このモジュールは、ドーピングされた半導体におけるキャリア濃度(電子濃度)と
バーンスタイン-モスシフト(バンドギャップ増大)の関係を計算し、
その結果をグラフとしてプロットします。
物理定数とプロット設定が定義されています。
関連リンク: :doc:`BMshift_usage`
"""
#===================================
# 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; # C<sup>2</sup>N<sup>-1</sup>m<sup>-2</sup>";
kB = 1.380658e-23 # JK<sup>-1</sup>";
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():
"""
概要: バーンスタイン-モスシフトの計算と結果のプロットを実行するメイン関数。
詳細説明:
この関数は、`logNemin` から `logNemax` までの対数スケールで定義された
キャリア濃度範囲において、バーンスタイン-モスシフト (ΔEg) を計算します。
計算された濃度とシフトの関係は、2つのサブプロットとして可視化されます。
一つは両軸対数スケール、もう一つはX軸のみ対数スケールで表示されます。
プロット後、ユーザーがEnterキーを押すまでプログラムは待機します。
:returns: なし
"""
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()