Seebeck2.py 技術ドキュメント

プログラムの動作

Seebeck2.py は、熱電材料の輸送特性を解析し、特にゼーベック係数 (\(S\)) と温度 (\(T\)) のデータから材料の有効質量 (\(m^*\)) やキャリアの平均自由行程のプレファクター (\(l_0\)) を推定することを目的としたPythonスクリプトです。このプログラムは、バンド輸送理論とフェルミ・ディラック統計に基づいて、電気伝導率 (\(\sigma\))、ホール移動度 (\(\mu_H\))、ホールキャリア濃度 (\(N_H\)) などの実験データと理論計算を比較します。

主な機能と解決する課題は以下の通りです。

  • 基本的な物理関数の計算と可視化: フェルミ・ディラック分布関数、フェルミ積分などの基本的な関数を計算し、その挙動をグラフで表示します。

  • 熱電・ホール特性のシミュレーション: 指定された有効質量、スキャッタリング因子、平均自由行程プレファクター、格子熱伝導率を用いて、フェルミ準位の関数としてゼーベック係数、電気伝導率、熱伝導率、パワーファクター、ZTなどの熱電特性、およびホール係数、ホール因子、ホール移動度などのホール特性を計算し、その依存性をプロットします。

  • 実験データの解析: 入力ファイルから実験データ(温度、ゼーベック係数、電気伝導率、キャリア濃度、ホール移動度)を読み込み、以下の解析を実行します。

    • 加重移動度 (Weighted Mobility) の計算: ゼーベック係数と電気伝導率から加重移動度と加重キャリア濃度を推定します。

    • ジョンカープロットおよびピサレンコプロットの作成: 実験データと理論シミュレーションを比較し、これらのプロットを生成します。

    • パラメータのフィッティング: 実験データに最もよく合うように、材料の有効質量 (\(m^*\)) とキャリアの平均自由行程のプレファクター (\(l_0\)) を最小二乗法で最適化します。

    • 温度依存性のシミュレーション: 異なる温度における熱電特性の理論的な振る舞いをシミュレーションします。

    • ローレンツ数と電子熱伝導率の計算: 電気伝導率、キャリア濃度、温度からローレンツ数と電子熱伝導率を計算します。

    • ホール因子の計算: ホールキャリア濃度とホール移動度、温度からホール因子とドリフトキャリア濃度、ドリフト移動度を計算します。

このプログラムは、熱電材料の研究開発において、実験で得られた輸送特性を理論的に解釈し、材料パラメータを評価するための強力なツールを提供します。

原理

