Skip to content

MLO-gwsc — 自己エネルギーを MLO 表現で内挿する QSGW(開発中) ​

状況(2026-09-30): LiTi₂O₄ の 6³ と 9³ を LDA から 40 反復まで回した(§3.5)。GPU の行列積の精度(tf32・fp32・fp64)による MLO バンドの差は 数 meV 以下で、速い tf32 で回してよい。10 反復ではまだ収束の途中で、6³ は 20 反復から占有側のバンドに肩ができ、9³ は 40 反復でかなりなめらかになる。 MLO 表現で描いたバンドでは、sigm の内挿で出ていたメッシュ点の間のこぶ(内挿のリンギング)が大きく減る(§3.2)。

既定では何も変わらない(gwsc --mlo を付けたときだけ有効)。反強磁性の対称性(symgrpaf)との併用は確かめていない(§5)。 経過の記録は ecalj の MD/research_kotani_log.md(2026-09-24〜29)、設計の詳細は MD/kBT/sigma_mlo_design.md §9–13。

このページは §1 理論、§2 設定と実行、§3 実例: LiTi₂O₄ の 3 部です。


1. 理論 ​

1.1 何を解決するのか ​

QSGW の静的自己エネルギー は GW の メッシュ上で計算し、任意の ではメッシュ点の値から k 空間で内挿して使います(実空間に落として戻すフーリエ内挿)。 従来はこれを MTO 基底の行列(sigm)として実空間に落とし、Bloch 和で戻しています。 MTO 基底は非直交で、EH と EH2 がほぼ線形従属、裾も長いため、 は遠方で減衰しなかったりします (LiTi₂O₄ では Ti 3d のブロックが BvK セルの端まで 0.3–0.6 meV で頭打ち)。k空間で言うとフラットでないということ。すなわち、 メッシュ点の「間」にだけ、数十 meV、大きいときは数百 meV のこぶがバンドに乗ります。 メッシュを細かくしてもこぶは小さくならず、LiTi₂O₄ ではかえって大きくなりました(§3.2)。

MLO-gwsc は同じ を MLO(MTO をもとにした局在軌道) の小さな部分空間 で表した行列にして、k 空間で内挿します。 MLO は反復ごとに作り直し、 はその MLO で書いて、同じ MLO で読み戻します(MLO Sigma インターポレーション、§1.4)。

1.2 MLO の作り方 ​

各 で、PMT ハミルトニアンの固有状態 (固有値 )と、MTO ブロックだけを対角化した固有状態 (固有値 )から射影

を作り、mlo_lm で選んだ MTO のシード に当てます:

(m_hreduction.f90 の Hreduction)。 窓関数 は MLO の mlo_method = 4 で、

です( は各反復の SCF の伝導帯の底で、金属ではほぼ )。 = mlo_delta、 = mlo_wでデフォルトはともに2eV、はフェルミ関数。新たなMLOモデルのサンプルは全部この形。 エネルギー関数を含むだけだし、系の特徴量として必要なのはなので、たとえばFeとSiの2つのスラブを含むような系でもおよそ対応できるだろう。 は の形でしか入らないので、ゲージ(位相)の任意性はない。

の PMT 基底での係数を と書きます:

は保存された表ではなく、その時点のハミルトニアンに処方を当てたもので、 が変われば変わります。 反復 2 以降は 入りの から作ります。標準の MLO 法も __HamiltonianPMT(senex を足した後の )から作るので、それと同じです。 とにかくMLOはハミルトニアン(基底関数も含め)が正規メッシュ点の上にあれば作れる。

  • 結局のところ、MLO 法は「すごく簡単なやり方」に着地した。要するに式 (1) の完全系展開に、低エネルギー部分をしっかり取り出すための が入り込んだだけ。 すなわち「(MTO のような)良い局在基底を選んでおけば、低エネルギー側をレスペクトする射影で十分にきれいにモデル化できる」ということ。 対称性について悩む必要も、収束について悩む必要もない。スラブなどでは空球(empty sphere)に対応する MLO を持ち込む必要もあるが、これは他の方法でも同様である。
  • 式 (3) の を より下にしない理由: APW 基底を入れずに MTO 基底だけでバンドを描くと、基底が足りない分だけ エネルギーが高めに出てしまう。MTO の状態 に当たる PMT の固有状態は より下にあるので、 PMT の固有状態のエネルギーが 以下ならば取り込む、とする。

