EF_T_DOS プログラム仕様

electrical.EF_T_DOS.CalEF(T, EF0, E0, E1, totNe)[ソース]

電荷中性条件に基づいてFermiレベルを計算する。

概要: 指定された温度`T`と電子の総数`totNe`に対し、電荷中性条件を満たすFermiレベル`EF`をNewton法で計算する。

詳細説明: `scipy.optimize.newton`メソッドを使用し、`Ne(T, EF, E0, E1) - totNe = 0`の根を探索します。 初期値として`EF0`が与えられます。この関数は、プログラム内で実際に使用されていません(二分法が採用されています)。

パラメータ:
  • T (float) -- 温度 (K)。

  • EF0 (float) -- Fermiレベルの初期推定値。

  • E0 (float) -- 積分範囲の開始エネルギー。

  • E1 (float) -- 積分範囲の終了エネルギー。

  • totNe (float) -- 総電子数。

戻り値:

電荷中性条件を満たすFermiレベル。

戻り値の型:

float

electrical.EF_T_DOS.DOS(E)[ソース]

エネルギーEにおける状態密度 (DOS) を補間して取得する。

概要: 読み込まれたDOSデータ (E_raw, dos_raw) を用いて、任意のエネルギー`E`での状態密度を補間計算する。

詳細説明: キュビックスプライン補間 (scipy.interpolate.interp1d(kind='cubic')) を使用して、 離散的なDOSデータから連続的なDOS値を取得します。 要求されたエネルギー`E`が元のDOSデータの範囲外である場合、エラーメッセージを出力しプログラムを終了します。

パラメータ:

E (float) -- 状態密度を評価するエネルギー。

戻り値:

指定されたエネルギー`E`における状態密度。

戻り値の型:

float

electrical.EF_T_DOS.DOSfe(E, T, EF)[ソース]

状態密度とFermi-Dirac分布関数の積を計算する。

概要: エネルギー`E`における状態密度 (DOS) と電子のFermi-Dirac分布関数 (fe) の積を返す。

詳細説明: 電子濃度を計算するための被積分関数として使用されます。

パラメータ:
  • E (float) -- エネルギー。

  • T (float) -- 温度 (K)。

  • EF (float) -- フェルミ準位。

戻り値:

DOS(E) * fe(E, T, EF) の値。

戻り値の型:

float

electrical.EF_T_DOS.DOSfh(E, T, EF)[ソース]

状態密度と正孔のFermi-Dirac分布関数の積を計算する。

概要: エネルギー`E`における状態密度 (DOS) と正孔のFermi-Dirac分布関数 (fh) の積を返す。

詳細説明: 正孔濃度を計算するための被積分関数として使用されます。

パラメータ:
  • E (float) -- エネルギー。

  • T (float) -- 温度 (K)。

  • EF (float) -- フェルミ準位。

戻り値:

DOS(E) * fh(E, T, EF) の値。

戻り値の型:

float

electrical.EF_T_DOS.FindBandEdges(E, DOS, EF0, Egth)[ソース]

バンドエッジ (価電子帯上端 EV と伝導帯下端 EC) を探索する。

概要: DOSデータとFermiレベルの初期値、DOS閾値に基づいて価電子帯上端 (EV) と伝導帯下端 (EC) を特定する。

詳細説明: DOS (状態密度) データ配列 DOS と対応するエネルギー配列 E を使用して、 まず`EF0`に近いエネルギーからDOS値が`Egth` (閾値) を超える点を探索します。 `EF0`より低いエネルギー側で`Egth`を超える最初の点の次のエネルギーをEVとし、 `EF0`より高いエネルギー側で`Egth`を超える最初の点の一つ前のエネルギーをECとします。

パラメータ:
  • E (numpy.ndarray) -- エネルギー値の配列。

  • DOS (numpy.ndarray) -- 各エネルギーにおける状態密度値の配列。

  • EF0 (float) -- Fermiレベルの初期値。バンドエッジ探索の基準点となる。

  • Egth (float) -- バンドエッジを決定するためのDOS閾値。この値を超えるとバンドと見なされる。

戻り値:

価電子帯上端 (EV) と伝導帯下端 (EC) のエネルギー値のタプル。

戻り値の型:

tuple[float, float]

electrical.EF_T_DOS.NAm(EF, T)[ソース]

イオン化されたアクセプター密度を計算する。

概要: 指定されたフェルミ準位`EF`と温度`T`における、イオン化されたアクセプターの密度を計算する。

詳細説明: アクセプター準位`EA`における電子のFermi-Dirac分布関数`fe`を用いて、 アクセプターが電子を受け入れてイオン化される確率`fe(EA, T, EF)`を計算し、 アクセプターの全密度`NA`に乗算します。