Seebeck2.py は、熱電材料の電子輸送現象を記述するために、ボルツマン輸送方程式の緩和時間近似を用いたシングルバンドモデルに基づいています。主要な計算は、tklib ライブラリの tkDOS および tkMobility クラスによって行われます。

  1. フェルミ・ディラック統計とフェルミ積分: 電子のエネルギー分布はフェルミ・ディラック分布関数で与えられ、キャリア濃度や輸送係数の計算には以下のフェルミ積分が用いられます。 $\(F_r(\eta) = \int_0^\infty \frac{x^r}{1 + \exp(x - \eta)} dx\)\( ここで、\)r\( は積分の次数、\)\eta = E_F / k_B T$ は還元フェルミ準位です。

  2. 有効質量近似: 伝導帯または価電子帯の電子 (または正孔) の質量は、有効質量 \(m^*\) で近似されます。有効質量は、有効状態密度 (\(N_C\)) や状態密度定数 (\(D_0\)) の計算に用いられます。 $\(N_C = 2 \left( \frac{2 \pi m^* k_B T}{h^2} \right)^{3/2}\)$

  3. 緩和時間近似とスキャッタリング因子: ボルツマン輸送方程式の緩和時間近似では、緩和時間 \(\tau\) のエネルギー依存性が \(\tau(E) \propto E^{r-0.5}\) と仮定されます。ここで \(r\) はスキャッタリング因子 (scattering factor) で、異なる散乱機構に対応します。例えば、\(r=0\) は音響フォノン散乱、\(r=1\) はイオン化不純物散乱に近似されます。平均自由行程のプレファクター \(l_0\) もパラメータとして使用されます。

  4. 輸送係数の計算:

    • ゼーベック係数 (\(S\)): 電子のエネルギー依存性のある緩和時間を用いて、以下の形式で計算されます。 $\(S = \frac{k_B}{e} \left( \frac{\langle E \tau \rangle}{\langle \tau \rangle k_B T} - \eta \right) = \frac{k_B}{e} \left( \frac{(r+2)F_{r+1}(\eta)}{(r+1)F_r(\eta)} - \eta \right)\)$

    • 電気伝導率 (\(\sigma\)): キャリア濃度 (\(N\)) と移動度 (\(\mu\)) から計算されます。 $\(\sigma = e N \mu = \frac{e^2}{m^*} N \langle \tau \rangle\)$

    • 電子熱伝導率 (\(\kappa_e\)): $\(\kappa_e = \frac{k_B^2 T}{e^2} \sigma \left( \frac{(r+3)F_{r+2}(\eta)}{(r+1)F_r(\eta)} - \left( \frac{(r+2)F_{r+1}(\eta)}{(r+1)F_r(\eta)} \right)^2 \right)\)$

    • パワーファクター (PF): $\(PF = S^2 \sigma\)$

    • 熱電性能指数 (ZT): 全熱伝導率 (\(\kappa_{tot} = \kappa_e + \kappa_{latt}\)\(\kappa_{latt}\) は格子熱伝導率) を用いて計算されます。 $\(ZT = \frac{S^2 \sigma T}{\kappa_{tot}}\)$

    • ホール係数 (\(R_H\)) とホール因子 (\(F_H\)): $\(R_H = \frac{F_{r+1/2}(\eta) F_{r-1/2}(\eta)}{e N (F_r(\eta))^2}\)\( \)\(F_H = R_H \cdot e \cdot N_{drift}\)\( ここで \)N_{drift}\( はドリフトキャリア濃度。ホール移動度 (\)\mu_H\() は \)R_H\( と \)\sigma\( から \)\mu_H = R_H \sigma$ で計算されます。

  5. 加重移動度 (Weighted Mobility): ゼーベック係数と電気伝導率から、有効質量によらずにキャリア輸送特性を評価する指標として、加重移動度 (\(\mu_w\)) が使用されます。これは、tkWeightedMobility モジュールで計算されます。

  6. パラメータフィッティング: fit モードでは、scipy.optimize.minimize 関数を用いた最小二乗法により、実験データ(ゼーベック係数および電気伝導率)と理論計算値との差の二乗和 (\(S_2\)) を最小化することで、有効質量 (\(m^*\)) と平均自由行程のプレファクター (\(l_0\)) を最適化します。

これらの物理モデルと計算アルゴリズムにより、Seebeck2.py は熱電材料の特性を包括的に解析することが可能となります。

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

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

  • openpyxl: Excel (.xlsx) ファイルの読み書きに使用されます。

  • numpy: 数値計算(配列操作、数学関数など)の基盤を提供します。

  • scipy: 最適化 (特に scipy.optimize.minimize) や補間 (interpolation) など、科学技術計算機能を提供します。

  • matplotlib: データのグラフ描画に使用されます。

  • tklib: このプログラムの作者が提供するカスタムライブラリで、ユーティリティ、INIファイル処理、科学定数、行列操作、輸送特性計算、DOS計算、移動度モデルなどが含まれています。

これらのライブラリは、以下の pip コマンドでインストールできます。

pip install openpyxl numpy scipy matplotlib

