Seebeck2 プログラム仕様

Seebeck2.py

概要:

ゼーベック係数と温度から有効質量を推定するためのスクリプト。 熱電材料の電気伝導度、ゼーベック係数、ホールキャリア濃度、ホール移動度などの 輸送特性を計算、シミュレーション、およびフィッティングを行う。

詳細説明:

このスクリプトは、G.J. Snyder, A. Pereyra and R. Gurunathan, Adv. Funct. Mater. 32, 2112772 (2022) に記載されている有効質量推定手法を実装している。 半導体の輸送特性を計算するために、Fermi-Dirac統計とさまざまな散乱メカニズムを考慮したモデルを使用する。 以下のモードをサポートしている: - basic: フェルミ・ディラック分布とフェルミ積分の基本関数をプロットする。 - prop: ゼーベック係数、電気伝導度、移動度、ローレンツ数、ZT値などの熱電特性をプロットする。 - Hall: ホール係数、ホール因子、ホール移動度などのホール関連特性をプロットする。 - init: 最適化のための初期パラメータファイル(.inファイル)を生成する。 - sim: 入力ファイルからデータを読み込み、熱電特性をシミュレーションし、ヨンカープロットやピサレンコプロットを表示する。 - fit: 実測のゼーベック係数データと電気伝導度データにフィッティングを行う。 - T: 温度依存性を考慮した熱電特性のシミュレーションとプロットを行う。 - calL: 実測の電気伝導度、キャリア濃度、温度からローレンツ数と電子熱伝導率を計算する。 - calF: 実測のホールキャリア濃度とホール移動度からホール因子を計算する。

関連リンク:
electrical.Seebeck2.Hall()[ソース]
概要:

ホール係数、ホール因子、ホール移動度などのホール関連特性を計算し、プロットする。

詳細説明:

指定された温度 T0 における、様々なフェルミ準位 EF ( xmin から xmax の範囲)に対する キャリア濃度 N、電気伝導度 sigma、移動度 mu、ホール因子 FH、ホール係数 RH を計算する。結果はExcelファイル (outxlsPropfile) に出力し、matplotlibでグラフ表示する。

引数:

なし。

electrical.Seebeck2.T()[ソース]
概要:

温度依存性を考慮した熱電特性のシミュレーションとプロットを行う。

詳細説明:

入力ファイルから実測データを読み込み、指定された温度範囲 Tmin から Tmax で、 キャリア濃度 N に対する様々な熱電特性(フェルミ準位 EF、ゼーベック係数 S、 電気伝導度 sigma、移動度 mu、電子熱伝導率 kappa、出力因子 PF、ZT値 ZT)の 計算を行う。結果はExcelファイルに保存され、温度をパラメータとしたプロットとして表示される。

引数:

なし。

electrical.Seebeck2.basic()[ソース]
概要:

フェルミ・ディラック分布とフェルミ積分に関する基本的なプロットとデータ出力を行う。

詳細説明:

xmin_basic から xmax_basic の範囲で、フェルミ・ディラック分布関数 fFD、 そのホール版 fFDh、微分値 -df/dx、および近似式 fFDa を計算する。 また、フェルミ積分 F_r を様々な r (0, 0.5, 1, 1.5, 2) について計算し、 結果をExcelファイル (outxlsfFDfile, outxlsFjfile) に出力し、 matplotlibでグラフ表示する。

引数:

なし。

electrical.Seebeck2.calF()[ソース]
概要:

実測のホールキャリア濃度とホール移動度からホール因子を計算する。

詳細説明:

入力ファイルから温度、電気伝導度、ホールキャリア濃度、ホール移動度のデータを読み込み、 各データポイントにおけるフェルミ準位を計算する。 そのフェルミ準位と現在のモデルパラメータを用いてホール因子 FH、 ドリフトキャリア濃度 n_drift、ドリフト移動度 mu_drift を計算し、 結果をExcelファイル (outxlsLfile) に出力し、グラフ表示する。

