S2m.py 技術ドキュメント

プログラムの動作

S2m.py は、熱電材料の温度 (\(T\))、ゼーベック係数 (\(S\))、キャリア濃度 (\(N\)) の測定データから、有効質量 (\(m_{eff}\)) を推定し、その妥当性を検証するPythonスクリプトです。このプログラムは、Snyder et al. の研究論文に基づいた経験的または理論的な近似式を用いて有効質量を計算します。

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

  • データ読み込み: Excel (.xlsx) または CSV (.csv) 形式の入力ファイルから、指定されたカラムの温度、ゼーベック係数、キャリア濃度データを読み込みます。

  • 有効質量の計算: 入力されたデータポイントごとに、Snyder et al. の論文に記載されている複数の式を用いて有効質量を推定します。

  • 有効質量の検証: 計算された有効質量を用いて、フェルミ準位や輸送特性(ゼーベック係数など)を再計算し、元のゼーベック係数との整合性を確認することで、有効質量の推定結果を検証します。

  • 結果出力: 計算された温度、キャリア濃度、ゼーベック係数、有効質量のデータをExcelファイルとして保存します。

  • グラフ表示: キャリア濃度に対するゼーベック係数と有効質量の関係をグラフとして表示し、視覚的に結果を確認できます。

このプログラムは、熱電材料の物理特性評価、特に有効質量の評価において、実験データを基にした迅速な解析を可能にします。

原理

このプログラムは、熱電材料におけるゼーベック係数 (\(S\))、キャリア濃度 (\(N\))、および温度 (\(T\)) の関係を用いて有効質量 (\(m_{eff}\)) を推定します。主要な計算は、Snyder et al., Adv. Funct. Mater. 32, 2112772 (2022) に示されている式に基づいています。これらの式は、材料が非縮退領域から縮退領域にわたる際の輸送特性の変化を考慮しており、ピサレンコ関係の近似として利用されます。

使用される主な物理定数は以下の通りです。

  • 電子の素電荷 \(e = 1.60218 \times 10^{-19} \text{ C}\)

  • ボルツマン定数 \(k_B = 1.380658 \times 10^{-23} \text{ J K}^{-1}\)

  • 電子の静止質量 \(m_e = 9.1093897 \times 10^{-31} \text{ kg}\)

  • プランク定数 \(h = 6.62607015 \times 10^{-34} \text{ J s}\)

  • \(k_B/e = 8.6173303 \times 10^{-5} \text{ V K}^{-1}\)

また、ゼーベック係数の無次元化された値として \(SkBe = S / (k_B/e)\) が定義されます。キャリア濃度 \(N\)\(\text{cm}^{-3}\) 単位で与えられます。

有効質量の計算には、以下の3つの式が用いられます。

1. \(m_{eff}\) (abst) の推定式 これはSnyder et al.の論文で示唆されている近似式に基づきます。

まず、中間変数 \(a\)\(expSkBe2\) を計算します。 $\(a = SkBe - \frac{1}{SkBe}\)$

\[expSkBe2 = \exp(SkBe - 2)\]

次に、以下の補助項を定義します。ただし、\(expSkBe2 - 0.17 \ge 0\) であることが条件です。 $\(A_1 = 3 \cdot (expSkBe2 - 0.17)^{2/3}\)$

\[A_2 = 1 + \exp(-5 \cdot a)\]
\[B_2 = 1 + \exp(5 \cdot a)\]

上記を用いて、\(m_{eff}\) は次のように計算されます。 $\(m_{eff} = 0.924 \cdot \left(\frac{300}{T}\right) \cdot \left(\frac{N}{1.0 \times 10^{20}}\right)^{2/3} \cdot \left(\frac{A_1}{A_2} + \frac{SkBe}{B_2}\right)\)$

2. \(m_{eff2}\) (Eq. 3) の推定式 これはSnyder et al.の論文のEq. 3 (またはそれに類する式) に基づくと考えられます。