tklib は一般的なPyPIパッケージではないため、通常 pip install tklib ではインストールできません。tklib が見つからない場合は、以下のいずれかの方法で入手し、Pythonの検索パスに配置する必要があります。

  1. ソースコードの入手: 開発者から tklib のソースコードを入手し、Seebeck2.py と同じディレクトリ、またはPythonがモジュールを検索するパス(例: site-packages ディレクトリ)に配置します。

  2. 開発元への問い合わせ: tklib のインストール方法について、開発元に問い合わせてください。

必要な入力ファイル

プログラムの動作モードに応じて、以下の入力ファイルが必要となります。

  1. データファイル (例: SnSeTe-S-Hall.xlsx):

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

    • 内容: 熱電材料の実験データが含まれます。少なくとも以下のいずれかのデータ列が必要です。

      • T: 温度 (K)

      • S: ゼーベック係数 (V/K, fit および sim モードではuV/Kに変換されますが、入力ファイルはV/Kを想定)

      • sigma: 電気伝導率 (S/cm)

      • N: キャリア濃度 (cm^-3)

      • mu: ホール移動度 (cm^2/Vs)

    • データ構造: 各列のヘッダーは、プログラム内の T_label, sigma_label, n_label, mu_label, S_label 変数で定義された正規表現に一致する必要があります。例えば、デフォルトでは T, N, mu, sigma, S などが想定されます。

    • 例 (一部):

      Sample ID

      T(K)

      S(V/K)

      sigma(S/cm)

      N(cm-3)

      mu(cm2/Vs)

      A1

      300

      0.0001

      100

      1e19

      10

      B2

      300

      0.0002

      50

      5e18

      5

      ...

      ...

      ...

      ...

      ...

      ...

  2. パラメータファイル (例: input_file_name.in):

    • 形式: INIファイル形式。

    • 内容: 計算に使用される初期パラメータや設定が含まれます。

      • [Preferences] セクション: infile, T0, charge, rfac, EC, NC, DC0, S2 など。

      • [Parameters] セクション: meff (有効質量)、l0 (平均自由行程プレファクター) など。これらの値は val:id 形式で記述でき、id=1 は最適化対象、id=0 は固定値を示します。

    • このファイルは、init モードで初期設定として作成することもできます。

生成される出力ファイル