1.3 を MLO で持ち、PMT に戻す ​

GW が出すのはバンド添字の です。これを MLO に移します:

これは文字どおり です(窓 の外の状態は落ちるので、厳密なのは窓の中だけ)。 PMT 基底は非直交で、その重なり行列を と書きます。 固有状態を と展開すると( は係数の行列)、式 (4) から です。 を実空間の (QMLO_SigRs)に落として k 空間で内挿し、任意の で PMT 基底へ戻して に足します(getsenex)。 一般の(非直交の)MLO では、両側に重なりの逆が要ります(2026-10-02 から MLO は Löwdin で直交化した関数なので 、式 (7) は 。mlo §6):

は MLO 部分空間への射影子です(式 (1) の とは別物)。k 空間で内挿するのは だけです。

注意: 従来の sigm は MTO ブロックに擬似逆で射影した量で、両側に を畳み込んだ形です。 の大きさを と直接比べることはできません。

1.4 MLO Sigma インターポレーション — は、それを書いた で読む ​

反復ごとに MLO を作り直し、その反復の を MLO 表現の行列 にして k 空間で内挿し (メッシュ点の値から任意の の値を作る)、PMT 基底に戻すときも同じ MLO を使います。 これをMLO Sigma インターポレーション(MLO Sigma interpolation)と呼びます。この形は次の 2 つの事実から決まります。

  1. k 空間で内挿できるのは MLO 表現の行列で、 は内挿できない。 は行も列も MLO の添字で、 どの でも同じチャネルを指すので、k 空間で内挿できます。一方 は PMT 基底の行を持ちます。 pwmode = 11( 打ち切り)では APW の集合そのものが で変わるので、同じ行番号が ごとに別の関数を指し、 k 空間で内挿できません(式 (6) の も同じ)。同じ理由で も内挿できません。
  2. の数値は、それを書いた の刻印を持つ。 イテレーション で と一本の鎖で作られるので、 式 (7) で戻すときは必ず同じ を使わなければなりません。別の で読むと、同じ数値を別の関数の間の行列要素として 読み替えることになり、作用素そのものが変わります。

したがって、書く側で作った を、あとで読む全ての で保存しておきます( は が変われば変わるので、読む側で作り直すと別物になる)。 1 反復の中では「読む用 」と「書く用 」が同時に要るので、置き場が 2 つあります。

ファイル中身
QMLO_z現行の QMLO_SigRs が書かれた (読む用)
__QMLO_zNewこの反復の から作った (書く用)

どちらも 1 本のファイルで、GW の スピン ごとに固定長のレコード(、スピン、ndimh と )を持ちます。 段 a' は各プロセスが自分の のレコードを MPI-IO で書き、getsenex は最初に索引だけ読んで、要る のレコードだけを読みます。 mlo が QMLO_SigRs を書いた直後に __QMLO_zNew → QMLO_z と改名(昇格)するので、 と は常に組になっています。 「あとで読む全ての 」を保存済みの点に収めるため、nkabc = n1n2n3 = mlo_nkabc(SCF の ⊂ GW の )を要求します。 gwsc が計算の前に確かめ、違えば止まります。 保存済みに無い で読もうとした場合も、既定では止まります( を別の基底で読むことになるため)。

1.5 1 反復の流れ(gwsc 1 --mlo) ​