まず、以下の補助項を定義します。 $\(A = \frac{h^2}{2 k_B T} \cdot \left(\frac{3 N \cdot 10^6}{16 \sqrt{\pi}}\right)^{2/3}\)$

\[B_1 = \left(\exp\left(\frac{S}{k_B/e} - 2\right) - 0.17\right)^{2/3}\]
\[B_2 = 1 + \exp\left(-5 \cdot \left(SkBe - \frac{1}{SkBe}\right)\right)\]
\[C_1 = \frac{3}{\pi^2} \cdot \left(\frac{2}{\sqrt{\pi}}\right)^{2/3} \cdot SkBe\]
\[C_2 = 1 + \exp\left(5 \cdot \left(SkBe - \frac{1}{SkBe}\right)\right)\]

上記を用いて、\(m_{eff2}\) は次のように計算されます。 $\(m_{eff2} = \frac{A}{m_e} \cdot \left(\frac{B_1}{B_2} + \frac{C_1}{C_2}\right)\)$

3. \(m_{eff3}\) (Eq. 4) の推定式 これはSnyder et al.の論文のEq. 4 (またはそれに類する式) に基づくと考えられます。

\(B_1, B_2, C_2\)\(m_{eff2}\) の計算で定義されたものと同じものを使用します。 $\(m_{eff3} = 0.857 \cdot \left(\frac{300}{T}\right) \cdot \left(\frac{N}{1.0 \times 10^{20}}\right)^{2/3} \cdot \left(\frac{3 B_1}{B_2} + \frac{SkBe}{C_2}\right)\)$

プログラムはこれらの式で計算された \(m_{eff}\) の値を、tkDOS および tkMobility クラスを用いたより詳細な輸送計算と比較し、有効性が高いとされる \(m_{eff}\) を出力ファイルに保存します。この検証ステップでは、フェルミ準位の計算 (dos.EF_from_electrondensity, dos.EF_from_S) やゼーベック係数の再計算 (dos.cal_transport_S) が行われます。

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

S2m.py の実行には、以下の非標準Pythonライブラリが必要です。

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

  • pandas: データ解析と操作のためのライブラリ。特にデータフレームの操作やExcel/CSVファイルの読み書きに使用されます。

  • openpyxl: Excel .xlsx ファイルの読み書きを可能にするライブラリ。pandas がExcelファイルを扱う際に内部で利用します。

  • matplotlib: グラフ描画のためのライブラリ。結果の可視化に使用されます。

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

pip install numpy pandas openpyxl matplotlib

また、このプログラムは tklib というカスタムライブラリに依存しています。このライブラリは一般的なPythonパッケージマネージャーでは配布されていないため、利用者のPython環境に別途インストールされている必要があります。

必要な入力ファイル

プログラムは、温度、ゼーベック係数、キャリア濃度を含む表形式のデータを入力として受け取ります。

  • ファイル形式: Excel (.xlsx) または CSV (.csv)

  • データ構造: ヘッダー行を持つ表形式のデータ。以下の情報を含むカラムが必要です。

    • 温度: 単位はケルビン (K)。

    • ゼーベック係数: 単位はボルト毎ケルビン (V/K)。マイクロボルト毎ケルビン (\(\mu\)V/K) ではないことに注意してください。プログラムはV/Kを期待し、異なる単位の場合はエラーとなります。

    • キャリア濃度: 単位は立方センチメートル (\(cm^{-3}\))。

  • デフォルトのファイル名: pisarenko-plot-all-data-STO.xlsx

  • カラムの指定: プログラム実行時に、各データのカラムのヘッダー名またはインデックスを引数として指定します。

入力ファイル例 (pisarenko-plot-all-data-STO.xlsx)

T(K)

S(V/K)

N(cm^-3)

Other Data

300

0.00012

1.50E+19

...

300

0.00015

3.20E+19

...

300

0.00018

6.80E+19

...

...

...

...

...

生成される出力ファイル