プログラムは、実行モードと入力ファイルに基づいて、以下の種類の出力ファイルを生成します。

  1. ログファイル ({infile_body}.log):

    • 形式: テキストファイル。

    • 内容: プログラムの実行中に標準出力に表示されるすべての情報(計算結果の概要、エラーメッセージ、進捗状況など)が記録されます。ファイル名は入力ファイル (infile) のファイル名本体に .log が付加されたものになります。

  2. 基本的な物理関数データファイル:

    • mode='basic' 実行時に生成されます。

    • Fj.xlsx: フェルミ積分 \(F_r(\eta)\) の計算結果が含まれます。

      • 列: x=EF/kBT, F0, F1/2, F1, F3/2, F2, exp(x)*G(1), exp(x)*G(1.5), exp(x)*G(2), exp(x)*G(2.5), exp(x)*G(3)

    • fFD.xlsx: フェルミ・ディラック分布関数 \(f_{FD}\) の計算結果が含まれます。

      • 列: x=E/kBT, fFD(exact), fFD(approx), fFDh(exact), -df/dx

  3. 特性ファイル ({infile_body}-properties-{mode}.xlsx):

    • mode='prop' または mode='Hall' 実行時に生成されます。

    • 内容: フェルミ準位の関数として計算された熱電またはホール特性。

      • mode='prop' の場合: x=EF/kBT, EF(eV), N(cm^-3), sigma(S/cm), mu(cm2/Vs), <tau>(fs), S(uV/K), Snon-deg, Sdeg, kappa,e(W/m/K), kappa,tot(W/m/K), L(Wohm/K^2), Lapprox, PF(uW/cm/K^2), ZT

      • mode='Hall' の場合: x=EF/kBT, EF(eV), N(cm^-3), sigma(S/cm), mu(cm2/Vs), FH, RH(m^3/C)

  4. シミュレーション/フィッティング結果ファイル ({infile_body}-Seebeck-{mode}.xlsx):

    • mode='sim' または mode='fit' 実行時に生成されます。

    • 内容:

      • mode='sim' の場合: 入力データ (S, sigma, mu, N) と計算された加重移動度 (sigma_w, mu_w, mu_w*(me/m*)^(3/2), n_w)。

      • mode='fit' の場合: フィッティングに使用された入力データと、最適化されたパラメータに基づく最終的なゼーベック係数 (\(S_{fin}\))。

        • 列: EF(eV), Ne(cm-3), sigma(S/cm), mu(cm2/Vs), S(uV/K), S,fin

  5. ローレンツ数計算ファイル ({infile_body}-L-me{meff}-r{rfac}.xlsx):

    • mode='calL' 実行時に生成されます。

    • 内容: 温度、キャリア濃度、電気伝導率の入力データに基づいて計算されたフェルミ準位 (\(E_F\))、ローレンツ数 (\(L\))、電子熱伝導率 (\(\kappa_e\))。

      • 列: T(K), EF,cal(eV), sigma,obs(S/cm), Ne,obs(cm^-3), L,cal(Wohm/K^2), kappa,e,cal=sigma,obs*L,cal*T(W/m/K)

  6. ホール因子計算ファイル ({infile_body}-FH-me{meff}-r{rfac}.xlsx):

    • mode='calF' 実行時に生成されます。

    • 内容: 温度、キャリア濃度、ホール移動度の入力データに基づいて計算されたフェルミ準位 (\(E_F\))、ホール因子 (\(F_H\))、ドリフトキャリア濃度 (\(N_{drift}\))、ドリフト移動度 (\(\mu_{drift}\))。

      • 列: T(K), EF,cal(eV), sigma,obs(S/cm), Ne,Hall(obs)(cm-3), mu,Hall(obs)(cm2/Vs), Ne=Ne,Hall*FH(cm-3), mu,drift=mu,Hall/FH(cm2/Vs), FH, RH(cm3/C)

  7. 温度依存性シミュレーションファイル ({infile_body}-{property}.xlsx):

    • mode='T' 実行時に生成されます。

    • 内容: 異なる温度におけるキャリア濃度依存の輸送特性 (EF, sigma, mu, S, kappa, PF, ZT) がそれぞれ別のExcelファイルとして出力されます。ファイル名は {infile_body}-EF.xlsx, {infile_body}-sigma.xlsx のようになります。

      • 列: N(cm-3), T1 (K) の値, T2 (K) の値, ...

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

Seebeck2.py は、以下の書式でコマンドラインから実行します。変数のカッコ () はオプションであることを示します。

python Seebeck2.py <mode> (arg1) (arg2) ...

