Seebeck_ZT プログラム仕様

熱電輸送特性計算モジュール

概要: ゼーベック係数、ローレンツ因子、電気伝導度、移動度、電子熱伝導度、パワーファクター、ZT因子を計算し、 キャリア濃度依存性をプロット・Excelファイルに保存します。

詳細説明: このモジュールは、3次元放物線バンドモデルと緩和時間近似(tau(E) ∝ E^(r-1/2))に基づき、 フェルミ・ディラック積分を用いた厳密な輸送積分によって熱電輸送特性を評価します。 コマンドライン引数を通じて、温度、有効質量、参照移動度、格子熱伝導率、キャリア種別、散乱因子rのリストなどを設定できます。

関連リンク: Seebeck_ZT_usage

Seebeck_ZT.Fj(j, xi)
概要:

フェルミ・ディラック積分 Fj(j, xi) = ∫_0^∞ x^j / (1+exp(x-xi)) dx を計算します。

詳細説明:

SciPyのquad関数を使用して数値積分を実行します。結果はlru_cacheでキャッシュされ、 同じ引数での再計算を回避し、パフォーマンスを向上させます。 この関数は、ガンマ関数による正規化(1/Gamma(j+1))は含まれていません。

引数:
param j:

積分の次数。

type j:

float

param xi:

還元フェルミ準位 (reduced Fermi level)。

type xi:

float

戻り値:
returns:

フェルミ・ディラック積分 Fj(j, xi) の値。

rtype:

float

Seebeck_ZT.Nc_3D(T, m_eff=1.0)
概要:

3次元放物線バンドにおける有効状態密度 Nc を計算します。

詳細説明:

以下の公式を用いて有効状態密度を計算します。 Nc = 2 * (2π m* kB T / h^2)^(3/2) ここで、m* は有効質量、kB はボルツマン定数、T は温度、h はプランク定数です。

引数:
param T:

温度 [K]。

type T:

float

param m_eff:

有効質量の比率 (m*/m0)。m0 は自由電子質量です。デフォルトは1.0。

type m_eff:

float, optional

戻り値:
returns:

有効状態密度 Nc [m^-3]。

rtype:

float

Seebeck_ZT.electron_density_from_xi(xi, T, m_eff=1.0)
概要:

還元フェルミ準位 xi から電子濃度 n を計算します。

詳細説明:

電子濃度は以下の式で計算されます。 n [m^-3] = Nc * F^{std}_{1/2}(xi) ここで、Nc は有効状態密度、F^{std}_{1/2}(xi) = Fj(1/2, xi) / Gamma(3/2) は 標準化されたフェルミ・ディラック積分です。

引数:
param xi:

還元フェルミ準位。

type xi:

float

param T:

温度 [K]。

type T:

float

param m_eff:

有効質量の比率 (m*/m0)。デフォルトは1.0。

type m_eff:

float, optional

戻り値:
returns:

電子濃度 n [m^-3]。

rtype:

float

Seebeck_ZT.equivalent_l0_from_tau_pref(tau_pref, r, m_eff=1.0)
概要:

緩和時間の前因子 tau_pref から等価な平均自由行程 l0 を計算します。

詳細説明:

一部のスライドでの慣例的な定義 tau(E) = sqrt(m*/2) * [ l0(T) * e_chg^(-r) ] * E^(r-1/2) から、l0(T) を逆算します。 したがって、l0(T) = tau_pref * sqrt(2/m*) * e_chg^r となります。

引数:
param tau_pref:

緩和時間の前因子 [s / J^(r-1/2)]。

type tau_pref:

float

param r:

散乱因子。

type r:

float

param m_eff:

有効質量の比率 (m*/m0)。m0 は自由電子質量です。デフォルトは1.0。

type m_eff:

float, optional

戻り値:
returns:

等価な平均自由行程 l0 [m]。

rtype:

float

Seebeck_ZT.lorenz_from_xi_transport(xi, r)
概要:

還元フェルミ準位 xi と散乱因子 r からローレンツ因子 L を計算します。

詳細説明:

ローレンツ因子は厳密な輸送積分を用いて以下の式で計算されます。 L = (kB/e)^2 * ( I2/I0 - (I1/I0)^2 )

引数:
param xi:

還元フェルミ準位。

type xi:

float

param r:

散乱因子。

type r:

float

戻り値:
returns:

ローレンツ因子 L [V^2/K^2 (または W ohm / K^2)]。

rtype:

float

Seebeck_ZT.m0 = 9.1093837015e-31

散乱因子 r は tau(E) ∝ E^(r-1/2) で定義

