weighted_mobility.py 技術ドキュメント

プログラムの動作

weighted_mobility.py は、電気伝導率 (\(\sigma\)) とゼーベック係数 (\(S\)) から、加重移動度 (\(\mu_w\)) および加重キャリア濃度 (\(n_w\)) を計算するためのPythonスクリプトです。このプログラムは、半導体材料の電気的輸送特性解析に利用され、Snyderの近似式、または自由電子モデルに基づいた近似解および厳密解を用いて加重移動度を算出します。

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

  • 単一点計算 (single モード): 特定の電気伝導率、ゼーベック係数、温度に対して、加重移動度とキャリア濃度を計算します。状態密度有効質量 (\(m^*_{\text{DOS}}\)) および散乱因子 (\(r\)) の影響も考慮できます。

  • 検証モード (check モード): ゼーベック係数とフェルミ準位の依存関係、および加重移動度の異なる計算手法間の比較を行います。計算結果はExcelファイルに保存され、グラフが表示されます。

  • Xパラメータ依存性計算 (X モード): 入力ファイルから読み込んだX軸パラメータ(例:組成比、ドープ量など)に対する電気伝導率とゼーベック係数のデータを用いて、加重移動度とキャリア濃度のX依存性を計算します。結果はExcelファイルに保存され、グラフが表示されます。

  • 温度依存性計算 (T モード): 入力ファイルから読み込んだ温度に対する電気伝導率とゼーベック係数のデータを用いて、加重移動度とキャリア濃度の温度依存性を計算します。結果はExcelファイルに保存され、グラフが表示されます。

このスクリプトは、材料の輸送特性を解析し、キャリアの移動度や濃度を実験データから逆算する際に有用です。

原理

このプログラムは、電気伝導率 \(\sigma\) とゼーベック係数 \(S\) から、加重移動度 \(\mu_w\) と加重キャリア濃度 \(n_w\) を計算します。基本的な原理は、Boltzmann輸送方程式とフェルミ・ディラック統計に基づいています。

  1. 電気伝導率 (\(\sigma\)) 電気伝導率は、キャリア濃度 \(n\)、電気素量 \(e\)、移動度 \(\mu\) の積として表されます。 $\(\sigma = n e \mu\)\( しかし、実験的に得られる \)\sigma\( と \)S\( から \)n\( と \)\mu$ を分離するためには、より詳細な情報(例えば状態密度や散乱機構)が必要です。ここで、「加重」された移動度と濃度が導入されます。

  2. ゼーベック係数 (\(S\)) ゼーベック係数は、熱電能とも呼ばれ、温度勾配によって生じる電位差を表します。一般に、自由電子モデルの枠組みでは、還元フェルミエネルギー \(\eta = E_F / k_B T\)\(E_F\) はフェルミ準位、\(k_B\) はボルツマン定数、\(T\) は絶対温度)と散乱因子 \(r\) を用いて記述されます。 正孔(p型)の場合: $\(S = \frac{k_B}{e} \left( \frac{(r + 2)F_{r+1}(\eta)}{ (r + 1)F_r(\eta)} - \eta \right)\)\( 電子(n型)の場合: \)\(S = -\frac{k_B}{e} \left( \frac{(r + 2)F_{r+1}(\eta)}{ (r + 1)F_r(\eta)} - \eta \right)\)\( ここで \)F_j(\eta)\( は \)j\( 次のフェルミ積分です。 \)\(F_j(\eta) = \int_0^\infty \frac{x^j}{1 + e^{x-\eta}} dx\)\( 非縮退極限(\)\eta \ll 0\()では、フェルミ積分は \)e^\eta \Gamma(j+1)\( で近似され、ゼーベック係数は以下のように近似されます。 \)\(S = \pm \frac{k_B}{e} \left( r + \frac{5}{2} + \ln \left( \frac{N_C}{n} \right) \right)\)\( ここで \)N_C$ は有効状態密度です。

  3. 加重移動度と加重キャリア濃度 weighted_mobility.py では、weighted_mobility, weighted_mobility_new, weighted_mobility_exact の3つの異なる計算手法が利用されます。

    • Snyderの加重移動度 (cal_type = 'Snyder'): この手法は、Snyderらによって提唱された経験的な関係に基づいており、通常、状態密度有効質量 \(m^*_{\text{DOS}} = 1.0 m_e\) (\(m_e\) は自由電子質量) と散乱因子 \(r = 0.0\) を仮定します。

    • 自由電子モデルに基づく近似 (cal_type = 'approx'): これは、Snyderの式を自由電子モデルの枠組みで再構築した近似式であり、状態密度有効質量 \(m^*_{\text{DOS}}\) と散乱因子 \(r\) の値を指定できます。

    • 自由電子モデルに基づく厳密解 (cal_type = 'exact'): この手法では、与えられた \(\sigma\)\(S\) から、上記のフェルミ積分を含む厳密なキャリア輸送方程式を数値的に解くことで、フェルミ準位 \(E_F\) を繰り返し計算(EF_from_S 関数を使用)によって決定します。これにより、より正確なキャリア濃度と加重移動度が算出されます。この計算では、状態密度有効質量 \(m^*_{\text{DOS}}\) と散乱因子 \(r\) が考慮されます。