各モードの基本的な使用法は以下の通りです。

  1. 基本関数 (basic): フェルミ・ディラック分布関数やフェルミ積分などの基本的な関数をプロットします。

    python Seebeck2.py basic
    
  2. 物性値 (prop): ゼーベック係数に関連する物性値をプロットします。 引数: T (温度 K), meff (有効質量 \(m_e\) 単位), r (スキャッタリング因子), l0 (平均自由行程プレファクター m), kappa_latt (格子熱伝導率 W/m/K)

    python Seebeck2.py prop T meff r l0 kappa_latt
    # 例: python Seebeck2.py prop 300.0 0.3 0.5 1.0e-8 5.0
    
  3. ホール特性 (Hall): ホール関連の物性値をプロットします。 引数: T (温度 K), meff (有効質量 \(m_e\) 単位), r (スキャッタリング因子), l0 (平均自由行程プレファクター m)

    python Seebeck2.py Hall T meff r l0
    # 例: python Seebeck2.py Hall 300.0 0.3 0.5 1.0e-8
    
  4. 初期化 (init): 入力ファイルからデータを読み込み、パラメータファイルを生成します。 引数: infile (入力ファイル名)

    python Seebeck2.py init infile
    
  5. シミュレーション (sim): 入力ファイルからデータを読み込み、加重移動度などを計算し、ジョンカープロット/ピサレンコプロットをプロットします。 引数: infile, T_label, n_label, mu_label, sigma_label, S_label, T (温度 K), meff (有効質量 \(m_e\) 単位), r (スキャッタリング因子), l0 (平均自由行程プレファクター m)

    python Seebeck2.py sim infile T_label n_label mu_label sigma_label S_label T meff r l0
    # 例: python Seebeck2.py sim SnSeTe-S-Hall.xlsx T N mu sigma S 300.0 0.3 0.5 1.0e-8
    
  6. フィッティング (fit): ジョンカープロット/ピサレンコプロットにフィットします。 引数: infile, T_label, n_label, mu_label, sigma_label, S_label, T (温度 K), meff (有効質量 \(m_e\) 単位), r (スキャッタリング因子), l0 (平均自由行程プレファクター m), method (最適化手法), tol (許容誤差), maxiter (最大反復回数), Nmin_fit, Nmax_fit, sigmamin_fit, sigmamax_fit (フィット範囲)

    python Seebeck2.py fit infile T_label n_label mu_label sigma_label S_label T meff r l0 method tol maxiter Nmin_fit Nmax_fit sigmamin_fit sigmamax_fit
    # 例: python Seebeck2.py fit SnSeTe-S-Hall.xlsx T N mu sigma S 300.0 0.3 0.5 1.0e-8 nelder-mead 1.0e-4 1000 '*' '*' '*' '*'
    
  7. 温度依存性 (T): 温度依存性をシミュレートします。 引数: infile, Tmin (最小温度 K), Tmax (最大温度 K), nT (温度ステップ数)

    python Seebeck2.py T infile Tmin Tmax nT
    # 例: python Seebeck2.py T SnSeTe-S-Hall.xlsx 300.0 800.0 6
    
  8. ローレンツ数計算 (calL): T, N, sigma からローレンツ数と電子熱伝導率を計算します。 引数: infile, T_label, n_label, sigma_label, meff (有効質量 \(m_e\) 単位), r (スキャッタリング因子), l0 (平均自由行程プレファクター m)

    python Seebeck2.py calL infile T_label n_label sigma_label meff r l0
    # 例: python Seebeck2.py calL SnSeTe-S-Hall.xlsx T N sigma 0.3 0.5 1.0e-8
    
  9. ホール因子計算 (calF): T, N, mu, sigma からホール因子を計算します。 引数: infile, T_label, n_label, mu_label, sigma_label, meff (有効質量 \(m_e\) 単位), r (スキャッタリング因子), l0 (平均自由行程プレファクター m)

    python Seebeck2.py calF infile T_label n_label mu_label sigma_label meff r l0
    # 例: python Seebeck2.py calF SnSeTe-S-Hall.xlsx T N mu sigma 0.3 0.5 1.0e-8
    

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

ここでは、いくつかの代表的なモードでの具体的な使用例と、その実行結果について説明します。 入力ファイル SnSeTe-S-Hall.xlsx がカレントディレクトリに存在し、T, N, mu, sigma, S というラベルの列を含むことを仮定します。


例1: 基本関数のプロット (basic モード)

フェルミ・ディラック分布関数やフェルミ積分などの基本的な物理関数を計算し、Excelファイルに保存し、グラフを表示します。

コマンド:

python Seebeck2.py basic

実行結果:

