mu-T-Fit2.py 技術ドキュメント

プログラムの動作

mu-T-Fit2.py は、半導体のホール移動度の温度依存性データ(\(\mu-T\) データ)を解析し、その背後にある散乱メカニズムのパラメータを決定するためのPythonスクリプトです。このプログラムは、粒界散乱、光学フォノン散乱、音響フォノン散乱、イオン化不純物散乱などの複数の散乱メカニズムを考慮した移動度モデルを用いて、実験データをフィッティングします。

主な機能は以下の3つのモードで提供されます。

  1. init (初期化) モード: 入力された\(\mu-T\)データに対し、線形最小二乗法を用いて移動度モデルの初期パラメータを推定します。また、移動度および\(\mu T^{0.5}\)の活性化エネルギーの温度依存性も計算・表示します。

  2. fit (フィッティング) モード: 初期パラメータに基づき、非線形最小二乗法(scipy.optimize.minimize を利用)を用いて\(\mu-T\)データをモデルに最適にフィットさせます。これにより、粒界ポテンシャル障壁、光学フォノン散乱の前指数因子・エネルギー、およびその他の散乱メカニズムの係数と温度指数といった物理パラメータを高精度で決定します。フィッティング後、各散乱成分の移動度と、それらの全体移動度に対する相対的な重みを分解して表示します。

  3. sim (シミュレーション) モード: 指定された(またはパラメータファイルから読み込まれた)モデルパラメータを用いて、移動度の温度依存性をシミュレートし、各散乱メカニズムの寄与を分解して表示します。このモードは、モデルの挙動を理解したり、パラメータの感度を調べたりするのに役立ちます。

このプログラムは、半導体材料のキャリア輸送特性を詳細に理解し、材料設計やプロセス最適化のための貴重な情報を提供することを目的としています。

原理

このプログラムは、半導体のホール移動度\(\mu\)が複数の散乱メカニズムによって制限されるというMatthiessenの法則に基づいています。全体移動度の逆数は、各散乱メカニズムによる移動度の逆数の和として表されます。

\[ \frac{1}{\mu_{total}} = \frac{1}{\mu_{GB}} + \frac{1}{\mu_{in-grain}} \]

ここで、

  • \(\mu_{total}\) は観測される全体のホール移動度です。

  • \(\mu_{GB}\) は粒界散乱による移動度です。

  • \(\mu_{in-grain}\) は粒内移動度であり、粒界散乱以外の散乱メカニズム(格子散乱、不純物散乱など)に起因します。

粒界散乱モデル

粒界散乱は、Setoモデルのようなポテンシャル障壁モデルに基づいて記述されます。粒界障壁因子 \(K_{GB}\) は、粒界ポテンシャル障壁 \(E_b\) に依存します。

\[ \mu_{GB} = \mu_{in-grain} \cdot (1 - K_{GB}) \]

ここで \(K_{GB} = \exp\left(-\frac{E_b}{k_B T}\right)\) であり、\(k_B\) はボルツマン定数、\(T\) は絶対温度です。

粒内移動度モデル

粒内移動度 \(\mu_{in-grain}\) は、光学フォノン散乱と、その他の複数の温度のべき乗則に従う散乱メカニズムの組み合わせとして表されます。

\[ \frac{1}{\mu_{in-grain}} = \frac{1}{\mu_{op}} + \sum_i \frac{1}{\mu_i} \]
  • \(\mu_{op}\) は光学フォノン散乱による移動度です。これは光学フォノンエネルギー \(E_{op}\) と前指数因子 \(A_{op}\) に依存します。

  • \(\mu_i\) は、格子散乱(音響フォノン散乱)やイオン化不純物散乱など、温度 \(T\) のべき乗則に従う散乱メカニズムによる移動度です。各成分は以下のように記述されます。

    \[ \frac{1}{\mu_i} = A_i T^{p_i} \]

    ここで、\(A_i\) は係数(プログラム中では apolyi[i])、\(p_i\) は指数(プログラム中では ppolyi[i])です。通常、音響フォノン散乱では \(p_i = -1.5\)、イオン化不純物散乱では \(p_i = 1.5\) などが用いられます。

