tb1d プログラム仕様

1Dタイトバインディング法による量子井戸ポテンシャルを持つバンド計算スクリプト。

このスクリプトは、一次元タイトバインディング法を用いて、量子井戸ポテンシャル下での電子のバンド構造や波動関数を計算し、可視化します。 原子配列やポテンシャル形状、計算モード(basis, band, wf)などのパラメータを設定ファイル的に変更して実行できます。

tb1d.py 技術ドキュメント

jsap_crystal.tb1d.atominf(i, atoms)[ソース]

指定されたインデックスの原子情報を取り出します。

パラメータ:
  • i -- 原子リスト内でのインデックス。

  • atoms -- 原子情報を格納したリスト。

戻り値:

原子の名前、井戸の幅、基底ポテンシャル、有効質量。

jsap_crystal.tb1d.band()[ソース]

バンド構造計算モードの処理を実行します。

結晶内の有限量子井戸の固有状態を計算し、それらを基底関数として使用して、 タイトバインディング法によるバンド構造を計算します。 計算されたバンド構造とポテンシャル、井戸内準位をプロットします。

戻り値:

None

jsap_crystal.tb1d.basis(dx, orbital, Nx=0)[ソース]

指定された軌道(固有状態)の波動関数値を計算します。

有限量子井戸ポテンシャルにおける波動関数の解析解に基づき、中心からの相対距離`dx`における波動関数の値を返します。

パラメータ:
  • dx -- 井戸の中心からの相対X座標。

  • orbital -- 固有状態のパラメータ(パリティ、幅、エネルギー、係数など)を含む辞書。

  • Nx -- この引数は現在の実装では使用されていません。

戻り値:

波動関数値。

jsap_crystal.tb1d.build_basisset(crystal)[ソース]

結晶構造に基づいて、タイトバインディング法の基底関数セットを構築します。

各サイトとそこに含まれる原子の各軌道(固有状態)を組み合わせ、一意の基底状態としてリストにまとめます。

パラメータ:

crystal -- 結晶サイトの定義リスト。

戻り値:

基底関数のリスト(各要素はサイト、軌道、原子情報、座標、固有状態パラメータを含む辞書)。

jsap_crystal.tb1d.build_potential(xmin, xstep, n, Vvac, crystal)[ソース]

指定された範囲とステップでポテンシャルエネルギーのプロファイルを作成します。

パラメータ:
  • xmin -- X座標の最小値。

  • xstep -- X座標のステップ幅。

  • n -- サンプル点数。

  • Vvac -- 真空準位のポテンシャルエネルギー。

  • crystal -- 結晶サイトの定義リスト。

戻り値:

X座標の配列と対応するポテンシャルエネルギーの配列。

jsap_crystal.tb1d.cal_E(orbital, xmin, xmax, nx)[ソース]

波動関数とポテンシャルから、固有状態の運動エネルギーとポテンシャルエネルギーを数値的に計算し、全エネルギーを導出します。

与えられた軌道(固有状態)の波動関数を使用し、指定されたX範囲でポテンシャルエネルギーと波動関数の2階微分を計算します。 これらを用いて、規格化積分、運動エネルギー、ポテンシャルエネルギー、および全エネルギーを数値積分によって計算します。

パラメータ:
  • orbital -- 計算対象の固有状態のパラメータを含む辞書。

  • xmin -- 積分範囲の最小X座標。

  • xmax -- 積分範囲の最大X座標。

  • nx -- 積分点数。

戻り値:

規格化積分値、運動エネルギー、ポテンシャルエネルギー、全エネルギー。

jsap_crystal.tb1d.cal_E_analytical(orbital)[ソース]

有限量子井戸の固有状態に対して、規格化積分、運動エネルギー、ポテンシャルエネルギー、全エネルギーを解析的に計算します。

井戸内部(well)と障壁外部(barrier)に分けて解析的に積分を実行し、それぞれの寄与を計算します。

パラメータ:

orbital -- 計算対象の固有状態のパラメータを含む辞書。

戻り値:

障壁部のSii、井戸部のSii、全Sii、障壁部のK、井戸部のK、全K、障壁部のU、井戸部のU、全U、障壁部のE、井戸部のE、全E。

jsap_crystal.tb1d.cal_Sij(xmin, xmax, nx, orbital1, orbital2, x01, x02, Nx)[ソース]