パラメータ:
  • EF (float) -- フェルミ準位。

  • T (float) -- 温度 (K)。

戻り値:

イオン化されたアクセプターの密度。

戻り値の型:

float

electrical.EF_T_DOS.NDp(EF, T)[ソース]

イオン化されたドナー密度を計算する。

概要: 指定されたフェルミ準位`EF`と温度`T`における、イオン化されたドナーの密度を計算する。

詳細説明: ドナー準位`ED`における電子のFermi-Dirac分布関数`fe`を用いて、 ドナーが電子を放出してイオン化される確率`1 - fe(ED, T, EF)`を計算し、 ドナーの全密度`ND`に乗算します。

パラメータ:
  • EF (float) -- フェルミ準位。

  • T (float) -- 温度 (K)。

戻り値:

イオン化されたドナーの密度。

戻り値の型:

float

electrical.EF_T_DOS.Ne(T, EF, E0, E1)[ソース]

特定のエネルギー範囲内の電子濃度を計算する。

概要: 指定された温度`T`、フェルミ準位`EF`、エネルギー範囲`[E0, E1]`における電子濃度を計算する。

詳細説明: `DOSfe`関数を`E0`から`E1`まで`integrate`関数 (台形公式) を用いて数値積分することで電子濃度を求めます。 デバッグモードが有効な場合、積分エラーが出力されます。

パラメータ:
  • T (float) -- 温度 (K)。

  • EF (float) -- フェルミ準位。

  • E0 (float) -- 積分範囲の開始エネルギー。

  • E1 (float) -- 積分範囲の終了エネルギー。

戻り値:

エネルギー範囲`[E0, E1]`における電子濃度。

戻り値の型:

float

electrical.EF_T_DOS.Nh(T, EF, E0, E1)[ソース]

特定のエネルギー範囲内の正孔濃度を計算する。

概要: 指定された温度`T`、フェルミ準位`EF`、エネルギー範囲`[E0, E1]`における正孔濃度を計算する。

詳細説明: `DOSfh`関数を`E0`から`E1`まで`integrate`関数 (台形公式) を用いて数値積分することで正孔濃度を求めます。 デバッグモードが有効な場合、積分エラーが出力されます。

パラメータ:
  • T (float) -- 温度 (K)。

  • EF (float) -- フェルミ準位。

  • E0 (float) -- 積分範囲の開始エネルギー。

  • E1 (float) -- 積分範囲の終了エネルギー。

戻り値:

エネルギー範囲`[E0, E1]`における正孔濃度。

戻り値の型:

float

electrical.EF_T_DOS.exec_EF()[ソース]

Fermiレベル依存性の計算と結果のプロットを実行する。

概要: 特定の温度 (T0) の下で、フェルミ準位を掃引し、キャリア密度、ホール係数、有効状態密度などのEF依存性を計算・グラフ表示する。

詳細説明: EFmin`から`EFmax`までのフェルミ準位を`nEF`ステップで掃引し、各EFにおける 電子濃度 (`Ne)、正孔濃度 (Nh)、イオン化ドナー密度 (NDp)、 イオン化アクセプター密度 (NAm)、ホール係数 (RH) などを計算します。 さらに、有効状態密度 (NC, NV) も計算し、Matplotlibを使って複数のグラフにプロットして表示します。

戻り値:

なし (ただし、内部で終了処理を含む可能性あり)

戻り値の型:

None

electrical.EF_T_DOS.exec_T()[ソース]

温度依存性の計算と結果のプロットを実行する。

概要: 指定された温度範囲でFermiレベル、キャリア密度、ホール係数などの温度依存性を計算し、結果をグラフ表示する。

詳細説明: Tmin`から`Tmax`までの温度を`nT`ステップで掃引し、各温度において電荷中性条件 (`Ne + NAm - Nh - NDp = 0) を満たすFermiレベル (EF) を二分法で決定します。 その後、電子濃度 (Ne)、正孔濃度 (Nh)、イオン化ドナー密度 (NDp)、 イオン化アクセプター密度 (NAm)、ホール係数 (RH) などを計算し、 Matplotlibを使って複数のグラフにプロットして表示します。

戻り値:

成功時は0を返す (エラー時は0以外の値を返すことがある)。

戻り値の型:

int

electrical.EF_T_DOS.fe(E, T, EF)[ソース]

Fermi-Dirac分布関数を計算する。

概要: 指定されたエネルギー`E`、温度`T`、フェルミ準位`EF`における電子の占有確率を計算する。