フィッティングアルゴリズム

  • init モード: 線形最小二乗法が使用され、初期パラメータを効率的に推定します。

  • fit モード: scipy.optimize.minimize 関数を用いて非線形最小二乗フィッティングを実行します。デフォルトでは"nelder-mead"アルゴリズムが使用されますが、"cg"や"bfgs"などの他のアルゴリズムも選択可能です。目的関数は、実験データとモデル計算値の間の二乗誤差(fit.minimize_func で定義される)を最小化することです。

活性化エネルギーの計算

プログラムは、Arrheniusプロットの傾きから活性化エネルギー \(E_a\) を計算します。

\[ E_a = -k_B \frac{d(\ln \mu)}{d(1/T)} \]

また、\(\mu T^{0.5}\)についても同様に計算が行われます。

\[ E_a(\mu T^{0.5}) = -k_B \frac{d(\ln (\mu T^{0.5}))}{d(1/T)} \]

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

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

  • numpy: 数値計算、特に配列操作に使用されます。

  • scipy: 科学技術計算ライブラリで、主に最適化 (scipy.optimize.minimize) に使用されます。

  • matplotlib: データの可視化、グラフの生成に使用されます。

これらのライブラリは、pip コマンドを使用してインストールできます。

pip install numpy scipy matplotlib

また、tklib というカスタムライブラリが使用されています。このライブラリは標準のpipではインストールできません。tklibは、プログラムのパス上に存在するか、Pythonのサイトパッケージパスに追加されている必要があります。通常は、tklibのソースコードがmu-T-Fit2.pyと同じディレクトリ、またはそのサブディレクトリに配置されていることを想定します。もし入手できない場合は、プログラムを実行できません。

必要な入力ファイル

プログラムは、ホール移動度データを格納したファイルを読み込みます。

  • ファイル形式: .xlsx (Excel) または .csv (カンマ区切り)

  • データ構造:

    • 必須: 温度データ (T_label で指定される列名) とホール移動度データ (mu_label で指定される列名) を含む必要があります。

    • オプション: キャリア濃度 (n_label で指定される列名) や導電率 (sigma_label で指定される列名) データを含めることができますが、このプログラムでは必須ではありません。

  • パラメータファイル: プログラムの初期設定やフィッティングパラメータを保存・読み込みするために .in 形式のファイルを使用します。これはINIファイルのようなテキスト形式で、セクションとキー-バリューのペアで構成されます。プログラム実行時に自動的に生成されるか、手動で編集して使用できます。

ファイル例 (CSV形式):

Temperature,Mobility,Carrier_Concentration
100,10.5,1.0e18
150,15.2,1.2e18
200,20.1,1.3e18
250,25.3,1.4e18
300,30.0,1.5e18
...

生成される出力ファイル