連鎖の最初に一度だけ、lmf --writeham --mlo と mlo --mlo で MLO の索引を HamRsMLO に作ります。 索引とは、どの MTO チャネルを種にするか(ndimMTO 本)です。 はそのチャネル上の行列なので、索引は連鎖を通じて固定です(--mlofreeze)。 窓の基準( と伝導端)は索引に含めず、段 a' が毎反復その反復の SCF の efermi.lmf から読みます(2026-09-26 から。§2.4)。 一方、係数 は毎反復①で作り直し、ハミルトニアンに追随します。

#実行 について
①lmf --jobgw=1getsenex が QMLO_SigRs()を QMLO_z の で読む → 対角化 → (GW に渡る)。続く段 a' で、 入りの から を作って __QMLO_zNew へ、 を __cmlo.data へ
②heftet, hbasfp0, hvccfp0, hsfp0_sc, hgw。MLO とは無関係
③hqpe_sc式 (5) で → 混合(§1.6)→ __QMLO_Sig。従来の sigm も並べて書く
④mlo --mlofreeze --mlo対称化 → 全 BZ → FFT → QMLO_SigRs(Σ だけ。MLO の添字は HamRsMLO から)
⑤昇格(④の mlo の中)__QMLO_zNew → QMLO_z。ここで「現行の 」が に切り替わる
⑥lmf(SCF)getsenex が を で読む

1.6 混合 ​

MLO 経路で SCF が読むのは QMLO_SigRs(__QMLO_Sig から作る)で、sigm ではありません。 sigm は hqpe_sc で Anderson 混合されますが、 も混合しないと MLO 連鎖だけ実効 β=1 で回ることになり、 LiTi₂O₄ では 3 反復目に大きく行き過ぎました(§3.3)。 には sigm と同じ Anderson 混合(β = [gw] mixbeta)がかかります(2026-09-30 から既定。ECALJ_MLO_MIX=0 で切る。 それより前のコードでは ECALJ_MLO_MIX=1 を付けたときだけ混合した)。

  • 履歴は __QMLO_mixsig(sigm 側は __mixsig)。混合の入力 (その反復が実際に使った )は、 QMLO_SigRs を既約 で Bloch 和したもの(getsenex が に入れたのと同じ行列)。sigm の混合での sigm と同じ役なので、履歴は捨ててもよい
  • 初回(LDA から)は 倍から始まる: 前の が無いので ()から混合し、iteration 1 は 。 sigm も も 倍で、既定の なら全量が入る(LiTi₂O₄ は 。mixbeta)

1.7 MLO バンドの描き方 ​

途中の反復の状態を のまま任意の で見るには、SCF が解いたハミルトニアンの MLO 模型を作って解きます (ecalj の Samples/kBT/LiTi2O4/draw_mloband.sh)。

  1. スナップショットで lmf --writeham --mkprocar --noinv --mlo を走らせ、保存済みの QMLO_z で、SCF と同じ をメッシュ点で書き出す( が 1 点でも見つからなければ止まる)
  2. QMLO_SigRs を退けてから( は 1 の に入っているので二重に足さない)、凍結なしの mlo --mlo で MLO 模型を作り、経路上で解く

メッシュ点では SCF の そのもので、その間は標準の MLO のフーリエ内挿です。メッシュ点の間で を作り直しません。 次の 3 通りでは MLO バンドになりません。

経路何が起きるか
job_band(--mlo 無し)従来 sigm の内挿で描かれる。MLO 連鎖の密度に従来の を合わせたもので、SCF を動かした ではない(比較用には使える)
job_band --mlo の探索が を文字どおり比べるので、経路の が保存済みの既約点と対称等価でも見つからない。 抜きの から作り直すので、Γ 以外は無効
job_mlo --mlofreeze --mlo凍結 HamRsMLO(連鎖の最初の LDA の と )に今の QMLO_SigRs(今の )を足すので、2 つの基底が混ざり 0.3–0.5 eV ずれる