詳細説明: Fermi-Dirac分布関数 1 / (exp((E - EF) * e / kB / T) + 1.0) を計算します。 温度`T`が0 Kの場合、Fermi準位`EF`より低いエネルギーでは1.0、高いエネルギーでは0.0を返します(ステップ関数)。

パラメータ:
  • E (float) -- エネルギー。

  • T (float) -- 温度 (K)。

  • EF (float) -- フェルミ準位。

戻り値:

Fermi-Dirac分布関数の値。

戻り値の型:

float

electrical.EF_T_DOS.fh(E, T, EF)[ソース]

正孔のFermi-Dirac分布関数 (1 - fe) を計算する。

概要: 指定されたエネルギー`E`、温度`T`、フェルミ準位`EF`における正孔の占有確率を計算する。

詳細説明: 電子のFermi-Dirac分布関数`fe(E, T, EF)`の補数として計算されます。

パラメータ:
  • E (float) -- エネルギー。

  • T (float) -- 温度 (K)。

  • EF (float) -- フェルミ準位。

戻り値:

正孔のFermi-Dirac分布関数の値。

戻り値の型:

float

electrical.EF_T_DOS.getarg(position, defval=None)[ソース]

コマンドライン引数を取得する。

概要: 指定された位置のコマンドライン引数を取得する。

詳細説明: `sys.argv`リストから`position`で指定された位置の引数を取得します。 引数が存在しない場合は、`defval`で指定されたデフォルト値を返します。

パラメータ:
  • position (int) -- 取得する引数の位置 (0はスクリプト名)。

  • defval (any, optional) -- 引数が存在しない場合に返すデフォルト値 (オプション)。

戻り値:

指定された位置のコマンドライン引数、またはデフォルト値。

戻り値の型:

str or any

electrical.EF_T_DOS.getfloatarg(position, defval=None)[ソース]

コマンドライン引数を浮動小数点数として取得する。

概要: 指定された位置のコマンドライン引数を浮動小数点数に変換して取得する。

詳細説明: `getarg`で引数を取得した後、`pfloat`関数を用いてfloat型に変換します。 引数が存在しない場合や変換に失敗した場合は、`defval`で指定されたデフォルト値を返します。

パラメータ:
  • position (int) -- 取得する引数の位置 (0はスクリプト名)。

  • defval (any, optional) -- 引数が存在しない場合や変換に失敗した場合に返すデフォルト値 (オプション)。

戻り値:

変換された浮動小数点数、またはデフォルト値。

戻り値の型:

float or None

electrical.EF_T_DOS.getintarg(position, defval=None)[ソース]

コマンドライン引数を整数として取得する。

概要: 指定された位置のコマンドライン引数を整数に変換して取得する。

詳細説明: `getarg`で引数を取得した後、`pint`関数を用いてint型に変換します。 引数が存在しない場合や変換に失敗した場合は、`defval`で指定されたデフォルト値を返します。

パラメータ:
  • position (int) -- 取得する引数の位置 (0はスクリプト名)。

  • defval (any, optional) -- 引数が存在しない場合や変換に失敗した場合に返すデフォルト値 (オプション)。

戻り値:

変換された整数、またはデフォルト値。

戻り値の型:

int or None

electrical.EF_T_DOS.integrate(func, E0, E1, h)[ソース]

台形公式を用いて関数を数値積分する。

概要: 与えられた関数`func`を`E0`から`E1`まで、ステップ幅`h`で台形公式により数値積分する。

詳細説明: 積分範囲`[E0, E1]`を`h`のステップで分割し、台形公式 h * (0.5 * (y0 + yn) + sum(y[1:n-1])) を適用して積分値を計算します。 scipy.integrate.quad`の代替として使用されます。エラー値は常に-1.0`を返します。

パラメータ:
  • func (callable[[float], float]) -- 積分する関数 (エネルギーEを引数に取り、数値を返す関数)。

  • E0 (float) -- 積分範囲の開始エネルギー。

  • E1 (float) -- 積分範囲の終了エネルギー。

  • h (float) -- 積分ステップ幅。

戻り値:

積分結果とダミーのエラー値 (-1.0) のリスト。

戻り値の型:

list[float, float]

electrical.EF_T_DOS.main()[ソース]

プログラムのメインエントリポイント。

概要: コマンドライン引数の処理、DOSCARデータの読み込み、バンドエッジの特定、および選択された計算モードの実行を行う。

詳細説明: 1. updatevars()`を呼び出してコマンドライン引数を解析し、グローバル変数を設定します。 2. 指定されたファイルからDOSデータを読み込み、セル体積でスケーリングします。 3. `FindBandEdges()`を使用して価電子帯上端 (`EV) と伝導帯下端 (EC) を特定します。 4. ドナーおよびアクセプター準位を設定します。 5. 設定された計算モード (mode) に基づいて、`exec_T()`または`exec_EF()`のいずれかを実行します。 モードが不正な場合はエラーメッセージを出力し終了します。

