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の範囲でフィルタリングする。

パラメータ:
  • (str) (infile) -- 入力ファイル名。

  • optional) (delimiter (str,) -- x値の下限(Noneの場合はフィルタリングなし)。デフォルトはNone。

  • optional) -- x値の上限(Noneの場合はフィルタリングなし)。デフォルトはNone。

  • optional) -- 列の区切り文字。デフォルトは','。

戻り値:

tuple[list[str], list[float], list[float]]: ヘッダー、xデータ、yデータのタプル。

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

cms.integration.EF_T_DOS.updatevars()[ソース]

コマンドライン引数に基づいてグローバル変数を更新する。

sys.argv`を解析し、`mode, file, Tmin, Tmax, nT, `nEF`などの グローバル変数を設定する。引数が不十分な場合は`usage`を呼び出して終了する。

cms.integration.EF_T_DOS.usage()[ソース]

スクリプトの正しい使用方法を標準出力に表示する。

コマンドライン引数の形式と例を示す。