Seebeck_ZT.main()
概要:

スクリプトの主要な実行フローを定義します。コマンドライン引数を解析し、 熱電輸送特性を計算・プロット・保存します。

詳細説明:

argparse モジュールを使用してコマンドライン引数(温度、有効質量、参照移動度、 格子熱伝導率、キャリア種別、還元フェルミ準位の範囲と点数、散乱因子rのリスト、 出力ファイル名など)を解析します。 次に、指定されたパラメータに基づいて、各散乱因子 r に対して輸送特性(電子濃度、 ゼーベック係数、ローレンツ因子、電気伝導度、移動度、電子熱伝導度、パワーファクター、ZT因子)を計算します。 計算されたデータは save_results_to_excel 関数を使用してExcelファイルに保存されます。 最後に、計算結果は matplotlib を用いてキャリア濃度に対する各特性のグラフとしてプロットされ、表示されます。

戻り値:
returns:

なし

rtype:

None

Seebeck_ZT.mobility_from_sigma_n(sigma, n)
概要:

電気伝導度 sigma と電子濃度 n から移動度 mu を計算します。

詳細説明:

電気伝導度 sigma、電子濃度 n、素電荷 e、移動度 mu の間に成り立つ関係式 sigma = n * e * mu を用いて移動度を計算します。 したがって、mu = sigma / (n * e) となります。

引数:
param sigma:

電気伝導度 [S/m]。

type sigma:

float

param n:

電子濃度 [m^-3]。

type n:

float

戻り値:
returns:

移動度 mu [m^2/V/s]。

rtype:

float

Seebeck_ZT.save_results_to_excel(outfile, meta_rows, data_rows)
概要:

計算結果とメタデータをExcelファイルに保存します。

詳細説明:

指定された出力ファイル名で新しいExcelワークブックを作成し、 "metadata"と"transport_vs_Ne"の2つのシートにデータを書き込みます。 "metadata"シートには計算条件などのメタデータが保存され、 "transport_vs_Ne"シートにはキャリア濃度に対する輸送特性の計算結果が保存されます。

引数:
param outfile:

出力するExcelファイル名。例: "results.xlsx"。

type outfile:

str

param meta_rows:

メタデータを含む行のリスト。各要素はExcelの1行に対応するリストです。

type meta_rows:

list

param data_rows:

計算結果データを含む行のリスト。各要素はExcelの1行に対応するリストです。

type data_rows:

list

戻り値:
returns:

なし

rtype:

None

Seebeck_ZT.seebeck_from_xi_transport(xi, r, carrier='electron')
概要:

還元フェルミ準位 xi と散乱因子 r からゼーベック係数 S を計算します。

詳細説明:

ゼーベック係数は厳密な輸送積分を用いて以下の式で計算されます。 S = (kB/q) * I1/I0 q はキャリアの種類によって異なり、電子の場合は -e、正孔の場合は +e となります。

引数:
param xi:

還元フェルミ準位。

type xi:

float

param r:

散乱因子。tau(E) ∝ E^(r-1/2) で定義されます。

type r:

float

param carrier:

キャリアの種類。"electron"または"hole"を指定します。デフォルトは"electron"。

type carrier:

str, optional

戻り値:
returns:

ゼーベック係数 S [V/K]。

rtype:

float

例外:
raises ValueError:

carrier が "electron" または "hole" 以外の場合。

Seebeck_ZT.sigma_from_xi_tau_pref(xi, r, T, tau_pref, m_eff=1.0)
概要:

還元フェルミ準位 xi、散乱因子 r、温度 T、緩和時間の前因子 tau_pref から 電気伝導度 sigma を計算します。

詳細説明:

電気伝導度は以下の式で計算されます。 sigma = A_sigma * tau_pref * (kB T)^(r + 1.0) * I0 ここで、A_sigma は transport_prefactor_sigma で計算される前因子、 I0 は transport_I0 で計算される輸送積分です。

引数:
param xi:

還元フェルミ準位。

type xi:

float

param r:

散乱因子。

type r:

float

param T:

温度 [K]。

type T:

float

param tau_pref:

緩和時間の前因子 tau_pref [s / J^(r-1/2)]。

type tau_pref:

float

param m_eff:

有効質量の比率 (m*/m0)。m0 は自由電子質量です。デフォルトは1.0。

type m_eff:

float, optional

戻り値:
returns:

電気伝導度 sigma [S/m]。

rtype:

float

Seebeck_ZT.tau_at_energy(E_J, tau_pref, r)
概要:

特定のエネルギー E_J における緩和時間 tau(E_J) を計算します。

