vasp_defect プログラム仕様
概要: VASPのDOSCARファイルに基づきキャリア密度とフェルミ準位を計算するスクリプト。 詳細説明: このスクリプトは、VASP計算から得られたDOSCAR、OUTCAR、EIGENVAL、POSCARファイル、
および欠陥形成エネルギーのExcelファイルを利用して、半導体の電子・正孔キャリア密度、 欠陥密度、およびフェルミ準位の温度依存性またはフェルミ準位依存性を計算・解析します。 特に、温度変化に伴うフェルミ準位の自己無撞着計算や、欠陥の電荷状態による形成エネルギーの変化、 遷移準位の特定、およびこれらの特性のグラフ表示をサポートします。
関連リンク: vasp_defect.py プログラム技術ドキュメント
- VASP.vasp_defect.DOS(E: float) float[ソース]
概要: 補間関数 (fdos) を使用して、指定されたエネルギー (E) における状態密度 (DOS) を返します。 詳細説明: DOSは予めVASPのDOSCARファイルから読み込まれ、`fdos`として補間関数が設定されています。
入力エネルギーがDOSの定義範囲外の場合、エラーメッセージを出力してプログラムを終了します。
- パラメータ:
E -- float: 状態密度を評価するエネルギー (eV)。
- 戻り値:
float: 指定されたエネルギーにおける状態密度 (states/cm^3)。
- VASP.vasp_defect.DOSfe(E: float, T: float, EF: float) float[ソース]
概要: 状態密度 (DOS) と電子のフェルミ・ディラック分布関数の積を計算します。 詳細説明: これは電子密度を計算するための積分の被積分関数となります。 :param E: float: エネルギー (eV)。 :param T: float: 温度 (K)。 :param EF: float: フェルミ準位 (eV)。 :returns: float: DOS(E) * fe(E, T, EF) の値。
- VASP.vasp_defect.DOSfh(E: float, T: float, EF: float) float[ソース]
概要: 状態密度 (DOS) と正孔のフェルミ・ディラック分布関数の積を計算します。 詳細説明: これは正孔密度を計算するための積分の被積分関数となります。 :param E: float: エネルギー (eV)。 :param T: float: 温度 (K)。 :param EF: float: フェルミ準位 (eV)。 :returns: float: DOS(E) * fh(E, T, EF) の値。
- VASP.vasp_defect.FindBandEdges(E: list[float], DOS: list[float], Emidgap: float, DOSth: float) tuple[float, float][ソース]
概要: DOSデータから価電子帯上端 (EV) と伝導帯下端 (EC) を探索します。 詳細説明: DOSデータ DOS と対応するエネルギー E を基に、
バンドギャップ中央 Emidgap からDOS閾値 DOSth を超える点を探索し、 EVとECを決定します。
- パラメータ:
E -- list[float]: エネルギーのリスト (eV)。
DOS -- list[float]: 状態密度のリスト。
Emidgap -- float: バンドギャップの中央エネルギーの推定値 (eV)。
DOSth -- float: DOSがこの値を超えたときにバンド端と判定する閾値。
- 戻り値:
tuple[float, float]: 価電子帯上端 (EV) と伝導帯下端 (EC) のエネルギー (eV)。
- VASP.vasp_defect.Ne(T: float, EF: float, E0: float, E1: float) float[ソース]
概要: 指定されたエネルギー範囲における電子密度を計算します。 詳細説明: 温度 T とフェルミ準位 EF における電子のDOSfe関数を、
E0 から E1 までの範囲で数値積分することにより電子密度を計算します。 積分方法はグローバル変数 integrator ('interpolate'または'raw') によって選択されます。
- パラメータ:
T -- float: 温度 (K)。
EF -- float: フェルミ準位 (eV)。
E0 -- float: 積分範囲の開始エネルギー (eV)。
E1 -- float: 積分範囲の終了エネルギー (eV)。
- 戻り値:
float: 計算された電子密度 (cm^-3)。
- VASP.vasp_defect.Nh(T: float, EF: float, E0: float, E1: float) float[ソース]
概要: 指定されたエネルギー範囲における正孔密度を計算します。 詳細説明: 温度 T とフェルミ準位 EF における正孔のDOSfh関数を、
E0 から E1 までの範囲で数値積分することにより正孔密度を計算します。 積分方法はグローバル変数 integrator ('interpolate'または'raw') によって選択されます。
- パラメータ:
T -- float: 温度 (K)。
EF -- float: フェルミ準位 (eV)。
E0 -- float: 積分範囲の開始エネルギー (eV)。
E1 -- float: 積分範囲の終了エネルギー (eV)。
- 戻り値:
float: 計算された正孔密度 (cm^-3)。
- VASP.vasp_defect.callbackfunc(obj: object)[ソース]
概要: 数値計算ソルバーの進行状況を表示するためのコールバック関数。 詳細説明: ソルバーの反復回数、現在の解、関数値、およびステップサイズをコンソールに出力します。
主に`tkequation.Equation`クラスのデバッグや進捗表示に使用されます。
- パラメータ:
obj -- object: tkequation.Equation オブジェクトのインスタンス。 iter, x, f, xa, xb, dx 属性を持つことが期待されます。
- 戻り値:
int: 常に1を返します(コールバックの成功を示す)。
- VASP.vasp_defect.check_atom_sites(cry: tkCrystal, defects: tkDefects, fp: object = None) bool[ソース]
概要: POSCARファイルと欠陥形成エネルギーのExcelファイルで指定された原子サイト数が一致するかをチェックします。 詳細説明: POSCARから原子サイト数を取得し、Excelファイルから読み込まれた欠陥データ (dH_path) の`N0` (基準サイト数) と比較します。
不一致がある場合、ユーザーに続行するか終了するかを問い合わせる警告メッセージを表示します。
- パラメータ:
cry -- tkCrystal: 結晶構造情報を持つtkCrystalオブジェクト。
defects -- tkDefects: 欠陥情報を持つtkDefectsオブジェクト。
fp -- object | None: 出力先のファイルポインタ。Noneの場合、標準出力に出力。
- 戻り値:
bool: サイト数チェックを続行する場合True、終了する場合False。
- VASP.vasp_defect.convert_range2index(E0: float, E1: float) tuple[int, int][ソース]
概要: エネルギー範囲をDOSデータ配列のインデックス範囲に変換します。 詳細説明: グローバル変数 Enorm_min と Enorm_step を使用して、
与えられたエネルギー E0 と E1 に対応するDOSデータ配列の開始・終了インデックスを計算します。
- パラメータ:
E0 -- float: エネルギー範囲の開始値 (eV)。
E1 -- float: エネルギー範囲の終了値 (eV)。
- 戻り値:
tuple[int, int]: 開始インデックスと終了インデックス。
- VASP.vasp_defect.diff(h: float, T: float, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float, N0: float) float[ソース]
概要: 全電荷中性条件からの偏差 ($Delta$Q) のフェルミ準位 (EF) による数値微分を計算します (レガシー版)。 詳細説明: この関数は現在使用されていないようです。tkDefects クラスの diff メソッドが使用されています。
dQ 関数が未定義のため、この関数は実行されません。
- パラメータ:
h -- float: 微小なEFの摂動量 (eV)。
T -- float: 電子温度 (K)。
EF -- float: フェルミ準位 (eV)。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
N0 -- float: (現在未使用)。
- 戻り値:
float: $Delta$QのEFによる数値微分 ($partial Q / partial E_F$)。
- VASP.vasp_defect.exec_EF()[ソース]
概要: フェルミ準位 (EF) 依存性の計算とプロットを実行します。 詳細説明: 欠陥形成エネルギーのExcelファイルとVASP計算結果ファイルを読み込み、
様々なEFにおける電子・正孔密度、欠陥密度、および全電荷の中性条件からの偏差を計算します。 計算結果はExcelファイルに保存され、グラフとして可視化されます。 特に、欠陥密度が凍結される温度 (Tdef) を考慮した計算を行います。
- VASP.vasp_defect.exec_T()[ソース]
概要: 温度依存性の計算とプロットを実行します。 詳細説明: 欠陥形成エネルギーのExcelファイルとVASP計算結果ファイルを読み込み、
様々な温度における電子・正孔密度、欠陥密度、およびフェルミ準位を計算します。 計算結果はExcelファイルに保存され、グラフとして可視化されます。 特に、欠陥密度が凍結される温度 (Tdef) を考慮した計算を行います。
- VASP.vasp_defect.fe(E: float, T: float, EF: float) float[ソース]
概要: フェルミ・ディラック分布関数を計算します (電子占有確率)。 詳細説明: 指定されたエネルギー、温度、フェルミ準位において、
電子がそのエネルギー準位を占有する確率を計算します。 温度が0Kの場合、ステップ関数として動作します。
- パラメータ:
E -- float: エネルギー (eV)。
T -- float: 温度 (K)。
EF -- float: フェルミ準位 (eV)。
- 戻り値:
float: 電子占有確率。
- VASP.vasp_defect.fh(E: float, T: float, EF: float) float[ソース]
概要: フェルミ・ディラック分布関数に基づいて正孔の占有確率を計算します。 詳細説明: fe(E, T, EF) (電子占有確率) を用いて、正孔の占有確率 (1 - fe) を計算します。 :param E: float: エネルギー (eV)。 :param T: float: 温度 (K)。 :param EF: float: フェルミ準位 (eV)。 :returns: float: 正孔占有確率。
- VASP.vasp_defect.integrate_trapezoid(func: callable, E0: float, E1: float, h: float) float[ソース]
概要: 関数を台形則で数値積分します (再定義版)。 詳細説明: 指定された関数 func を積分範囲 [E0, E1] で刻み幅 h を用いて台形則で数値積分します。
この関数は上の同名関数を上書きします。積分刻み幅 h は (E1 - E0) / n で再計算されます。
- パラメータ:
func -- callable: 積分する関数。引数としてエネルギー (E) を取り、値を返します。
E0 -- float: 積分範囲の開始エネルギー (eV)。
E1 -- float: 積分範囲の終了エネルギー (eV)。
h -- float: 積分刻み幅 (eV)。
- 戻り値:
float: 計算された積分の値。
- VASP.vasp_defect.integrate_trapezoid_by_list(y: list[float], h: float) float[ソース]
概要: データ点のリストを台形則で数値積分します。 詳細説明: 予め計算された関数値のリスト y と刻み幅 h を用いて、台形則で数値積分を行います。 :param y: list[float]: 積分する関数値のリスト。 :param h: float: データ間の刻み幅。 :returns: float: 計算された積分の値。
- VASP.vasp_defect.main()[ソース]
概要: スクリプトのメイン実行関数。 詳細説明: アプリケーションの設定を読み込み、コマンドライン引数を解析してグローバル変数を更新します。
ログファイルを初期化し、mode (フェルミ準位依存性または温度依存性) に応じて exec_EF または exec_T 関数を呼び出します。 不正なモードが指定された場合はエラーで終了します。
- VASP.vasp_defect.print_transition_level(defects: tkDefects) tuple[str, list[list[list]], list[list[list]]][ソース]
概要: 欠陥の遷移準位を計算し、出力ファイルに保存して表示します。 詳細説明: tkDefects オブジェクトから遷移準位のリストを取得し、
すべての形成エンタルピー曲線と最小形成エンタルピー曲線をExcelファイルに保存します。 また、計算された遷移準位の情報をコンソールに出力します。
- パラメータ:
defects -- tkDefects: 欠陥情報を持つtkDefectsオブジェクト。
- 戻り値:
tuple[str, list[list[list]], list[list[list]]]: - name: str: 最後の欠陥名。 - allpts_list: list[list[list]]: 各欠陥名の全遷移点のリストのリスト。 - minpts_list: list[list[list]]: 各欠陥名の最小形成エンタルピー曲線上の点のリストのリスト。
- VASP.vasp_defect.read_csv(infile: str, xmin: float | None = None, xmax: float | None = None, delimiter: str = ',') tuple[list[str], list[float], list[float]][ソース]
概要: CSVファイルを読み込み、指定された範囲のデータを抽出します。 詳細説明: 最初の列をx軸データ、2番目の列をy軸データとして読み込みます。
xminとxmaxが指定されている場合、x軸データがその範囲内の行のみを抽出します。
- パラメータ:
infile -- str: 入力CSVファイルのパス。
xmin -- float | None: x軸データの最小値。この値以上のデータのみが抽出されます。Noneの場合は無視。
xmax -- float | None: x軸データの最大値。この値以下のデータのみが抽出されます。Noneの場合は無視。
delimiter -- str: CSVファイルの区切り文字。
- 戻り値:
tuple[list[str], list[float], list[float]]: - header: list[str]: CSVファイルのヘッダー行のリスト。 - data0: list[float]: 抽出されたx軸データのリスト。 - data1: list[float]: 抽出されたy軸データのリスト。
- VASP.vasp_defect.read_files(vasp: tkVASP, cry: tkCrystal, cry_defect: tkCrystal, defects: tkDefects, POSCAR_path: str, OUTCAR_path: str, EIGENVAL_path: str, DOSCAR_path: str, fp: object = None) tuple[dict, dict, dict, dict, float, float, float, float, float][ソース]
概要: VASPの計算結果ファイル(POSCAR, OUTCAR, EIGENVAL, DOSCAR)を読み込み、関連情報を設定します。 詳細説明: 結晶構造、セル体積、OUTCARからのフェルミ準位 (EF0) とISPIN情報、
EIGENVALからのバンド端 (EV, EC, Eg) とHOMO/LUMO準位、 DOSCARからの状態密度 (DOS) データを読み込み、 それらをグローバル変数に設定し、DOSデータは`EV=0`を基準に正規化されます。 また、POSCARと欠陥データ (dH_path) のサイト数の一致をチェックします。
- パラメータ:
vasp -- tkVASP: tkVASPオブジェクトのインスタンス。
cry -- tkCrystal: 完全結晶のtkCrystalオブジェクトのインスタンス。
cry_defect -- tkCrystal: 欠陥結晶のtkCrystalオブジェクトのインスタンス。
defects -- tkDefects: tkDefectsオブジェクトのインスタンス。
POSCAR_path -- str: 完全結晶のPOSCARファイルのパス。
OUTCAR_path -- str: OUTCARファイルのパス。
EIGENVAL_path -- str: EIGENVALファイルのパス。
DOSCAR_path -- str: DOSCARファイルのパス。
fp -- object | None: 出力先のファイルポインタ。Noneの場合、標準出力に出力。
- 戻り値:
tuple[dict, dict, dict, dict, float, float, float, float, float]: - outcarinf: dict: OUTCARから読み込んだ情報。 - eigenvalinf: dict: EIGENVALから読み込んだ情報。 - bandedgeinf: dict: バンド端情報。 - dosinf: dict: DOS情報。 - EV: float: 価電子帯上端 (EV) (eV、EV=0基準)。 - EC: float: 伝導帯下端 (EC) (eV、EV=0基準)。 - Eg: float: バンドギャップ (eV)。 - EHOMO: float: HOMO準位 (eV、EV=0基準)。 - ELUMO: float: LUMO準位 (eV、EV=0基準)。
- VASP.vasp_defect.savecsv(outfile: str, header: list[str], datalist: list[list[float]])[ソース]
概要: データリストをCSVファイルに保存します。 詳細説明: ヘッダー行とそれに続くデータ行をCSV形式で指定されたファイルに書き込みます。
データは行ごとに整形されて出力されます。
- パラメータ:
outfile -- str: 出力CSVファイルのパス。
header -- list[str]: CSVファイルのヘッダー行のリスト。
datalist -- list[list[float]]: 書き込むデータ。`datalist[j][i]`がi行j列のデータとなるように渡されます。
- class VASP.vasp_defect.tkDefect(**args)[ソース]
ベースクラス:
object概要: 個々の欠陥サイトの特性を保持するクラス。 詳細説明: 欠陥の原子ラベル、サイトラベル、電荷、エントロピー、基準サイト数、
ドープ濃度、および複数の形成エンタルピー値を管理します。
- property site
欠陥サイトのプロパティを取得します。 :returns: str: 欠陥サイトの名前。
- Type:
概要
- class VASP.vasp_defect.tkDefects(**args)[ソース]
ベースクラス:
object概要: 複数の欠陥情報を管理するクラス。 詳細説明: Excelファイルから欠陥形成エネルギーを読み込み、セル体積を考慮して
欠陥密度、キャリア密度、フェルミ準位の計算を行います。 また、欠陥の遷移準位の探索と保存も担当します。
- Print(PrintLabels: bool = False, outfp: object = None)[ソース]
概要: 登録されている欠陥情報を標準出力または指定されたファイルポインタに出力します。 詳細説明: 欠陥の数、ポイント数、セル体積、および各欠陥の詳細情報(原子、サイト、電荷、エントロピー、N0、Ndoped、dH0s)を整形して表示します。 :param PrintLabels: bool: ラベル情報 (labels, plabels, names) を出力するかどうか。 :param outfp: object | None: 出力先のファイルポインタ。Noneの場合、標準出力に出力。
- SetVolume(V: float) float[ソース]
概要: ユニットセルの体積を設定します。 :param V: float: ユニットセルの体積 (A^3)。 :returns: float: 設定されたユニットセルの体積 (A^3)。
- Volume() float | None[ソース]
概要: ユニットセルの体積を取得します。 :returns: float | None: 設定されたユニットセルの体積 (A^3)。設定されていない場合はNone。
- cal_dE(iPoint: int, idefect: int, T: float, EF: float) float[ソース]
概要: 特定の欠陥の形成エネルギー($Delta$E)を計算します。 詳細説明: 指定されたポイント、欠陥ID、温度、フェルミ準位に基づいて、
欠陥の形成エンタルピーと電荷によるエネルギー項を合計します。
- パラメータ:
iPoint -- int: 計算に使用する形成エンタルピーのインデックス。
idefect -- int: 欠陥リスト内の欠陥のインデックス。
T -- float: 温度 (K)。
EF -- float: フェルミ準位 (eV)。
- 戻り値:
float: 計算された欠陥形成エネルギー ($Delta$E) (eV)。
- calculate_charged_defect_densities(Te: float, NdsTdef: dict, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float) tuple[dict, list, dict, list, float][ソース]
概要: 電子温度 (Te) と凍結された欠陥密度 (NdsTdef) を用いて、電荷を帯びた欠陥密度を計算します。 詳細説明: まず、各サイトの全欠陥密度を合計し、電子温度での各電荷状態の分配関数 (ZSA) を計算します。
その後、各電荷状態の欠陥密度と、全欠陥による総電荷 (Qtot) を算出します。
- パラメータ:
Te -- float: 電子温度 (K)。
NdsTdef -- dict: 欠陥凍結温度Tdefで計算された総欠陥密度の辞書 (cm^-3)。キーは"{atom}_{site}^{charge}"。
EF -- float: フェルミ準位 (eV)。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
- 戻り値:
tuple[dict, list, dict, list, float]: - ZSA: dict: 各サイトの(電子温度における)分配関数。 - Nds: list[float]: 各欠陥状態の密度 (cm^-3)。 - NdsTdef: dict: Tdefにおける総欠陥密度を電荷状態とサイト名でキー付けした辞書 (cm^-3)。 - dEs: list[float]: 各欠陥状態の形成エネルギー (eV)。 - Qtot: float: 全欠陥による総電荷 (単位電荷)。
- calculate_defect_densities(T: float, Tdef: float, NdsTdef: dict | None, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float) tuple[dict, list, dict, list, float][ソース]
概要: 欠陥の密度を計算します。 詳細説明: NdsTdefがNoneの場合は、凍結されていない欠陥の総密度を計算します。
NdsTdefが与えられている場合は、凍結された総欠陥密度を基に、電荷を帯びた欠陥密度を計算します。
- パラメータ:
T -- float: 電子温度 (K)。
Tdef -- float: 欠陥が凍結している温度 (K)。
NdsTdef -- dict | None: 欠陥凍結温度Tdefで計算された総欠陥密度の辞書。Noneの場合、未凍結として計算。
EF -- float: フェルミ準位 (eV)。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
- 戻り値:
tuple[dict, list, dict, list, float]: - Z: dict: 各サイトの分配関数(またはZSA)。 - Nds: list[float]: 各欠陥状態の密度 (cm^-3)。 - NdsTdef: dict: Tdefにおける総欠陥密度を電荷状態とサイト名でキー付けした辞書 (cm^-3)。 - dGs: list[float]: 各欠陥状態の形成エネルギー (eV)。 - Qtot: float: 全欠陥による総電荷 (単位電荷)。
- calculate_densities(T: float, Tdef: float, NdsTdef: dict | None, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float) tuple[dict, float, float, list, dict, list, float][ソース]
概要: 電子、正孔、および欠陥のキャリア密度と総電荷を計算します。 詳細説明: 電子温度 (T) が欠陥凍結温度 (Tdef) 以下の場合、欠陥密度はTdefで凍結されます。
TがTdefより高い場合、欠陥密度はTで再計算されます。 最終的に電子密度 (ne)、正孔密度 (nh)、各欠陥密度 (Nds)、および総電荷 (Qtot) を返します。
- パラメータ:
T -- float: 電子温度 (K)。
Tdef -- float: 欠陥が凍結している温度 (K)。
NdsTdef -- dict | None: 欠陥凍結温度Tdefで計算された総欠陥密度の辞書。Noneの場合、未凍結として計算。
EF -- float: フェルミ準位 (eV)。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
- 戻り値:
tuple[dict, float, float, list, dict, list, float]: - Z: dict: 各サイトの分配関数。 - ne: float: 電子密度 (cm^-3)。 - nh: float: 正孔密度 (cm^-3)。 - Nds: list[float]: 各欠陥状態の密度 (cm^-3)。 - NdsTdef: dict: Tdefにおける総欠陥密度を電荷状態とサイト名でキー付けした辞書 (cm^-3)。 - dGs: list[float]: 各欠陥状態の形成エネルギー (eV)。 - Qtot: float: 全電荷 (単位電荷)。
- calculate_total_defect_densities(Tdef: float, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float) tuple[dict, list, dict, list, float][ソース]
概要: 指定された欠陥凍結温度 (Tdef) とフェルミ準位で、全欠陥の密度を計算します。 詳細説明: 各欠陥サイトの分配関数 (ZS) を考慮し、個々の欠陥の電荷状態に応じた密度と、
全欠陥による総電荷 (Qtot) を算出します。
- パラメータ:
Tdef -- float: 欠陥が凍結している温度 (K)。
EF -- float: フェルミ準位 (eV)。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
- 戻り値:
tuple[dict, list, dict, list, float]: - ZS: dict: 各サイトの分配関数。 - Nds: list[float]: 各欠陥状態の密度 (cm^-3)。 - NdsTdef: dict: Tdefにおける総欠陥密度を電荷状態とサイト名でキー付けした辞書 (cm^-3)。 - dEs: list[float]: 各欠陥状態の形成エネルギー (eV)。 - Qtot: float: 全欠陥による総電荷 (単位電荷)。
- dQ(T: float, Tdef: float, NdsTdef: dict | None, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float) float[ソース]
概要: 全電荷の中性条件からの偏差 ($Delta$Q) を計算します。 詳細説明: calculate_densitiesメソッドを呼び出して、電子、正孔、欠陥の密度から総電荷を計算し、
その値を返します。この関数はフェルミ準位探索のための目的関数として使用されます。
- パラメータ:
T -- float: 電子温度 (K)。
Tdef -- float: 欠陥が凍結している温度 (K)。
NdsTdef -- dict | None: 欠陥凍結温度Tdefで計算された総欠陥密度の辞書。
EF -- float: フェルミ準位 (eV)。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
- 戻り値:
float: 全電荷 ($Delta$Q) (単位電荷)。
- diff(h: float, T: float, Tdef: float, NdsTdef: dict | None, EF: float, ECmin: float, ECmax: float, EVmin: float, EVmax: float) float[ソース]
概要: 全電荷の中性条件からの偏差 ($Delta$Q) のフェルミ準位 (EF) による数値微分を計算します。 詳細説明: 中心差分法を用いてdQ/dEFを計算します。これはニュートン法のヤコビアンとして使用されます。 :param h: float: 微小なEFの摂動量 (eV)。 :param T: float: 電子温度 (K)。 :param Tdef: float: 欠陥が凍結している温度 (K)。 :param NdsTdef: dict | None: 欠陥凍結温度Tdefで計算された総欠陥密度の辞書。 :param EF: float: フェルミ準位 (eV)。 :param ECmin: float: 伝導帯のエネルギー下限 (eV)。 :param ECmax: float: 伝導帯のエネルギー上限 (eV)。 :param EVmin: float: 価電子帯のエネルギー下限 (eV)。 :param EVmax: float: 価電子帯のエネルギー上限 (eV)。 :returns: float: $Delta$QのEFによる数値微分 ($partial Q / partial E_F$)。
- find_EF(T: float, Tdef: float, NdsTdef: dict | None, ECmin: float, ECmax: float, EVmin: float, EVmax: float, callbackfunc: callable = None, eps_bisec: float = 0.1, nmaxiter_bisection: int = 300, initial: list[float] = [-1.0, 4.0], eps_newton: float = 1e-06, nmaxiter_newton: int = 300, dump_newton: float = 0.3, h_newton: float = 1e-06, is_print: bool = False) tuple[float | None, float | None][ソース]
概要: 全電荷中性条件を満たすフェルミ準位 (EF) を探索します。 詳細説明: 二分法とニュートン法を組み合わせて、全電荷 ($Delta$Q) がゼロとなるEFを探索します。
最初に広い範囲で二分法を実行し、その後、より精密なニュートン法を適用します。
- パラメータ:
T -- float: 電子温度 (K)。
Tdef -- float: 欠陥が凍結している温度 (K)。
NdsTdef -- dict | None: 欠陥凍結温度Tdefで計算された総欠陥密度の辞書。
ECmin -- float: 伝導帯のエネルギー下限 (eV)。
ECmax -- float: 伝導帯のエネルギー上限 (eV)。
EVmin -- float: 価電子帯のエネルギー下限 (eV)。
EVmax -- float: 価電子帯のエネルギー上限 (eV)。
callbackfunc -- callable | None: 探索の各ステップで呼び出されるコールバック関数。
eps_bisec -- float: 二分法の収束判定閾値。
nmaxiter_bisection -- int: 二分法の最大反復回数。
initial -- list[float]: 二分法の初期探索範囲 [EF_min, EF_max] (eV)。
eps_newton -- float: ニュートン法の収束判定閾値。
nmaxiter_newton -- int: ニュートン法の最大反復回数。
dump_newton -- float: ニュートン法のダンプ係数。
h_newton -- float: ニュートン法の数値微分のための微小量。
is_print -- bool: 途中経過をコンソールに出力するかどうか。
- 戻り値:
tuple[float | None, float | None]: 収束したフェルミ準位 (EF) と、そのときの$Delta$Qの値。 収束しない場合は(None, None)を返します。
- find_all_transition_EF(idx0: int, groupdata: list[dict]) list[float][ソース]
概要: 特定の欠陥状態 (idx0) から他のすべての欠陥状態への遷移準位EFを計算します。 詳細説明: 欠陥形成エネルギーの交点から、異なる電荷状態間の遷移準位を特定します。
電荷が同じ場合は非常に大きな値 (1.0e100) を返します。
- パラメータ:
idx0 -- int: 基準となる欠陥状態のインデックス。
groupdata -- list[dict]: 特定の欠陥名に属する全欠陥状態のデータリスト。 各辞書は'charge' (int) と 'dH0' (float) を含む。
- 戻り値:
list[float]: 各欠陥状態への遷移準位EFのリスト (eV)。
- find_all_transitions(name: str, groupdata: list[dict], EFmin: float, EFmax: float) tuple[list[list], list[list]][ソース]
概要: 特定の欠陥名に属する全電荷状態の形成エンタルピー線図におけるすべての遷移点と最小形成エンタルピー曲線上の点を探索します。 詳細説明: フェルミ準位をEFminからEFmaxまで変化させながら、各電荷状態の形成エンタルピーを計算し、
形成エンタルピーが最小となる電荷状態が変化する遷移準位を特定します。 'allpts'はすべての交点、'minpts'は最小形成エンタルピー曲線上の主要な点(遷移準位点と区間の端点)を収集します。
- パラメータ:
name -- str: 欠陥名。
groupdata -- list[dict]: 特定の欠陥名に属する全欠陥状態のデータリスト。
EFmin -- float: フェルミ準位の最小探索値 (eV)。
EFmax -- float: フェルミ準位の最大探索値 (eV)。
- 戻り値:
tuple[list[list], list[list]]: - allpts: list[list]: すべての遷移点 (EF, dH, q_prev, q_next, iorder, idxmin) のリスト。 - minpts: list[list]: 最小形成エンタルピー曲線上の主要な点 (EF, dH, q_prev, q_next, iorder, idxmin) のリスト。
- find_next_transition_EF(idx0: int, prevEF: float, EFmin: float, EFmax: float, groupdata: list[dict]) tuple[int | None, float][ソース]
概要: 現在のフェルミ準位 (prevEF) より大きく、指定範囲内の次の遷移準位EFを探索します。 詳細説明: find_all_transition_EF を使用してすべての遷移準位を計算し、
現在のフェルミ準位よりも大きく、かつ探索範囲 (EFmin, EFmax) 内で最小の遷移準位を特定します。
- パラメータ:
idx0 -- int: 基準となる欠陥状態のインデックス。
prevEF -- float: 現在のフェルミ準位 (eV)。
EFmin -- float: フェルミ準位の最小探索値 (eV)。
EFmax -- float: フェルミ準位の最大探索値 (eV)。
groupdata -- list[dict]: 特定の欠陥名に属する全欠陥状態のデータリスト。
- 戻り値:
tuple[int | None, float]: 次の遷移準位のインデックスとEF値。見つからない場合は (None, EFmax) を返します。
- find_order(groupdata: list[dict], idx: int, EF: float, dH: float) tuple[int, int, float][ソース]
概要: 特定のフェルミ準位 (EF) における、ある欠陥状態の形成エンタルピーの順位を計算します。 詳細説明: 同じ欠陥名に属するすべての電荷状態について、指定されたEFにおける形成エンタルピーを計算し、
入力された(EF, dH)のペアがその中で何番目に低い形成エンタルピーを持つか (iorder) を決定します。 また、同じEFで最も低い形成エンタルピーを持つ欠陥状態のインデックス (idxmin) とそのdH (dHmin) も返します。
- パラメータ:
groupdata -- list[dict]: 特定の欠陥名に属する全欠陥状態のデータリスト。
idx -- int: 現在の欠陥状態のインデックス。
EF -- float: フェルミ準位 (eV)。
dH -- float: 現在の欠陥状態の形成エンタルピー (eV)。
- 戻り値:
tuple[int, int, float]: - iorder: int: 指定された(EF, dH)のペアがグループ内で何番目に低い形成エンタルピーを持つか (0-indexed)。 - idxmin: int: 同じEFで最も低い形成エンタルピーを持つ欠陥状態のインデックス。 - dHmin: float: 同じEFで最も低い形成エンタルピーの値 (eV)。
- get(idx: int)[ソース]
概要: 指定されたインデックスの欠陥オブジェクトを取得します。 :param idx: int: 取得する欠陥のインデックス。 :returns: tkDefect | None: 指定されたインデックスのtkDefectオブジェクト。インデックスが無効な場合はNone。
- get_groupdata(name: str, iPoint: int) list[dict][ソース]
概要: 指定された欠陥名に属する全電荷状態のデータを取得します。 詳細説明: 全ての欠陥から、指定された`name`と一致する欠陥(異なる電荷状態を含む)を抽出し、
それらの情報を辞書形式でリストにまとめます。リストは電荷の降順にソートされます。
- パラメータ:
name -- str: 抽出する欠陥名。
iPoint -- int: 使用する形成エンタルピーのインデックス。
- 戻り値:
list[dict]: 抽出された欠陥データのリスト。各辞書は'defects', 'atom', 'site', 'name', 'charge', 'dH0'を含む。
- get_transitionlevel_lists() tuple[list[str], list[list[list]], list[list[list]]][ソース]
概要: 全てのユニークな欠陥名に対して、遷移準位のリストを生成します。 詳細説明: 各欠陥名について`find_all_transitions`を呼び出し、
すべての形成エンタルピー曲線上の点と、最小曲線上の点を取得します。
- 戻り値:
tuple[list[str], list[list[list]], list[list[list]]]: - names: list[str]: ユニークな欠陥名のリスト。 - allpts_list: list[list[list]]: 各欠陥名の全遷移点のリストのリスト。 - minpts_list: list[list[list]]: 各欠陥名の最小形成エンタルピー曲線上の点のリストのリスト。
- read_excel(infile: str, V: float | None) tkDefects[ソース]
概要: 欠陥形成エンタルピーを含むExcelファイルを読み込み、tkDefectsオブジェクトを構築します。 詳細説明: 指定されたExcelファイルから欠陥の原子、サイト、電荷、エントロピー、基準サイト数、
ドープ濃度、および各ポイントでの形成エンタルピーを抽出します。 ファイル形式のバージョン('Version'列の有無)を自動判別し、適切にデータをパースします。 セル体積Vが与えられた場合、それを設定します。
- パラメータ:
infile -- str: 欠陥形成エンタルピーを含むExcelファイルのパス。
V -- float | None: ユニットセルの体積 (A^3)。与えられない場合はNone。
- 戻り値:
tkDefects: 読み込まれたデータで構築されたtkDefectsオブジェクト自身。