jsap_crystal.BMshift のソースコード

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