2つの異なるサイトにある波動関数間のオーバーラップ積分S_ijを計算します。

サイト1の波動関数1(中心x01)とサイト2の波動関数2(中心x02 + Nx*a)がオーバーラップする領域で、 積を数値積分します。

パラメータ:
  • xmin -- 積分範囲の最小X座標。

  • xmax -- 積分範囲の最大X座標。

  • nx -- 積分点数。

  • orbital1 -- 1つ目のサイトの固有状態のパラメータを含む辞書。

  • orbital2 -- 2つ目のサイトの固有状態のパラメータを含む辞書。

  • x01 -- 1つ目のサイトのX座標。

  • x02 -- 2つ目のサイトのX座標。

  • Nx -- サイト2がサイト1からどれだけ周期的に離れているかを示す整数(Nx*a)。

戻り値:

計算されたオーバーラップ積分値(複素数)。

jsap_crystal.tb1d.cal_basis(x0, wfmin, wfmax, nwf, orbital)[ソース]

特定の軌道(固有状態)の波動関数を、指定されたX範囲で計算します。

`wfmin`から`wfmax`までの範囲を`nwf`点でサンプリングし、各点で`basis`関数を呼び出して波動関数プロファイルを作成します。 結果のX座標は`x0`でオフセットされます。

パラメータ:
  • x0 -- 波動関数の中心X座標。

  • wfmin -- 計算範囲の相対X座標最小値。

  • wfmax -- 計算範囲の相対X座標最大値。

  • nwf -- 計算点数。

  • orbital -- 固有状態のパラメータを含む辞書。

戻り値:

絶対X座標のリストと対応する波動関数値のリスト。

jsap_crystal.tb1d.cal_cdiff2(h, f)[ソース]

複素数値配列の2階中心差分を計算します。

空間間隔`h`と複素数値関数`f`の配列が与えられたとき、各点での2階微分(ラプラシアン)を近似します。 境界では隣接する点を使用します。

パラメータ:
  • h -- 空間ステップ幅。

  • f -- 複素数値関数の配列。

戻り値:

2階微分値の複素数値配列。

jsap_crystal.tb1d.cal_delta_even(E, w, V0, meff)[ソース]

有限量子井戸の偶関数解の特性方程式の左辺(デルタ関数)を計算します。

ポテンシャル井戸の幅`w`、井戸の深さ`V0`、有効質量`meff`が与えられたときの、エネルギー`E`に対応する特性方程式の一部を返します。

パラメータ:
  • E -- 井戸底からのエネルギー。

  • w -- 井戸の幅。

  • V0 -- 井戸の深さ(真空準位と井戸底の差)。

  • meff -- 有効質量。

戻り値:

デルタ関数(特性方程式の一部)の値。

jsap_crystal.tb1d.cal_delta_odd(E, w, V0, meff)[ソース]

有限量子井戸の奇関数解の特性方程式の左辺(デルタ関数)を計算します。

ポテンシャル井戸の幅`w`、井戸の深さ`V0`、有効質量`meff`が与えられたときの、エネルギー`E`に対応する特性方程式の一部を返します。

パラメータ:
  • E -- 井戸底からのエネルギー。

  • w -- 井戸の幅。

  • V0 -- 井戸の深さ(真空準位と井戸底の差)。

  • meff -- 有効質量。

戻り値:

デルタ関数(特性方程式の一部)の値。

jsap_crystal.tb1d.cal_tij(xmin, xmax, nx, orbital1, orbital2, x01, x02, Nx)[ソース]

2つの異なるサイトにある波動関数間の遷移積分(ホッピング積分)t_ijを計算します。

サイト1の波動関数1(中心x01)とサイト2の波動関数2(中心x02 + Nx*a)がオーバーラップする領域で、 ポテンシャルを介した積を数値積分します。

パラメータ:
  • xmin -- 積分範囲の最小X座標。

  • xmax -- 積分範囲の最大X座標。

  • nx -- 積分点数。

  • orbital1 -- 1つ目のサイトの固有状態のパラメータを含む辞書。

  • orbital2 -- 2つ目のサイトの固有状態のパラメータを含む辞書。

  • x01 -- 1つ目のサイトのX座標。

  • x02 -- 2つ目のサイトのX座標。

  • Nx -- サイト2がサイト1からどれだけ周期的に離れているかを示す整数(Nx*a)。

戻り値:

計算された遷移積分値(複素数)。

