mobility_pi.py テクニカルドキュメント

プログラムの動作

mobility_pi.py は、半導体材料のキャリア移動度を温度の関数として解析・モデル化するためのPythonスクリプトです。このプログラムは、測定された移動度データ(Hall-T.xlsx)を読み込み、複数の散乱メカニズム(粒界散乱、光学フォノン散乱、温度のべき乗則に従う散乱)に基づいた物理モデルを用いて、理論的な移動度曲線と各散乱機構の寄与を計算します。

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

  • Excelファイルから温度と移動度の実験データを読み込みます。

  • 粒界散乱、光学フォノン散乱、および複数のべき乗則散乱項を組み合わせたモデルを適用して、移動度を計算します。

  • 計算された総移動度と、各散乱メカニズム(粒界、粒内、光学フォノン、各べき乗則項)による移動度成分を算出します。

  • 各散乱機構が総移動度に占める相対的な寄与(重み)を計算し、標準出力に表示します。

  • 実験データと計算モデル、および分解された各移動度成分をグラフで可視化します。

  • 各散乱機構の重みも別のグラフで可視化します。

このプログラムは、半導体デバイスの性能に影響を与えるキャリア輸送メカニズムを理解し、材料設計の指針を得るためのツールとして活用できます。

原理

このプログラムは、以下の物理モデルに基づいてキャリア移動度を計算します。

  1. 粒界 (Grain Boundary) 散乱: 粒界効果は、移動度を減衰させる係数 \(K_{GB}\) として導入されます。この係数は熱活性化プロセスと障壁高さのガウス分布を考慮したモデルに基づいています。 $\(K_{GB}(T) = \exp\left(-\frac{E_b}{k_B T} + \frac{1}{2}\left(\frac{s_\phi}{k_B T}\right)^2\right)\)\( ここで、\)E_b\( は粒界の活性化エネルギー、\)s_\phi\( は粒界障壁高さの標準偏差、\)k_B\( はボルツマン定数、\)T$ は絶対温度です。

  2. 粒内 (In-grain) 移動度: 粒内移動度は、光学フォノン散乱と複数の温度べき乗則散乱の逆移動度をMatthiessenの法則に従って合算することで計算されます。 $\( \frac{1}{\mu_{in-grain}} = \frac{1}{\mu_{op}} + \sum_i \frac{1}{\mu_{p,i}} \)$

  3. 光学フォノン (Optical Phonon) 散乱: 光学フォノン散乱による逆移動度 \(\frac{1}{\mu_{op}}\) は、以下のようにモデル化されます。 $\( \frac{1}{\mu_{op}(T)} = A_{op} \frac{1}{\exp\left(\frac{E_{op}}{k_B T}\right) - 1} \)\( ここで、\)E_{op}\( は光学フォノンのエネルギー、\)A_{op}$ は散乱強度に関連する係数です。

  4. 温度べき乗則 (Power-law) 散乱: 複数の散乱機構(例えば、音響フォノン散乱、イオン化不純物散乱など)を温度のべき乗則で近似します。 $\( \frac{1}{\mu_{p,i}(T)} = a_i T^{-p_i} \)\( ここで、\)a_i\( は散乱強度に関連する係数、\)p_i\( はべき指数です。\)p_i\( は通常、音響フォノン散乱では \)1.5 \sim 2.5\(、イオン化不純物散乱では \)-1.5$ など、特定の物理メカニズムに対応する値が設定されます。

  5. 全体の移動度: 最終的なキャリア移動度 \(\mu_{tot}\) は、粒界係数と粒内移動度を乗算することで計算されます。 $\( \mu_{tot}(T) = K_{GB}(T) \cdot \mu_{in-grain}(T) \)$

プログラムは、初期パラメータ (\(E_b, s_\phi, E_{op}, A_{op}, p_i, a_i\)) を使用してこれらのモデルに基づき移動度を計算し、実験データと比較して評価します。各散乱機構の重みは、各成分の逆移動度と粒界係数から相対的な寄与を算出します。

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

このプログラムは、以下の非標準ライブラリに依存しています。

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

    pip install numpy
    
  • openpyxl: Excelファイル (.xlsx) の読み書きを行うためのライブラリ。

    pip install openpyxl
    
  • pandas: データ解析と操作のためのライブラリ。Excelファイルからのデータ読み込みに使用されます。

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

    pip install matplotlib
    
  • tklib: このプログラムは tklib.tkutils および tklib.tksci.tkFit_mxy に依存していますが、これは一般的なPyPIで提供されているライブラリではありません。通常、研究室やプロジェクト固有のカスタムライブラリである可能性が高いです。そのため、このライブラリは別途、提供元から入手し、Pythonのパスが通っている場所に配置する必要があります。