詳細説明:

緩和時間は以下の式で定義されます。 tau(E) = tau_pref * E^(r-1/2) E_J が0以下の場合は np.nan を返します。

引数:
param E_J:

エネルギー [J]。

type E_J:

float

param tau_pref:

緩和時間の前因子 [s / J^(r-1/2)]。

type tau_pref:

float

param r:

散乱因子。

type r:

float

戻り値:
returns:

エネルギー E_J における緩和時間 tau(E_J) [s]。

rtype:

float

Seebeck_ZT.tau_pref_from_mu_ref(mu_ref_cm2_Vs, xi_ref, r, T, m_eff=1.0)
概要:

参照移動度 mu_ref と参照還元フェルミ準位 xi_ref に基づいて、 緩和時間の前因子 tau_pref を決定します。

詳細説明:

緩和時間 tau(E) が tau(E) = tau_pref * E^(r-1/2) で定義されるとき、 指定された xi_ref と T における移動度が mu_ref となるように tau_pref を逆算します。 参照移動度 mu_ref_cm2_Vs は cm^2/V/s 単位で与えられますが、計算ではSI単位に変換されます。

引数:
param mu_ref_cm2_Vs:

参照移動度 [cm^2/V/s]。

type mu_ref_cm2_Vs:

float

param xi_ref:

参照還元フェルミ準位。この xi で参照移動度が再現されます。

type xi_ref:

float

param r:

散乱因子。

type r:

float

param T:

温度 [K]。

type T:

float

param m_eff:

有効質量の比率 (m*/m0)。m0 は自由電子質量です。デフォルトは1.0。

type m_eff:

float, optional

戻り値:
returns:

緩和時間の前因子 tau_pref [s / J^(r-1/2)]。

rtype:

float

Seebeck_ZT.transport_I0(xi, r)
概要:

輸送積分 I0 を計算します。

詳細説明:

tau(E) ∝ E^(r-1/2) の緩和時間に対する輸送積分の一つである I0 を計算します。 I0 = (r + 1) * F_r(xi) の式で定義されます。

引数:
param xi:

還元フェルミ準位。

type xi:

float

param r:

散乱因子。緩和時間のエネルギー依存性 E^(r-1/2) を定義します。

type r:

float

戻り値:
returns:

輸送積分 I0 の値。

rtype:

float

Seebeck_ZT.transport_I1(xi, r)
概要:

輸送積分 I1 を計算します。

詳細説明:

tau(E) ∝ E^(r-1/2) の緩和時間に対する輸送積分の一つである I1 を計算します。 I1 = (r + 2) * F_{r+1}(xi) - xi * (r + 1) * F_r(xi) の式で定義されます。

引数:
param xi:

還元フェルミ準位。

type xi:

float

param r:

散乱因子。緩和時間のエネルギー依存性 E^(r-1/2) を定義します。

type r:

float

戻り値:
returns:

輸送積分 I1 の値。

rtype:

float

Seebeck_ZT.transport_I2(xi, r)
概要:

輸送積分 I2 を計算します。

詳細説明:

tau(E) ∝ E^(r-1/2) の緩和時間に対する輸送積分の一つである I2 を計算します。 I2 = (r + 3) * F_{r+2}(xi) - 2 * xi * (r + 2) * F_{r+1}(xi) + xi^2 * (r + 1) * F_r(xi) の式で定義されます。

引数:
param xi:

還元フェルミ準位。

type xi:

float

param r:

散乱因子。緩和時間のエネルギー依存性 E^(r-1/2) を定義します。

type r:

float

戻り値:
returns:

輸送積分 I2 の値。

rtype:

float

Seebeck_ZT.transport_prefactor_sigma(T, m_eff=1.0)
概要:

電気伝導度 sigma の計算における前因子 A_sigma を計算します。

詳細説明:

電気伝導度は sigma = A_sigma * tau_pref * (kB T)^(r+1) * I0 の形で表されます。 この関数は、tau(E) = tau_pref * E^(r-1/2) と定義される緩和時間において、 以下の物理定数を含む前因子 A_sigma を計算します。 A_sigma [SI] = e^2 * 2^(3/2) * sqrt(m*) / (3 π^2 ħ^3) ここで、e は素電荷、m* は有効質量、ħ は換算プランク定数です。

引数:
param T:

温度 [K]。

type T:

float

param m_eff:

有効質量の比率 (m*/m0)。m0 は自由電子質量です。デフォルトは1.0。

type m_eff:

float, optional

戻り値:
returns:

電気伝導度の前因子 A_sigma [SI単位]。

rtype:

float