戻り値:

なし

戻り値の型:

None

electrical.EF_T_DOS.pfloat(str)[ソース]

文字列を浮動小数点数に変換する。

概要: 与えられた文字列をfloat型に変換して返す。変換できない場合はNoneを返す。

パラメータ:

str (str) -- 変換する文字列。

戻り値:

変換された浮動小数点数、または変換に失敗した場合はNone。

戻り値の型:

float or None

electrical.EF_T_DOS.pint(str)[ソース]

文字列を整数に変換する。

概要: 与えられた文字列をint型に変換して返す。変換できない場合はNoneを返す。

パラメータ:

str (str) -- 変換する文字列。

戻り値:

変換された整数、または変換に失敗した場合はNone。

戻り値の型:

int or None

electrical.EF_T_DOS.read_csv(infile, xmin=None, xmax=None, delimiter=',')[ソース]

CSVファイルからデータを読み込む。

概要: 指定されたCSVファイルからヘッダーと2列の数値データを読み込む。

詳細説明: `infile`で指定されたCSVファイルを読み込み、最初の行をヘッダーとして解釈します。 その後の行から、1列目をxデータ、2列目をyデータとして読み込みます。 `xmin`と`xmax`が指定されている場合、xデータがこの範囲内の行のみが処理されます。

パラメータ:
  • infile (str) -- 読み込むCSVファイルのパス。

  • xmin (float, optional) -- xデータの最小値。この値より小さいxを持つ行は無視される (オプション)。

  • xmax (float, optional) -- xデータの最大値。この値より大きいxを持つ行は無視される (オプション)。

  • delimiter (str, optional) -- CSVファイルの区切り文字 (デフォルトは',')。

戻り値:

ヘッダー、xデータ、yデータのタプル。

戻り値の型:

tuple[list[str], list[float], list[float]]

electrical.EF_T_DOS.rieman(x0, dx, y, xmin, xmax)[ソース]

リーマン和を用いて数値を積分する。

概要: 与えられたy値の配列に対し、指定された範囲内でリーマン和による近似積分を行う。

詳細説明: x軸の開始点`x0`とステップ幅`dx`、そして対応するy値の配列`y`を用いて、 積分範囲`[xmin, xmax]`内でのy値の合計を計算し、`dx`を乗算して近似積分値を求めます。 この関数は単純なリーマン和であり、より高度な数値積分手法ではありません。

パラメータ:
  • x0 (float) -- x軸の開始点。

  • dx (float) -- x軸のステップ幅。

  • y (list[float]) -- 積分するy値の配列。

  • xmin (float) -- 積分範囲の最小値。

  • xmax (float) -- 積分範囲の最大値。

戻り値:

計算されたリーマン和による近似積分値。

戻り値の型:

float

electrical.EF_T_DOS.savecsv(outfile, header, datalist)[ソース]

データをCSVファイルに保存する。

概要: 指定されたヘッダーとデータリストをCSV形式でファイルに書き込む。

詳細説明: `outfile`で指定されたファイル名でCSVファイルを開き、`header`を1行目、 `datalist`の内容を以降の行に書き込みます。`datalist`は、各要素が1つの列に対応する リストのリストとして期待されます。

パラメータ:
  • outfile (str) -- 出力するCSVファイルのパス。

  • header (list[str]) -- CSVのヘッダー行となる文字列のリスト。

  • datalist (list[list[any]]) -- 保存するデータ。各要素が1つの列に対応するリストのリスト。 例: [[col1_data1, col1_data2], [col2_data1, col2_data2]]

戻り値:

なし

戻り値の型:

None

electrical.EF_T_DOS.updatevars()[ソース]

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

概要: `sys.argv`からコマンドライン引数を解析し、計算モードや関連するパラメータをグローバル変数に設定する。

詳細説明: スクリプトの実行時に渡された引数をチェックし、mode, file, Tmin, Tmax, nT, `nEF`などの 主要な設定変数を更新します。引数が不足している場合は`usage`関数を呼び出して終了します。

戻り値:

なし

戻り値の型:

None

electrical.EF_T_DOS.usage()[ソース]

スクリプトの利用方法を表示する。

概要: このスクリプトをコマンドラインから実行する際の引数の形式と例を出力する。

詳細説明: 引数なしでスクリプトが実行された場合や、ユーザーが利用方法を確認したい場合に呼び出されます。 主に`mode` (T`または`EF) と、それに続くファイル名や計算範囲に関する引数について説明します。