コンソールにフェルミ・ディラック分布関数、フェルミ積分に関する数値データが出力されます。 同時に、計算結果をプロットしたmatplotlibのウィンドウが表示されます。 生成されるファイルは fFD.xlsxFj.xlsx です。

  • コンソール出力例:

    mode: basic
    
    Fermi-Dirac distribution
    x=E/kBT   fFDe(exact) fFDe(approx) fFDh(exact) -df/dx
    -20.0       1.000e+00   1.021e+01   3.059e-09   3.059e-09
    ...
    20.0       2.061e-09   -7.989e+01   1.000e+00   2.061e-09
    
    Fermi integrals
    x=EF/kBT        F0        F1/2          F1        F3/2          F2   exp(x)*G(1)
    -20.0       2.061e-09   3.649e-10   7.697e-11   1.932e-11   6.104e-12   2.061e-09
    ...
    20.0       2.061e+08   7.288e+08   3.120e+09   1.764e+10   1.218e+11   2.061e+08
    
    Save data to [fFD.xlsx]
    Save data to [Fj.xlsx]
    
  • グラフ表示:

    • 上段にフェルミ・ディラック分布関数とそれに付随する関数 (fFD_e, fFD_h, fFD_approx, -df/dx)。横軸は \((E-E_F)/k_BT\)

    • 下段にフェルミ積分 (\(F_0\), \(F_{1/2}\), \(F_1\), \(F_{3/2}\), \(F_2\)) とその古典極限近似 (\(e^x \Gamma(r+1)\))。横軸は \(E_F/k_BT\)。 これらのグラフにより、フェルミ・ディラック統計の基本的な挙動が視覚的に確認できます。


例2: 熱電特性のシミュレーション (prop モード)

温度 300 K、有効質量 0.3 \(m_e\)、スキャッタリング因子 0.5、平均自由行程プレファクター \(1.0 \times 10^{-8}\) m、格子熱伝導率 5.0 W/m/K の条件で、材料の熱電特性をシミュレーションし、グラフとExcelファイルに出力します。

コマンド:

python Seebeck2.py prop 300.0 0.3 0.5 1.0e-8 5.0

実行結果:

コンソールに各フェルミ準位における物性値が出力され、SnSeTe-S-Hall-properties-prop.xlsx に詳細データが保存されます。 同時に、計算結果をプロットしたmatplotlibのウィンドウが表示されます。

  • コンソール出力例:

    mode: prop
    T=300.0 K
    meff: 0.3
      NV=1.000e+19 cm^-3 at 300.0 K
      DV=1.000e+19 cm^-3 at 300.0 K
      scattering factor in tau(E) prop to E^(r-0.5) (non-degenerated) r=0.5
    Lorentz number
      Free electron mode: 2.44302636e-08 Wohm/K^2
    Mean free path prefactor: l0=1.0e-08 m
    Lattice thermal conductivity: klatt=5.0 W/K
    
    Properties
    x=EF/kBT EF(eV)   N(cm^-3) sigma(S/cm) mu(cm2/Vs) <tau>(fs) S(uV/K) Snon-deg      Sdeg kappa,e(W/m/K) kappa,tot L(Wohm/K^2) Lapprox PF(uW/cm/K^2)        ZT
    -30.0    -0.776    1.026e+14    1.602e-01    9.767e+01    6.096e+00    4.303e+02    4.303e+02    4.195e+02    3.419e-03    5.003e+00    2.443e-08    2.302e-08    2.969e+01    2.132e-03
    ...
    250.0    6.463    2.253e+24    2.279e+04    6.307e-01    4.026e-02    1.096e+01    1.096e+01    1.096e+01    3.344e+02    3.394e+02    4.896e-09    2.834e-09    2.731e+06    2.408e-02
    
    Save data to [SnSeTe-S-Hall-properties-prop.xlsx]
    
  • グラフ表示:

    • 緩和時間 (\(\tau\))、キャリア濃度 (\(N_e\))、電気伝導率 (\(\sigma\))、移動度 (\(\mu\))、電子熱伝導率 (\(\kappa_e\))、ゼーベック係数 (\(S\))、パワーファクター (\(PF\))、ZT、ローレンツ数 (\(L\)) などの物理量が、フェルミ準位の関数またはキャリア濃度の関数として多数のサブプロットに表示されます。

    • ゼーベック係数のプロットでは、非縮退極限 (\(S_{non-deg}\)) と縮退極限 (\(S_{deg}\)) の近似値も併せて表示され、理論的な挙動と比較できます。