これらの計算を通じて、実験的に測定された電気伝導率とゼーベック係数から、材料内部のキャリア輸送特性を詳細に評価することが可能になります。

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

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

  • tklib: プログラムの中心的な計算ロジックやユーティリティ関数(引数処理、データ読み書き、物理定数、輸送特性関連関数など)が含まれています。

    • tklib.tkutils

    • tklib.tkvariousdata

    • tklib.tkapplication

    • tklib.tksci.tksci

    • tklib.tktransport.tkDOS_FEA

    • tklib.tktransport.tkTransport

    • tklib.tktransport.tkWeightedMobility

tklib は標準のPythonパッケージインデックス (PyPI) では利用できないカスタムライブラリである可能性が高いです。通常、このようなライブラリは、プログラムが動作する環境に事前にインストールされているか、プログラムの配布元から別途提供される必要があります。

もし tklib が利用できない場合、以下のいずれかの方法で入手し、Python環境にインストールする必要があります。

  1. pipによるインストール(推奨、もし公開されている場合)

    pip install tklib
    

    (もし PyPI で利用可能であれば)

  2. ソースコードからのインストール(一般的な方法) tklib のソースコードが提供されている場合、通常は以下の手順でインストールします。

    • ソースコードをダウンロードまたはクローンします。

    • ダウンロードしたディレクトリに移動し、setup.py ファイルが存在すれば以下を実行します。

      cd /path/to/tklib/source
      pip install .
      
    • setup.py が存在しない場合、またはモジュールが単一のディレクトリにまとめられている場合は、そのディレクトリをPythonのパスに追加するか、プログラムと同じディレクトリに配置する必要があります。

tklib の正確な入手方法については、このプログラムの提供元にお問い合わせください。

また、以下の一般的な数値計算およびグラフ描画ライブラリも必要です。これらは通常 pip でインストールできます。

  • numpy: 数値計算

    pip install numpy
    
  • matplotlib: グラフ描画

    pip install matplotlib
    

必要な入力ファイル

プログラムが X モードまたは T モードで実行される場合、以下の形式の入力ファイルが必要です。

  • ファイル形式: Microsoft Excel (.xlsx) ファイル。

  • データ構造: 複数の列にデータが格納された表形式。少なくとも、X軸となる変数(Xパラメータまたは温度)、電気伝導率、ゼーベック係数の3つの列が必要です。

列の内容: ファイル内の各列は、以下の情報を保持している必要があります。

  • Xパラメータの列 (X_label): X モードの場合、X軸となる変数(例: 組成比、ドープ濃度、時間など)。T モードの場合、この列は温度データ (T_label) になります。

  • 電気伝導率の列 (sigma_label): 電気伝導率 (\(\sigma\)) の値 (単位: S/cm)。

  • ゼーベック係数の列 (S_label): ゼーベック係数 (\(S\)) の値 (単位: V/K)。

: LaTiO3-sigma-S-T.xlsx (デフォルトの入力ファイル名) のようなExcelファイルには、以下のようなデータが含まれていることが期待されます。

X_Parameter

Temperature (K)

Sigma (S/cm)

