Skip to content

kBT — 有限温度の自己エネルギー計算 (tetrakbt / t_sigmakbt)

ecalj main / 2026-06 実装、2026-09 検証

金属の QSGW が反復ごとに振動して収束しないことがある。原因は Fermi 面の 鋭い応答で、電子温度を入れて Fermi 面を物理的に広げるのがここで述べる方法である。

側()と 側()にそれぞれ別のキーがあり、 両方を同じ温度にして使うのが本来の形である。

キーどこに効くか実装
tetrakbt + t_tetrakbt の占有数(→ )main
t_sigmakbt の占有数main

1. なぜ要るか

金属の QSGW は、k メッシュが Fermi 面の鋭い応答(ネスティング)を解像すると 反復ごとに振動しうる。テトラヘドロン法は Fermi 面を「厳密に」標本化するので に鋭い小 構造が立ち、 が毎反復の Fermi 面のずれに強く反応する。

電子温度で Fermi 面を広げるのが根本的な正則化である。 方向に平滑化する SmearX0 は症状だけを扱う 対症療法で、こちらとは別物である。

実測では LiTi₂O₄(金属スピネル)で、 のメッシュ依存が小さくなり、 QSGW が安定した(1000 K で eV 以内 rms 13.8 meV。消えたと 言い切るには不満が残る点は §5.3 の末尾に挙げた。 §5.3 に図と数値、 §5.2 に反復ごとの PDF)。


2. 側 — tetrakbt

ctrlg.<sname>.toml[gw]:

toml
[gw]
tetrakbt   = true     # chi0 を有限温度テトラヘドロンで (method B')
t_tetrakbt = 2000.0   # 電子温度 (K)。kBT[eV] ~ T/11604