例3: 実験データのシミュレーションとプロット (sim モード)

SnSeTe-S-Hall.xlsx からデータを読み込み、加重移動度を計算し、ジョンカープロットとピサレンコプロットをシミュレーションカーブとともにプロットします。

コマンド:

python Seebeck2.py sim SnSeTe-S-Hall.xlsx T N mu sigma S 300.0 0.3 0.5 1.0e-8

実行結果:

コンソールに読み込んだデータと計算された加重移動度が出力されます。 SnSeTe-S-Hall-Seebeck-sim.xlsx に詳細データが保存されます。 同時に、実験データとシミュレーションカーブを比較したmatplotlibのウィンドウが表示されます。

  • コンソール出力例:

    infile     : SnSeTe-S-Hall.xlsx
      T_label    :  T
      S_label    :  S
      n_label    :  N
      mu_label   :  mu
      sigma_label:  sigma
    T0        : 300.0 K
    Carrier:
      q=1.0 e
      meff=0.3me
      NV=1.000e+19 cm^-3 at 300.0 K
      DV=1.000e+19 cm^-3 at 300.0 K
      scattering factor (non-degenerated)     r=0.5
      mean free path prefactor: l0=1.0e-08 m
    
    Read S data from SnSeTe-S-Hall.xlsx
    ndata(all):  10
    sample           n(cm-3)  mu(cm2/Vs) sigma(S/cm)   S(uV/K)
    Sample1         1.000e+19   1.000e+01   1.602e+02   1.000e+02
    Sample2         5.000e+18   5.000e+00   4.005e+01   2.000e+02
    ...
    
    Weighted mobility
    sample      T(K)    EF(eV)    S(uV/K) sigma(S/cm) mu(cm2/Vs) Ne(cm-3)    sigma_w mu_w(cm2/Vs) mu_w*(me/m*)^(3/2)        n_w(cm-3)
    Sample1      300.0   -0.0805    100.0     160.2       10.0    1.000e+19    170.8       10.66    6.082e+01    1.000e+19
    Sample2      300.0   -0.0401    200.0      40.05       5.0    5.000e+18    40.12        5.00    2.860e+01    5.000e+18
    ...
    
    N range: 5.000e+18 - 1.000e+19 cm-3, 0.007 step in ln(N), nN=101
    N(cm-3)   EF(eV) S,cal(uV/K) S,non-deg(uV/K) S,deg(uV/K) sigma,cal(S/cm) Ne,cal(cm-3) mu,cal(cm2/Vs)
    5.000e+18   -0.0401    200.0       200.0    199.9       4.005e+01    5.000e+18    5.000e+00
    ...
    
    Save parameters to [SnSeTe-S-Hall.in]
    Save data to [SnSeTe-S-Hall-Seebeck-sim.xlsx]
    
  • グラフ表示:

    • 左上: サンプルごとのSと\(\sigma\)の変化(観測値と加重移動度ベースの\(\sigma_w\))。

    • 左下: サンプルごとの\(\mu\)\(N_e\)の変化(観測値と加重移動度ベースの\(\mu_w\), \(N_{e,w}\))。

    • 右上: ジョンカープロット(\(\sigma\) vs \(S\))。実験データと理論シミュレーションカーブ(全フェルミ積分、非縮退近似、縮退近似)が比較されます。

    • 右下: ピサレンコプロット(\(N\) vs \(S\))。実験データと理論シミュレーションカーブが比較されます。 これにより、材料の特性が理論モデルとどの程度一致しているかを視覚的に評価できます。


例4: 有効質量のフィッティング (fit モード)

SnSeTe-S-Hall.xlsx のSとsigmaデータに有効質量 (meff) と平均自由行程プレファクター (l0) をフィットします。ここでは、nelder-mead法を使用し、許容誤差を \(1.0 \times 10^{-4}\)、最大反復回数を1000回とします。フィット範囲は全データを使用します。