引数:

なし。

electrical.Seebeck2.calL()[ソース]
概要:

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

詳細説明:

入力ファイルから温度、キャリア濃度、電気伝導度のデータを読み込み、 各データポイントにおけるフェルミ準位を計算する。 そのフェルミ準位を用いて理論的なローレンツ数と電子熱伝導率を導出し、 結果をExcelファイル (outxlsLfile) に出力し、グラフ表示する。

引数:

なし。

electrical.Seebeck2.calS2_S(ai)[ソース]
概要:

実測のゼーベック係数と計算値の二乗誤差(S2)を計算する。

詳細説明:

与えられた dos.meeff の値(ai`の要素)を用いて、各データポイントにおける 計算されたゼーベック係数と実測値の差の二乗和を計算する。 `Nmin_fit, Nmax_fit, sigmamin_fit, sigmamax_fit の範囲外のデータはスキップされる。 計算された二乗誤差はデータ点数で正規化される。

引数:
param ai:

(list) 最適化するパラメータのリスト。現在、`dos.meeff`のみが対象。

戻り値:

float: ゼーベック係数の二乗誤差の平均値。

electrical.Seebeck2.calS2_sigma(ai)[ソース]
概要:

実測の電気伝導度と計算値の二乗誤差(S2)を計算する。

詳細説明:

与えられた mobility.l0 の値(ai`の要素)を用いて、各データポイントにおける 計算された電気伝導度と実測値の差の二乗和を計算する。 `Nmin_fit, Nmax_fit, sigmamin_fit, sigmamax_fit の範囲外のデータはスキップされる。 計算された二乗誤差はデータ点数で正規化される。

引数:
param ai:

(list) 最適化するパラメータのリスト。現在、`mobility.l0`のみが対象。

戻り値:

float: 電気伝導度の二乗誤差の平均値。

electrical.Seebeck2.callback(fig, S2)[ソース]
概要:

scipy.optimize.minimize のコールバック関数。最適化の進行状況をコンソール出力し、グラフを更新する。

詳細説明:

outputinterval ごとに現在のパラメータとS2値をコンソールに出力し、 graphupdateinterval ごとに現在のフィット結果をプロットで更新する。 各データポイントのEFを再計算し、それに基づいて`sigmafin`, mufin, Sfin を求め、 plot 関数に渡してグラフを更新する。

引数:
param fig:

(matplotlib.figure.Figure) 描画対象のFigureオブジェクト。

param S2:

(float) 現在の二乗誤差。

electrical.Seebeck2.callback_S(fig, xk)[ソース]
概要:

ゼーベック係数の最適化におけるコールバック関数。

詳細説明:

scipy.optimize.minimize が`dos.meeff`の最適化を実行する際に呼び出される。 calS2_S を呼び出して現在の xk (有効質量)に対するS2を計算し、 set_parameters で`dos.meeff`を更新後、汎用コールバック関数 callback を呼び出して 出力とグラフ更新を行う。

引数:
param fig:

(matplotlib.figure.Figure) 描画対象のFigureオブジェクト。

param xk:

(numpy.ndarray) 現在の最適化パラメータ(dos.meeff)。

electrical.Seebeck2.callback_sigma(fig, xk)[ソース]
概要:

電気伝導度の最適化におけるコールバック関数。

詳細説明:

scipy.optimize.minimize が`mobility.l0`の最適化を実行する際に呼び出される。 calS2_sigma を呼び出して現在の xk (平均自由行程のプレファクター)に対するS2を計算し、 set_parameters で`mobility.l0`を更新後、汎用コールバック関数 callback を呼び出して 出力とグラフ更新を行う。

引数:
param fig:

(matplotlib.figure.Figure) 描画対象のFigureオブジェクト。

param xk:

(numpy.ndarray) 現在の最適化パラメータ(mobility.l0)。

electrical.Seebeck2.choose_parameters(ais0, optid)[ソース]
概要:

全パラメータリストから最適化対象のパラメータのみを選択する。

詳細説明:

optid リストに基づいて、最適化対象 (optid が1) のパラメータのみを抽出して 新しいリストを生成する。これは、scipy.optimize.minimize に渡すパラメータを準備するために使用される。

引数:
param ais0:

(list) 全パラメータのリスト。

param optid:

(list) 各パラメータが最適化対象かどうかを示すIDのリスト (1: 対象, 0: 非対象)。

戻り値:

list: 最適化対象のパラメータのみを含むリスト。

electrical.Seebeck2.construct_lists(label_sample, xsample, label_S, yS, label_sigma, ysigma, label_N, yN, label_mu, ymu)[ソース]
概要:

読み込んだデータを解析し、不足しているデータを補完する。

詳細説明:

read_datafile から返されたリストを整理し、もし label_sample, label_sigma, label_N, label_mu が None の場合、デフォルト値や他のデータからの計算でリストを 生成・補完する。例えば、yN が None で ysigmaymu が存在する場合、 yNysigma / (e * ymu) から計算される。

引数:
param label_sample:

(str) サンプル名ラベル。

param xsample:

(list) サンプルデータ。

param label_S:

(str) ゼーベック係数ラベル。

param yS:

(list) ゼーベック係数データ。

param label_sigma:

(str) 電気伝導度ラベル。

param ysigma:

(list) 電気伝導度データ。

param label_N:

(str) キャリア濃度ラベル。

param yN:

(list) キャリア濃度データ。

param label_mu:

(str) 移動度ラベル。

param ymu:

(list) 移動度データ。

戻り値:
tuple: 補完されたラベルとデータリストのタプル。

(label_sample, xsample, label_S, yS, label_sigma, ysigma, label_N, yN, label_mu, ymu)

electrical.Seebeck2.diff1_S(ai)[ソース]
概要:

calS2_S 関数の数値微分(1階導関数)を計算する。

詳細説明:

前方差分法を用いて、calS2_S 関数に対する各パラメータの勾配を計算する。 微小な変化量 h_diff を使用し、各パラメータを個別に微小量だけ変化させて 目的関数の変化を評価する。

引数:
param ai:

(list) パラメータのリスト。

戻り値:
returns:

(numpy.ndarray) 各パラメータに対する1階導関数の配列。

electrical.Seebeck2.diff1_sigma(ai)[ソース]
概要:

calS2_sigma 関数の数値微分(1階導関数)を計算する。

詳細説明:

前方差分法を用いて、calS2_sigma 関数に対する各パラメータの勾配を計算する。 微小な変化量 h_diff を使用し、各パラメータを個別に微小量だけ変化させて 目的関数の変化を評価する。

引数:
param ai:

(list) パラメータのリスト。

戻り値:
returns:

(numpy.ndarray) 各パラメータに対する1階導関数の配列。

electrical.Seebeck2.fit()[ソース]
概要:

実測のゼーベック係数データと電気伝導度データにフィッティングを行う。

詳細説明:

入力ファイルからデータを読み込み、指定された温度`T0`と散乱因子`rfac`で、 有効質量`meff`と平均自由行程の係数`l0`をフィッティングパラメータとして最適化する。 scipy.optimize.minimize を使用し、calS2_S (ゼーベック係数) を目的関数として meff を、 calS2_sigma (電気伝導度) を目的関数として l0 をそれぞれ最適化する。 最適化の過程はグラフとコンソールに表示される。 最終的なフィット結果とパラメータはExcelファイルとINIファイルに保存される。

引数:

なし。

electrical.Seebeck2.init()[ソース]
概要:

最適化のための初期パラメータファイル(.inファイル)を生成する。

詳細説明:

入力ファイルからデータを読み込み、キャリアのタイプ(電子または正孔)を ゼーベック係数の符号に基づいて自動的に判断する。 その後、現在のグローバルパラメータをデフォルト値としてINIファイルに保存する。 `S`の単位が'V/K'であることを確認し、必要に応じてエラーを発生させる。

引数:

なし。

electrical.Seebeck2.main()[ソース]
概要:

スクリプトの主要な実行フローを管理する。

詳細説明:

アプリケーションの初期化、ログファイルのリダイレクト、コマンドライン引数の解析と グローバル変数の更新、INIファイルからのパラメータ読み込み、 そして指定された mode に応じた各機能関数の呼び出しを行う。 処理の開始時と終了時に情報をコンソールに出力する。

引数:

なし。

electrical.Seebeck2.parameter_list()[ソース]
概要:

現在の移動度パラメータのリストを返す。

戻り値:

tuple: (mobility.meff, mobility.l0) のタプル。

electrical.Seebeck2.plot(fig, yn, ysigma, ymu, yS, ysigmaini, ymuini, ySini, ysigmafin=None, ymufin=None, ySfin=None)[ソース]
概要:

フィット結果をグラフ表示する。

詳細説明:

ピサレンコプロット (キャリア濃度 vs ゼーベック係数) と ヨンカープロット (電気伝導度 vs ゼーベック係数) を描画する。 実測値 (yS, ysigma, yN) と初期計算値 (ySini, ysigmaini)、 最終的なフィット結果 (ySfin, ysigmafin) を比較表示する。 グラフはリアルタイムで更新されるように設計されている。

引数:
param fig:

(matplotlib.figure.Figure) 描画対象のFigureオブジェクト。

param yn:

(list) キャリア濃度データ。

param ysigma:

(list) 電気伝導度データ。

param ymu:

(list) 移動度データ。

param yS:

(list) ゼーベック係数データ(実測値)。

param ysigmaini:

(list) 初期計算の電気伝導度データ。

param ymuini:

(list) 初期計算の移動度データ。

param ySini:

(list) 初期計算のゼーベック係数データ。

param ysigmafin:

(list, optional) 最終フィットの電気伝導度データ。デフォルトは None。

param ymufin:

(list, optional) 最終フィットの移動度データ。デフォルトは None。

param ySfin:

(list, optional) 最終フィットのゼーベック係数データ。デフォルトは None。

electrical.Seebeck2.print_parameters(ai=None)[ソース]
概要:

現在のパラメータをコンソールに出力する。

詳細説明:

グローバル変数 varname, varunit, optid を使用して、 各パラメータの名前、値、単位、および最適化IDを表示する。

引数:
param ai:

(list, optional) 表示するパラメータのリスト。デフォルトはグローバル変数 ai0

electrical.Seebeck2.properties()[ソース]
概要:

ゼーベック係数、電気伝導度、移動度、ローレンツ数、ZT値などの熱電特性を計算し、プロットする。

詳細説明:

指定された温度 T0 における、様々なフェルミ準位 EF ( xmin から xmax の範囲)に対する 熱電特性を計算する。キャリア濃度、導電率、移動度、平均緩和時間、ゼーベック係数 (正確な計算値、非縮退近似、縮退近似)、電子熱伝導率、全熱伝導率、ローレンツ数、 出力因子、ZT値を算出し、Excelファイル (outxlsPropfile) に出力し、matplotlibでグラフ表示する。

引数:

なし。

electrical.Seebeck2.read_parameters(path)[ソース]
概要:

指定されたパスのINIファイルからパラメータを読み込む。

詳細説明:

INIファイルから meff, l0, charge, rfac, EC, T0 などの設定を読み込み、 対応するグローバル変数(ai0, optid, mobility, dos, T0)を更新する。 読み込みに失敗した場合は何もせずに終了する。

引数:
param path:

(str) パラメータが記述されたINIファイルのパス。

electrical.Seebeck2.recover_parameters(ais, optid, aidef0)[ソース]
概要:

最適化されたサブセットのパラメータから、元のパラメータリストを再構築する。

詳細説明:

optid リストに基づいて、最適化対象ではないパラメータをデフォルト値 (aidef0) から取得し、 最適化されたパラメータ (ais) と組み合わせて完全なパラメータリストを作成する。 これにより、一部のパラメータのみを最適化した場合でも、全てのパラメータを正しく扱うことができる。

引数:
param ais:

(list) 最適化されたパラメータのサブセット。

param optid:

(list) 各パラメータが最適化対象かどうかを示すIDのリスト (1: 対象, 0: 非対象)。

param aidef0:

(list) デフォルトの全パラメータリスト。

戻り値:

list: 再構築された全パラメータのリスト。

electrical.Seebeck2.save_parameterfile(ai=[], S2='')[ソース]
概要:

現在のパラメータと計算結果をINIファイルに保存する。

詳細説明:

グローバル変数 parameterfile を使用して、入力ファイル名、基準温度、 キャリア電荷、散乱因子、伝導帯端エネルギー、有効状態密度、状態密度定数、 およびフィット結果の二乗誤差 S2 をINIファイルに書き込む。

引数:
param ai:

(list, optional) 保存するパラメータのリスト。デフォルトはグローバル変数 ai0

param S2:

(str, optional) フィットの二乗誤差。デフォルトは空文字列。

electrical.Seebeck2.save_parameters(path, ai, args)[ソース]
概要:

現在のパラメータをINIファイルに保存する。

詳細説明:

Preferences セクションには args 辞書の内容を、Parameters セクションには 最適化パラメータ ai とそれに対応する optid を保存する。

引数:
param path:

(str) パラメータを保存するINIファイルのパス。

param ai:

(list) 最適化パラメータのリスト。

param args:

(dict) その他の設定を格納した辞書。

electrical.Seebeck2.set_parameters(ai)[ソース]
概要:

与えられた値で移動度とDOSのパラメータを更新する。

詳細説明:

ai リストの最初の要素を有効質量 dos.meeff および mobility.meff に設定する。 もし ai に2つ以上の要素があれば、2番目の要素を平均自由行程のプレファクター mobility.l0 に設定し、 その後、散乱パラメータを更新する。

引数:
param ai:

(list) 設定するパラメータ値のリスト。 ai[0] は有効質量 meff (単位 me)。 ai[1] は平均自由行程のプレファクター l0 (単位 m)。

electrical.Seebeck2.sim()[ソース]
概要:

入力ファイルからデータを読み込み、熱電特性をシミュレーションし、 ヨンカープロットやピサレンコプロットを表示する。

詳細説明:

実測のゼーベック係数、電気伝導度、キャリア濃度、ホール移動度から加重移動度を計算し、 さらに指定された有効質量と散乱因子を用いて理論的な熱電特性曲線を生成する。 実測データと理論曲線を比較してグラフ表示する。 計算結果はExcelファイル (outxlsfile) に保存される。

引数:

なし。

electrical.Seebeck2.updatevars()[ソース]
概要:

コマンドライン引数を解析し、グローバル変数を更新する。

詳細説明:

sys.argv を参照し、実行モードに応じて以下のグローバル変数を更新する: mode, infile, outxlsxfile, parameterfile, parameterbkfile, T_label, n_label, mu_label, sigma_label, S_label, mobility, dos, klatt, T0, Tmin, Tmax, nT, ai0, optid, method, tol, maxiter, h_diff, Nmin_fit, Nmax_fit, sigmamin_fit, sigmamax_fit。 不正なモードが指定された場合は、usage メッセージを表示して終了する。

引数:

なし。

electrical.Seebeck2.usage(app)[ソース]
概要:

スクリプトの利用方法とコマンドライン引数の例を表示する。

詳細説明:

各実行モード(basic, prop, Hall, init, sim, fit, T, calL, calF)の 目的と必要なコマンドライン引数のフォーマットを説明する。

引数:
param app:

(tkApplication) アプリケーションオブジェクト。