プログラムは、実行モードと設定に応じて複数の出力ファイルを生成します。出力ファイル名は、入力ファイル名に基づいて自動的に命名されます。

  1. ログファイル:

    • ファイル名: 入力ファイル名と同じディレクトリに [入力ファイル名].log として保存されます。

    • 内容: プログラム実行中のすべての標準出力(コンソール出力)が記録されます。これには、読み込んだデータ、初期パラメータ、フィッティングの進捗、最終パラメータ、計算結果などが含まれます。

  2. パラメータファイル:

    • ファイル名: 入力ファイル名と同じディレクトリに [入力ファイル名].in として保存されます。

    • 内容: プログラムの実行設定(Preferencesセクション)および移動度モデルのパラメータ(Parametersセクション)がINI形式で保存されます。fitモードで最適化されたパラメータはここに書き込まれ、次回の実行時に読み込むことができます。

  3. 結果Excelファイル:

    • ファイル名: [入力ファイル名]-muT-[mode].xlsx (例: sample_data-muT-fit.xlsx)

    • 内容: 実行モードに応じて、以下のデータ列が含まれます。

      • init および sim モード: T(K), mu,obs(cm2/Vs), mu,ini(cm2/Vs), Ea,mu(eV), Ea,mu*T^0.5(eV)

      • fit モード: T(K), mu,obs(cm2/Vs), mu,ini(cm2/Vs), mu,fin(cm2/Vs) mu,obsは入力データ、mu,iniは初期パラメータでの計算結果、mu,finはフィッティング後の最終パラメータでの計算結果です。\(E_a\)は活性化エネルギーです。

  4. 成分データExcelファイル:

    • ファイル名: [入力ファイル名]-mu-components.xlsx

    • 内容: 各散乱メカニズムの移動度成分と、それらの全体移動度に対する重み(線形ウェイト)が詳細に記録されます。

      • T(K), mu,obs(cm2/Vs), mu,tot (合計移動度), Kgb (粒界障壁因子), mu,in-grain (粒内移動度), mu,op (光学フォノン移動度), mu(T^p0), mu(T^p1), ... (各\(T^p\)則散乱成分)

      • w,GB (粒界散乱の重み), w,op (光学フォノン散乱の重み), w(T^p0), w(T^p1), ... (各\(T^p\)則散乱の重み)

  5. グラフ出力:

    • プログラムはmatplotlibを用いてグラフを生成し、実行中に画面に表示します。fitモードではフィッティング結果と各散乱成分の分解プロット、simモードでは様々な形式でのシミュレーション結果と活性化エネルギープロットが表示されます。これらのグラフは、プログラム終了時に画面に表示されたまま一時停止し、ユーザーの入力(キー押下など)を待ちます。

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

mu-T-Fit2.py は、以下の一般的な形式でコマンドラインから実行されます。

python mu-T-Fit2.py <mode> <method> <infile_path> <T_label> <mu_label> [n_label] [sigma_label] [Tmin] [Tmax] [maxiter] [tol] [h_diff]

各引数の説明は以下の通りです。

  • <mode> (必須, 引数1): 実行モードを指定します。

    • init: 線形最小二乗法で初期パラメータを推定します。

    • fit: 非線形最小二乗法で移動度モデルパラメータを最適化します。

    • sim: 現在のパラメータで移動度をシミュレートし、成分を分解表示します。

  • <method> (必須, 引数2): fitモードで使用する最適化アルゴリズムを指定します。

    • 例: nelder-mead, cg, bfgs (大文字・小文字は区別されません)

  • <infile_path> (必須, 引数3): 解析対象の入力データファイルへのパスを指定します。ファイル形式は .xlsx または .csv です。

  • <T_label> (必須, 引数4): 入力ファイル内で温度データが格納されている列のラベル(列名)を指定します。

  • <mu_label> (必須, 引数5): 入力ファイル内でホール移動度データが格納されている列のラベル(列名)を指定します。

  • [n_label] (オプション, 引数6): キャリア濃度データが格納されている列のラベルを指定します。

  • [sigma_label] (オプション, 引数7): 導電率データが格納されている列のラベルを指定します。

  • [Tmin] (オプション, 引数8): フィッティングまたはシミュレーションに使用する温度範囲の最小値をK単位で指定します。

  • [Tmax] (オプション, 引数9): フィッティングまたはシミュレーションに使用する温度範囲の最大値をK単位で指定します。

  • [maxiter] (オプション, 引数10): 最適化アルゴリズムの最大反復回数を指定します。

  • [tol] (オプション, 引数11): 最適化の許容誤差(tolerance)を指定します。

  • [h_diff] (オプション, 引数12): 数値微分の際に使用する差分ステップサイズを指定します。

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