プログラムは、計算された有効質量を含むExcelファイルを生成します。

  • ファイル名: 入力ファイル名に基づいて自動生成されます。 $INPUT_FILENAME_BODY-meff-out.xlsx 例: 入力ファイルが pisarenko-plot-all-data-STO.xlsx の場合、出力ファイルは pisarenko-plot-all-data-STO-meff-out.xlsx となります。

  • 内容: 入力データとして与えられた温度 (T)、キャリア濃度 (N)、ゼーベック係数 (S) に加えて、計算された有効質量 (meff(me)) のカラムが含まれます。 データはExcelのシートに保存されます。

出力ファイル例 (pisarenko-plot-all-data-STO-meff-out.xlsx)

T(K)

N(cm^-3)

S(V/K)

meff(me)

300

1.50E+19

0.00012

0.75

300

3.20E+19

0.00015

0.82

300

6.80E+19

0.00018

0.91

...

...

...

...

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

プログラムはコマンドライン引数を受け取ります。

python S2m.py infile T_label S_label(V/K) N_label(cm^-3) r
  • infile: 入力ファイル名 (例: data.xlsx)

  • T_label: 温度データのカラム名またはインデックス

  • S_label(V/K): ゼーベック係数データのカラム名またはインデックス (単位はV/K)

  • N_label(cm^-3): キャリア濃度データのカラム名またはインデックス (単位はcm^-3)

  • r: 散乱因子のパラメータ (例えば、音響フォノン散乱の場合は 0.0、イオン化不純物散乱の場合は 2.0)

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

以下の例では、pisarenko-plot-all-data-STO.xlsx という入力ファイルを使用し、カラム名 "T(K)""S(V/K)""N(cm^-3)" をそれぞれ温度、ゼーベック係数、キャリア濃度として指定し、散乱因子 r0.0 に設定して実行します。

python S2m.py pisarenko-plot-all-data-STO.xlsx "T(K)" "S(V/K)" "N(cm^-3)" 0.0

実行結果の説明

上記のコマンドを実行すると、以下のような情報が標準出力(およびログファイル)に表示されます。

  1. 初期設定の表示: 入力ファイル名、出力ファイル名、各ラベル(T, S, N)、および散乱因子 rfac の値が表示されます。

  2. データ読み込み: 入力ファイルからデータが正常に読み込まれたことが示され、各ラベルに対応するカラムのインデックスが表示されます。

  3. データポイントごとの計算結果: 各データポイント(T, S, Nの組)について、以下の情報が詳細に表示されます。

    • 現在の温度 (\(T\)), ゼーベック係数 (\(S\), \(\mu\)V/K単位に変換された値も表示), キャリア濃度 (\(N\))。

    • Snyder et al. の論文に基づく3種類の有効質量 (\(m_{eff}(abst)\), \(m_{eff}(eq.3)\), \(m_{eff}(eq.4)\)) の推定値(電子質量 \(m_e\) を単位とする)。

    • 推定された有効質量を用いた検証結果。これは、計算された \(m_{eff}\) を使ってフェルミ準位やゼーベック係数を再計算し、その値と入力されたゼーベック係数との比較を行うものです。例えば、S from EFdeg は絶対零度フェルミ準位から計算したゼーベック係数、m* from EF_S は入力 \(S\) から逆算したフェルミ準位に基づいて推定された有効質量を示します。これらの値が元の入力値に近いほど、推定された \(m_{eff}\) の妥当性が高いことを示唆します。

  4. 出力ファイルへの保存: 計算された有効質量データが指定されたExcelファイルに保存されたことが通知されます。

  5. グラフ表示: キャリア濃度 (\(N_{Hall}\)) を横軸に、ゼーベック係数 (\(S\)) と有効質量 (\(m_{eff}\)) を縦軸にした2つのプロットを含むMatplotlibウィンドウが表示されます。これにより、データの傾向と計算結果の関係を視覚的に確認できます。

プログラムは、表示されたMatplotlibのグラフウィンドウを閉じるか、Ctrl+Cなどで中断されるまで一時停止します。