必要な入力ファイル

プログラムは、移動度データを格納したExcelファイル (.xlsx) を入力として期待します。

  • ファイル名: Hall-T.xlsx

  • 形式: Excelワークシート形式 (.xlsx)。

  • データ構造:

    • Excelファイル内には、温度 (T) と移動度 (mu) のデータがそれぞれ列に格納されている必要があります。

    • 具体的には、main 関数内で xlabel = 'T' および ylabel = "mu" が設定されているため、それぞれの列に Tmu のヘッダーが必要です。

例: Hall-T.xlsx の内容

T

mu

10

0.005

50

0.012

100

0.025

200

0.030

300

0.028

生成される出力ファイル

現在の mobility_pi.py の実装では、save_data 関数が定義されていますが、main 関数内では呼び出されていません。したがって、デフォルトでは出力ファイルは生成されません。

もし save_data 関数を呼び出すようにコードを修正した場合、save_data 関数はPandas DataFrameを使用してExcelファイル (.xlsx) を生成します。

  • ファイル名: datafile 変数で指定されたパス(例: mu.xlsx)。

  • 内容: 計算された総移動度 (mutot_list)、粒界係数 (muKGB_list)、粒内移動度 (muingrain_list)、光学フォノン移動度 (muop_list)、および個々のべき乗則散乱移動度 (mupi_list) など、save_data 関数に渡されるデータが列として保存されます。

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

このプログラムはコマンドライン引数を解析する機能を持たないため、入力ファイル名や計算パラメータはスクリプト内のグローバル変数または main 関数内で直接設定されています。

プログラムを実行するには、Pythonインタープリタを使用してスクリプトを直接実行します。

python mobility_pi.py

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

Hall-T.xlsx という名前の入力ファイルが、プログラムと同じディレクトリに存在することを前提とします。

実行コマンド:

python mobility_pi.py

実行結果の説明:

  1. 標準出力:

    • プログラムは、入力ファイル名 (Hall-T.xlsx)、x_labels (T)、y_labels (mu) を表示します。

    • 入力ファイルから読み込んだ温度 (T) と移動度 (mu) のデータリストを表示します。

    • 計算された粒界係数 (KGB)、光学フォノン移動度 (mu,op)、および個々のべき乗則散乱移動度 (mu(pi)) の成分が、各温度 (T) ごとに表形式で出力されます。

    • さらに、各散乱機構が全体の移動度に占める相対的な寄与(重み、\(w_{GB}\), \(w_{op}\), \(w(pi)\))も、各温度ごとに表形式で出力されます。

    出力例(数値は実際の計算結果によって異なります):

    infile :  Hall-T.xlsx
    xlabel :  T
    ylabel :  mu
    
    Read data from [Hall-T.xlsx]
    x_labels= ['T']
    y_labels= ['mu']
    T: [10.0, 50.0, 100.0, 200.0, 300.0]
    mu: [0.005, 0.012, 0.025, 0.03, 0.028]
    
    T(K)   KGB       mu,op     mu(0.0)   mu(-1.0)  mu(1.0)   mu(1.5)
    10.0   0.0010    1.0e+10   137.9     1.0e+10   1.0e+10   1.0e+10
    50.0   0.0020    1.0e+10   137.9     1.0e+10   1.0e+10   1.0e+10
    ...
    300.0  0.0030    1.0e+10   137.9     1.0e+10   1.0e+10   1.0e+10
    
    T(K)   w,gb        w,op        w(0.0)      w(-1.0)     w(1.0)      w(1.5)
    10.0   0.9990      0.0010      0.0000      0.0000      0.0000      0.0000
    50.0   0.9980      0.0020      0.0000      0.0000      0.0000      0.0000
    ...
    300.0  0.9970      0.0030      0.0000      0.0000      0.0000      0.0000
    
  2. グラフウィンドウ:

    • matplotlib によって、2つのグラフを含むウィンドウが表示されます。

    • 左側のグラフ: 実験データ (\(\mu(obs)\)) と計算モデルの総移動度 (\(\mu(cal)\)) が表示されます。さらに、分解された粒内移動度 (\(\mu_{in-grain}\))、光学フォノン移動度 (\(\mu_{op}\))、および個々のべき乗則散乱移動度 (\(\mu(pi=...)\)) も表示されます。

    • 右側のグラフ: 各散乱メカニズムが総移動度に占める相対的な寄与(重み、\(w_{GB}\), \(w_{op}\), \(w(pi=...)\))が温度の関数として表示されます。

    • このグラフウィンドウは、ユーザーがターミナルで Enter キーを押すまで閉じずに表示され続けます。

    Press ENTER to terminate>> 
    

    Enter キーを押すと、プログラムは終了します。