何が起きるか:

  • の占有因子が温度 の Fermi 分布になる (tetwt5 / lindtet6_kbt、エネルギー畳み込みの method B'。 で厳密に元へ戻る)
  • heftet(GW フローの imode=1)が有限温度の Fermi 準位を二分法で解き EFERMI_kbt に書く のテトラヘドロンがそれを読むので、 占有数と が同じ温度を指す

出力での確認:

tetrakbt_init: T[K], kbt[Ry], kbt[eV]  2000  0.12667E-01 0.17234E+00

3. 側 — t_sigmakbt

tetrakbt だけでは のままである( の極は Gaussian の esmr で平滑化され、Fermi 準位も のもの)。t_sigmakbt はそこを揃える。

toml
[gw]
tetrakbt   = true
t_tetrakbt = 2000.0
t_sigmakbt = 2000.0   # Sigma 側の電子温度 (K)。0 (既定) で従来どおり

t_sigmakbt == t_tetrakbt にすること。 そうして初めて ()と ()が一つの物理的な温度を共有する。

何が変わるか

t_sigmakbt > 0 のとき、sigmakbt_setup が 2 つのことをする:

  1. 自己エネルギーの Fermi 準位を EFERMI_kbt に切り替える (EFERMI ではなく、tetrakbt と同じ )
  2. 占有数の核を Gaussian から Fermi–Dirac に替える の両方

Gaussian 平滑化(幅 esmr)

が、Fermi–Dirac の累積分布

に置き換わる。 で鋭い階段関数に戻り、既定(t_sigmakbt = 0)では 式 (1) の従来の挙動をそのまま再現する。

出力での確認

sigmakbt_setup: t_sigmakbt[K]=  2000.0 kbt[Ry]=  0.12667E-01 ef<-EFERMI_kbt=   0.123456

EFERMI_kbt が無いとき

t_sigmakbt > 0 でも EFERMI_kbt が無ければ、警告を一行出して 側の有限温度は適用されない(従来どおり動く):

sigmakbt_setup: WARNING t_sigmakbt>0 but EFERMI_kbt missing (need tetrakbt/heftet).
                Sigma-side finite-T NOT applied.

EFERMI_kbt を書くのは tetrakbt を有効にした heftet なので、 t_sigmakbt は単独では使えない。 必ず tetrakbt = true と併せて設定すること。

esmr は既定のままにすること

t_sigmakbt > 0 にしても、 側の状態範囲は依然 esmr で決まっている。 esmr を既定(0.01 Ry)より下げたり を 3000 K より上げたりすると、 警告なしに占有数が切り捨てられる。§7.3 を見よ。


4. 温度の選び方

を、k メッシュが Fermi 面領域で持つエネルギー間隔と同程度以上に取る:

LiTi₂O₄ の / では K( eV)が 使える範囲だった。求めたい量が について収束していること、できれば 同じ で 2 つの k メッシュが一致することを確認すること。

温度を上げると何が直るか

LiTi₂O₄ の QSGW 第 1 反復を だけ変えて重ねたもの (いずれも deltaq_scale = 0.3。共通の静電ゼロで揃え、 を原点に取った)。

T 依存

図をクリックすると拡大する。


( テトラヘドロン lindtet6、黒)では Ti-3d 帯が Γ–L 上で −3.9 eV まで落ち込む。これは分散ではなく head の破綻で、 温度を上げると単調に消える:

Γ–L 上 () の 帯の底
0 (lindtet6)−3.91 eV
1000 K−1.31 eV
2000 K−0.66 eV
3000 K−0.50 eV

これが有限温度を入れる理由である。 ただし で method B′ が lindtet6 に厳密に戻ること自体は変わらない( が壊れているのは テトラヘドロン法ではなく、その上での金属の の扱いのほうである)。

高温では deltaq_scale を小さく取ること

上の図の 3000 K(赤)は Γ–L では収まっているのに、K–Γ の中央に 別のスパイクが残る。これは deltaq_scale(offset-Gamma の head の シフト量)が大きすぎるためで、温度の問題ではない。同じ 3000 K で deltaq_scale を 0.3 から 0.1 に下げると消える:

deltaq artifact

赤 = deltaq_scale = 0.3(K–Γ 中央に −1.24 eV のスパイク)、 青 = deltaq_scale = 0.1(消える)。 = 3000 K、QSGW 第 1 反復。


つまり tetrakbt / method B′ 本体の問題ではなく、offset-Gamma の head が高温 × 大きい deltaq で破綻する。 高い を使うときは deltaq_scale も併せて小さくすること。


5. サンプル — Samples/kBT/

ecalj/Samples/kBT/収束した計算一式(入力と結果)がある。物質ごとに LiTi2O4/(66 MB)と Fe/(0.8 MB)に分かれている。GW を何十回も反復するので 計算が重く、testecalj のターゲットにはしていない。 手法が何を変えるかを、収束した結果そのもので見るためのもの。

LiTi2O4/ の 3 つの run:

ディレクトリk メッシュ反復t_sigmakbt何のため
n666_T2000/2000 K112000 K標準。反復が収束していく様子
n666_T1000/1000 K301000 K↓ とペアでメッシュ依存を見る
n999_T1000/1000 K451000 K↑ とペア。これが重い計算
n666_T3000/3000 K293000 K↓ とペアで 側の有無を見る
n666_T3000_chi0only/3000 K600↑ とペア。収束しない

いずれも deltaq_scale = 0.1。最後の 1 つだけ 側を に置き去りにしてある。

5.1 反復の収束 (, 2000 K)

QSGW 反復

QSGW 反復 1(紫)から 11(黄)まで。反復 3–4 以降は 近傍でも線が重なり、 金属にもかかわらず振動せずに収束している。


5.2 パラパラマンガ — が反復で近づいていく

bands_iterations_T1000.pdf(45 ページ、4 MB)

1 ページ = 1 反復。青が 、赤破線が 。ページを送ると

  • 反復 1 では 大きく食い違っている(メッシュ依存が出ている)
  • 反復が進むにつれて両者が近づき、最後には重なる
  • は反復 30 で止めたので、それ以降は収束値を薄い青で参照として残してある

PDF ビューアでページを送れば動画として見える。


5.3 メッシュ依存が消えていること (1000 K)

6^3 vs 9^3

収束した (反復 30)と (反復 45)の重ね描き。差は

範囲rms最大
eV13.8 meV54 meV
eV23.3 meV265 meV
eV75.4 meV940 meV

静電ゼロから測った Fermi 準位 が 6.76420 eV、 が 6.76424 eV で、0.05 meV しか違わない

反復ごとの残差( の 29→30 で 近傍 rms 1.4 meV、 の 44→45 で 0.70 meV)より上の差のほうが大きいので、13.8 meV は反復ノイズではなく本当の メッシュ差である。それでも d バンドの議論には十分小さい。

ただし「消えた」と言い切るには不満が残る

この対で言えているのは「1000 K で 近傍 10 meV 台まで 近づいた」であって、それ以上ではない。

  • 0 ではない。 eV で 23 meV、 eV では rms 75 meV・最大 940 meV。 深い O-2p 帯は数百 meV 違う。しかも上に書いたとおり反復残差の 10–20 倍あるので、 分解できてしまっている差である。
  • メッシュが 2 つしかない。 自身が収束しているのか、残り 13.8 meV が どちらの誤差なのかは分からない。 が無いので外挿もできない。
  • 反復数が 30 と 45 で違い、収束判定ではなく手で止めている。 のほうが 残差が大きい(1.4 対 0.70 meV)ので、13.8 meV のいくらかはそれ由来かもしれない。
  • の 0.05 meV 一致は見かけほど強くない。 両 run とも lmf は nkabc = で、band ステップの で決めている (efermi.lmfUsed k point to determine Ef: 16 16 16)。GW メッシュが入るのは sigm 経由だけなので、これは BZ サンプリングの独立な検証にはなっていない。
  • 温度は 1000 K の 1 点だけ。 を上げるほどメッシュ依存が減る」という 主張そのものは、この対では確かめていない( の 3000 K が無い。 §5.6)。
  • deltaq_scale は両方 0.1 固定。 offset-Gamma head は別系統の 依存で、 そこは振っていない。

単独の反復の重ね描きは以下。45 反復かかっているが、 近傍は 10 反復あたりでほぼ決まっている。

9^3 反復


置いてあるもの:

LiTi2O4/input/3 run 共通の PB / syml と LDA 収束済みの rst
LiTi2O4/<run>/ctrlg.liti2o4.tomlrun ごとの入力
LiTi2O4/<run>/results/EFERMI, EFERMI_kbt と有限温度の Fermi 準位
LiTi2O4/<run>/results/finiteT_evidence.txt実行ログからの抜粋(下記)
LiTi2O4/<run>/results/QPU.<N>runQP エネルギー
LiTi2O4/n666_T2000/results/sigm.liti2o4収束した自己エネルギー(13 MB)。GW をやり直さずバンドが描ける
LiTi2O4/n999_T1000/results/sigm.liti2o4(30 MB)。45 反復かかっていて一番作り直しにくい
LiTi2O4/n666_T2000/results/bnd_iterations.tar.gz全反復のバンド生データ
LiTi2O4/plots/上の PDF・メッシュ比較図・ 依存図・deltaq 比較図
Fe/§5.5 の対照実験(入力 2 つと QPU/QPD だけ)

1000 K の 2 run は全反復の生データを置いていない( で 17 MB、 で 26 MB になるため)。反復ごとの中身は 5.2 の PDF で見られる。

両側が実際に有効になっていることは、このログで確認できる:

 tetrakbt_init: T[K], kbt[Ry], kbt[eV] 2000  0.12667E-01  0.17234E+00
 sigmakbt_setup: t_sigmakbt[K]= 2000.0 kbt[Ry]= 0.12667E-01 ef<-EFERMI_kbt= 0.267452
  0.277063046836211D+00 ... ! efermi           (T=0)
  0.267452126929387D+00 ... ! efermi_kbt       (有限温度)

2 行目の ef<-EFERMI_kbt が、 側が EFERMI(0.2771 Ry)ではなく 有限温度の EFERMI_kbt(0.2675 Ry)を使っていることを示す。 ここが食い違ったままだと が別の Fermi 準位を見ることになる。


5.4 側を切ると収束しない (3000 K)

n666_T3000/n666_T3000_chi0only/ は、入力上は t_sigmakbt の行が あるかないかだけが違う はどちらも 3000 K なので、差は 側 だけから来る。

収束

縦軸は 1 反復あたりのバンドの変化( eV 以内の rms)。

  • 両側 3000 K(青): 反復 15 あたりから 3–5 meV の帯に落ち着き、そのまま動かない
  • だけ 3000 K(赤): 反復 20 で 6 meV まで下がったあとまた上がり、 残り 40 反復を 10–50 meV でさまよい続ける(最後の 10 反復で平均 22.8 meV)

さまよっているだけでなく、行き着く先も違う。両側(反復 29)と のみ (反復 60)の差は eV 以内で rms 198 meV、 eV 以内で rms 552 meV(最大 1.73 eV)。

理由ははっきりしている。 だけ温めると と違う Fermi 準位を見る。

が使う が使う
n666_T3000_chi0only/EFERMI = 0.29428 RyEFERMI_kbt = 0.25672 Ry
n666_T3000/EFERMI_kbt = 0.25315 Ry同じ

3000 K では両者が 0.51 eV 離れる。それで自己無撞着ループが閉じない。 これが「 側 — t_sigmakbt」で t_sigmakbt == t_tetrakbt にせよと書いている理由である。

パラパラマンガ: bands_iterations_T3000.pdf(60 ページ、5 MB)。 青が両側、赤破線が のみ。青は途中で止まり、赤は最後まで動き続ける。


この 2 つの run について

実行日が 2 日離れている(2026-06-13 22:46 開始と 06-15 23:48 開始)。どちらも 06-13 09:09 の 2 件の修正(§5.6)より後だが、当時 ~/bin にあったバイナリを今から特定はできない。入力側の差は t_sigmakbt の 行だけで、mixing(--ctrlg:iter.b=0.1)と PB は同一である。

5.5 Fe — 側が効くことの対照実験

Samples/kBT/Fe/t_sigmakbt の値以外まったく同じ入力の 2 つの run である。

t_sigmakbt0/t_sigmakbt3000/
tetrakbt / t_tetrakbttrue / 3000 Ktrue / 3000 K
t_sigmakbt0.03000.0

(したがって )は両方とも 3000 K で同一なので、差は 側 だけから来る。bcc Fe、nspin=2、GW メッシュ 、QSGW 1 反復。 (実用の設定ではない。実用では t_sigmakbt == t_tetrakbt にすること。)

まず、変わってはいけないものは変わっていない — vxcSExcore・LDA 固有値はビット単位で同一である。対照実験として成立している。

Fe の Sigma シフト

QSGW が使う の変化:

rms rms rms
0–1 eV0.788 eV0.680 eV1.180 eV
1–3 eV0.648 eV0.199 eV0.784 eV
3–10 eV0.428 eV0.123 eV0.442 eV
10 eV 以上0.094 eV0.025 eV0.093 eV

側の有限温度は小さな補正ではない。 近傍で rms 0.7 eV、 最大 1.93 eV 動く。 だけ温めて に置き去りにするのは、 つじつまが合わないだけでなく数値的にも大きい。これが t_sigmakbt を 作った理由である。

は個別にはもっと大きく動く(最大 2.40 eV と 3.66 eV)が、 符号が逆で和は 1.93 eV に収まる。交換分裂はほぼ不変(−0.213 → −0.212 eV)で、 効果はほぼスピン共通のシフトである。Fermi 準位自体は EFERMI 0.01496 Ry → EFERMI_kbt 0.03373 Ry と 0.26 eV 動く。

5.6 結果を読むときの注意

ここの結果はすべて 2026-06-15〜06-20 の実行である。

有限温度に固有の注意 — tetrakbt のペア選別

6b83b86e7(2026-06-09、method B′ の導入)から 37e6fbc23(2026-06-13) までのコミットで tetrakbt = true を使った run は、高温で を なめらかに過小評価している。

tetwt5 の上流のペア選別が sharp のままだったためで、落ちる殻の重みの 1000 K で ~1%、3000 K で ~18% にあたる。現在は wocc = 12*kbt で窓を広げ、 fbound/tolpair の厳密上界で刈っている(§7.1)。 これは usetetrakbt の分岐の中の話で、 の経路では sharp が正しいので 影響しない。

有限温度とは関係ない注意 — 実軸極項の OOB ガード

m_sxcf_sc.f90 の実軸極項のビン詰めには、2026-06-13 の 2298e75e9 まで 範囲外ガードが無かったfindloc が 0 を返す(wefreq_r(nw) を超える)と nttp(-1) / wgtiw(:,-1) へ書き込む。温度によらず全ての gwsc が通る経路である。

この修正を作る途中で ixs < 2 というきつすぎる版が一時的に存在し、 それは正当な の実軸極項(静的 のビン)を全部捨てて si_gwsc の QPU を 3.54 eV ずらした。ただしこの版はコミットされていない — リポジトリの歴史は「ガード無し → 正しいガード」であって、ixs < 2 は kt1 の 作業ツリーにだけ 2026-06-11〜06-13 の間存在した。したがってこれは kt1 の runs/ にある当時の run についての注意であって、ecalj の利用者には 関係しない。ここに置いた run はどちらの窓にも入っていない。

依存図(§4)と deltaq 比較図(§4)は QSGW 第 1 反復の別 run 群からのもので、 deltaq_scale が 0.3 である。§5 の 3 つの run(deltaq_scale = 0.1)とは 直接比較できない。


6. 実装の場所

ファイル役割
SRC/subroutines/wfacx.f90m_wfac の Fermi–Dirac 核(fd_cdf / fd_iav)と sig_fd ゲート
SRC/subroutines/genallcf_mod.f90sigmakbt_setup(EFERMI_kbt の読み込みと FD の有効化)
SRC/subroutines/m_GWinput.f90t_sigmakbt の読み取り
SRC/subroutines/main_hsfp0.sc.f90hs_ef の一点で有効化(両バイナリ)

set_sigma_fd(.true., kbt)sxcf のループに入る前に一度だけ呼ばれ、 以後 wfacx / wfacx2 / weavx2 が FD 核を使う。


7. 実装の検証と既知の限界

2026-09-16 にコードを読み直して確認した結果。骨格は正しいが、精度の限界が 1 つ、 整合性の穴が 1 つ、理論の範囲についての注意が 1 つある。

7.1 恒等式は厳密 (確認済み)

lindtet6_kbt (tetwt5.f90:629-673) の method B′ は

k 積分の内側で使っている。 積分と 積分が交換するので厳密である。 得られる分子は Adler–Wiser の であって ではない — 応答関数として正しいのはこちら。

個別に確認したもの:

  • ゲート(tetwt5.f90:651) — a/b が窓の外で平坦になる場合分けを全部たどったが、 どれも の値と一致する
  • node zero-skip(tetwt5.f90:667) — lindtet6 が恒等的に 0 になる条件そのもの。 knorm は全節点で正規化されるので、飛ばしても整合する
  • efermiaefermib でも (4) は成立する(それぞれの Fermi 準位での になる)
  • EFERMI_kbt(main_heftet.f90:368) — NOS を熱核で畳み込んで二分法。 でテトラヘドロンの に厳密に戻る。 χ0 側もこれを読んでいる(m_tetwt.f90:147)

7.2 限界 — 積分の Gauss-Legendre が 近傍を刻んでいない

gausq(NE=20, -6, 6)最内節点は 、すなわち の内側は一切標本化されない。

テトラヘドロン内のバンド幅を として、占有因子の最悪誤差を測ったもの:

求積節点
現状 GL20 on 201.7e-19.7e-22.3e-21.3e-26.8e-3
4 区間 × GL5202.9e-21.6e-24.8e-32.6e-31.3e-3
6 区間 × GL4242.9e-21.1e-22.8e-31.7e-39.6e-4
2 区間 × GL10205.5e-21.9e-21.1e-23.8e-31.9e-3

分散の大きいバンドでは無害だが、平坦バンド・バンド端・van Hove 領域が に あると占有因子が 0.1 以上ずれる。LiTi₂O₄ の Ti-3d で テトラヘドロン内の幅が 0.2–0.5 eV ≈ 1–3 なので、1e-2 程度は乗っている見込み。

節点を増やしても でしか落ちない(NE=40 → 9e-3、NE=80 → 3e-3)。 同じ 20 点のまま 4 区間に切るだけで最悪誤差が 6 倍良くなり 近傍の 分解能も と一桁上がる。節点数より区間の切り方が効く。 本筋は被積分関数の折れ点(= 8 個の角エネルギー)で区間を切ること。未修正。

7.3 不整合 — 側の状態窓が esmr のまま

sig_fd を on にすると重みの核は幅 sig_kbt の Fermi–Dirac になるが、 状態範囲を決める窓は ddw*esmr(ddw=10)のままである (m_sxcf_sc.f90:457-458、m_sxcf_sc_count.f90:158, 262-263)。 しかも sxcf_scz_countsigmakbt_setup より前に呼ばれるので (main_hsfp0.sc.f90:143 vs :164)、窓の中心は EFERMI、 重みの中心は EFERMI_kbt になる(本サンプルで 0.0096 Ry ずれる)。

切り捨てられる占有は :

窓の幅切り捨て
本サンプル (2000 K, esmr=0.01)3.7e-4 ✓
5000 K, esmr=0.014%
2000 K, esmr=0.00217%

いまの既定値では無害だが、警告なしに静かに悪化する。 本頁が「有限温度は t_sigmakbt が担う」と書いている以上 esmr を下げる人は出るので、 当面 esmr は既定(0.01 Ry)のままにし、t_sigmakbt を 3000 K より大きく 取らないこと。 直すなら sig_fd のとき窓を max(ddw*esmr, 12*sig_kbt) にし、 sigmakbt_setup を count の前に移す(または count に ef_kbt を渡す)。未修正。

7.4 範囲 — が要るのは「差」ではなく「和」

を有限温度化しただけでは は揃わない。理由は一行で書ける。

中間状態の粒子‑正孔対を として、

重み
対を作る
すでにある対を壊す

が持っているのはこの だが、 の中間状態の重みはである(どちらも同じ分母を持つ)。 いまの実装は から差を取ってきて外側の を掛けるので、 の分が落ちる。 詳細釣り合い から

なので、これは普通 Bose 因子と呼ばれるものである。ただし出どころは Fermi の 占有数であって、ボソンの熱浴を外から入れたわけではない。導出は §8 を見よ。物理は単純で、 では 粒子‑正孔対がすでに熱励起されていて電子はそれを吸収できる、というだけのこと。

大きさ。 で指数的に小さいので、効くのは の粒子‑正孔連続体だけである。金属で とすると

2000 K で eV²、 eV なら数 meV–数十 meV。

これは欠陥ではなく定義である。 ecalj のスキームは「温度 の占有数で作る 有効一体ハミルトニアン」であって、Mermin の有限温度 DFT が Fermi 占有数だけで 閉じているのと同じ立場である。QSGW は動的な ではなく静的エルミートな 一体ハミルトニアンを作るものなので、落ちているのが主に詳細釣り合い(= 寿命)側で あることもあって、影響は一発 GW のスペクトル関数を出す場合よりずっと軽い。 平衡の多体摂動論の が欲しいなら (5) が要る、というだけのことである。

7.5 いまは踏まないが直すべき箇所

  • m_sxcf_sc.f90:237sxs_ekc(is1+nctot)sxs_ekc(is1) のはず。 2024-07-25 の 245ef9f3f(nvfortran 24.1 回避の書き換え)でコメントアウトされた 元コードは ekc(it) だった。現状 mode 1/2 は nctot=0(hgw のログで確認)、 mode 3 は ns2 ≤ nt0p = nctot で else 分岐に入らないため実害なし。 nctot>0 で価電子交換を回すと壊れる。
  • main_hsfp0.sc.f90:166if(sig_fd) ef = ef_kbtixc==3(CoreEx)にも効き、 直前に LOWESTEVAL-1d-3 に設定した ef を上書きする。 core ループが wtff=1 固定なのでいまは影響しない。

8. 付録 — 虚時間を使わない定式化

がどこから来るのかは、松原形式を経由しなくてもはっきりする。むしろ そちらのほうがすべてが Fermi の占有数から出ることが見えてよい。 教科書では閉時間径路と平衡の話が分かれて書かれていることが多いので、 ここで通して書いておく。

以下 、エネルギーは から測る。

8.1 の議論がなぜそのまま使えないか

の実時間摂動論は Gell-Mann–Low に依っている。断熱的に相互作用を入れると 、つまり 基底状態は位相を除いて自分自身に戻るので、 側を 側と 取り替えられて

と片道の時間順序積で書ける。

ではこれが使えない。 は固有状態ではなく、 断熱的に発展させても重みが非相互作用系のまま( であって ではない)なので、 側を 側と同一視できない。 (7) の分母に相当するものが書けない、というのが問題の本質である。

8.2 閉時間径路 — 行って戻る

そこで の状態を一切使わない と 往復する径路 を取れば、演算子を挟まない限り

恒等的に成り立つ。分母が要らない。これが閉時間径路(Keldysh)の全部である。

径路順序積 (往路の後に復路が来る順序)を使って

場は の相互作用表示。 ではなく実時間で、 積が 積になっただけ である。 をどちらの枝に置くかで 4 つの成分が出るが、独立なのは 2 つで、 以下では

を使う。

8.3 Wick の定理 — 入力は だけ

について Gauss 的なので Wick の定理がそのまま成立し、 縮約は自由な径路伝播関数になる。エネルギー の準位について

温度が入るのはここだけで、入るのは Fermi 分布だけである。 Bose 分布はこの段階でどこにも無い。

8.4 GW を径路上で書く

径路引数のまま、形は と同じ:

実時間成分に落とすには Langreth 則を使う。同じ引数の積 に対して

がひっくり返るのが要点である。

8.5 成分 — ここで が出る

(12)(13) と (11) から、時間並進対称性を使って

対を作る過程、すでにある対を壊す過程である。 では

スペクトル関数は差のほうで、

これが のコードが計算している量である。一方 (14) の比は を代入するだけで

となり、 を使えば

はここで初めて現れる。仮定ではなく (11) の Fermi 分布からの帰結である。 ボソンの熱浴を外から入れた覚えはないのに Bose 分布が出るのは、 がボソン的な相関関数だから((16) がボソンの KMS 条件そのもの)。

RPA の衣を着せても比は変わらない。 だから、 (16) はそのまま に受け継がれる。

8.6 成分

(12)(13) より 、 振動数では

(11) を入れ、 とすると、 から

の符号で分けて を使えば、 見慣れた放出因子 と吸収因子 になる。実部は Kramers–Kronig で決まる。

の確認: の準粒子について、 が占有だと (Pauli 阻止)、 が空だと で寄与する。従来の GW に戻る。

8.7 いまの実装が保っているもの・落としているもの

ecalj が計算しているのは 、すなわち (15) のである。 を組むときに外側の だけを有限温度にし、(19) の は入れていない。 つまり

これは の詳細釣り合い

を破る((18) と (16) から (20) は両方を残したときにのみ成り立つ)。 したがって得られる は、厳密にはどんな温度 の平衡状態のものでもない。

一方でこれは QSGW では軽い。QSGW が作るのは静的エルミートな一体 ハミルトニアンで、 は最初から捨てているからである。 (20) が壊れているというのは主に寿命側の話で、QSGW が使う への影響は (6) の にとどまる。

8.8 初期相関についての注意

8.2 では (非相互作用の熱平衡)から断熱的に相互作用を入れると書いたが、 これは初期相関を落としている。厳密には径路に虚時間の縦枝 を足した Kadanoff–Baym 径路を使い、そこに初期相関を 持たせる(Danielewicz)。平衡かつ断熱的な場合には縦枝が実時間部分から 分離し、結果は松原形式と一致する。

ここで が顔を出すのは初期条件を指定するためであって、 摂動展開そのものは実時間のままである。 が出るかどうかとは関係がない — それは 8.5 で見たとおり (11) の Fermi 分布だけから出る。


9. これから詰めるべき課題 (2026-09-17)

アップロード直前テストで出てきたことも含め、未解決のものを並べる。 §7 の 7.2–7.5 は個別の修正点、ここは「何を確かめないと使い物にならないか」。

  1. 側の温度は 300 K でも金属で 0.1 eV 動く。 Fe (TestInstall/fe_gwsc, GW メッシュ ) を T=0 と 300 K で 1 反復比べると、tetrakbt (χ₀) だけなら の変化は ≤1 meV だが、t_sigmakbt = 300 も入れると max 0.12 eV、平均 0.04 eV (up)。 から 以内の少数の状態が分数占有に なり、その状態自身の SEx / SEc が eV 級で動いて打ち消した残り。粗いメッシュで 「どの状態が を跨ぐか」に敏感なので、メッシュ収束 () と esmr の Gauss 拡がりとの関係を数値で押さえないと、300 K の既定として勧められない。 (だから gwinit のテンプレは 2026-09-17 に見え消しに戻した。)
  2. 側の状態窓 ddw*esmr (§7.3) — 上の 1 と同根。esmr を既定のまま t_sigmakbt を上げたときに何が窓を決めているかを整理し、sxcf_scz_countsigmakbt_setup より先に走る順序も直す。
  3. 積分の GL20 が 近傍を刻まない (§7.2) — 4 パネル × GL5 で誤差 1.7e-1 → 2.9e-2 になることは確認済み。実装して の反復収束に効くかを見る。
  4. 絶縁体の EFERMI_kbt heftet は絶縁体で EFERMI_kbt を書いていなかった (2026-09-17 修正、57edde869)。いまはギャップ内で解が区間になれば区間の中央を返すが、 物理的には DOS の非対称で決まる真性 を返すべきで、 fermi_kbt_tetra の窓 () と GL カーネルの届く幅 () の 関係で結果が変わる。GaAs 300 K で 0.15345 Ry (T=0 中央 0.15221) — 妥当だが根拠は薄い。
  5. EFERMIEFERMI_kbt の使い分け。 側は t_sigmakbt>0 のときだけ EFERMI_kbt を読む。3000 K の LiTi2O4 で両者は 0.51 eV 離れており (§5.4)、 χ₀ と が別の を見る組合せ (tetrakbt のみ) は「何を計算しているか」が 曖昧。片方だけの指定は警告でなく abort にするか、設計として決める。
  6. の Bose 項 (§7.4, §8.7)。 の落とし。 3000 K で効くかを LiTi2O4 で見積もる。
  7. 回帰テストが無い。 testecalj に有限温度のターゲットが一つも無く、上の 1 の 数字も手作業。Fe の 1 反復 (T=0 / 300 K χ₀のみ / 300 K χ₀+Σ) を Samples/TestInstall の軽いターゲットにして、少なくとも落ちないこと・数字が 変わらないことを固定する。
  8. 3000 K の LiTi2O4 (kt1) は 2 反復で止めてある (~/LiTi2O4/kbt/runs/n999_dq0.1_T3000K_sigmakbt3000, ITER0=3 NITER=30 ./run999.sh で再開)。走らせる前に ctrlg_absorb.py liti2o4 で 旧 PB.liti2o4.toml を取り込むこと。§5.3 の「メッシュ依存が消えている」は 1000 K の話で、3000 K では未確認。
  9. 潜在バグ (§7.5)sxs_ekc(is1+nctot)ixc==3 での ef 上書き。

10. gwkbt-dev について

tetrakbtt_sigmakbt も、本頁の内容はすべて main に入っている。 ブランチを使い分ける必要はない。

別系統として gwkbt-dev がある。有限温度 を別の設計 (gwkbt Stage A/B)で作りかけたもので、production 非対応。 Stage B の entry2 静的ビン登録が死んでいた件はブランチ上で修正済みだが、 設計レビューと gwkbt_test_plasmonpole.py での再検証が要る。 本頁の t_sigmakbt とは別物なので混同しないこと。


関連