anharmonic3D プログラム仕様
1次元単原子チェーン(最近接相互作用)における非調和フォノン振動数の温度シフトを計算するモジュール。
関連リンク: D:/git/sphinx/tkProg/source/tiny_simulations/anharmonic3D.py
詳細説明: モデル(相対変位 Δ_n = u_{n+1} - u_n):
V = Σ_n [ (K2/2) Δ_n^2 + (K3/3!) Δ_n^3 + (K4/4!) Δ_n^4 ]
- 以下の摂動論的計算を行います:
ω_q(T) ≈ ω_q + Δω_q^(4)(T) + Δω_q^(3)(T)
- ここで
Δω_q ≈ Re Σ(q, ω_q) / (2 ω_q)
4次 (K4) "Tadpole" シフト: ⟨|u_k|^2⟩ の単純な熱平均。
3次 (K3) "Bubble" シフト: kに対する主値積分(小さな eta で正則化)。
単位系: - デフォルトでSI単位系を使用 (a: m, M: kg, K2: N/m, K3: N/m^2, K4: N/m^3)。 - 内部の振動数は rad/s で計算され、出力時に THz へ変換可能です。
k2_func/k3_func/k4_func を編集することで、K2/K3/K4 を (delta, T) の関数としてカスタマイズできます。
- tiny_simulations.anharmonic3D.C_of_q(q: ndarray, a: float) ndarray[ソース]
関数 C(q) = e^{iqa} - 1 を計算する。
詳細説明: 主に |C(q)|^2 = 4 sin^2(qa/2) として利用される。
- パラメータ:
q -- np.ndarray, 波数ベクトル
a -- float, 格子定数
- 戻り値:
np.ndarray, 計算されたC(q)の複素数値
- class tiny_simulations.anharmonic3D.Params(a: float, M: float, Nk: int, k_cut: float, use_quantum: bool, eta_rel: float)[ソース]
ベースクラス:
object計算に使用する物理パラメータや条件を保持するデータクラス。
詳細説明: 格子定数、質量、k点数、カットオフ、量子論フラグ、正則化係数などをまとめている。
- パラメータ:
a -- float, 格子定数
M -- float, 質量
Nk -- int, k点数
k_cut -- float, 波数kのカットオフ
use_quantum -- bool, 量子論的計算を使用するかどうか
eta_rel -- float, 正則化パラメータの相対値
- tiny_simulations.anharmonic3D.absC2(q: ndarray, a: float) ndarray[ソース]
|C(q)|^2 = 4 sin^2(qa/2) を計算する。
- パラメータ:
q -- np.ndarray, 波数ベクトル
a -- float, 格子定数
- 戻り値:
np.ndarray, |C(q)|^2の実数値
- tiny_simulations.anharmonic3D.bose_n(omega: ndarray, T: float, use_quantum: bool = True) ndarray[ソース]
ボース分布関数 n(ω) = 1/(exp(β ħ ω) - 1) を計算する。
詳細説明: use_quantum=False の場合は古典極限 n ~ kT/(ħ ω) を用いる。
- パラメータ:
omega -- np.ndarray, 振動数
T -- float, 温度
use_quantum -- bool, 量子論的計算を使用するかどうか (デフォルト: True)
- 戻り値:
np.ndarray, ボース分布関数の値
- tiny_simulations.anharmonic3D.coth_halfbeta_hw(omega: ndarray, T: float, use_quantum: bool = True) ndarray[ソース]
双曲線余接関数 coth(βħω/2) を計算する。
詳細説明: T -> 0 で値は 1 に漸近する。古典極限では coth ~ 2kT/(ħω) を用いる。
- パラメータ:
omega -- np.ndarray, 振動数
T -- float, 温度
use_quantum -- bool, 量子論的計算を使用するかどうか (デフォルト: True)
- 戻り値:
np.ndarray, coth(βħω/2) の値
- tiny_simulations.anharmonic3D.delta_omega_cubic_bubble(q: float, kgrid: ndarray, a: float, M: float, K2: float, K3: float, T: float, use_quantum: bool, eta: float, k_cut: float) float[ソース]
3次(K3)のBubbleシフト Δω_q^(3) を計算する。
詳細説明: Δω_q^(3) = Re Σ^(3)(q, ω_q) / (2 ω_q)
- パラメータ:
q -- float, 波数q
kgrid -- np.ndarray, 波数kのグリッド
a -- float, 格子定数
M -- float, 質量
K2 -- float, 調和力の定数
K3 -- float, 3次非調和定数
T -- float, 温度
use_quantum -- bool, 量子論的計算を使用するかどうか
eta -- float, 正則化パラメータ
k_cut -- float, 赤外発散を防ぐためのkのカットオフ
- 戻り値:
float, 3次周波数シフト量 Δω_q^(3)
- tiny_simulations.anharmonic3D.delta_omega_quartic_tadpole(q: float, kgrid: ndarray, a: float, M: float, K2: float, K4: float, T: float, use_quantum: bool, k_cut: float) float[ソース]
4次(K4)のTadpoleシフト Δω_q^(4) を計算する。
詳細説明: 以下の構造を持つ1次元の実装:
<|u_k|^2> = ħ/(2 M ω_k) coth(βħω_k/2) Δω_q^(4) = ReΣ/(2ω_q) を返す。
- パラメータ:
q -- float, 波数q
kgrid -- np.ndarray, 波数kのグリッド
a -- float, 格子定数
M -- float, 質量
K2 -- float, 調和力の定数
K4 -- float, 4次非調和定数
T -- float, 温度
use_quantum -- bool, 量子論的計算を使用するかどうか
k_cut -- float, 赤外発散を防ぐためのkのカットオフ
- 戻り値:
float, 4次周波数シフト量 Δω_q^(4)
- tiny_simulations.anharmonic3D.k2_func(delta: float = 0.0, T: float | None = None) float[ソース]
調和力の定数K2を計算する。
詳細説明: 調和力の定数K2 [N/m] (無次元規則を使用する場合は一貫した単位)。 任意の関数に置き換え可能。
- パラメータ:
delta -- float, 歪み (デフォルト: 0.0)
T -- float | None, 温度 (デフォルト: None)
- 戻り値:
float, 調和力の定数K2
- tiny_simulations.anharmonic3D.k3_func(delta: float = 0.0, T: float | None = None) float[ソース]
3次の非調和定数K3を計算する。
詳細説明: 3次の非調和定数K3 [N/m^2]。 任意の関数に置き換え可能。ゼロ以外の値を設定するとBubbleシフトが有効になります。
- パラメータ:
delta -- float, 歪み (デフォルト: 0.0)
T -- float | None, 温度 (デフォルト: None)
- 戻り値:
float, 3次の非調和定数K3
- tiny_simulations.anharmonic3D.k4_func(delta: float = 0.0, T: float | None = None) float[ソース]
4次の非調和定数K4を計算する。
詳細説明: 4次の非調和定数K4 [N/m^3]。 任意の関数に置き換え可能。ゼロ以外の値を設定するとTadpoleシフトが有効になります。
- パラメータ:
delta -- float, 歪み (デフォルト: 0.0)
T -- float | None, 温度 (デフォルト: None)
- 戻り値:
float, 4次の非調和定数K4
- tiny_simulations.anharmonic3D.main() None[ソース]
メインの実行関数。
詳細説明: コマンドライン引数を読み込み、計算パラメータを設定して各温度における フォノン振動数のシフトを計算し、CSVファイルとして出力する。
- 戻り値:
None
- tiny_simulations.anharmonic3D.make_kgrid(Nk: int, a: float) ndarray[ソース]
第1ブリュアンゾーン内の均一なk点グリッドを作成する。
詳細説明: 区間 (-pi/a, pi/a] における均一なk点グリッドを生成する。
- パラメータ:
Nk -- int, k点グリッドの数
a -- float, 格子定数
- 戻り値:
np.ndarray, k点グリッドの配列
- tiny_simulations.anharmonic3D.omega_T_for_q(q: float, T: float, kgrid: ndarray, p: Params, k2f: Callable[[float, float | None], float], k3f: Callable[[float, float | None], float], k4f: Callable[[float, float | None], float]) Tuple[float, float, float, float][ソース]
指定された波数qと温度Tに対する振動数および各シフト量を計算する。
- パラメータ:
q -- float, 波数q
T -- float, 温度
kgrid -- np.ndarray, 波数kのグリッド
p -- Params, 計算パラメータを保持するデータクラス
k2f -- Callable, K2を計算する関数
k3f -- Callable, K3を計算する関数
k4f -- Callable, K4を計算する関数
- 戻り値:
Tuple[float, float, float, float], (初期振動数, 3次シフト量, 4次シフト量, シフト後振動数)
- tiny_simulations.anharmonic3D.omega_harmonic(q: ndarray, a: float, M: float, K2: float) ndarray[ソース]
調和分散(最近接相互作用)による振動数を計算する。
詳細説明: ω_q^2 = (4 K2 / M) sin^2(qa/2) を用いて振動数を求める。
- パラメータ:
q -- np.ndarray, 波数ベクトル
a -- float, 格子定数
M -- float, 質量
K2 -- float, 調和力の定数
- 戻り値:
np.ndarray, 計算された調和振動数
- tiny_simulations.anharmonic3D.parse_args() Namespace[ソース]
コマンドライン引数をパースする。
- 戻り値:
argparse.Namespace, パースされた引数
- tiny_simulations.anharmonic3D.re_sigma_cubic_bubble(q: float, kgrid: ndarray, a: float, M: float, K2: float, K3: float, T: float, use_quantum: bool, eta: float, k_cut: float) float[ソース]
Bubble構造による自己エネルギーの実部 Re Σ^(3)(q, ω_q) を計算する。
詳細説明: etaを用いた正則化により主値積分を近似する:
Re[1/(x + iη)] = x/(x^2 + η^2)
- パラメータ:
q -- float, 波数q
kgrid -- np.ndarray, 波数kのグリッド
a -- float, 格子定数
M -- float, 質量
K2 -- float, 調和力の定数
K3 -- float, 3次非調和定数
T -- float, 温度
use_quantum -- bool, 量子論的計算を使用するかどうか
eta -- float, 正則化パラメータ
k_cut -- float, 赤外発散を防ぐためのkのカットオフ
- 戻り値:
float, 自己エネルギーの実部 Re Σ^(3)(q, ω_q)
- tiny_simulations.anharmonic3D.v3_squared(q: float, k: ndarray, a: float, M: float, K3: float, omega_q: float, omega_k: ndarray, omega_qmk: ndarray) ndarray[ソース]
3次相互作用の行列要素の2乗 |V3(q,k,q-k)|^2 を計算する。
詳細説明: V3 ∝ K3 * C(q)C(k)C(q-k) / sqrt( (2M)^3 ω_q ω_k ω_{q-k} ) 複素位相を避けるため |C|^2 = 4 sin^2(...) を使用する。
- パラメータ:
q -- float, 波数q
k -- np.ndarray, 波数kの配列
a -- float, 格子定数
M -- float, 質量
K3 -- float, 3次非調和定数
omega_q -- float, 波数qにおける調和振動数
omega_k -- np.ndarray, 波数kにおける調和振動数
omega_qmk -- np.ndarray, 波数q-kにおける調和振動数
- 戻り値:
np.ndarray, |V3(q,k,q-k)|^2 の値