job_band は描画用の を efermi.lmf.job_band に書き、段 a' が窓の基準を読む efermi.lmf には触れません(job_dos・job_fermisurface も同じ。 --efermi= で与えることもできる)。連鎖のディレクトリの中で描いても窓は動きません。


2. 設定と実行 ​

2.1 ctrlg.<sname>.toml ​

LiTi₂O₄ の 6³ で使った設定(9³ はメッシュの 3 か所を [9, 9, 9] にしただけ):

toml
[bz]
nkabc  = [6, 6, 6]          # [gw] n1n2n3 と同じにする(必須)
[ham]
pwmode = 11                 # |q+G| 打ち切り(既定)
[gw]
n1n2n3  = [6, 6, 6]
mixbeta = 0.5               # sigm と Sigma^MLO の混合
t_sigmaw   = 1000.0         # (K) Sigma の中間準位の Fermi-Dirac の幅(既定)
t_tetrakbt = -992.4         # (K) 負: chi0 は T=0 のまま Im chi0 を FD およそ 1000 K と同じ幅の Gaussian で均す(以前の SmearX0 = 0.0057 Ha)。金属の W の極を均す([kBT](./kBT) の「実用の設定」)
[mlo]
mlo_method = 4              # 既定
mlo_delta  = 2.0            # (eV) 既定
mlo_w      = 2.0            # (eV) 既定
mlo_nkabc  = [6, 6, 6]      # n1n2n3 と同じにする(必須)
mlo_lm = """
1 Li   1 2 3 4 5 6 7 8 9
2 Li   1 2 3 4 5 6 7 8 9
3 Ti   1 2 3 4 5 6 7 8 9
...
14 O   1 2 3 4 5 6 7 8 9
"""
  • mlo_lm の gwinit 既定は、Z ≤ 10 が s,p(lm 1–4)、Na 以降が s,p,d(1–9)、4f が価電子の原子は f(10–16)も(2026-10-01 から。MLO §1)。 半内殻の局所軌道は帯の位置で自動に入る(MLO §1 の表)。 LiTi₂O₄ では全原子を s+p+d(126 本)にした。既定のままなら 76 本(Li と O が s,p)。76 本との優劣は決着していない(§5)
  • (サイト, lm) あたり MLO は原則 1 本まで。 mlo_lm2(EH2)を同じ lm に足すと、射影で同じ関数に潰れて がほぼ特異になる (例外は空隙に広がった伝導帯の底がある陽イオンの s,p: MLO §9 の基準 2。MLO-QSGW では試していない)。 式 (7) は を 2 回挟むので効き方は 2 乗(NiO の Ni d で条件数 )

2.2 実行 ​

bash
gwsc 10 -np 60 -np2 2 --gpu --prec=fp32 --ntqxx --mlo liti2o4                     # 10 反復
gwsc 10 -np 60 -np2 2 --gpu --prec=tf32 --prec-final=fp32:2 --ntqxx --mlo liti2o4 # 途中は tf32、最後の 2 反復は fp32

gwsc N --mlo はそのまま N 反復まとめて回してよい(gwsc 1 を N 回回すのとは厳密には同じでないが、収束させれば ehf で 0.1〜0.2 meV の差、研究ログ 2026-09-25 00:06)。 GPU の精度 --prec=tf32|fp32|fp64 と、行列積の方法の自動選択は ecaljgpu と gwsc を参照(--prec=fp32 は旧来の --mp --fp32 と同じ)。 LiTi₂O₄ の hgw 1 回は、6³ で fp32 367 秒・tf32 173 秒(kt1、RTX 5090 × 2、2026-09-27 夜)、9³ で fp32 2990 秒・tf32 1975 秒(同日午前の版)。 tf32 は Σc の最後の行列積だけを 10 ビットの仮数の入力(RTX 5090 では FP16)にしたもので、 ±1 eV の Re Σc は倍精度と 1.3 meV 以内(MD/ForDevelopers.md §11.2)。

  • ecalj の Samples/kBT/LiTi2O4/run_gwsc10.sh <tag> <入力> <bindir> は gwsc 10 を回し、最後の状態で sigm 描画と MLO バンドを描く。 run_snap.sh <tag> <niter> --mlo は gwsc 1 を繰り返しながら毎反復のスナップショット(再開に要るもの一式)と 2 つのバンドを残す (LDA の後に混合ファイルが 1 つでも残っていれば止まる)。run_gwsc10.sh は RUNS_DIR(作業場所)と GPUS(既定は GPU 0 の 1 枚)で指定でき、 入力は Samples/kBT/LiTi2O4/input/qmlo。run_snap.sh には kt1 のパスが書き込んであるので、使うときは書き換える

