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

プログラムの動作

本プログラム EF-T-semi_FEA.py は、自由電子近似(Free Electron Approximation; FEA)を用いて半導体材料の電気的特性をシミュレートするPythonスクリプトです。具体的には、半導体中の電子濃度 (\(N_e\))、正孔濃度 (\(N_h\))、ドーパントのイオン化濃度 (\(N_D^+\), \(N_A^-\))、ホール係数 (\(R_H\)) などの物理量を、温度またはフェルミ準位の関数として計算します。

主な機能は以下の通りです。

  • 温度依存性シミュレーション (mode = 'T'): 指定されたドーピング濃度、バンドギャップ、バンド端における有効質量を用いて、温度に対するキャリア濃度、フェルミ準位、ホール係数などの変化を計算し、アレニウスプロットから活性化エネルギーを算出します。

  • フェルミ準位依存性シミュレーション (mode = 'EF'): 特定の温度において、フェルミ準位を変化させた際のキャリア濃度、ドーパントイオン化率、ホール係数などを計算します。

  • 状態密度と有効質量の評価 (mode = 'me'): 自由電子近似の状態密度モデルに基づき、DOSプロットと有効質量のエネルギー依存性を評価します。

このプログラムは、半導体材料のドーピング効果、温度特性、キャリア輸送メカニズムを理解し、実験データを解釈するための理論的支援を提供することを目的としています。

原理

EF-T-semi_FEA.py は、半導体の自由電子近似モデルに基づき、以下の主要な物理式とアルゴリズムを利用して半導体特性を計算します。

  1. 状態密度 (Density of States; DOS) 導電帯 (Conduction Band; CB) および価電子帯 (Valence Band; VB) の状態密度は、自由電子近似において有効質量 (\(m_e^*\), \(m_h^*\)) を用いて以下のように表されます。 導電帯の状態密度 \(g_c(E)\) (単位体積、単位エネルギーあたりの状態数): $\( g_c(E) = \frac{1}{2\pi^2} \left( \frac{2m_e^*}{\hbar^2} \right)^{3/2} \sqrt{E - E_C} \quad (E \ge E_C) \)\( 価電子帯の状態密度 \)g_v(E)\( (単位体積、単位エネルギーあたりの状態数): \)\( g_v(E) = \frac{1}{2\pi^2} \left( \frac{2m_h^*}{\hbar^2} \right)^{3/2} \sqrt{E_V - E} \quad (E \le E_V) \)\( ここで、\)E\( はエネルギー、\)\hbar\( はディラック定数、\)E_C\( は導電帯底エネルギー、\)E_V$ は価電子帯頂上エネルギーです。 プログラム内部では、これらの式の係数を DC0 (導電帯) および DV0 (価電子帯) として扱い、tkDOS クラス内でこれらのDOSを生成します。

  2. フェルミ・ディラック統計 電子と正孔の濃度は、フェルミ・ディラック分布関数 \(f(E, E_F, T)\) を用いて状態密度を積分することで計算されます。 $\( f(E, E_F, T) = \frac{1}{1 + \exp\left(\frac{E - E_F}{k_B T}\right)} \)\( ここで、\)E_F\( はフェルミ準位、\)k_B\( はボルツマン定数、\)T$ は絶対温度です。

    電子濃度 \(N_e\): $\( N_e = \int_{E_C}^{\infty} g_c(E) f(E, E_F, T) dE \)\( 正孔濃度 \)N_h\(: \)\( N_h = \int_{-\infty}^{E_V} g_v(E) (1 - f(E, E_F, T)) dE \)$ プログラムでは、tkTransport モジュールの積分関数 (integrate_Simpson_list, fe, fh) を用いてこれらの積分を数値的に実行します。

  3. ドナー・アクセプター準位のイオン化 ドナー準位 (\(E_D\)) およびアクセプター準位 (\(E_A\)) のイオン化されたキャリア濃度は、フェルミ準位の位置に依存します。 ドナーイオン濃度 \(N_D^+\): $\( N_D^+ = \frac{N_D}{1 + g_D \exp\left(\frac{E_F - E_D}{k_B T}\right)} \)\( アクセプターイオン濃度 \)N_A^-\(: \)\( N_A^- = \frac{N_A}{1 + g_A \exp\left(\frac{E_A - E_F}{k_B T}\right)} \)\( ここで、\)N_D\( および \)N_A\( はそれぞれのドーパントの総濃度、\)g_D\( および \)g_A\( は準位の縮退度です(通常、\)g_D=2\(, \)g_A=4$)。

  4. 電荷中性条件 フェルミ準位 \(E_F\) は、半導体全体の電荷中性条件を満たすように決定されます。 $\( N_D^+ - N_A^- + N_h - N_e = 0 \)$ この非線形方程式は、通常、二分法 (dos.find_EF_bisec メソッド) などの数値解法を用いて解かれます。

  5. ホール係数 (\(R_H\)) プログラム内で計算されるホール係数 \(R_H\) は、簡易的に以下のように定義されます。 $\( R_H = \frac{N_h - N_e}{e \cdot N_s^2} \)\( ここで \)e\( は素電荷、 \)N_s\( は正味キャリア濃度 (例えば \)N_s = N_h - N_e$) です。厳密なホール係数はキャリアの移動度に依存しますが、本プログラムでは移動度が等しいと仮定した簡易的な表現または同様の物理量が出力されます。

  6. 活性化エネルギー (\(E_a\)) 温度依存性シミュレーション (mode = 'T') では、キャリア濃度 \(N\) の温度に対するアレニウスプロットから活性化エネルギーを計算します。キャリア濃度が \(N \propto \exp(-E_a / k_B T)\) の関係に従う場合、\(\ln N\)\(1/T\) に対してプロットしたときの傾きから \(E_a\) を求めることができます。 $\( E_a = -k_B \frac{d(\ln N)}{d(1/T)} \)$ プログラムでは、隣接するデータ点間の差分から数値的に傾きを計算し、meV単位で出力します。

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

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

  • numpy (数値計算用)

  • scipy (科学技術計算用、特に最適化および補間関数)

  • matplotlib (グラフ描画用)

  • tklib (本プログラムに固有のユーティリティおよび科学計算ライブラリ)