jsap_crystal.tb1d.find_eigenstates(Vvac, Vbase, wwidth, meff, Emin, Emax, nE, nmaxiter, eps)[ソース]

有限量子井戸の偶関数および奇関数の固有状態エネルギーとその波動関数パラメータを計算します。

find_eigenstates_base`を使用して偶関数と奇関数の固有エネルギーを探索し、それらをエネルギー順にソートします。 各固有状態に対して、波動関数の係数(`Cb, Cw)と波長(kb, kw)を計算し、結果に含めます。

パラメータ:
  • Vvac -- 真空準位のポテンシャルエネルギー。

  • Vbase -- 井戸内の基底ポテンシャルエネルギー。

  • wwidth -- 井戸の幅。

  • meff -- 有効質量。

  • Emin -- エネルギー探索範囲の最小値。

  • Emax -- エネルギー探索範囲の最大値。

  • nE -- エネルギー探索の分割数。

  • nmaxiter -- セカント法の最大反復回数。

  • eps -- セカント法の収束判定の許容誤差。

戻り値:

固有状態のリスト(各要素はエネルギー、パリティ、波動関数パラメータを含む辞書)。

jsap_crystal.tb1d.find_eigenstates_base(parity, Vvac, Vbase, wwidth, meff, Emin, Emax, nE, nmaxiter, eps, IsPrint=0)[ソース]

指定されたパリティ(偶奇性)を持つ有限量子井戸の固有状態エネルギーを探索します。

`Emin`から`Emax`までのエネルギー範囲を`nE`点で走査し、`cal_delta`関数の符号反転を検出して、`refine_E`を用いて固有エネルギーを精密化します。

パラメータ:
  • parity -- 固有状態のパリティ (0:偶関数, 1:奇関数)。

  • Vvac -- 真空準位のポテンシャルエネルギー。

  • Vbase -- 井戸内の基底ポテンシャルエネルギー。

  • wwidth -- 井戸の幅。

  • meff -- 有効質量。

  • Emin -- エネルギー探索範囲の最小値。

  • Emax -- エネルギー探索範囲の最大値。

  • nE -- エネルギー探索の分割数。

  • nmaxiter -- セカント法の最大反復回数。

  • eps -- セカント法の収束判定の許容誤差。

  • IsPrint -- 途中経過を表示するかどうかのフラグ(0で非表示)。

戻り値:

見つかった固有状態のリスト(各要素はエネルギーとパリティを含む辞書)。

jsap_crystal.tb1d.getarg(position, defval=None)[ソース]

コマンドライン引数を安全に取得します。

指定された位置に引数がない場合はデフォルト値を返します。

パラメータ:
  • position -- 取得する引数の位置(0から始まる)。

  • defval -- 引数が見つからない場合に返すデフォルト値。

戻り値:

指定された位置の引数、またはデフォルト値。

jsap_crystal.tb1d.getfloatarg(position, defval=None)[ソース]

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

取得できない場合や変換できない場合はデフォルト値を返します。

パラメータ:
  • position -- 取得する引数の位置(0から始まる)。

  • defval -- 引数が見つからない場合や変換できない場合に返すデフォルト値。

戻り値:

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

jsap_crystal.tb1d.getintarg(position, defval=None)[ソース]

コマンドライン引数を整数として安全に取得します。

取得できない場合や変換できない場合はデフォルト値を返します。

パラメータ:
  • position -- 取得する引数の位置(0から始まる)。

  • defval -- 引数が見つからない場合や変換できない場合に返すデフォルト値。

戻り値:

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

jsap_crystal.tb1d.integrate2(h, y1, y2)[ソース]

2つの関数`y1`と`y2`の積の数値積分を台形近似で計算します。

`h`をステップ幅として、`y1[i] * y2[i]`の値を合計し、`h`を乗じて積分値を近似します。

パラメータ:
  • h -- 積分ステップ幅。

  • y1 -- 1つ目の関数の値のリスト。

  • y2 -- 2つ目の関数の値のリスト。

戻り値:

積分値。

jsap_crystal.tb1d.integrate3(h, y1, y2, y3)[ソース]

3つの関数`y1`, y2, `y3`の積の数値積分を台形近似で計算します。

`h`をステップ幅として、`y1[i] * y2[i] * y3[i]`の値を合計し、`h`を乗じて積分値を近似します。