ここでは、sample_data.xlsx という入力ファイル(Temperature 列に温度、Mobility 列に移動度データがあるものと仮定)を使用した場合の具体的な使用例を示します。

1. init モードで初期パラメータを推定する

この例では、sample_data.xlsx から温度と移動度データを読み込み、線形最小二乗法で移動度モデルの初期パラメータを推定します。

python mu-T-Fit2.py init nelder-mead sample_data.xlsx Temperature Mobility

実行結果の説明:

  • コンソールには、読み込んだデータ、初期パラメータ(tkMobility クラスで定義されたもの)、線形最小二乗法で推定された新しいパラメータが出力されます。

  • 計算された\(\mu\)\(\mu T^{0.5}\)の活性化エネルギーの温度依存性も表示されます。

  • sample_data.in ファイルが生成または更新され、推定されたパラメータが保存されます。

  • sample_data-muT-init.xlsx ファイルが生成され、観測移動度、初期計算移動度、および活性化エネルギーが記録されます。

  • matplotlib により、観測移動度と線形フィッティングによる計算移動度を比較したグラフが画面に表示されます。

2. fit モードでパラメータを最適化する

この例では、sample_data.xlsx からデータを読み込み、nelder-mead アルゴリズムを用いて移動度モデルパラメータを非線形最小二乗法で最適化します。initモードで作成されたsample_data.inファイルがあれば、そこから初期パラメータが読み込まれます。

python mu-T-Fit2.py fit nelder-mead sample_data.xlsx Temperature Mobility

実行結果の説明:

  • コンソールには、フィッティングの進捗(反復回数、目的関数値など)が表示され、最終的に最適化されたパラメータが出力されます。

  • sample_data.in ファイルが更新され、最適化されたパラメータが保存されます。

  • sample_data-muT-fit.xlsx ファイルが生成され、観測移動度、初期計算移動度、最終フィッティング移動度が記録されます。

  • sample_data-mu-components.xlsx ファイルが生成され、各散乱メカニズムの移動度成分とその重みが詳細に記録されます。

  • matplotlib により、以下の3つのグラフが画面に表示されます。

    1. 観測移動度、初期計算移動度、最終フィッティング移動度の比較プロット。

    2. 最終フィッティング結果と、粒界散乱、光学フォノン散乱、その他\(T^p\)則散乱の各移動度成分を分解したプロット。

    3. 各散乱メカニズムの全体移動度に対する相対的な線形重みのプロット。

3. sim モードで移動度をシミュレートする

この例では、sample_data.in ファイルに保存されているパラメータを用いて、移動度の温度依存性をシミュレートし、各散乱メカニズムの寄与を分解して表示します。

python mu-T-Fit2.py sim nelder-mead sample_data.xlsx Temperature Mobility

実行結果の説明:

  • コンソールには、使用されるパラメータと、シミュレーションされた各温度での総移動度および各成分の移動度が出力されます。

  • 活性化エネルギーの計算結果も表示されます。

  • sample_data-muT-sim.xlsx ファイルが生成され、観測移動度、シミュレーション移動度、および活性化エネルギーが記録されます。

  • sample_data-mu-components.xlsx ファイルが生成され、各散乱メカニズムの移動度成分とその重みが詳細に記録されます。

  • matplotlib により、以下の多様なグラフが画面に表示されます。

    1. \(\mu\) vs \(T\) (線形スケール) のプロットと各成分。

    2. \(\mu\) vs \(T\) (対数スケール) のプロットと各成分。

    3. \(\mu\) vs \(1000/T\) (対数スケール) のプロットと各成分。

    4. \(\mu T^{0.5}\) vs \(1000/T\) (対数スケール) のプロット。

    5. \(E_a\) vs \(T\) のプロット。

    6. \(E_a(\mu T^{0.5})\) vs \(T\) のプロット。

これらのグラフは、モデルの挙動を多角的に分析し、材料特性への洞察を深めるのに役立ちます。