Seebeck (V/K)

0.0

300

100.0

0.000050

0.1

300

120.0

0.000045

...

...

...

...

300

300

100.0

0.000050

350

350

110.0

0.000052

...

...

...

...

コマンドライン引数で、これらの列が入力ファイル内でどのインデックス(0から始まる列番号)またはどのヘッダーラベルに対応するかを指定する必要があります。

生成される出力ファイル

プログラムは、実行モードに応じて以下の出力ファイルを生成します。

  1. 計算結果のExcelファイル

    • ファイル名:

      • X モードまたは T モードの場合: 入力ファイル名に -out.xlsx を付加した名前。 例: LaTiO3-sigma-S-T.xlsxLaTiO3-sigma-S-T-out.xlsx

      • check モードの場合: weighted_mobility-out.xlsx

    • 内容:

      • X モードまたは T モードの場合: 入力ファイルのデータ列に加えて、計算された加重移動度、加重キャリア濃度、およびキャリアタイプ(h: 正孔, e: 電子)が新たな列として追加されます。

        • mu_w(cal_type)(cm^2/(Vs))

        • n_w(cal_type)(cm^-3)

        • type (キャリアタイプ)

        • cal_typeSnyder, approx, または exact に置き換わります。

      • check モードの場合: ゼーベック係数に対する様々な物理量(フェルミ準位、キャリア濃度、異なる近似でのゼーベック係数、加重移動度など)の計算結果が以下のラベルで保存されます。 S/(kB/e), S (V/K), EF (eV), fdeg, fndeg, N (cm-3), mu (cm2/Vs), sigma (S/cm), S(non-deg), S(deg), S(ex), mu_w(Snyder) (m2/Vs), mu_w(new) (m2/Vs), mu_w(exact) (m2/Vs)

  2. グラフ表示 X モード、T モード、および check モードの実行後、matplotlib を使用して計算結果がグラフとしてプロットされ、画面に表示されます。これらのグラフは自動的にファイルとして保存されませんが、手動で保存することができます。

    • X モードおよび T モードの場合:

      • 電気伝導率とゼーベック係数のXまたはT依存性

      • 加重移動度と加重キャリア濃度のXまたはT依存性

    • check モードの場合:

      • \(f\) 関数(縮退・非縮退の度合いを示す関数)の \(S/(k_B/e)\) 依存性

      • ゼーベック係数 \(S\) のフェルミ準位 \(E_F\) 依存性

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

weighted_mobility.py は、以下の形式でコマンドラインから実行します。

python weighted_mobility.py <mode> [arguments...]

<mode> には以下のいずれかを指定します。

  • check: 加重移動度の計算結果を検証し、プロットします。

  • single: 単一のデータポイントに対して加重移動度を計算します。

  • X: 入力ファイルから読み込んだX軸変数に対する加重移動度を計算し、プロットします。

  • T: 入力ファイルから読み込んだ温度に対する加重移動度を計算し、プロットします。

各モードの具体的な引数は以下の通りです。

  1. check モード

    python weighted_mobility.py check T(K) r
    
    • T(K): 計算対象の温度 (ケルビン)。

    • r: 散乱因子。

  2. single モード

    python weighted_mobility.py single sigma(S/cm) S(V/K) T(K) meff(me) r
    
    • sigma(S/cm): 電気伝導率 (S/cm)。

    • S(V/K): ゼーベック係数 (V/K)。

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

    • meff(me): 状態密度有効質量 (自由電子質量 \(m_e\) 単位)。

    • r: 散乱因子。

  3. X モード

    python weighted_mobility.py X infile T(K) cal_type meff(me) r X_label sigma_label S_label
    
    • infile: 入力Excelファイル名。

    • T(K): 計算対象の温度 (ケルビン)。この温度は入力ファイルで指定された全てのXデータに適用されます。

    • cal_type: 計算タイプ ('Snyder', 'approx', 'exact')。

    • meff(me): 状態密度有効質量 (自由電子質量 \(m_e\) 単位)。

    • r: 散乱因子。

    • X_label: 入力ファイル内でX軸変数に対応する列のヘッダー名または列インデックス(0から始まる)。

    • sigma_label: 入力ファイル内で電気伝導率に対応する列のヘッダー名または列インデックス。

    • S_label: 入力ファイル内でゼーベック係数に対応する列のヘッダー名または列インデックス。

  4. T モード

    python weighted_mobility.py T infile cal_type meff(me) r T_label sigma_label S_label
    
    • infile: 入力Excelファイル名。

    • cal_type: 計算タイプ ('Snyder', 'approx', 'exact')。

    • meff(me): 状態密度有効質量 (自由電子質量 \(m_e\) 単位)。

    • r: 散乱因子。

    • T_label: 入力ファイル内で温度に対応する列のヘッダー名または列インデックス(0から始まる)。

    • sigma_label: 入力ファイル内で電気伝導率に対応する列のヘッダー名または列インデックス。

    • S_label: 入力ファイル内でゼーベック係数に対応する列のヘッダー名または列インデックス。

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