パラメータ:
  • h -- 積分ステップ幅。

  • y1 -- 1つ目の関数の値のリスト。

  • y2 -- 2つ目の関数の値のリスト。

  • y3 -- 3つ目の関数の値のリスト。

戻り値:

積分値。

jsap_crystal.tb1d.main()[ソース]

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

グローバル変数`mode`の値に応じて、view_basis(), band(), `wf()`のいずれかの関数を呼び出します。 無効なモードが指定された場合はエラーメッセージを表示して終了します。

戻り値:

None

jsap_crystal.tb1d.make_list2(dim1, dim2)[ソース]

指定された次元の2次元リストを作成し、0.0で初期化します。

パラメータ:
  • dim1 -- 1次元目のサイズ。

  • dim2 -- 2次元目のサイズ。

戻り値:

0.0で初期化された2次元リスト。

jsap_crystal.tb1d.make_list3(dim1, dim2, dim3)[ソース]

指定された次元の3次元リストを作成し、0.0で初期化します。

パラメータ:
  • dim1 -- 1次元目のサイズ。

  • dim2 -- 2次元目のサイズ。

  • dim3 -- 3次元目のサイズ。

戻り値:

0.0で初期化された3次元リスト。

jsap_crystal.tb1d.make_list4(dim1, dim2, dim3, dim4)[ソース]

指定された次元の4次元リストを作成し、0.0で初期化します。

パラメータ:
  • dim1 -- 1次元目のサイズ。

  • dim2 -- 2次元目のサイズ。

  • dim3 -- 3次元目のサイズ。

  • dim4 -- 4次元目のサイズ。

戻り値:

0.0で初期化された4次元リスト。

jsap_crystal.tb1d.pfloat(str)[ソース]

文字列を浮動小数点数に安全に変換します。

変換できない場合はNoneを返します。

パラメータ:

str -- 変換する文字列。

戻り値:

変換された浮動小数点数、またはNone。

jsap_crystal.tb1d.pint(str)[ソース]

文字列を整数に安全に変換します。

変換できない場合はNoneを返します。

パラメータ:

str -- 変換する文字列。

戻り値:

変換された整数、またはNone。

jsap_crystal.tb1d.pot(x, Vvac, crystal)[ソース]

指定された位置におけるポテンシャルエネルギーを計算します。

x座標を単位格子aで周期的に還元し、結晶構造に基づいてポテンシャル値を決定します。

パラメータ:
  • x -- ポテンシャルを評価するX座標。

  • Vvac -- 真空準位のポテンシャルエネルギー。

  • crystal -- 結晶サイトの定義リスト。

戻り値:

X座標におけるポテンシャルエネルギー。

jsap_crystal.tb1d.pot_atom(dx, Vvac, crystal)[ソース]

局所座標dxにおける原子ごとのポテンシャルエネルギーを計算します。

主にタイトバインディング計算の積分範囲で、原子を中心とした局所ポテンシャルを評価するために使用されます。

パラメータ:
  • dx -- 原子中心からの相対X座標。

  • Vvac -- 真空準位のポテンシャルエネルギー。

  • crystal -- 結晶サイトの定義リスト。

戻り値:

相対X座標におけるポテンシャルエネルギー。

jsap_crystal.tb1d.quantization_level_inifinite(Vbase, meff, wwidth, iL)[ソース]

無限に深い井戸型ポテンシャルにおける量子化されたエネルギー準位を計算します。

パラメータ:
  • Vbase -- 井戸内の基底ポテンシャルエネルギー。

  • meff -- 有効質量(電子質量の倍数)。

  • wwidth -- 井戸の幅。

  • iL -- 量子数(1から始まる)。

戻り値:

計算されたエネルギー準位。

jsap_crystal.tb1d.reduce(x, x0)[ソース]

xをx0で割った剰余を計算し、指定された範囲に減らします。

xが負の場合でも適切に動作します(Pythonの % 演算子とは異なる挙動)。

パラメータ:
  • x -- 減らす対象の数値。

  • x0 -- 周期の幅。

戻り値:

x0の範囲に減らされたxの値。

jsap_crystal.tb1d.refine_E(cal_delta, E0, E1, nmaxiter, eps, w, V0, meff, IsPrint=0)[ソース]

セカント法(割線法)を用いて、特性方程式の根(エネルギー準位)を精密化します。