2.3 各反復の確認 ​

見るもの(run_snap.sh の鎖では Samples/kBT/LiTi2O4/check_iter.sh が、watch_iter.sh が反復の終わりに退避したログで調べる)。 gwsc N でまとめて回したときは、gwsc が各反復の終わりに QSGW.<N>run/ へ lgw・lqpe・llmfgw01・lmlo_sigr・llmf(llmf.<N>run)を写すので (2026-09-28 から)、後からそこを下の表のとおりに grep する(check_iter.sh は run_snap の steps.log の形を前提にしている):

項目どこを見るか正常
SCF が MLO 経路に入ったかllmf の MLO Sigma interpolation ON の行数 点を持つプロセスの数
GW ドライバが MLO 経路に入ったかllmfgw01 の同じ行GW の 点(QPLIST.jobgw1)を持つプロセスの数。iteration 1 は 0(まだ QMLO_SigRs が無い)
昇格lmlo_sigr の m_HamPMT: promoted __QMLO_zNew -> QMLO_z毎反復 1 回
混合lqpe の x_0 from QMLO_SigRs = と SigmMLO_out、SigmMLO_mixediteration 1 は ... No mixing file が 2 行、x_0 = F、mixed/out = β。2 以降は x_0 = T
の取りこぼしm_sigmlo: WARNING chi~ MISS出ない(出れば既定で止まる)
SCFllmf の反復回数nit の上限に達していない

行数はメッシュと並列数で決まるので、別のメッシュの値を当てはめてはいけません。 -np 60 で、6³ は既約 16 点なので 16、GW の 72 点で 36。9³ は 35 点で 35、200 点で 50。 これより少なければ、一部のプロセスが MLO 経路に入らず従来の sigm に落ちています。

2.4 使うファイルと、残すもの ​

印: ● MLO-QSGW 特有(gwsc --mlo でだけ出てくる)、○ MLO 法一般(job_mlo でも出てくる)、無印は通常の QSGW と共通。 保存: 結果 = 計算結果として残す、再開 = 連鎖を続けるのに要る、— = 反復の中だけで使う作業ファイル。 ①〜⑥ は §1.5 の段。

ファイル印保存中身
ctrlg.<sname>.toml結果・再開設定
rst.<sname>結果・再開密度(各 SCF の lmf が書く)
efermi.lmf結果・再開最後の SCF の と伝導帯の下端。段 a' が窓の基準として毎反復読む
sigm, QPU, QPD結果(sigm は再開にも)従来表現の (比較用の描画、sigm の混合の )、QP エネルギー表
__mixsig再開sigm の混合の履歴
QMLO_SigRs●結果・再開。MLO-QSGW の そのもの(④が書く)。混合の もここから作る
QMLO_z●結果・再開QMLO_SigRs が書かれた (1 本のファイル)。必ず QMLO_SigRs と組で
HamRsMLO○結果・再開MLO の索引(連鎖の最初に作り、以後固定)。途中で消すと作り直されて QMLO_SigRs と合わなくなる
band_MLO_spin1.dat○結果MLO バンド(§1.7)
llmf, llmfgw01, lqpe, lmlo_sigr結果ログ(§2.3 の確認に使う)
__QMLO_mixsig●— の混合の履歴。消すと Anderson の外挿が 1 回切れるだけ( は QMLO_SigRs から作る)
__QMLO_Sig●—③が書き④が読む
__QMLO_zNew●—①の段 a' が書く今回の (1 本のファイル、MPI-IO)
__QMLO_zdump_*●—診断用(ECALJ_ZMLO_DUMP=1)
__cmlo.*, __HamiltonianGW(.info)○—①が書く と PMT の 。連鎖の中で __cmlo を書くのは①だけ(job_mloW・job_mlo_magnon では mlo --mlo が __HamiltonianGW から書く)
HamiltonianPMTInfo○—④の mlo が毎反復読む(格子、k メッシュ、対の表)。無ければ gwsc が起動時に lmf --writeham で作り直す
__HamiltonianPMT(.info)○—索引を作る mlo --mlo(連鎖の最初)だけが読む。④は読まない(2026-09-27)
__amlo.*○—索引を作る mlo --mlo が書くが、読むものはない(④は書かない)