numpy, scipy, matplotlibpip コマンドでインストールできます。

pip install numpy scipy matplotlib

tklib は、このプログラムの作者によって作成された独自のライブラリと推測されます。通常、pip で直接インストールすることはできません。これは EF-T-semi_FEA.py と同じディレクトリに配置されているか、またはPythonのパスにアクセス可能な場所にインストールされている必要があります。もし配布元から提供されている場合は、その指示に従ってインストールまたは配置してください。

必要な入力ファイル

EF-T-semi_FEA.py は、直接的な入力ファイルを必要としません。 すべての計算パラメータ(バンド端エネルギー、有効質量、ドーパント濃度、計算範囲など)は、コマンドライン引数として与えるか、プログラム内部で初期値として設定されているグローバル変数を使用します。

プログラムは、指定された有効質量とバンド端エネルギーに基づき、内部的に自由電子近似による状態密度 (DOS) を生成して計算を進めます。

生成される出力ファイル

プログラムは、実行モードに応じて以下のCSV形式の出力ファイルを生成します。また、matplotlibによるグラフが画面に表示されます。

  • ファイル名: EF-T-semi_FEA-{mode}.csv

    • {mode} には、実行時に指定されたモード(T または EF)が入ります。

  • 内容:

    • mode = 'T' の場合 (EF-T-semi_FEA-T.csv):

      • T(K): 温度 (K)

      • 1000/T(K^-1): 温度の逆数の1000倍 (K\(^{-1}\))

      • EF(eV): フェルミ準位 (eV)

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

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

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

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

      • RH: ホール係数 (C\(^{-1}\)cm\(^{-3}\))

      • Ns: 正味キャリア濃度 (cm\(^{-3}\))

      • Ea(Ne,meV): 電子の活性化エネルギー (meV)

      • Ea(Ne,T1/2): \(N_e/T^{1/2}\) から算出される電子の活性化エネルギー (meV)

      • Ea(Nh,meV): 正孔の活性化エネルギー (meV)

      • Ea(Nh,T1/2): \(N_h/T^{1/2}\) から算出される正孔の活性化エネルギー (meV)

      • dQ: 電荷中性条件からのずれ(\(N_D^+ - N_A^- + N_h - N_e\)

    • mode = 'EF' の場合 (EF-T-semi_FEA-EF.csv):

      • EF(eV): フェルミ準位 (eV)

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

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

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

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

      • RH: ホール係数 (C\(^{-1}\)cm\(^{-3}\))

      • T0(Ne): 電子濃度から算出される特徴的な温度 (K)

      • T0(Nh): 正孔濃度から算出される特徴的な温度 (K)

      • Ns: 正味キャリア濃度 (cm\(^{-3}\))

    • mode = 'me' の場合:

      • CSVファイルは生成されません。画面にグラフが表示されるのみです。

  • グラフ出力:

    • matplotlib を使用して、計算結果のグラフが画面に表示されます。ユーザーは表示されたグラフをGUI操作で画像ファイルとして保存することができます。

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

基本的な実行コマンドと引数の説明は以下の通りです。

python EF-T-semi_FEA.py mode (file args)

mode は以下の3つのいずれかを選択します。

  1. me モード: DOSをプロットし、有効質量を評価します。

    python EF-T-semi_FEA.py me dE
    
    • dE: バンド端 (EC/EV) からDOSのフィッティングを行うエネルギー範囲 (eV)。

  2. T モード: 温度依存性を計算します。

    python EF-T-semi_FEA.py T EC EA NA ED ND Tmin Tmax nT
    
    • EC: 導電帯底エネルギー (eV)。

    • EA: アクセプター準位エネルギー (eV)。

    • NA: アクセプター濃度 (cm\(^{-3}\))。

    • ED: ドナー準位エネルギー (eV)。

    • ND: ドナー濃度 (cm\(^{-3}\))。

    • Tmin: 最小温度 (K)。

    • Tmax: 最大温度 (K)。

    • nT: 温度メッシュの点数。

  3. EF モード: フェルミ準位依存性を計算します。

    python EF-T-semi_FEA.py EF T EC EA NA ED ND nEF
    
    • T: 計算を行う温度 (K)。

    • EC: 導電帯底エネルギー (eV)。

    • EA: アクセプター準位エネルギー (eV)。

    • NA: アクセプター濃度 (cm\(^{-3}\))。

    • ED: ドナー準位エネルギー (eV)。

    • ND: ドナー濃度 (cm\(^{-3}\))。

    • nEF: フェルミ準位メッシュの点数。

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

具体的な引数を与えた実行例と、その実行結果の簡単な説明を以下に示します。

  1. me モードの実行例:

    python EF-T-semi_FEA.py me 0.5
    

    説明: 導電帯底 (EC) および価電子帯頂上 (EV) から0.5 eVのエネルギー範囲で、自由電子近似の状態密度モデルに基づいた状態密度 (DOS) をプロットし、そのDOSの傾きから有効質量のエネルギー依存性を計算して表示します。このモードではCSVファイルは出力されず、グラフのみが表示されます。

  2. T モードの実行例:

    python EF-T-semi_FEA.py T 1.1 0.05 0.0e17 1.05 0.8e17 300 600 11
    

    説明:

    • 導電帯底 \(E_C = 1.1\) eV

    • アクセプター準位 \(E_A = 0.05\) eV

    • アクセプター濃度 \(N_A = 0.0 \times 10^{17}\) cm\(^{-3}\)

    • ドナー準位 \(E_D = 1.05\) eV

    • ドナー濃度 \(N_D = 0.8 \times 10^{17}\) cm\(^{-3}\) これらのパラメータ設定で、温度 \(T = 300\) K から \(600\) K までを \(11\) 点(\(30\) K ステップ)で変化させながら、電子濃度 (\(N_e\))、正孔濃度 (\(N_h\))、フェルミ準位 (\(E_F\))、ホール係数 (\(R_H\)) などの温度依存性を計算します。結果は EF-T-semi_FEA-T.csv に保存され、関連するグラフが画面に表示されます。

  3. EF モードの実行例:

    python EF-T-semi_FEA.py EF 300 1.1 0.05 0.0e17 1.05 0.8e17 51
    

    説明:

    • 温度 \(T = 300\) K

    • 導電帯底 \(E_C = 1.1\) eV

    • アクセプター準位 \(E_A = 0.05\) eV

    • アクセプター濃度 \(N_A = 0.0 \times 10^{17}\) cm\(^{-3}\)

    • ドナー準位 \(E_D = 1.05\) eV

    • ドナー濃度 \(N_D = 0.8 \times 10^{17}\) cm\(^{-3}\) これらのパラメータ設定で、フェルミ準位 (\(E_F\)) を価電子帯頂上 (EV) から導電帯底 (EC) の範囲(内部で設定される dEFmindEFmax に基づく)で \(51\) 点変化させながら、電子濃度 (\(N_e\))、正孔濃度 (\(N_h\))、ホール係数 (\(R_H\)) などの \(E_F\) 依存性を計算します。結果は EF-T-semi_FEA-EF.csv に保存され、関連するグラフが画面に表示されます。