EF_T_DOS プログラム仕様
VASPのDOSCARファイルに基づき、キャリア密度とフェルミ準位を計算するスクリプト。
このスクリプトは、VASP計算で得られた状態密度 (DOS) データを用いて、半導体のキャリア輸送特性を評価します。 具体的には、電子密度、正孔密度、イオン化されたドナー・アクセプター密度、ホール係数などを、 温度の関数として、またはフェルミ準位の関数として計算します。 また、有効状態密度や特性温度などのパラメータも導出します。
関連リンク: EF-T-DOS_usage
- cms.integration.EF_T_DOS.CalEF(T, EF0, E0, E1, totNe)[ソース]
電荷中性条件に基づいてフェルミ準位を計算する (現在未使用の関数)。
`scipy.optimize.newton`メソッドを使用して、電子密度`Ne`が`totNe`に等しくなるフェルミ準位`EF`を見つける。
- パラメータ:
(float) (totNe) -- 温度 (K)。
(float) -- フェルミ準位の初期推測値 (eV)。
(float) -- 積分範囲の下限。
(float) -- 積分範囲の上限。
(float) -- 目標とする全電子密度。
- 戻り値:
float: 電荷中性条件を満たすフェルミ準位。
- cms.integration.EF_T_DOS.DOS(E)[ソース]
指定されたエネルギーにおける状態密度 (DOS) を補間して返す。
グローバル変数`E_raw`と`dos_raw`を用いて、`scipy.interpolate.interp1d`による3次スプライン補間を行う。 DOSのE範囲外が指定された場合はエラーで終了する。
- パラメータ:
(float) (E) -- エネルギー (eV)。
- 戻り値:
float: 補間されたDOS値 (states/eV/Vcell単位をcm^-3に変換済み)。
- cms.integration.EF_T_DOS.DOSfe(E, T, EF)[ソース]
DOSとフェルミ・ディラック分布関数の積を計算する。
`DOS(E)`と`fe(E, T, EF)`の積を返す。これは電子密度計算の被積分関数となる。
- パラメータ:
(float) (EF) -- エネルギー (eV)。
(float) -- 温度 (K)。
(float) -- フェルミ準位 (eV)。
- 戻り値:
float: DOS(E) * fe(E, T, EF) の値。
- cms.integration.EF_T_DOS.DOSfh(E, T, EF)[ソース]
DOSと正孔の占有確率の積を計算する。
`DOS(E)`と`fh(E, T, EF)`の積を返す。これは正孔密度計算の被積分関数となる。
- パラメータ:
(float) (EF) -- エネルギー (eV)。
(float) -- 温度 (K)。
(float) -- フェルミ準位 (eV)。
- 戻り値:
float: DOS(E) * fh(E, T, EF) の値。
- cms.integration.EF_T_DOS.FindBandEdges(E, DOS, EF0, Egth)[ソース]
DOSデータから価電子帯上端 (EV) と伝導帯下端 (EC) を見つける。
フェルミ準位の初期値EF0を基準に、DOS値がEgthを超える範囲を探索してEVとECを特定する。
- パラメータ:
(numpy.ndarray) (DOS) -- エネルギー値の配列。
(numpy.ndarray) -- DOS値の配列。
(float) (Egth) -- フェルミ準位の初期値 (eV)。
(float) -- バンド端を決定するためのDOSのスレッショルド値。
- 戻り値:
tuple[float, float]: 価電子帯上端EVと伝導帯下端ECのタプル。
- cms.integration.EF_T_DOS.NAm(EF, T)[ソース]
イオン化されたアクセプター密度を計算する。
アクセプター準位`EA`とアクセプター濃度`NA`、フェルミ・ディラック分布を用いてイオン化率を計算する。
- パラメータ:
(float) (T) -- フェルミ準位 (eV)。
(float) -- 温度 (K)。
- 戻り値:
float: イオン化されたアクセプター密度。
- cms.integration.EF_T_DOS.NDp(EF, T)[ソース]
イオン化されたドナー密度を計算する。
ドナー準位`ED`とドナー濃度`ND`、フェルミ・ディラック分布を用いてイオン化率を計算する。
- パラメータ:
(float) (T) -- フェルミ準位 (eV)。
(float) -- 温度 (K)。
- 戻り値:
float: イオン化されたドナー密度。
- cms.integration.EF_T_DOS.Ne(T, EF, E0, E1)[ソース]
指定された範囲における電子密度を計算する。
`DOSfe`関数を`E0`から`E1`まで積分し、電子数を求める。
- パラメータ:
(float) (E1) -- 温度 (K)。
(float) -- フェルミ準位 (eV)。
(float) -- 積分範囲の下限。
(float) -- 積分範囲の上限。
- 戻り値:
float: 計算された電子密度。
- cms.integration.EF_T_DOS.Nh(T, EF, E0, E1)[ソース]
指定された範囲における正孔密度を計算する。
`DOSfh`関数を`E0`から`E1`まで積分し、正孔数を求める。
- パラメータ:
(float) (E1) -- 温度 (K)。
(float) -- フェルミ準位 (eV)。
(float) -- 積分範囲の下限。
(float) -- 積分範囲の上限。
- 戻り値:
float: 計算された正孔密度。
- cms.integration.EF_T_DOS.exec_EF()[ソース]
フェルミ準位の関数としてキャリア密度などを計算・プロットする。
指定されたフェルミ準位範囲で電子密度、正孔密度、イオン化ドナー/アクセプター密度、 ホール係数などを計算する。結果をプロットし、有効状態密度や特性温度も算出する。
- 戻り値:
None
- cms.integration.EF_T_DOS.exec_T()[ソース]
温度の関数としてキャリア密度とフェルミ準位を計算・プロットする。
指定された温度範囲でフェルミ準位を二分法で繰り返し決定し、 電子密度、正孔密度、イオン化ドナー/アクセプター密度、ホール係数などを計算する。 結果をプロットし、特性温度も算出する。
- 戻り値:
int または None: エラー発生時に0を返す。
- cms.integration.EF_T_DOS.fe(E, T, EF)[ソース]
フェルミ・ディラック分布関数を計算する。
エネルギーE、温度T、フェルミ準位EFにおける電子の占有確率を返す。 T=0Kの場合はステップ関数として処理される。
- パラメータ:
(float) (EF) -- エネルギー (eV)。
(float) -- 温度 (K)。
(float) -- フェルミ準位 (eV)。
- 戻り値:
float: フェルミ・ディラック分布関数の値。
- cms.integration.EF_T_DOS.fh(E, T, EF)[ソース]
正孔の占有確率(1 - fe)を計算する。
フェルミ・ディラック分布関数`fe`を用いて正孔の占有確率を計算する。
- パラメータ:
(float) (EF) -- エネルギー (eV)。
(float) -- 温度 (K)。
(float) -- フェルミ準位 (eV)。
- 戻り値:
float: 正孔の占有確率。
- cms.integration.EF_T_DOS.getarg(position, defval=None)[ソース]
コマンドライン引数を取得する。
指定された位置の引数が存在しない場合、デフォルト値を返す。
- パラメータ:
(int) (position) -- 取得する引数の位置(0はスクリプト名)。
optional) (defval (Any,) -- 引数が存在しない場合に返すデフォルト値。デフォルトはNone。
- 戻り値:
str または Any: 取得した引数、またはデフォルト値。
- cms.integration.EF_T_DOS.getfloatarg(position, defval=None)[ソース]
コマンドライン引数を浮動小数点数として取得する。
`getarg`で取得した文字列を`pfloat`で浮動小数点数に変換する。
- パラメータ:
(int) (position) -- 取得する引数の位置。
optional) (defval (float,) -- 引数が存在しない場合に返すデフォルト値。デフォルトはNone。
- 戻り値:
float または None: 変換された浮動小数点数、またはNone。
- cms.integration.EF_T_DOS.getintarg(position, defval=None)[ソース]
コマンドライン引数を整数として取得する。
`getarg`で取得した文字列を`pint`で整数に変換する。
- パラメータ:
(int) (position) -- 取得する引数の位置。
optional) (defval (int,) -- 引数が存在しない場合に返すデフォルト値。デフォルトはNone。
- 戻り値:
int または None: 変換された整数、またはNone。
- cms.integration.EF_T_DOS.integrate(func, E0, E1, h)[ソース]
台形公式を用いて数値積分を行う。
指定された関数`func`を`E0`から`E1`まで、ステップ幅`h`で台形公式により数値積分する。
- パラメータ:
(callable) (func) -- 積分対象の関数。
(float) (h) -- 積分範囲の下限。
(float) -- 積分範囲の上限。
(float) -- 積分ステップ幅。
- 戻り値:
list[float, float]: 積分結果とダミーのエラー値 (-1.0) のリスト。
- cms.integration.EF_T_DOS.main()[ソース]
スクリプトのメイン実行関数。
コマンドライン引数を処理し、DOSファイルを読み込み、バンド端やドーピング準位を設定する。 その後、`mode`変数に応じて`exec_T`または`exec_EF`を呼び出し、 キャリア計算と結果のプロットを実行する。
- 戻り値:
None
- cms.integration.EF_T_DOS.pfloat(str)[ソース]
文字列を浮動小数点数に変換する。
変換できない場合はNoneを返す。
- パラメータ:
(str) (str) -- 変換する文字列。
- 戻り値:
float または None: 変換された浮動小数点数、またはNone。
- cms.integration.EF_T_DOS.pint(str)[ソース]
文字列を整数に変換する。
変換できない場合はNoneを返す。
- パラメータ:
(str) (str) -- 変換する文字列。
- 戻り値:
int または None: 変換された整数、またはNone。
- cms.integration.EF_T_DOS.read_csv(infile, xmin=None, xmax=None, delimiter=',')[ソース]
CSVファイルからデータを読み込む。
指定されたファイルからヘッダーと2列の数値データを読み込み、 xminとxmaxの範囲でフィルタリングする。
- cms.integration.EF_T_DOS.rieman(x0, dx, y, xmin, xmax)[ソース]
リーマン和を用いて数値積分を行う。
xminからxmaxの範囲で、等間隔のデータyに対してリーマン和を計算する。
- パラメータ:
(float) (xmax) -- データの開始x値。
(float) -- x軸のステップ幅。
(list[float]) (y) -- 積分対象のy値のリスト。
(float) -- 積分範囲の下限。
(float) -- 積分範囲の上限。
- 戻り値:
float: 計算された積分値。
- cms.integration.EF_T_DOS.savecsv(outfile, header, datalist)[ソース]
データをCSVファイルに保存する。
ヘッダーとデータリストを行ごとに書き出す。
- パラメータ:
(str) (outfile) -- 出力ファイル名。
(list[str]) (header) -- CSVファイルのヘッダー行。
(list[list[Any]]) (datalist) -- 列ごとのデータを含むリストのリスト。
- 戻り値:
None