ここでは、デフォルト値や一般的な仮定を用いた具体的な実行例と、その出力の説明を示します。

1. check モードの例

このモードは、加重移動度の計算に関する様々な特性を検証します。

実行コマンド:

python weighted_mobility.py check 300 0.0
  • 300: 温度 \(T_0 = 300\) K

  • 0.0: 散乱因子 \(r_0 = 0.0\)

実行結果の説明: コンソールには、フェルミ準位の依存性や、S/(kB/e) に対する輸送特性の計算結果が詳細に出力されます。具体的には、フェルミ準位 (EF)、キャリア濃度 (Nh)、異なる近似におけるゼーベック係数 (S(ex), S(non-deg), S(deg))、電気伝導率 (sigma)、加重移動度 (mu_w) などが表示されます。

また、weighted_mobility-out.xlsx というExcelファイルが生成され、これらの計算データが保存されます。 さらに、以下の2つのグラフが画面に表示されます。

  • \(S/(k_B/e)\) に対する \(f\) 関数(縮退・非縮退の度合い)の依存性。

  • フェルミ準位 \(E_F\) に対するゼーベック係数 \(S\) の依存性(厳密解、縮退近似、非縮退近似の比較)。

2. single モードの例

特定の電気伝導率、ゼーベック係数、温度、有効質量、散乱因子から加重移動度とキャリア濃度を計算します。

実行コマンド:

python weighted_mobility.py single 95.0 28.0e-6 300.0 1.0 0.0
  • 95.0: 電気伝導率 \(\sigma_0 = 95.0\) S/cm

  • 28.0e-6: ゼーベック係数 \(S_0 = 28.0 \times 10^{-6}\) V/K

  • 300.0: 温度 \(T_0 = 300.0\) K

  • 1.0: 状態密度有効質量 \(m^*_{\text{DOS}} = 1.0 m_e\)

  • 0.0: 散乱因子 \(r_0 = 0.0\)

実行結果の説明: コンソールには、以下の計算結果が出力されます。

sigma  = 95.0 S/cm
S      = 2.8e-05 V/K
T      = 300.0 K
m*(DOS)= 1.0 me
r      = 0.0
  Note: Snyder's eq assumes m*(DOS) = 1.0 and r = 0.0

Majority carrier type: h
Snyder's weighted mobility
  mu_w =   9.23456e-04 m^2/(Vs) =    9.23456 cm^2/(Vs)
  n_w  =   2.03456e+20 m^-3     =   2.03456e+14 cm^-3
  m*(DOS) corrected values:
    mu =   9.23456e-04 m^2/(Vs) =    9.23456 cm^2/(Vs)
    n  =   2.03456e+20 m^-3     =   2.03456e+14 cm^-3
Free electron model weighted mobility approximation
  mu =   9.23456e-04 m^2/(Vs) =    9.23456 cm^2/(Vs)
  n  =   2.03456e+20 m^-3     =   2.03456e+14 cm^-3
Free electron model weighted mobility exact
  mu =   9.23456e-04 m^2/(Vs) =    9.23456 cm^2/(Vs)
  n  =   2.03456e+20 m^-3     =   2.03456e+14 cm^-3

(数値は計算結果により異なります。)

