Seebeck2.py ドキュメント
概要
Seebeck2.py は、ゼーベック(Seebeck)係数と温度から材料の有効質量を推定するためのPythonスクリプトです。本プログラムは、G.J. Snyder, A. Pereyra and R. Gurunathan, Adv. Funct. Mater. 32, 2112772 (2022) の論文に記載された手法に基づいて開発されています。
主要機能
本スクリプトは、材料の熱電特性、特にゼーベック係数、電気伝導率、移動度、ローレンツ数、力率、ZT値を計算、シミュレーション、および実験データへのフィッティングをサポートします。また、Hall係数やHall因子、Hall移動度の計算も行い、以下の機能を網羅しています。
基本関数(フェルミ・ディラック分布、フェルミ積分)の計算とプロット。
熱電特性(Seebeck係数、電気伝導率、移動度、熱伝導率、力率、ZT値)の計算とプロット。
Hall特性(Hall係数、Hall因子、Hall移動度)の計算とプロット。
実験データへのパラメータフィッティング(有効質量、平均自由行程因子)。
温度依存性のシミュレーション。
ローレンツ数と電子熱伝導率の計算。
Hall因子とドリフト移動度、キャリア濃度の計算。
インストール
動作環境
Python 3.x
依存ライブラリ
本スクリプトは以下の標準ライブラリおよび非標準ライブラリに依存します。
標準ライブラリ:
os,sys,math非標準ライブラリ:
openpyxl: Excelファイルの読み書きに使用されます。numpy: 数値計算に使用されます。scipy: 最適化 (optimize) や補間 (interpolate) に使用されます。matplotlib: データのプロットに使用されます。tklib: 本スクリプトの主要な機能である熱電物性計算、Hall物性計算、DOS(状態密度)計算、移動度モデル、ファイルI/O、GUIアプリケーションフレームワーク、物理定数などを提供するカスタムライブラリです。
インストール方法(非標準ライブラリ):
tklib 以外の非標準ライブラリは pip を用いてインストールできます。
pip install openpyxl numpy scipy matplotlib
tklib はカスタムライブラリであるため、通常の pip インストールはできません。その入手方法やインストール手順はコードからは確認できません。
使用方法
Seebeck2.py は、様々な計算モードをサポートしており、コマンドライン引数によってモードとパラメータを指定します。
基本的な実行形式は以下の通りです。
python Seebeck2.py <mode> [options]
コマンドライン引数
以下に利用可能なモードとオプションの概要を示します。詳細は各関数の説明を参照してください。
基本関数のプロット:
python Seebeck2.py basic
フェルミ・ディラック分布やフェルミ積分といった基本関数をプロットします。
Seebeck関連特性のプロット:
python Seebeck2.py prop <T> <meff> <r> <l0> <kappa_latt>
指定されたパラメータでSeebeck係数に関連する特性をプロットします。
<T>: 温度 (\([\text{K}]\))<meff>: 有効質量 (\([m_e]\))<r>: 散乱因子<l0>: 平均自由行程プレファクタ (\([\text{m}]\))<kappa_latt>: 格子熱伝導率 (\([\text{W}/(\text{m} \cdot \text{K})]\)) 例:
python Seebeck2.py prop 300.0 0.3 0.5 1.0e-8 5.0
Hall関連特性のプロット:
python Seebeck2.py Hall <T> <meff> <r> <l0>
指定されたパラメータでHall係数に関連する特性をプロットします。
<T>: 温度 (\([\text{K}]\))<meff>: 有効質量 (\([m_e]\))<r>: 散乱因子<l0>: 平均自由行程プレファクタ (\([\text{m}]\)) 例:
python Seebeck2.py Hall 300.0 0.3 0.5 1.0e-8
パラメータファイルの初期化:
python Seebeck2.py init <infile>
入力データファイルからパラメータを読み込み、
.inファイルを作成します。シミュレーション:
python Seebeck2.py sim <infile> <T_label> <n_label> <mu_label> <sigma_label> <S_label> (<T> <meff> <r> <l0>)
入力ファイルからデータを読み込み、加重移動度などの計算とJonker / Pisarenkoプロットのシミュレーションを行います。
<infile>: 入力データファイル(Excel形式)<T_label>: 温度データ列の正規表現ラベル<n_label>: キャリア濃度データ列の正規表現ラベル<mu_label>: 移動度データ列の正規表現ラベル<sigma_label>: 電気伝導率データ列の正規表現ラベル<S_label>: Seebeck係数データ列の正規表現ラベル<T>: 温度 (\([\text{K}]\))(オプション)<meff>: 有効質量 (\([m_e]\))(オプション)<r>: 散乱因子(オプション)<l0>: 平均自由行程プレファクタ (\([\text{m}]\))(オプション) 例:
python Seebeck2.py sim SnSeTe-S-Hall.xlsx "^T[\\s|(|[|$]" "^N[$|\\S]?.*$" "^mu[$|\\s|(\\[]?.*$" "^sigma[$|\\S]?.*$" "^S[$|\\s|(\\[]?.*$" 300.0 0.3 0.5 1.0e-8
フィッティング:
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>)
実験データに対してJonker / Pisarenkoプロットのフィッティングを行います。
上記の
<infile>から<S_label>はsimモードと同じです。<T>から<l0>は初期パラメータです(オプション)。<method>: 最適化アルゴリズム(nelder-meadなど、オプション)<tol>: 許容誤差(オプション)<maxiter>: 最大反復回数(オプション)<Nmin_fit>,<Nmax_fit>,<sigmamin_fit>,<sigmamax_fit>: フィッティング範囲の指定(オプション) 例:
python Seebeck2.py fit SnSeTe-S-Hall.xlsx "^T[\\s|(|[|$]" "^N[$|\\S]?.*$" "^mu[$|\\s|(\\[]?.*$" "^sigma[$|\\S]?.*$" "^S[$|\\s|(\\[]?.*$" 300.0 0.3 0.5 1.0e-8 nelder-mead 1.0e-4 1000 1.0e15 1.0e22 1.0e1 1.0e4
温度依存性シミュレーション:
python Seebeck2.py T <infile> <Tmin> <Tmax> <nT>
温度依存性のシミュレーションを行います。
<infile>: 入力データファイル<Tmin>: 最小温度 (\([\text{K}]\))<Tmax>: 最大温度 (\([\text{K}]\))<nT>: 温度ステップ数 例:
python Seebeck2.py T SnSeTe-S-Hall.xlsx 300.0 800.0 6
ローレンツ数と電子熱伝導率の計算:
python Seebeck2.py calL <infile> <T_label> <n_label> <mu_label> <sigma_label> <meff> <r> <l0>
温度、キャリア濃度、電気伝導率からローレンツ数 \(L\) と電子熱伝導率 \(\kappa_e\) を計算します。
<infile>: 入力データファイル<T_label>: 温度データ列の正規表現ラベル<n_label>: キャリア濃度データ列の正規表現ラベル<mu_label>: 移動度データ列の正規表現ラベル<sigma_label>: 電気伝導率データ列の正規表現ラベル<meff>: 有効質量 (\([m_e]\))<r>: 散乱因子<l0>: 平均自由行程プレファクタ (\([\text{m}]\)) 例:
python Seebeck2.py calL SnSeTe-S-Hall.xlsx "^T[\\s|(|[|$]" "^N[$|\\S]?.*$" "^mu[$|\\s|(\\[]?.*$" "^sigma[$|\\S]?.*$" 0.3 0.5 1.0e-8
Hall因子の計算:
python Seebeck2.py calF <infile> <T_label> <n_label> <mu_label> <sigma_label> <meff> <r> <l0>
温度、Hallキャリア濃度、Hall移動度からHall因子 \(F_H\) を計算します。
引数は
calLと同じです。 例:
python Seebeck2.py calF SnSeTe-S-Hall.xlsx "^T[\\s|(|[|$]" "^N[$|\\S]?.*$" "^mu[$|\\s|(\\[]?.*$" "^sigma[$|\\S]?.*$" 0.3 0.5 1.0e-8
ヘルプ表示:
python Seebeck2.py help python Seebeck2.py usage
スクリプトのコマンドライン引数の使用方法を表示します。
グローバル変数
計算設定
Debug: デバッグモードフラグ。デフォルトは0。fermi_integral_type: フェルミ積分の計算方法。tkfermi_integralが利用可能であればtkfermi_integral.fermi_integral_type、そうでなければ"build-in"。L_FEA: 自由電子近似におけるローレンツ数。tkTransport.LorentzNumber_FEAから取得。mode: 現在の実行モード(例:'sim','basic','prop','Hall','init','fit','T','calL','calF')。デフォルトは'sim'。
データラベル
T_label: 温度データ列の正規表現ラベル。デフォルトはr'^T[\s|\(|\[|$]'。sigma_label: 電気伝導率データ列の正規表現ラベル。デフォルトはr'^sigma[$|\S]?.*$'。n_label: キャリア濃度データ列の正規表現ラベル。デフォルトはr'^N[$|\S]?.*$'。mu_label: 移動度データ列の正規表現ラベル。デフォルトはr'^mu[$|\s|\(\[]?.*$'。S_label: Seebeck係数データ列の正規表現ラベル。デフォルトはr'^S[$|\s|\(\[]?.*$'。
ファイルパス
infile: 入力データファイル名。デフォルトは'SnSeTe-S-Hall.xlsx'。outxlsFjfile: フェルミ積分の計算結果出力Excelファイル名。デフォルトは"Fj.xlsx"。outxlsfFDfile: フェルミ・ディラック分布の計算結果出力Excelファイル名。デフォルトは"fFD.xlsx"。outxlsPropfile: 物性計算結果出力Excelファイル名。デフォルトは"properties.xlsx"。outxlsSLfile: Seebeck-ローレンツ数関係の計算結果出力Excelファイル名。デフォルトは"S-L.xlsx"。outcsvFitfile: フィッティング結果出力CSVファイル名。デフォルトは""。outcsvLfile: ローレンツ数計算結果出力CSVファイル名。デフォルトは""。parameterfile: パラメータ設定ファイル(.in形式)。スクリプト実行時にinfileの名前に基づいて生成されます。parameterbkfile: パラメータ設定ファイルのバックアップ。outxlsfile: モードに応じた計算結果出力Excelファイル名。
計算範囲
xmin_basic,xmax_basic,nx_basic,xstep_basic:'basic'モードでの \(E/(k_B T)\) 軸の計算範囲とステップ数。xmin_basic: -20.0xmax_basic: 20.0nx_basic: 401xstep_basic: \((xmax\_basic - xmin\_basic) / (nx\_basic - 1)\)
xmin,xmax,nx,xstep:'prop'モードなどでの \(E_F/(k_B T)\) 軸の計算範囲とステップ数。xmin: -30.0xmax: 250.0nx: 281xstep: \((xmax - xmin) / (nx - 1)\)
Smin,Smax,nS,Sstep: Seebeck係数の範囲。Smin: 0.0Smax: \(1.0 \times 10^{-3}\) (\([\text{V/K}]\))nS: 101Sstep: \((Smax - Smin) / (nS - 1)\)
Nmin,Nmax,nN: キャリア濃度 \(N\) の範囲。Nmin: \(1.0 \times 10^{15}\) (\([\text{cm}^{-3}]\))Nmax: \(1.0 \times 10^{22}\) (\([\text{cm}^{-3}]\))nN: 101
T0,Tmin,Tmax,nT: 温度 \(T\) の範囲。T0: 300.0 (\([\text{K}]\)) (基準温度)Tmin: 300.0 (\([\text{K}]\))Tmax: 800.0 (\([\text{K}]\))nT: 6
材料特性
dos:tklib.tktransport.tkDOS_FEA.tkDOSオブジェクト。状態密度 (DOS) および関連するバンド構造パラメータを管理します。dos.meeff: 有効質量 (\([m_e]\))。デフォルトは0.3。dos.EC: 伝導帯のエネルギー (\([\text{eV}]\))。デフォルトは0.0。dos.EF0: フェルミ準位の初期値 (\([\text{eV}]\))。デフォルトは0.0。
mobility:tklib.tktransport.tkmobility_tau.tkMobilityオブジェクト。移動度モデルとそのパラメータを管理します。mobility.debug: デバッグフラグ。デフォルトは0。mobility.use_simple: シンプルな移動度モデルを使用するかどうか。デフォルトは0。mobility.charge: キャリアの電荷 (\([e]\))。正孔は1.0、電子は-1.0。デフォルトは1.0。mobility.meff: 有効質量 (\([m_e]\))。dos.meeffと同期します。mobility.rfac: 散乱因子 \(r\)。\(\tau \propto E^{r-0.5}\)。デフォルトは0.5。mobility.l0: 平均自由行程プレファクタ (\([\text{m}]\))。デフォルトは \(1.0 \times 10^{-8}\)。
klatt: 格子熱伝導率 (\([\text{W}/(\text{m} \cdot \text{K})]\))。デフォルトは5.0。epsEF: \(E_F\) 計算の収束判定閾値。デフォルトは \(1.0 \times 10^{-5}\)。
フィッティングパラメータ
varname: 最適化パラメータの名前リスト。["meff", "l0"]。varunit: 最適化パラメータの単位リスト。["me", "m"]。ai0: 最適化パラメータの初期値リスト。optid: 各パラメータが最適化対象かどうかのフラグ(1: 対象、0: 固定)。method:scipy.optimize.minimizeで使用する最適化アルゴリズム。デフォルトは"nelder-mead"。maxiter: 最適化の最大反復回数。デフォルトは1000。tol: 最適化の許容誤差。デフォルトは \(1.0 \times 10^{-4}\)。h_diff: 数値微分に使用する微小変化量。デフォルトは \(1.0 \times 10^{-3}\)。outputinterval: コールバック関数での出力間隔。デフォルトは1。Nmin_fit,Nmax_fit,sigmamin_fit,sigmamax_fit: フィッティングに使用するデータのキャリア濃度 \(N\) および電気伝導率 \(\sigma\) の範囲。デフォルトは'*'(制限なし)。
グラフ設定
fig: MatplotlibのFigureオブジェクト。figsize,figsize_sim,figsize_small,figsize_FD: 各種グラフの図のサイズ。fontsize: グラフのフォントサイズ。デフォルトは18。legend_fontsize: 凡例のフォントサイズ。デフォルトは8。graphupdateinterval: グラフ更新の間隔。デフォルトは10。
関数リファレンス
parameter_list()
def parameter_list():
概要: 現在の移動度パラメータ(有効質量と平均自由行程プレファクタ)のリストを返します。
戻り値:
tuple: 有効質量mobility.meffと平均自由行程プレファクタmobility.l0のタプル。
set_parameters(ai)
def set_parameters(ai):
概要: 引数として与えられた値に基づいて、有効質量と平均自由行程のパラメータを設定します。
詳細説明:
tklib.tktransport.tkDOS_FEA.tkDOS オブジェクト dos の有効質量 meeff、有効状態密度 NC、状態密度定数 DC0 を更新します。また、tklib.tktransport.tkmobility_tau.tkMobility オブジェクト mobility の有効質量 meff と平均自由行程プレファクタ l0 を更新し、散乱パラメータを再設定します。
引数:
ai(list): 設定するパラメータのリスト。最初の要素は有効質量 (\([m_e]\))、2番目の要素は平均自由行程プレファクタ (\([\text{m}]\)) です。
read_parameters(path)
def read_parameters(path):
概要: 指定されたINIファイルからパラメータを読み込み、グローバル変数に設定します。
詳細説明:
ファイルが存在しない場合は処理をスキップします。主に有効質量 meff、平均自由行程プレファクタ l0、電荷 charge、散乱因子 rfac、伝導帯のエネルギー EC、基準温度 T0 などの値を読み込みます。これらの値は、ai0、optid、mobility、dos などのグローバル変数に格納されます。
引数:
path(str): パラメータファイル(.in形式)へのパス。
save_parameters(path, ai, args)
def save_parameters(path, ai, args):
概要: パラメータと追加引数を指定されたINIファイルに保存します。
引数:
path(str): 保存先のINIファイルへのパス。ai(list): 保存する最適化パラメータのリスト。args(dict): 追加で保存する引数の辞書。
save_parameterfile(ai = ai0, S2 = '')
def save_parameterfile(ai = ai0, S2 = ''):
概要: 現在のパラメータと \(S^2\) 値をパラメータファイルに保存します。
引数:
ai(list, オプション): 保存する最適化パラメータのリスト。デフォルトはグローバル変数ai0です。S2(str, オプション): 最小二乗法によるフィッティング結果の \(S^2\) 値。デフォルトは空文字列です。
print_parameters(ai = None)
def print_parameters(ai = None):
概要: 現在のパラメータの値をコンソールに出力します。
引数:
ai(listまたはNone, オプション): 出力するパラメータのリスト。Noneの場合、グローバル変数ai0が使用されます。
usage(app)
def usage(app):
概要: スクリプトのコマンドライン引数の使用方法を標準出力に表示します。
引数:
app(tklib.tkapplication.tkApplication): アプリケーションオブジェクト。
updatevars()
def updatevars():
概要: コマンドライン引数に基づいて、グローバル変数を更新します。
詳細説明:
スクリプトの実行モード(basic, prop, Hall, init, sim, fit, T, calL, calF, help, usage)に応じて、入力ファイル、データラベル、温度、有効質量、散乱因子、平均自由行程プレファクタ、フィッティングオプションなどのパラメータを設定します。無効なモードが指定された場合はエラーメッセージを表示し、スクリプトを終了します。
basic()
def basic():
概要: フェルミ・ディラック分布とフェルミ積分の基本計算を実行し、結果をExcelファイルに保存し、Matplotlibでプロットします。
詳細説明: \(x = (E - E_F) / (k_B T)\) を横軸として、以下の値を計算します。
フェルミ・ディラック分布:
電子のフェルミ・ディラック分布 \(f_{FD,e}(x) = \frac{1}{\exp(x) + 1}\)
正孔のフェルミ・ディラック分布 \(f_{FD,h}(x) = \frac{1}{\exp(-x) + 1}\)
その微分値 \(-\frac{df}{dx} = f_{FD,e}(x) f_{FD,h}(x)\)
フェルミ・ディラック分布の近似値(テーラー展開によるものと推測)
フェルミ積分:
\(F_r(\eta) = \int_{0}^{\infty} \frac{x^r}{1 + \exp(x - \eta)} dx\) (推測)
\(r = 0, 0.5, 1.0, 1.5, 2.0\) の各次数のフェルミ積分 \(F_r(x)\) の値を計算します。
非縮退近似におけるフェルミ積分 \(F_r(\eta) \approx \exp(\eta) \Gamma(r+1)\) (推測)と比較します。
計算結果は outxlsfFDfile (フェルミ・ディラック分布)と outxlsFjfile (フェルミ積分)に保存され、2つのサブプロットを持つMatplotlibの図で表示されます。
プロット内容:
フェルミ・ディラック分布と微分:
横軸: \(x=(E-E_F)/(k_B T)\) (単位なし)
縦軸: \(f_{FD}\), \(-df/dx\) (単位なし)
\(f_{FD,e}(exact)\), \(f_{FD,h}(exact)\), \(f_{FD}(approx)\), \(-df/dx\) をプロットします。
フェルミ積分:
横軸: \(x=E_F/(k_B T)\) (単位なし)
縦軸: \(F_r\) (単位なし, 対数スケール)
\(F_0\), \(F_{1/2}\), \(F_1\), \(F_{3/2}\), \(F_2\) をプロットします。
比較として、\(\exp(x)\Gamma(1)\), \(\exp(x)\Gamma(3/2)\), \(\exp(x)\Gamma(2)\), \(\exp(x)\Gamma(5/2)\), \(\exp(x)\Gamma(3)\) を重ねてプロットします。
Hall()
def Hall():
概要: Hall係数、Hall因子、Hall移動度などのHall特性を計算し、結果をExcelファイルに保存し、Matplotlibでプロットします。
詳細説明:
指定された温度 T0、有効質量 meff、散乱因子 rfac、平均自由行程プレファクタ l0 に基づいて、フェルミ準位 \(E_F\) の掃引に対する以下の物理量を計算します。
キャリア濃度 \(n\) (\([\text{cm}^{-3}]\))
電気伝導率 \(\sigma\) (\([\text{S/cm}]\))
移動度 \(\mu\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
平均緩和時間 \(\langle \tau \rangle\) (\([\text{fs}]\))
Hall因子 \(F_H\) (Hall factor)
Hall係数 \(R_H = F_H / (n e)\) (\([\text{m}^3/\text{C}]\)) (推測)
Hallキャリア濃度 \(n_{Hall} = 1 / (e R_H)\) (推測)
Hall移動度 \(\mu_{Hall} = \sigma R_H\) (推測)
これらの計算は、tklib ライブラリ内の dos.cal_Hall_properteis() 関数に依存しています。
計算結果は outxlsPropfile に保存され、複数のサブプロットを持つMatplotlibの図で表示されます。
プロット内容:
平均緩和時間:
横軸: \(x=(E_F-E_C)/(k_B T)\) (単位なし)
縦軸: \(\tau\) (\([\text{fs}]\))
キャリア濃度:
横軸: \(x=(E_F-E_C)/(k_B T)\) (単位なし)
縦軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
理論的なキャリア濃度 \(N_e\) と Hallキャリア濃度 \(N_{e,Hall}\) をプロットします。
電気伝導率 \(\sigma\) vs. Hallキャリア濃度 \(N_{e,Hall}\):
横軸: \(N_{e,Hall}\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(\sigma\) (\([\text{S/cm}]\)) (対数スケール)
移動度 \(\mu\) vs. Hallキャリア濃度 \(N_{e,Hall}\):
横軸: \(N_{e,Hall}\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(\mu\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
理論移動度 \(\mu\) と Hall移動度 \(\mu_{Hall}\) をプロットします。
Hall係数 \(R_H\) vs. Hallキャリア濃度 \(N_{e,Hall}\):
横軸: \(N_{e,Hall}\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(R_H\) (\([\text{cm}^3/\text{C}]\)) (対数スケール)
自由電子近似での \(R_{H0} = 1/(e N_e)\) と Hall係数 \(R_H\) をプロットします。
Hall因子 \(F_H\) vs. Hallキャリア濃度 \(N_{e,Hall}\):
横軸: \(N_{e,Hall}\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(F_H\) (単位なし)
Hallキャリア濃度 \(N_{e,Hall}\) vs. Hall係数 \(R_H\):
横軸: \(N_{e,Hall}\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(R_H\) (\([\text{cm}^3/\text{C}]\)) (対数スケール)
Hallキャリア濃度 \(N_{e,Hall}\) vs. Hall因子 \(F_H\):
横軸: \(N_{e,Hall}\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(F_H\) (単位なし)
properties()
def properties():
概要: Seebeck係数に関連する熱電特性を計算し、結果をExcelファイルに保存し、Matplotlibでプロットします。
詳細説明:
指定された温度 T0、有効質量 meff、散乱因子 rfac、平均自由行程プレファクタ l0、格子熱伝導率 klatt に基づいて、フェルミ準位 \(E_F\) の掃引に対する以下の物理量を計算します。
キャリア濃度 \(n\) (\([\text{cm}^{-3}]\))
電気伝導率 \(\sigma\) (\([\text{S/cm}]\))
移動度 \(\mu\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
平均緩和時間 \(\langle \tau \rangle\) (\([\text{fs}]\))
Seebeck係数 \(S\) (\([\mu \text{V/K}]\))
電子熱伝導率 \(\kappa_e\) (\([\text{W}/(\text{m} \cdot \text{K})]\))
全熱伝導率 \(\kappa_{tot} = \kappa_e + \kappa_{latt}\) (\([\text{W}/(\text{m} \cdot \text{K})]\))
ローレンツ数 \(L = \kappa_e / (\sigma T)\) (\([\text{W} \cdot \Omega / \text{K}^2]\))
力率 \(PF = S^2 \sigma\) (\([\mu \text{W}/(\text{cm} \cdot \text{K}^2)]\) または \([\text{W}/(\text{m} \cdot \text{K}^2)]\))
性能指数 \(ZT = S^2 \sigma T / \kappa_{tot}\) (単位なし)
これらの計算は、tklib ライブラリ内の dos.cal_transport_properteis() 関数に依存しています。
また、Seebeck係数については、非縮退近似 \(S = \frac{k_B}{e} (r + \frac{3}{2} - \eta)\) (推測)と縮退近似 \(S = \frac{\pi^2}{3} \frac{k_B^2 T}{e E_F} (r + \frac{3}{2})\) (推測)における近似値も計算し、比較します。
近似ローレンツ数 \(L_{approx}\) も計算されます(dos.cal_LorentzNumber_from_S_approximate())。
計算結果は outxlsPropfile に保存され、複数のサブプロットを持つMatplotlibの図で表示されます。
プロット内容:
緩和時間:
横軸: \(E\) (\([\text{eV}]\))
縦軸: \(\tau\) (\([\text{fs}]\))
エネルギーに対する緩和時間 \(\tau(E)\) と平均緩和時間 \(\langle \tau \rangle\) をプロットします。
キャリア濃度:
横軸: \(x=(E_F-E_C)/(k_B T)\) (単位なし)
縦軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
電気伝導率 \(\sigma\) vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(\sigma\) (\([\text{S/cm}]\)) (対数スケール)
移動度 \(\mu\) vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(\mu\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
電子熱伝導率 \(\kappa_e\) vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(\kappa_e\) (\([\text{W}/(\text{m} \cdot \text{K})]\)) (対数スケール)
Seebeck係数 \(S\) vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(S\) (\([\mu \text{V/K}]\))
計算された \(S\) と非縮退近似 \(S_{non-deg}\)、縮退近似 \(S_{deg}\) をプロットします。
力率 \(PF\) vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(PF\) (\([\mu \text{W}/(\text{cm} \cdot \text{K}^2)]\))
ZT値 vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(ZT\) (単位なし)
ローレンツ数 \(L\) vs. \(x=(E_F-E_C)/(k_B T)\):
横軸: \(x=(E_F-E_C)/(k_B T)\) (単位なし)
縦軸: \(L = \kappa_e/(\sigma T)\) (\([\text{W} \cdot \Omega / \text{K}^2]\))
計算された \(L\) と自由電子近似のローレンツ数 \(L_{FEA}\) をプロットします。
ローレンツ数 \(L\) vs. キャリア濃度 \(N_e\):
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(L = \kappa_e/(\sigma T)\) (\([\text{W} \cdot \Omega / \text{K}^2]\))
計算された \(L\) と自由電子近似のローレンツ数 \(L_{FEA}\) をプロットします。
ローレンツ数 \(L\) vs. Seebeck係数 \(S\):
横軸: \(S\) (\([\mu \text{V/K}]\))
縦軸: \(L = \kappa_e/(\sigma T)\) (\([\text{W} \cdot \Omega / \text{K}^2]\))
計算された \(L\) と近似ローレンツ数 \(L_{approx}\)、自由電子近似のローレンツ数 \(L_{FEA}\) をプロットします。
recover_parameters(ais, optid, aidef0)
def recover_parameters(ais, optid, aidef0):
概要: 最適化されたパラメータのサブセットから完全なパラメータリストを再構築します。
引数:
ais(list): 最適化されたパラメータのサブセット。optid(list): 各パラメータが最適化対象かどうかを示すIDのリスト (1は最適化対象、0は固定)。aidef0(list): デフォルトのパラメータ値のリスト。
戻り値:
list: 再構築された完全なパラメータリスト。
choose_parameters(ais0, optid)
def choose_parameters(ais0, optid):
概要: 完全なパラメータリストから最適化対象のパラメータのみを抽出します。
引数:
ais0(list): 完全なパラメータリスト。optid(list): 各パラメータが最適化対象かどうかを示すIDのリスト (1は最適化対象、0は固定)。
戻り値:
list: 最適化対象のパラメータのみを含むリスト。
calS2_sigma(ai)
def calS2_sigma(ai):
概要: 与えられたパラメータで計算された電気伝導率 \(\sigma\) と実験データの偏差の二乗和 (\(S_2\)) を計算します。
詳細説明:
主に平均自由行程プレファクタ mobility.l0 のフィッティングに用いられます。有効質量は dos.meeff から設定されます。
入力データのキャリア濃度範囲 (Nmin_fit, Nmax_fit) と電気伝導率範囲 (sigmamin_fit, sigmamax_fit) に基づいてフィッティング範囲を限定します。
各データ点に対して、Hallキャリア濃度 \(N\) からフェルミ準位 \(E_F\) を計算し(dos.EF_from_electrondensity())、その \(E_F\) を用いて電気伝導率 \(\sigma_{fin}\) を計算します(dos.cal_transport_properteis())。
実験値 \(\sigma_{obs}\) と計算値 \(\sigma_{fin}\) の偏差の二乗和 \(S_2 = \sum (\sigma_{obs,i} - \sigma_{fin,i})^2\) が目的関数として評価されます。
引数:
ai(list): フィッティングするパラメータのリスト。ここではmobility.l0が対象です。
戻り値:
float: 電気伝導率の二乗和 \(S_2\)。
calS2_S(ai)
def calS2_S(ai):
概要: 与えられたパラメータで計算されたSeebeck係数 \(S\) と実験データの偏差の二乗和 (\(S_2\)) を計算します。
詳細説明:
主に有効質量 dos.meeff のフィッティングに用いられます。
入力データのキャリア濃度範囲 (Nmin_fit, Nmax_fit) と電気伝導率範囲 (sigmamin_fit, sigmamax_fit) に基づいてフィッティング範囲を限定します。
各データ点に対して、Hallキャリア濃度 \(N\) からフェルミ準位 \(E_F\) を計算し(dos.EF_from_electrondensity())、その \(E_F\) を用いてSeebeck係数 \(S_{fin}\) を計算します(dos.cal_transport_properteis())。
実験値 \(S_{obs}\) と計算値 \(S_{fin}\) の偏差の二乗和 \(S_2 = \sum (S_{obs,i} - S_{fin,i})^2\) が目的関数として評価されます。
引数:
ai(list): フィッティングするパラメータのリスト。ここではdos.meeffが対象です。
戻り値:
float: Seebeck係数の二乗和 \(S_2\)。
diff1_sigma(ai)
def diff1_sigma(ai):
概要:
電気伝導率の二乗和 \(S_2\) (calS2_sigma()) に対するパラメータの1階微分を数値的に計算します (forward difference法)。
詳細説明:
最適化アルゴリズム(例: 共役勾配法 cg)で勾配を計算するために使用されます。各パラメータ ai[i] に対して微小変化量 h_diff を与え、\((f(a_i + h_{diff}) - f(a_i)) / h_{diff}\) の式で微分値を近似します。
引数:
ai(list): 評価するパラメータのリスト。
戻り値:
numpy.ndarray: \(S_2\) (calS2_sigma()) に対する各パラメータの1階微分の配列。
diff1_S(ai)
def diff1_S(ai):
概要:
Seebeck係数の二乗和 \(S_2\) (calS2_S()) に対するパラメータの1階微分を数値的に計算します (forward difference法)。
詳細説明:
最適化アルゴリズム(例: 共役勾配法 cg)で勾配を計算するために使用されます。各パラメータ ai[i] に対して微小変化量 h_diff を与え、\((f(a_i + h_{diff}) - f(a_i)) / h_{diff}\) の式で微分値を近似します。
引数:
ai(list): 評価するパラメータのリスト。
戻り値:
numpy.ndarray: \(S_2\) (calS2_S()) に対する各パラメータの1階微分の配列。
plot(fig, yn, ysigma, ymu, yS, ysigmaini, ymuini, ySini, ysigmafin = None, ymufin = None, ySfin = None)
def plot(fig, yn, ysigma, ymu, yS, ysigmaini, ymuini, ySini,
ysigmafin = None, ymufin = None, ySfin = None):
概要: Pisarenkoプロット(キャリア濃度 \(N\) vs. Seebeck係数 \(S\))とJonkerプロット(電気伝導率 \(\sigma\) vs. Seebeck係数 \(S\))を表示します。
詳細説明: 実験データ、初期計算値、および最終計算値をそれぞれ2つのサブプロットとしてMatplotlibの図にプロットします。これにより、フィッティングの進行状況を視覚的に確認できます。
プロット内容:
Pisarenkoプロット:
横軸: \(N_e\) (\([\text{cm}^{-3}]\)) (対数スケール)
縦軸: \(S\) (\([\mu \text{V/K}]\))
実験値 (\(N_{obs}\), \(S_{obs}\))、初期計算値 (\(N_{obs}\), \(S_{ini}\))、最終計算値 (\(N_{obs}\), \(S_{fin}\)) をプロットします。
Jonkerプロット:
横軸: \(\sigma\) (\([\text{S/cm}]\)) (対数スケール)
縦軸: \(S\) (\([\mu \text{V/K}]\))
実験値 (\(\sigma_{obs}\), \(S_{obs}\))、初期計算値 (\(\sigma_{ini}\), \(S_{ini}\))、最終計算値 (\(\sigma_{fin}\), \(S_{fin}\)) をプロットします。
引数:
fig(matplotlib.figure.Figure): MatplotlibのFigureオブジェクト。yn(list): キャリア濃度 \(N\) の実験データリスト (\([\text{cm}^{-3}]\))。ysigma(list): 電気伝導率 \(\sigma\) の実験データリスト (\([\text{S/cm}]\))。ymu(list): 移動度 \(\mu\) の実験データリスト (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))。yS(list): Seebeck係数 \(S\) の実験データリスト (\([\mu \text{V/K}]\))。ysigmaini(list): 初期計算された電気伝導率 \(\sigma\) のリスト。ymuini(list): 初期計算された移動度 \(\mu\) のリスト。ySini(list): 初期計算されたSeebeck係数 \(S\) のリスト。ysigmafin(listまたはNone, オプション): 最終計算された電気伝導率 \(\sigma\) のリスト。ymufin(listまたはNone, オプション): 最終計算された移動度 \(\mu\) のリスト。ySfin(listまたはNone, オプション): 最終計算されたSeebeck係数 \(S\) のリスト。
callback(fig, S2)
iter = 0
def callback(fig, S2):
概要:
scipy.optimize.minimize のコールバック関数として機能し、最適化の進行状況をコンソールに出力し、グラフを更新します。
詳細説明:
グローバル変数 iter を用いて反復回数をカウントします。
指定された outputinterval ごとに現在の最適化パラメータ(mobility.meff と mobility.l0)と二乗和 \(S_2\) の値をコンソールに表示します。
指定された graphupdateinterval ごとに plot() 関数を呼び出して、JonkerプロットとPisarenkoプロットを更新します。これにより、フィッティングプロセスのリアルタイムな監視が可能になります。
引数:
fig(matplotlib.figure.Figure): MatplotlibのFigureオブジェクト。S2(float): 現在の二乗和 \(S_2\)。
callback_S(fig, xk)
def callback_S(fig, xk):
概要:
Seebeck係数のフィッティング(calS2_S())のためのコールバック関数です。
詳細説明:
与えられたパラメータ xk (主に有効質量 meff) を用いて calS2_S() を呼び出し、現在の \(S_2\) を計算します。その後、現在のパラメータで set_parameters() を更新し、汎用コールバック関数 callback() を呼び出して進行状況を表示します。
引数:
fig(matplotlib.figure.Figure): MatplotlibのFigureオブジェクト。xk(numpy.ndarray): 現在の最適化パラメータ(例: 有効質量meff)。
callback_sigma(fig, xk)
def callback_sigma(fig, xk):
概要:
電気伝導率のフィッティング(calS2_sigma())のためのコールバック関数です。
詳細説明:
与えられたパラメータ xk (主に平均自由行程プレファクタ l0) を用いて calS2_sigma() を呼び出し、現在の \(S_2\) を計算します。その後、現在のパラメータで set_parameters() を更新し、汎用コールバック関数 callback() を呼び出して進行状況を表示します。
引数:
fig(matplotlib.figure.Figure): MatplotlibのFigureオブジェクト。xk(numpy.ndarray): 現在の最適化パラメータ(例: 平均自由行程プレファクタl0)。
construct_lists(label_sample, xsample, label_S, yS, label_sigma, ysigma, label_N, yN, label_mu, ymu)
def construct_lists(label_sample, xsample, label_S, yS, label_sigma, ysigma, label_N, yN, label_mu, ymu):
概要: 入力データのリストを正規化または補完します。
詳細説明:
サンプルラベル label_sample またはサンプルデータ xsample が None の場合、連番で補完します。
電気伝導率 \(\sigma\) (ysigma)、キャリア濃度 \(N\) (yN)、移動度 \(\mu\) (ymu) のいずれかが None の場合、他の利用可能なデータから計算を試みます。例えば、\(\sigma = n e \mu\) の関係から、2つの値が分かっていれば残りの1つを計算します。
引数:
label_sample(strまたはNone): サンプルデータのラベル。xsample(list): サンプルデータのリスト。label_S(str): Seebeck係数のラベル。yS(list): Seebeck係数のリスト。label_sigma(strまたはNone): 電気伝導率のラベル。ysigma(list): 電気伝導率のリスト。label_N(strまたはNone): キャリア濃度のラベル。yN(list): キャリア濃度のリスト。label_mu(strまたはNone): 移動度のラベル。ymu(list): 移動度のリスト。
戻り値:
tuple: 正規化または補完されたラベルとデータリストのタプル。
fit()
def fit():
概要: 実験データに対して熱電パラメータのフィッティングを行います。
詳細説明:
入力ファイルからSeebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\) の実験データを読み込みます。これらのデータはすべて指定された基準温度 T0 における値であると仮定されます。
指定された初期パラメータ(有効質量 meff、散乱因子 rfac、平均自由行程プレファクタ l0)に基づいて初期計算を行い、結果をプロットします。
次に、scipy.optimize.minimize を使用して、主に有効質量 meff と平均自由行程プレファクタ l0 をフィッティングし、計算値が実験データに最もよく合うように最適化します。フィッティングは、Seebeck係数の二乗和 calS2_S() と電気伝導率の二乗和 calS2_sigma() を目的関数として実行されます。最適化アルゴリズムは method グローバル変数で指定され、初期値、許容誤差、最大反復回数も設定可能です。
フィッティング範囲は、Nmin_fit, Nmax_fit, sigmamin_fit, sigmamax_fit で指定されたキャリア濃度と電気伝導率の範囲によって限定されます。
フィッティングの進行状況は、callback_S() および callback_sigma() 関数を介してコンソールとMatplotlibグラフでリアルタイムに可視化されます。
最終的なフィッティング結果であるパラメータは parameterfile に保存され、計算された物性値と実験データは outxlsfile にExcel形式で保存されます。
入力:
infile: Seebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\)、温度 \(T\) を含むExcelファイル。Seebeck係数 \(S\) の単位は
V/Kである必要があります。uV/KやmV/Kで入力された場合、エラーメッセージが表示されます。
コマンドライン引数で設定される
T0,dos.meeff,mobility.rfac,mobility.l0などの初期パラメータ。
出力:
コンソール: 初期パラメータ、最適化の進行状況、最終パラメータ。
parameterfile: 最適化されたパラメータが保存されたINIファイル。outxlsfile: 実験データと初期/最終計算値を含むExcelファイル。グラフ: Pisarenkoプロット(\(N\) vs \(S\))とJonkerプロット(\(\sigma\) vs \(S\))。実験値、初期計算値、最終計算値が表示されます。
sim()
def sim():
概要: 熱電特性とHall特性のシミュレーションを行い、結果をExcelファイルとグラフに出力します。
詳細説明:
入力ファイルからSeebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\)、温度 \(T\) の実験データを読み込みます。
指定されたパラメータ (基準温度 T0, 有効質量 meff, 散乱因子 rfac, 平均自由行程プレファクタ l0) を用いて、各実験データ点における加重移動度 \(\mu_w\) と加重キャリア濃度 \(n_w\) を計算します。これは tklib.tktransport.tkWeightedMobility.weighted_mobility() 関数によって行われます。
さらに、指定されたキャリア濃度範囲 Nmin から Nmax までを掃引し、以下の熱電・Hall特性を計算します。
Seebeck係数 \(S\) (\([\mu \text{V/K}]\))
電気伝導率 \(\sigma\) (\([\text{S/cm}]\))
移動度 \(\mu\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
Hall係数 \(R_H\) (\([\text{m}^3/\text{C}]\))
Hall因子 \(F_H\) (単位なし)
Hall移動度 \(\mu_{Hall}\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
これらの計算は、dos.EF_from_electrondensity() や dos.EF_from_electronSeebeck() でフェルミ準位 \(E_F\) を求め、dos.cal_transport_properteis() で実行されます。
計算結果は parameterfile に保存され、outxlsfile にExcel形式で保存されます。
また、複数のサブプロットを持つMatplotlibの図で可視化されます。
入力:
infile: Seebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\)、温度 \(T\) を含むExcelファイル。Seebeck係数 \(S\) の単位は
V/Kである必要があります。uV/KやmV/Kで入力された場合、エラーメッセージが表示されます。
コマンドライン引数で設定される
T0,dos.meeff,mobility.rfac,mobility.l0などのパラメータ。
出力:
コンソール: 加重移動度計算結果、シミュレーション結果。
parameterfile: 現在のパラメータが保存されたINIファイル。outxlsfile: 加重移動度計算結果を含むExcelファイル。グラフ:
S, \(\sigma\), \(\sigma_w\) vs. サンプル: サンプルIDに対する実験値 \(S\), \(\sigma\) と加重移動度から計算した \(\sigma_w\) をプロットします。
\(\mu\), \(\mu_w\), \(N_e\), \(N_{e,w}\) vs. サンプル: サンプルIDに対する実験値 \(\mu\), \(N_e\) と加重移動度から計算した \(\mu_w\), \(N_{e,w}\) をプロットします。
Jonkerプロット: \(\sigma\) vs \(S\)。実験データとシミュレーション結果(\(S_{cal}\), \(S_{sim,nondeg}\), \(S_{sim,deg}\))をプロットします。
Pisarenkoプロット: \(N\) vs \(S\)。実験データとシミュレーション結果(\(S_{cal}\), \(S_{sim,nondeg}\), \(S_{sim,deg}\))をプロットします。
init()
def init():
概要: 入力データファイルを読み込み、初期の熱電パラメータファイルを作成します。
詳細説明:
指定された入力ファイル infile からSeebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\) のデータを読み込み、基本的な情報をコンソールに表示します。
読み込んだSeebeck係数 \(S\) の符号(正または負)に基づいて、キャリアの種類(正孔または電子)を自動的に判断し、mobility.charge グローバル変数に設定します。すべてのデータ点で \(S\) の符号が一致しない場合はエラーとして終了します。
Seebeck係数 \(S\) の単位が V/K であることを確認し、異なる場合はエラーとします。
現在のパラメータは parameterfile に保存されます。
入力:
infile: Seebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\) を含むExcelファイル。
出力:
コンソール: 読み込んだデータの概要、判断されたキャリアの種類。
parameterfile: 初期設定が保存されたINIファイル。
calL()
def calL():
概要: 温度 \(T\)、Hallキャリア濃度 \(N_{Hall}\)、電気伝導率 \(\sigma\) の実験データから電子のローレンツ数 \(L\) と電子熱伝導率 \(\kappa_e\) を計算します。
詳細説明:
入力ファイルから温度 \(T\)、Hallキャリア濃度 \(N_{Hall}\)、電気伝導率 \(\sigma\) のデータを読み込みます。
指定された有効質量 meff、散乱因子 rfac、平均自由行程プレファクタ l0 に基づいて、各データ点における以下の値を計算します。
フェルミ準位 \(E_F\): Hallキャリア濃度 \(N_{Hall}\) から
dos.EF_from_electrondensity()を用いて \(E_F\) を計算します。理論的な熱電特性: 計算された \(E_F\) と \(T\) を用いて、
dos.cal_transport_properteis()からローレンツ数 \(L_{cal}\) を取得します。電子熱伝導率 \(\kappa_e\): 実験電気伝導率 \(\sigma_{obs}\) と計算ローレンツ数 \(L_{cal}\)、温度 \(T\) から、\(\kappa_e = \sigma_{obs} L_{cal} T\) の関係式(ウィーデマン-フランツの法則)を用いて \(\kappa_e\) を計算します。
結果はコンソールと、ファイル名が {filebody}-L-me{dos.meeff}-r{mobility.rfac}.xlsx の形式で生成されるExcelファイルに出力され、Matplotlibでグラフ化されます。
入力:
infile: 温度 \(T\)、Hallキャリア濃度 \(N_{Hall}\)、電気伝導率 \(\sigma\) を含むExcelファイル。コマンドライン引数で設定される
dos.meeff,mobility.rfac,mobility.l0などのパラメータ。
出力:
コンソール: 計算された \(E_F\), \(L\), \(\kappa_e\)。
Excelファイル: 計算された \(E_F\), \(L\), \(\kappa_e\) を含むExcelファイル。
グラフ:
フェルミ準位 \(E_F\) vs. \(T\) または \(N\): フェルミ準位の温度またはキャリア濃度依存性。
キャリア濃度 \(N_e\) と電気伝導率 \(\sigma\) vs. \(T\) または \(N\): 入力された \(N_e\) と \(\sigma\) の温度またはキャリア濃度依存性。
ローレンツ数 \(L\) vs. \(T\) または \(N\): 計算されたローレンツ数 \(L_{cal}\) の温度またはキャリア濃度依存性。
電子熱伝導率 \(\kappa_e\) vs. \(T\) または \(N\): 計算された電子熱伝導率 \(\kappa_e\) の温度またはキャリア濃度依存性。 グラフの横軸は、入力データに温度の変動がある場合は \(T\)、温度が一定の場合は \(N_e\) となります。
calF()
def calF():
概要: 温度 \(T\)、Hallキャリア濃度 \(N_{Hall}\)、Hall移動度 \(\mu_{Hall}\)、電気伝導率 \(\sigma\) の実験データからHall因子 \(F_H\)、ドリフトキャリア濃度 \(n_{drift}\)、ドリフト移動度 \(\mu_{drift}\) を計算します。
詳細説明:
入力ファイルから温度 \(T\)、Hallキャリア濃度 \(N_{Hall}\)、Hall移動度 \(\mu_{Hall}\)、電気伝導率 \(\sigma\) のデータを読み込みます。
指定された有効質量 meff、散乱因子 rfac、平均自由行程プレファクタ l0 に基づいて、各データ点における以下の値を計算します。
フェルミ準位 \(E_F\): Hallキャリア濃度 \(N_{Hall}\) から
dos.EF_from_electrondensity()を用いて \(E_F\) を計算します。理論的なHall特性: 計算された \(E_F\) と \(T\) を用いて、
dos.cal_Hall_properteis()からHall因子 \(F_H\)、Hallキャリア濃度 \(n_{Hall}\)、Hall移動度 \(\mu_{Hall}\) を取得します。ドリフトキャリア濃度 \(n_{drift}\): \(n_{drift} = N_{Hall} \cdot F_H\) (推測)として計算します。
ドリフト移動度 \(\mu_{drift}\): \(\mu_{drift} = \mu_{Hall} / F_H\) (推測)として計算します。
結果はコンソールと、ファイル名が {filebody}-FH-me{dos.meeff}-r{mobility.rfac}.xlsx の形式で生成されるExcelファイルに出力され、Matplotlibでグラフ化されます。
入力:
infile: 温度 \(T\)、Hallキャリア濃度 \(N_{Hall}\)、Hall移動度 \(\mu_{Hall}\)、電気伝導率 \(\sigma\) を含むExcelファイル。コマンドライン引数で設定される
dos.meeff,mobility.rfac,mobility.l0などのパラメータ。
出力:
コンソール: 計算された \(E_F\), \(F_H\), \(n_{drift}\), \(\mu_{drift}\)。
Excelファイル: 計算された \(E_F\), \(F_H\), \(n_{drift}\), \(\mu_{drift}\) を含むExcelファイル。
グラフ:
フェルミ準位 \(E_F\) vs. \(T\) または \(N\): フェルミ準位の温度またはキャリア濃度依存性。
電気伝導率 \(\sigma\) vs. \(T\) または \(N\): 入力された \(\sigma\) の温度またはキャリア濃度依存性。
キャリア濃度 \(N_e\) vs. \(T\) または \(N\): 実験Hallキャリア濃度 \(N_{e,Hall}\) と計算ドリフトキャリア濃度 \(N_{e,drift}\) の比較。
移動度 \(\mu\) vs. \(T\) または \(N\): 実験Hall移動度 \(\mu_{Hall}\) と計算ドリフト移動度 \(\mu_{drift}\) の比較。
Hall因子 \(F_H\) vs. \(T\) または \(N\): 計算されたHall因子 \(F_H\) の温度またはキャリア濃度依存性。
Hall係数 \(R_H\) vs. \(T\) または \(N\): 計算されたHall係数 \(R_H\) の温度またはキャリア濃度依存性。 グラフの横軸は、入力データに温度の変動がある場合は \(T\)、温度が一定の場合は \(N_e\) となります。
T()
def T():
概要: 温度とキャリア濃度に対する熱電特性の依存性をシミュレートします。
詳細説明:
入力ファイルからSeebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\) などの実験データを読み込みます。データが存在しない場合は construct_lists() を用いて補完されます。
指定された温度範囲 (Tmin から Tmax, nT ステップ) とキャリア濃度範囲 (Nmin から Nmax, nN ステップ) に対して、メッシュ状に以下の熱電特性を計算します。
フェルミ準位 \(E_F\) (\([\text{eV}]\))
キャリア濃度 \(N\) (\([\text{cm}^{-3}]\))
電気伝導率 \(\sigma\) (\([\text{S/cm}]\))
移動度 \(\mu\) (\([\text{cm}^2/(\text{V} \cdot \text{s})]\))
Seebeck係数 \(S\) (\([\mu \text{V/K}]\))
電子熱伝導率 \(\kappa_e\) (\([\text{W}/(\text{m} \cdot \text{K})]\))
力率 \(PF\) (\([\mu \text{W}/(\text{cm} \cdot \text{K}^2)]\))
ZT値 (単位なし)
これらの計算は、各 \((T, N)\) の組み合わせに対して dos.EF_from_electrondensity() で \(E_F\) を求め、dos.cal_transport_properteis() で熱電特性を計算することで行われます。
計算結果はコンソールと、{filebody}-{property}.xlsx の形式で生成される複数のExcelファイルに保存され、Matplotlibでグラフ化されます。
入力:
infile: Seebeck係数 \(S\)、電気伝導率 \(\sigma\)、キャリア濃度 \(N\)、移動度 \(\mu\) を含むExcelファイル。コマンドライン引数で設定される
Tmin,Tmax,nT(温度範囲) およびNmin,Nmax,nN(キャリア濃度範囲) などのパラメータ。
出力:
コンソール: シミュレーション結果。
parameterfile: 現在のパラメータが保存されたINIファイル。Excelファイル (複数):
{filebody}-EF.xlsx: フェルミ準位 \(E_F\){filebody}-sigma.xlsx: 電気伝導率 \(\sigma\){filebody}-mu.xlsx: 移動度 \(\mu\){filebody}-S.xlsx: Seebeck係数 \(S\){filebody}-kappa.xlsx: 電子熱伝導率 \(\kappa_e\){filebody}-PF.xlsx: 力率 \(PF\){filebody}-ZT.xlsx: ZT値 これらのファイルは、キャリア濃度を横軸とし、各温度における物性値の行を含む形式で出力されます。
グラフ:
\(S\), \(\sigma\) vs. サンプル: 実験データの \(S\) と \(\sigma\) をサンプルIDに対してプロットします。
\(\mu\), \(N_e\) vs. サンプル: 実験データの \(\mu\) と \(N_e\) をサンプルIDに対してプロットします。
\(\sigma\) vs. \(N\) (各 \(T\)): キャリア濃度に対する電気伝導率の温度依存性。実験データもプロットされます。
\(\mu\) vs. \(N\) (各 \(T\)): キャリア濃度に対する移動度の温度依存性。実験データもプロットされます。
\(S\) vs. \(N\) (各 \(T\)): キャリア濃度に対するSeebeck係数の温度依存性。実験データもプロットされます。
\(\kappa_e\) vs. \(N\) (各 \(T\)): キャリア濃度に対する電子熱伝導率の温度依存性。
\(PF\) vs. \(N\) (各 \(T\)): キャリア濃度に対する力率の温度依存性。
\(ZT\) vs. \(N\) (各 \(T\)): キャリア濃度に対するZT値の温度依存性。
\(E_F\) vs. \(N\) (各 \(T\)): キャリア濃度に対するフェルミ準位の温度依存性。
main()
def main():
概要: スクリプトの主要な実行フローを制御します。
詳細説明:
アプリケーションオブジェクト tkApplication を初期化し、標準出力とログファイル(infile の名前に基づいて生成)への出力リダイレクトを設定します。
コマンドライン引数に基づいてグローバル変数を更新し、パラメータファイル({filebody}.in)のパスを設定します。
パラメータファイルを読み込み、必要に応じて再度グローバル変数を更新します。
電子構造と輸送パラメータの情報をコンソールに出力した後、mode グローバル変数の値に応じて、対応する計算関数(basic(), properties(), Hall(), init(), sim(), fit(), T(), calL(), calF())を呼び出します。
無効なモードが指定された場合はエラーメッセージを表示し、スクリプトを終了します。
関連リンク
Seebeck2_usage: コードコメントに記載がありますが、具体的なURLや参照先はコードからは確認できません。
ライセンス
コードからはライセンス情報が確認できません。