`cal_delta`関数が符号を反転する区間`[E0, E1]`内で根を探索し、指定された精度`eps`または最大反復回数`nmaxiter`に達するまで反復します。

パラメータ:
  • cal_delta -- 根を探索するデルタ関数(偶関数または奇関数)。

  • E0 -- 探索範囲の開始エネルギー。

  • E1 -- 探索範囲の終了エネルギー。

  • nmaxiter -- 最大反復回数。

  • eps -- 収束判定の許容誤差。

  • w -- 井戸の幅。

  • V0 -- 井戸の深さ。

  • meff -- 有効質量。

  • IsPrint -- 途中経過を表示するかどうかのフラグ(0で非表示)。

戻り値:

精密化されたエネルギー準位、収束時のエネルギー変化、収束時のデルタ関数の値、または収束しなかった場合はNone。

jsap_crystal.tb1d.search_neighbors(rmax, Nxmax, crystal)[ソース]

指定された範囲内で、各サイトの近接サイトを検索します。

各サイトについて、格子周期`a`を用いて`Nxmax`周期分までの範囲で他のサイトを探索し、`rmax`以内に存在するサイトを近接サイトとしてリストアップします。

パラメータ:
  • rmax -- 近接サイトと見なす最大距離。

  • Nxmax -- 探索する格子周期の最大範囲(-Nxmax から +Nxmax)。

  • crystal -- 結晶サイトの定義リスト。

戻り値:

各サイトの近接サイトリストのリスト。

jsap_crystal.tb1d.siteinf(i, crystal)[ソース]

指定されたインデックスのサイト(結晶内の原子位置)情報を詳細に取り出します。

パラメータ:
  • i -- サイトリスト内でのインデックス。

  • crystal -- サイト情報を格納したリスト。

戻り値:

サイト名、原子インデックス、原子辞書、サイトのX座標、井戸の幅、井戸の最小X座標、井戸の最大X座標、基底ポテンシャル、有効質量。

jsap_crystal.tb1d.solve_eigenstates(k, basisset, neighborlist, IsPrint=0)[ソース]

指定された波数`k`に対して、タイトバインディング法によるハミルトニアンとオーバーラップ行列を構築し、固有状態(バンドエネルギー)を解きます。

構築された基底セットと近接サイト情報を用いて、ハミルトニアン行列`Fij`とオーバーラップ行列`Sij`を計算します。 その後、一般化固有値問題 Fij * c = E * Sij * c を解く代わりに、`Sij`の逆行列を`Fij`に左から掛けた行列の固有値を計算します。

パラメータ:
  • k -- 波数(π/a単位)。

  • basisset -- 基底関数のリスト。

  • neighborlist -- 各サイトの近接サイトのリスト。

  • IsPrint -- 詳細な計算過程を表示するかどうかのフラグ(0で非表示)。

戻り値:

計算されたバンドエネルギーの配列(実部)、固有ベクトルの配列(現在の実装では空)、および計算結果の詳細を含む辞書。

jsap_crystal.tb1d.terminate(message=None)[ソース]

指定されたメッセージを表示し、プログラムを終了します。

終了前に`usage()`関数を呼び出して使用方法を表示します。

パラメータ:

message -- 表示するエラーメッセージ。

戻り値:

None

jsap_crystal.tb1d.usage()[ソース]

プログラムの使用方法を標準出力に表示します。

戻り値:

None

jsap_crystal.tb1d.view_basis()[ソース]

基底関数表示モードの処理を実行します。

設定された結晶内の原子ごとのポテンシャル、無限井戸・有限井戸の量子化準位、 および有限井戸の波動関数を計算し、プロットします。 また、解析的および数値的なエネルギー計算結果も表示します。

戻り値:

None

jsap_crystal.tb1d.wf()[ソース]

波動関数プロットモードの処理を実行します。

現在、この関数は実装されておらず、`terminate()`を呼び出して終了します。

戻り値:

None

jsap_crystal.tb1d.wf_innerproduct(x, y1, y2)[ソース]

2つの波動関数`y1`と`y2`の内積を数値的に計算します。

与えられたX座標`x`と関数値`y1`, `y2`を用いて、台形近似により内積を計算します。

パラメータ:
  • x -- X座標のリスト。

  • y1 -- 1つ目の波動関数の値のリスト。

  • y2 -- 2つ目の波動関数の値のリスト。

戻り値:

2つの波動関数の内積。