__ の付くファイルは、gwsc の呼び出しの間ならすべて消してかまいません(__mixsig と __QMLO_mixsig を消すと、Anderson の外挿が 1 回切れるだけです)。 sigm は値としては SCF に使いませんが、無いと gwsc も lmf も LDA からやり直すので、再開には必須です。 run_snap.sh のスナップショットは、「結果」の多くに sigm.<sname>、__atm.<sname>、syml.<sname> などを加えたものです。

2.5 オプションと環境変数 ​

効果
--mloMLO 経路全体のスイッチ。無ければ MLO 関係は何も動かない
--mlofreeze既存の HamRsMLO の索引を使い、QMLO_SigRs だけ書き直す(gwsc が反復内の mlo に渡す)
ECALJ_MLO_MIX=0 の Anderson 混合を切る(§1.6。既定は混合する)
ECALJ_MLO_ALLOW_REBUILD=1QMLO_z に無い で、その場の から作り直すのを許す(既定は止まる)。基底が混ざるので診断用
ECALJ_MLO_NOSIG=1QMLO_z を無視して、全 でその場の から作り直す。診断用
ECALJ_MLO_NOCACHE=1QMLO_z も使い回しも止め、呼ばれるたびに作り直す(旧動作)。診断用
ECALJ_ZMLO_DUMP=1段 a' の を __QMLO_zdump_sugw に、getsenex の を __QMLO_zdump_getsenex に書く。同じ反復の a' と⑥の SCF では一致すべき
ECALJ_SIGMLO_RT=1メッシュ点で、 の Bloch 和が __QMLO_Sig を再現するか
ECALJ_SIGMLO_CHECK=1各 で、MLO 経路の senex と従来 sigm 経路の senex の差の最大値を出す

3. 実例: LiTi₂O₄ ​

3.1 設定 ​

項目値
MLO126 軌道 = 14 原子(Li₂Ti₄O₈)× (s+p+d)
メッシュnkabc = n1n2n3 = mlo_nkabc = 6³ と 9³
混合[gw] mixbeta = 0.5(sigm と の両方)
基底pwmode = 11
窓mlo_method = 4、 eV(既定)
計算機kt1(RTX 5090 × 2)、gwsc 1 --mp --fp32 を 10 回(2026-09-26 のコード)
窓の基準連鎖の最初(LDA)の に固定(いまのコードは各反復の SCF の値、§1.2)
1 反復6³: 950–1000 秒、9³: 約 5300 秒(89 分)。hgw が 86 %(6³)、94 %(9³)で、MLO のための処理は 1 % 程度。2026-09-27 の高速化の後は 6³ の fp32 で 555 秒
比較の基準従来 QSGW(MTO)6³、pwmode = 1、β = 0.5、10 反復(LDA の行だけ pwmode = 11)

3.2 バンド ​

LiTi2O4 の t2g バンドの反復推移(従来 6³ / MLO-QSGW 6³ / MLO-QSGW 9³)

