EF-T-semiconductor.py 技術ドキュメント

プログラムの動作

このプログラム EF-T-semiconductor.py は、非縮退半導体におけるフェルミ準位 (\(EF\)) の温度依存性を二分法を用いて計算し、その結果を視覚的に表示します。半導体の物理パラメータは、デフォルト値を使用するか、コマンドライン引数で指定することができます。

プログラムの主な機能は以下の通りです。

  • フェルミ準位の計算: 指定された温度範囲(Tmin から Tmax まで Tstep 刻み)において、電荷中性条件を満たすフェルミ準位を二分法により高精度で計算します。

  • キャリア密度の計算: 各温度における伝導帯の電子密度 (\(n\))、価電子帯の正孔密度 (\(p\))、イオン化アクセプター密度 (\(N_A^-\))、イオン化ドナー密度 (\(N_D^+\)) を計算します。

  • 結果のコンソール出力: 計算された温度、フェルミ準位、各キャリア密度を表形式で標準出力に出力します。

  • グラフ表示: matplotlib ライブラリを使用して、以下の2種類のグラフを生成し表示します。

    • 温度 (\(T\)) に対するフェルミ準位 (\(EF\)) の変化。価電子帯上端 (\(E_v\)) と伝導帯下端 (\(E_c\)) のエネルギーもプロットされます。

    • 逆温度 (\(1000/T\)) に対する各キャリア密度 (\(n, p, N_A^-, N_D^+\)) の変化(対数スケール)。

このプログラムは、半導体デバイスの設計や特性評価において、温度変化に伴うキャリア密度とフェルミ準位の変動を定量的に理解するための基礎的なツールとして利用できます。

原理

このプログラムは、半導体中の電荷中性条件に基づいてフェルミ準位を決定し、その温度依存性を分析します。計算には以下の数式とアルゴリズムが使用されます。

1. フェルミ・ディラック分布関数

電子が特定のエネルギー準位 \(E\) を占有する確率 \(f(E, EF, T)\) は、フェルミ・ディラック分布関数で与えられます。

\[f(E, EF, T) = \frac{1}{\exp\left(\frac{(E - EF)e}{k_B T}\right) + 1}\]

ここで、\(e\) は電気素量、\(k_B\) はボルツマン定数、\(T\) は絶対温度です。

2. キャリア密度(非縮退近似)

伝導帯の電子密度 \(n\) と価電子帯の正孔密度 \(p\) は、非縮退近似を用いて以下のように計算されます。

  • 電子密度: $\(n = N_c \exp\left(-\frac{(E_c - EF)e}{k_B T}\right)\)\( ここで、\)N_c\( は伝導帯の有効状態密度、\)E_c$ は伝導帯下端エネルギーです。

  • 正孔密度: $\(p = N_v \exp\left(-\frac{(EF - E_v)e}{k_B T}\right)\)\( ここで、\)N_v\( は価電子帯の有効状態密度、\)E_v$ は価電子帯上端エネルギーです。

3. イオン化不純物密度

ドナー原子とアクセプター原子のイオン化密度は、フェルミ・ディラック分布関数を用いて計算されます。

  • イオン化ドナー密度: $\(N_D^+ = N_D (1 - f(E_D, EF, T))\)\( ここで、\)N_D\( はドナー密度、\)E_D$ はドナー準位エネルギーです。

  • イオン化アクセプター密度: $\(N_A^- = N_A f(E_A, EF, T)\)\( ここで、\)N_A\( はアクセプター密度、\)E_A$ はアクセプター準位エネルギーです。

4. 電荷中性条件と二分法

半導体全体の電荷中性条件は、電子、正孔、イオン化アクセプター、イオン化ドナーの密度のバランスによって表されます。

\[n + N_A^- = p + N_D^+\]

この式を変形すると、以下の関数 \(\Delta Q(EF)\) が定義できます。

\[\Delta Q(EF) = n(EF) + N_A^-(EF) - p(EF) - N_D^+(EF) = 0\]

フェルミ準位 \(EF\) は、この \(\Delta Q(EF) = 0\) を満たす値として決定されます。プログラムでは、この根を見つけるために二分法が用いられます。二分法は、初期探索範囲 (\(EF_{min}\), \(EF_{max}\)) の両端で \(\Delta Q(EF)\) の符号が異なることを確認し、区間の中点での \(\Delta Q(EF_{half})\) の符号に応じて探索範囲を半分に絞り込んでいく反復アルゴリズムです。これにより、指定された許容誤差 eps 内で \(EF\) が収束するまで計算を繰り返します。

必要な非標準ライブラリとインストール方法

このプログラムの実行には、以下の非標準Pythonライブラリが必要です。

  • numpy: 数値計算を効率的に行うためのライブラリ。

  • matplotlib: グラフ描画のためのライブラリ。

これらのライブラリは、Pythonのパッケージマネージャー pip を使用してインストールできます。以下のコマンドをターミナルまたはコマンドプロンプトで実行してください。

pip install numpy matplotlib

必要な入力ファイル

EF-T-semiconductor.py は、実行に必要な外部入力ファイルを一切使用しません。 すべての半導体パラメータ(\(E_v, E_c, N_v, N_c, E_A, N_A, E_D, N_D\))は、プログラムのソースコード内にデフォルト値としてハードコードされており、必要に応じてコマンドライン引数を通じて変更されます。