コマンド:

python Seebeck2.py fit SnSeTe-S-Hall.xlsx T N mu sigma S 300.0 0.3 0.5 1.0e-8 nelder-mead 1.0e-4 1000 '*' '*' '*' '*'

実行結果:

コンソールにフィッティングの進捗(各イテレーションでのパラメータと二乗誤差 \(S_2\))が出力されます。 SnSeTe-S-Hall-Seebeck-fit.xlsx にフィッティング結果の詳細データが保存され、SnSeTe-S-Hall.in が更新されます。 同時に、フィッティングの進捗をリアルタイムで表示するmatplotlibのウィンドウが表示されます。

  • コンソール出力例:

    ...
    Fitting condition
      method : nelder-mead
      tol    : 1.0e-04
      maxiter: 1000
      h_diff: 1.0e-03
      outputinterval: 1
      N range    : * - * cm^-3
      sigma range: * - * S/cm
    
    Read S data from SnSeTe-S-Hall.xlsx
    ndata(all):  10
    data to be fitted
    sample            n(cm-3)  mu(cm2/Vs) sigma(S/cm)   S(uV/K)
    Sample1         1.000e+19   1.000e+01   1.602e+02   1.000e+02
    Sample2         5.000e+18   5.000e+00   4.005e+01   2.000e+02
    ...
    
    Calculate initial values
      meff      : 0.3        me optid=1
      l0        : 1.0000e-08 m optid=1
    EF(eV)    Ne(cm-3) sigma(S/cm) mu(cm2/Vs)   S(uV/K)  Ne,ini sigma,ini  mu,ini    S,ini
    -0.0805    1.000e+19    1.602e+02    1.000e+01    1.000e+02    1.000e+19    1.602e+02    1.000e+01    1.000e+02
    ...
    
    Nonlinear least-squares fitting for effective mass by  nelder-mead
      tol= 1.0e-04
    callback 0000:   0.3000   1.0000e-08  S2=1.0000e-12
    ...
    callback 0050:   0.3150   1.0000e-08  S2=5.0000e-13
    Optimization terminated successfully.
             Current function value: 5.000000e-13
             Iterations: 50
             Function evaluations: 100
    Optimized at S2=5.0000e-13:
      meff      : 0.3150     me optid=1
      l0        : 1.0000e-08 m optid=1
    
    Nonlinear least-squares fitting for l0 by  nelder-mead
      tol= 1.0e-04
    meff(ini)= 0.315
    callback 0000:   0.3150   1.0000e-08  S2=5.0000e-13
    ...
    callback 0030:   0.3150   1.0500e-08  S2=2.0000e-13
    Optimization terminated successfully.
             Current function value: 2.000000e-13
             Iterations: 30
             Function evaluations: 60
    Optimized at S2=2.0000e-13:
      meff      : 0.3150     me optid=1
      l0        : 1.0500e-08 m optid=1
    
    Calculate final values
      meff      : 0.3150     me optid=1
      l0        : 1.0500e-08 m optid=1
    EF(eV)    Ne(cm-3) sigma(S/cm) mu(cm2/Vs)   S(uV/K)    S,fin
    -0.0805    1.000e+19    1.602e+02    1.000e+01    1.000e+02    1.000e+02
    ...
    
    Save final parameters to [SnSeTe-S-Hall.in]
    Save fitting data to [SnSeTe-S-Hall-Seebeck-fit.xlsx]
    
  • グラフ表示:

    • 左: ピサレンコプロット (N vs S)。実験データ(青い丸)と、初期パラメータに基づく理論カーブ(青い線)、およびフィッティング後の最適化されたパラメータに基づく理論カーブ(赤い線)が表示されます。

    • 右: ジョンカープロット (\(\sigma\) vs S)。同様に、実験データ、初期理論カーブ、フィッティング後理論カーブが表示されます。 このリアルタイム表示により、フィッティングの収束状況や、理論モデルが実験データをどの程度再現しているかを把握できます。