t2g(バンド 33–44)、Γ→X 211 点。列は左から 従来 QSGW 6³ / 6³ MLO-QSGW を sigm で描いたもの / 6³ の MLO バンド / 9³ MLO-QSGW を sigm で描いたもの / 9³ の MLO バンド、行は上から LDA、iteration 1–10。 赤い × は のメッシュ点(内挿が厳密な点)。緑は一番下のバンド、青は Γ→X の中ほどで膨れるバンドで、 交差をまたいで追跡し、膨らみが 50 meV 以上の反復だけ色を付けています。

  • 膨れるバンド(青)のこぶは MLO バンドでは出ない。 同じ状態を sigm の内挿で描くと(2・4 列目)、メッシュ点の間にこぶができる。 6³ では iteration 3、9³ では iteration 3〜6 で大きく揺れ、7 以降は収まる。 6³ の MLO バンドには一度も出ず、9³ の MLO バンドでも iteration 5 以降は出ない
  • 9³ の方がこぶが大きい(sigm 描画)。従来 QSGW でも、メッシュを密にすると占有 t2g のさざ波が大きくなった。 が遠方で減衰しないので、周期セルが大きいほどその成分を多く拾って内挿する、と見ています
  • 一番下のバンド(緑)には、序盤の反復で階段状の肩が出る(段の間隔はメッシュ間隔に近い)。 こちらは sigm 描画にも MLO バンドにも出る
  • 従来 QSGW の列には iteration 9〜10 でも青が出る。同じ 6³ の MLO-QSGW の 2 列には出ない

3.3 収束 ​

反復ごとのバンド変化

反復ごとの t2g の変化(左 max、右 rms)。9³ は実線、6³ は破線。

rms [meV]78910
9³ MLO バンド7.43.25.23.2
6³ MLO バンド6.92.96.23.9
従来 6³6.76.64.76.5
  • どちらのメッシュも、従来と同じ水準(rms 3–7 meV)まで下がる。全 10 反復で §2.3 の確認はすべて合格
  • を混合しないと(β=1 相当)、3 反復目に rms 120–150 meV 跳ね上がる(従来は 35 meV)。 混合すれば従来と同じ落ち方になる(3 反復目は 31 meV)
  • メッシュを 6³ → 9³ にしたときのバンドの動き(iteration 10)は、MLO バンドで rms 13 meV、sigm 描画で 27 meV。 MLO 表現の内挿の方がメッシュに鈍い

3.4 従来との差 ​

iteration 10 の MLO バンドと従来 6³ の差は、6³ で rms 46 meV(平均 +30)、9³ で rms 49 meV(平均 +34)です。 6³ で見ると一様なずれではなく、占有の 2 本が 7–13 meV 低く、非占有の t2g が 22–61 meV 高い。t2g 全体の幅は 1505 対 1516 meV でほぼ同じです。 メッシュ点の上でも 43 meV 違うので、内挿の差ではなく状態の差です。 ただし比較の基準は pwmode = 1、MLO 側は pwmode = 11 です。LDA での pwmode の差(rms 5.6 meV)だけでは説明できませんが、 QSGW で増幅された可能性は残ります。 の表現の差か pwmode の差かは、pwmode = 11 の従来連鎖を回さないと分けられません(未実施)。

3.5 40 反復まで(2026-09-29) ​

§3.1 の設定(ただし 2026-09-27 以後のコード: 窓の基準は各反復の SCF の値、 は t_tetrakbt = -992.4、t_sigmaw = 1000)で、 LDA から gwsc 10 --prec=tf32、続けて 1 反復ずつ 40 反復まで回した。設定の表、図と数値の全部は ecalj の Samples/kBT/LiTi2O4/README.md。

LiTi2O4 の t2g の MLO バンド、6³ と 9³、反復 10・20・30・40

図 3.5-1. t2g の MLO バンド(Γ→X)。左が 6³、右が 9³。上から LDA、反復 10、20、30、40