3つの異なる計算手法 (Snyder, approx, exact) で算出された加重移動度 (mu_w) と加重キャリア濃度 (n_w) が、m\(^2\)/(Vs) と cm\(^2\)/(Vs) および m\(^{-3}\) と cm\(^{-3}\) の両単位で表示されます。また、多数キャリアのタイプ(この例では正孔 h)も表示されます。

3. X モードの例

入力ファイル LaTiO3-sigma-S-T.xlsx からXパラメータ依存のデータを読み込み、加重移動度を計算します。ここでは、入力ファイル内の列ラベルを具体的に指定する例を示します。

実行コマンド:

python weighted_mobility.py X LaTiO3-sigma-S-T.xlsx 300.0 exact 1.0 0.0 X_Parameter Sigma_SperCm Seebeck_VK
  • LaTiO3-sigma-S-T.xlsx: 入力ファイル名

  • 300.0: 計算に用いる固定温度 \(T_0 = 300.0\) K

  • exact: 計算タイプを自由電子モデルの厳密解に設定

  • 1.0: 状態密度有効質量 \(m^*_{\text{DOS}} = 1.0 m_e\)

  • 0.0: 散乱因子 \(r_0 = 0.0\)

  • X_Parameter: X軸パラメータの列ラベル

  • Sigma_SperCm: 電気伝導率の列ラベル

  • Seebeck_VK: ゼーベック係数の列ラベル

実行結果の説明: コンソールには、入力データと各Xパラメータにおける計算結果 (mu_w, n_w, type) が表示されます。例えば、以下のような出力の一部が表示されます。

X_Parameter     EF(eV)     Sigma_SperCm  Seebeck_VK   mu_w(cm^2/(Vs)) n_w(cm^-3)   type
0.000000e+00  1.0000e-01   1.000000e+02  5.000000e-05  1.000000e+01  1.000000e+19 h
1.000000e-01  1.1000e-01   1.200000e+02  4.500000e-05  1.100000e+01  1.100000e+19 h
...

(数値は計算結果により異なります。)

LaTiO3-sigma-S-T-out.xlsx というExcelファイルが生成され、Xパラメータ、元の \(\sigma\)\(S\) の値に加え、計算された加重移動度、加重キャリア濃度、およびキャリアタイプが保存されます。 また、Xパラメータに対する \(\sigma\)\(S\)、および Xパラメータに対する \(\mu_w\)\(n_w\) のグラフが画面に表示されます。

4. T モードの例

入力ファイル LaTiO3-sigma-S-T.xlsx から温度依存のデータを読み込み、加重移動度を計算します。

実行コマンド:

python weighted_mobility.py T LaTiO3-sigma-S-T.xlsx exact 1.0 0.0 Temperature_K Sigma_SperCm Seebeck_VK
  • LaTiO3-sigma-S-T.xlsx: 入力ファイル名

  • exact: 計算タイプを自由電子モデルの厳密解に設定

  • 1.0: 状態密度有効質量 \(m^*_{\text{DOS}} = 1.0 m_e\)

  • 0.0: 散乱因子 \(r_0 = 0.0\)

  • Temperature_K: 温度の列ラベル

  • Sigma_SperCm: 電気伝導率の列ラベル

  • Seebeck_VK: ゼーベック係数の列ラベル

実行結果の説明: コンソールには、入力データと各温度における計算結果 (mu_w, n_w, type) が表示されます。例えば、以下のような出力の一部が表示されます。

Temperature_K EF(eV)     Sigma_SperCm  Seebeck_VK   mu_w(cm^2/(Vs)) n_w(cm^-3)   type
300.000000e+00  1.0000e-01   1.000000e+02  5.000000e-05  1.000000e+01  1.000000e+19 h
350.000000e+00  1.1000e-01   1.100000e+02  5.200000e-05  1.100000e+01  1.100000e+19 h
...

(数値は計算結果により異なります。)

LaTiO3-sigma-S-T-out.xlsx というExcelファイルが生成され、温度、元の \(\sigma\)\(S\) の値に加え、計算された加重移動度、加重キャリア濃度、およびキャリアタイプが保存されます。 また、温度に対する \(\sigma\)\(S\)、および温度に対する \(\mu_w\)\(n_w\) のグラフが画面に表示されます。