生成される出力ファイル

EF-T-semiconductor.py は、計算結果をファイルとして保存しません。 生成される出力は以下の通りです。

  1. 標準出力 (コンソール):

    • 計算に使用された半導体パラメータの概要。

    • 各温度における計算結果の表形式データ。この表には、以下の情報が含まれます。

      • T(K): 絶対温度(ケルビン)

      • EF(eV): フェルミ準位(電子ボルト)

      • Ne(cm-3): 電子密度(\(cm^{-3}\)

      • Nh(cm-3): 正孔密度(\(cm^{-3}\)

      • NA-(cm-3): イオン化アクセプター密度(\(cm^{-3}\)

      • ND+(cm-3): イオン化ドナー密度(\(cm^{-3}\)

  2. グラフィカルウィンドウ:

    • matplotlib によって生成される2つのプロットを含むウィンドウが表示されます。

      • 左側のプロット: \(T\) (K) に対する \(EF\) (eV) のグラフ。

      • 右側のプロット: \(1000/T\) (\(K^{-1}\)) に対する NeNhNA-ND+ (\(cm^{-3}\)) のグラフ(y軸は対数スケール)。

    • このウィンドウは、プログラムが終了するまで表示されたままになります。プログラムの終了は、コンソールでEnterキーを押すことによって行われます。

コマンドラインでの使用例 (Usage)

EF-T-semiconductor.py は、以下の形式でコマンドラインから実行できます。

python EF-T-semiconductor.py [EA] [NA] [ED] [ND] [Ec] [Nv] [Nc]

引数はすべて浮動小数点数です。各引数の意味は以下の通りです。

  • [EA]: アクセプター準位エネルギー (eV)。デフォルト: 0.05

  • [NA]: アクセプター密度 (\(cm^{-3}\))。デフォルト: 1.0e15

  • [ED]: ドナー準位エネルギー (eV)。デフォルト: Ec - 0.05

  • [ND]: ドナー密度 (\(cm^{-3}\))。デフォルト: 1.0e16

  • [Ec]: 伝導帯下端エネルギー (eV)。デフォルト: 1.0

  • [Nv]: 価電子帯有効状態密度 (\(cm^{-3}\))。デフォルト: 1.2e19

  • [Nc]: 伝導帯有効状態密度 (\(cm^{-3}\))。デフォルト: 2.1e18

引数を省略した場合、プログラム内のデフォルト値が使用されます。例えば、[EA] のみを指定し、他の引数を省略することはできません。引数は左から順に指定する必要があります。

コマンドラインでの具体的な使用例

1. デフォルトパラメータで実行する例

プログラムに引数を一切与えずに実行すると、ソースコードに定義されているデフォルト値が使用されます。

python EF-T-semiconductor.py

実行結果の説明:

プログラムはまず、使用される半導体パラメータの概要を標準出力に表示します。

Solution of EF by bisection method
Ev=0.000000   Ec=1.000000 eV
Nv=1.200000e+19   Nc=2.100000e+18 cm-3
NA=1.000000e+15 cm-3  EA=0.050000 eV
ND=1.000000e+16 cm-3  ED=0.950000 eV

 T(K)   	  EF(eV)	Ne(cm-3)	Nh(cm-3)	NA-(cm-3)	ND+(cm-3)
  50.0000	  0.817452	1.6875e+08	1.3789e-21	1.1390e-13	1.0000e+16
  60.0000	  0.771241	1.2504e+09	1.7770e-17	2.0494e-11	1.0000e+16
  70.0000	  0.728956	6.4526e+09	1.1118e-14	1.3396e-09	1.0000e+16
...
 990.0000	  0.509852	1.6231e+18	1.6231e+18	5.1611e+14	9.8973e+15
1000.0000	  0.509013	1.7118e+18	1.7118e+18	5.2155e+14	9.8974e+15
Press ENTER to exit>> 

上記のような表形式の計算結果が温度 T の範囲で順に出力されます。同時に、matplotlib によって2つのグラフが描画されたウィンドウが表示されます。左側のグラフは温度に対するフェルミ準位の変化を示し、右側のグラフは \(1000/T\) に対する各種キャリア密度の対数グラフを示します。コンソールに Press ENTER to exit>> と表示された後、Enterキーを押すことでプログラムとグラフウィンドウが終了します。

2. 特定のパラメータを指定して実行する例

プログラムのヘルプメッセージに記載されている例 (EA=0.05, NA=1.0e15, ED=0.95, ND=1.0e16, Ec=1.0, Nv=1.2e19, Nc=2.1e18) を使用して実行します。これらの値はデフォルト値と同じであるため、結果は上記とほぼ同じになりますが、引数指定の形式を示します。

python EF-T-semiconductor.py 0.05 1.0e15 0.95 1.0e16 1.0 1.2e19 2.1e18

実行結果の説明:

このコマンドを実行すると、前述のデフォルト実行例と同様に、指定されたパラメータ(この場合はデフォルトと同じ値)に基づいて計算が行われ、結果が標準出力に表形式で表示され、同時にグラフウィンドウが開きます。出力形式とインタラクション(Enterキーで終了)も同じです。これにより、ユーザーは半導体の種類やドーピング濃度などを変更して、フェルミ準位やキャリア密度の温度特性をシミュレーションすることができます。