表 3.5-1. 前の反復からの MLO バンドの変化の最大(meV)と、一番下のバンドの波打ちの目安(LDA からの補正を cos の 3 次までで当てはめた残差の最大)

反復t2g の変化占有の 2 本の変化波打ち
6³10——12.7
6³2013.68.726.0
6³403.30.826.7
9³10——17.2
9³209.62.114.4
9³405.10.212.9
  • 精度: 同じ入力の tf32 と fp32 の MLO バンドの差は、6³ の反復 10 で最大 0.8 meV、9³ の反復 10〜12 で最大 1.2 meV(t2g)。 fp64 と fp32 は 6³ の 1 反復目で最大 1 meV。1 反復の時間は 9³ で tf32 21 分、fp32 47 分
  • 6³: 反復 10 ではなめらかだが、20 から一番下のバンドの = 0.35〜0.45 に肩ができ、40 でも残る。t2g の中ほどのバンドの膨らみは 反復 22 の 131 meV が最大で、40 で 49 meV まで減る(まだ 1 反復に 2〜3 meV ずつ減っている)
  • 9³: 反復 10〜15 では一番下のバンドが Γ のすぐ外で Γ より 6〜12 meV 下がるが、40 で 1.5 meV になる。 メッシュ点を結ぶ内挿の曲線は、40 反復でもわずかに波打って見える
  • 6³ と 9³ に共通のメッシュ点(Γ と = 2/3)では、40 反復の一番下のバンドの差は 4 meV 以下。メッシュ点の間では最大 37 meV

4. 落とし穴 ​

誤りなぜだめか / 正しくは
を混合しない(ECALJ_MLO_MIX=0、2026-09-29 までのコードでは ECALJ_MLO_MIX=1 の付け忘れ)序盤に行き過ぎる(§3.3)
job_band の図を MLO の結果と思う従来 sigm の内挿。MLO バンドは §1.7 の方法で描く
job_band --mlo や job_mlo --mlofreeze で MLO バンドを描く§1.7 の表のとおり無効
別のメッシュの確認値(印の行数、所要時間)を当てはめる正常を異常と判定してしまう。値はメッシュと並列数で決まる(§2.3)

5. 未解決・今後 ​

  • pwmode = 11 の従来連鎖を 10 反復回し、§3.4 の差を表現の差と pwmode の差に分ける
  • 反強磁性の対称性(symgrpaf): QSGW は 2026-09-30 から、GW のプログラムが両方のスピンを計算する形で動く(ecalj Samples/AFsymmetry)。 --mlo との併用は確かめていない
  • §3.2〜§3.4 の図と数値は 2026-09-26 のコード(窓の基準が連鎖の最初の )のもの。いまのコードの 9 反復後の MLO バンドはそれと rms 8 meV(最大 23 meV)、ほぼ一様な 7〜10 meV の下がり(窓の基準が 0.55 eV 動いたため、2 反復目から分かれる)。§3.5 はいまのコード
  • --prec-final=fp32:N(最後だけ fp32)は、まだ走らせて確かめていない(tf32 と fp32 の差は §3.5 のとおり 1 meV ほど)
  • 6³ の肩(§3.5)が収束した解の性質なのか、さらに反復すると消えるのかは分かっていない
  • MLO の本数の影響: 76 本(gwinit 既定)、126 本、全 MTO(154 本)を、 の混合ありで比べていない
  • 空球(empty sphere)を入れると振動が減り安定するか(未検証)
  • の探索を対称等価な まで広げる(job_band --mlo がメッシュ点で使えるようになる)。 収束後に PMT バンドを MLO 経由で描くには、 ごとに 入りの で を作り直して自己無撞着にする
  • 速さ: 9³ の hgw の残りの 8 割は Σc の行列積で、すでにこの GPU の単精度の実力近くで回っている(ecaljgpu)。 を頂点 から直接作れば行列積の片側が になるが、 LiTi₂O₄( = 126、ntq = 159)では 1 割程度しか減らない