Skip to content

MLO — 経緯と作業記録(backup)

ecalj branch mlo3 / 2026-09-16 17:02 JST

これは記録であって手引きではない。 現在の方法と推奨値は MLO を見よ。本頁は、そこに至るまでに何を試して何が否定されたかを 残したものである。番号や節の呼び方は当時のまま(「§1」「付録 D」などは MLO 側の節を指す)。

ここに書かれた数値の一部は古い設定や古い評価器で測ったもので、 MLO の実測値と一致しないことがある。食い違うときは MLO が正しい。


1. コードの訂正 — 途中で見つかったバグ

(a) 評価器 mlo_losscheck.py のバグ 2 件

準位の二重計上。 bnd00*.spin1 は経路の 1 セグメントずつで、隣り合う セグメントは端点の を共有する。素朴に追記すると共有点だけ準位が 二重に並んでいた(Si は総本数 75 のところ 5 点だけ 150)。既出の を 読み飛ばすよう修正。

金属の誤判定。 「大域の VBM と CBM が 0.15 eV 以上離れていれば絶縁体」という 判定では、経路の刻みが粗くて 交差が標本から抜けた金属を絶縁体と誤る。 Cu は大域ギャップ 0.1995 eV なのに 92 k 点中 1 点しか eV を持たず、 偽のギャップ誤差 meV が に入っていた。 占有本数が によらず一定かで判定するよう変更 (Cu 5/6、Fe 5–9、RuO₂ 18–21 に対し Si/GaAs/Al₂O₃/NiO は一定)。

(b) m_hreduction.f90 — レジーム則は一度も走っていなかった

m_hreduction.f90 の method 3 の枝は、regime7 ブロックで軌道ごとの幅 ewuse を計算した直後に

fortran
              endblock regime7
            endif
            ewuse = eww          ! ← 計算結果を無条件に破棄

と上書きしていた。mlo_ewalpha は一度も効いていない。 以前「MTO ごとに幅を変えてもバンドがバイト単位で同一だった」ので レジーム則は無効と報告したが、それはこの死んだコードのせいで、 レジーム則は検証されたのではなく一度も試されていない

この死んだコードと、互いに矛盾する v5/v7/v8/v9 のコメント地層、 未使用の itgt / regime_report / mlo_tau / mlo_ewalpha / mlo_ewmin を削除した。 削除後に全 11 系のバンドがバイト単位で一致することを確認済み。


2. 経緯 — method 0〜4 の関係と設計判断

以下は最終形に至るまでの記録であり、現在の推奨設定ではない


A. 重み行列 — 5 つの method は同じ一本の式

式 (3) の に入る重み の一般形。式 (4) はこの特別な場合である。 実装 (m_hreduction.f90) はどの method でも式 (9) を

組み立てる。method 0/1/2/4 では なので 式 (9) の第 1 項は恒等的に 0 で、第 2 項だけが働く。違いは だけ:

methodmlo_emax性格
2無視自己参照のみ。調整パラメータなし
1唯一のカット大域カットのみ
0大域の床 + 自己参照
4無視床を自動化した method 0
3、第 1 項も有効無視二段シグモイド

二つの項の役割は違う

  • 自己参照項 と 各軌道の帯域保持を担う。局在バンドはこれだけで済む(課題 2)。
  • (大域カット)は に依らず、窓の中の全状態の重みを 1 にする。 「 の少し上まではきっちり合わせたい」という系全体の要求で、 これが課題 1 の本体である。


B. 原本サンプルは何をしていたか

MLOsamples の 19 サンプルはすべて method 0、コマンドラインの上書きも無し。 物質ごとの調整は mlo_emax 一本で、3 つのレジームに分かれていた。

mlo_emax物質床の位置
0Si, GaAs, GaAsSoc, C, C.sp
5〜7 eVAl₂O₃:Cr (7), FeCo (7), FeMgO (5), FeMgOSoc (5) eV
未設定Cu, Fe, FeSoc, GdCo5, GdION, NiO, RuO₂, SmP, SrTiO₃auto

auto は原理のある窓ではなかった

を実測すると:

模型auto 床
ミニマルCu (d のみ, 5)−2.15 eV
SmP (4f, 7)−6.56 eV
SrTiO₃ (14)−3.35 eV
GdION (4f, 7)−0.03 eV
ちょうど良いFe (spd, 9)+2.74 eV
RuO₂ (22)+3.58 eV
大きいSi (18)+22.8 eV
FeMgO (78)+17.6 eV
C (18)+63.2 eV

小さい模型では床が より下に落ちて何もしていない(だから Cu・SmP・GdION では method 0 と method 2 の数値が一致する)。大きい模型では自由電子連続帯の中に飛び、 やはり窓にならない — 手置き emax が必要だった列がこれである。 Fe と RuO₂ でたまたま有用な位置に来たのが「auto で動いていた」正体で、 原理のある窓ではなく本数勘定の偶然だった。



C. 中間段階 — 床を に置いた場合

床を ( eV)と置く。全物質に同じ値を書くので、 物質ごとに変える調整はゼロ。 評価窓は eV(課題 1 の目的そのもの)と VBM−2 eV 〜 CBM+2 eV。

系 (MTO 数)
C (sp のみ, 8)7.218.90.011−290.69
Cu (spd, 9)49.827.40.054−770.98
Fe (spd, 9)16.316.60.046−7
SrTiO₃ (14)5.412.40.009+171.07
NiO (16)21.120.70.034+141.07
Si (18)18.021.10.019+231.16
C (spd, 18)10.117.90.009−61.00
GaAs (18)12.317.30.011+261.00
FeCo (18)6.45.90.013−3
RuO₂ (22)9.18.90.030+0
Al₂O₃:Cr (50)5.235.00.017−1280.58
平均14.618.40.023

ΔE は meV、 は無次元。金属に CBM は無いので後ろ 2 つは「—」。

手調整版・method 3 との比較( eV の ΔE rms、meV)

この比較は eV を指標に使っている。後にこれはワイドギャップ系で無効と 分かった(§4「使ってはいけない指標」)。順位の目安としてのみ読むこと。

床の取り方平均最大
(定数、全物質共通)11.121.1
CBM(定数、全物質共通)11.022.2
( 依存)24.074.9
method 3(二段シグモイド)18.432.5
原本(物質ごと手調整)20.655.6

(Cu を除く 10 系。Cu spd は別枠)

固定設定 1 つが、物質ごとの手調整より良い。



D. 最終形に至る 3 つの設計判断(実測)

(a) シグモイドは 1 つ。 はカット位置に入れる

method 3 は 2 つのシグモイドを で結ぶが、 が常に成り立つので、 とすると第 1 項が常に勝ち、 が 完全に消える(Fe: 0.031 → 0.075 eV)。 は裾を通してしか入らず、しかも のときだけ。 method 0/4 のようにカット位置そのものに入れる方が強い (同じ床で Fe: 0.017 対 0.031 eV)。

(b) 床は に依らせない

を使うと窓の意味が ごとに変わる。 金属では最低非占有準位の振れが大きく、Fe で 0.075 eV と大きく悪化する。

(c) ギャップの広い系では床を CBM 基準に

と CBM はほとんどの系で同じだが、Al₂O₃:Cr だけ決定的に違う:

CBM
Al₂O₃:Cr ギャップ誤差−128 meV+7 meV
Al₂O₃:Cr 0.581.08
他 10 系 平均11.111.0

Al₂O₃:Cr は CBM が eV にあり、 eV の床では CBM が拘束されない。 原本が emax = 7 eV としていた理由そのものである。