Skip to content

MLO — 最大局在化などに代わる自動モデル化法

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

MLO (MTO-based Localized Orbitals) は、最大局在化 Wannier 関数 (MLWF) の代わりに使う局在基底である。

MLWF は「広がりを最小にする」という条件でユニタリ変換を非線形最適化して求める。 強力だが、初期推定 (projection) を人が与える必要があり、収束が初期値に依存し、 エンタングルした帯では disentanglement の窓をさらに手で決めることになる。 うまくいくかどうかが人の手加減に掛かっているのが難点である。

MLO は最適化をしない。PMT 基底の恒等分解を出発点に、 どの チャネルで模型を作るか (mlo_lm) を与えれば、重み が 式一本で決まる(§1)。反復も初期推定も無く、結果は一意で、物質ごとの調整 パラメータはゼロである。局在性は最適化の結果ではなく、MTO を種にしている ことから自然に出る。

その mlo_lm原理的には自動化できる。規則は「目的の窓にバンドを出して いるチャネルだけ取る」の一つで、どの原子のどの が窓に重みを持つかは 計算から出る量だからである(§1)。現状は手で書いているが、調整ではなく 読み取れば決まる類のものである。

使い方は大きく 2 つに分かれ、測り方も違う:

  1. ミニマム模型 を含む領域の第一原理バンドを全部再現する。 半導体・金属・Al₂O₃:Cr(ギャップ中の Cr d + バンド端)はすべてこれ(§2)。
  2. 部分バンドを取る模型 — d だけ、4f だけを取り出す。MLWF で言えば projection で狙い撃ちしていた使い方に当たる(§3)。

FeMgO は真空層を持つスラブで空格子球が要る。§5 に独立の節を立てた。

本書の数値はすべて Samples/MLOsamples/ の 18 サンプルの実測値で、 全サンプルが mlo_method = 4 の既定値に統一してある(2026-09-16)。 図は ecalj/Samples/MLOsamples/plots/ にあり、 SRC/exec/mlo_bandplot.py <サンプルdir> で再生成できる(本頁の図はその写し)。 損失の数値は SRC/exec/mlo_losscheck.py <サンプルdir>

§1最終形式と既定値。読むならここだけでよい
§2ミニマム模型窓の中のバンドを全部取る。11 系の実測とバンドプロット
§3部分バンドを取る模型d だけ / 4f だけ。窓型の損失は使えない
§4SOCjob_mlo_soc。あとから摂動として載せる
§5FeMgO真空スラブに空格子球を置く
§6有効相互作用 job_mloW。模型の にあたる量
§7誤差の測り方一方向では決まらない
§8残る問題
別頁経緯と作業記録(backup)

1. 最終形

MLO は PMT 基底の恒等分解から、選んだ MTO 部分空間の固有状態 を介して作る:

ここで を PMT 固有状態と MTO 固有状態の重なりとする:

とすると式 (1) の和は MTO 部分空間への射影演算子そのものになり、 に戻ってしまう。そこで重み を掛ける:

この をどう決めるかが問題のすべてで、課題 1 の答えは式 (4) である。

大域の伝導帯下端(金属では )。 パラメータは の 2 つだけ(単位はすべて eV)で、物質ごとに変える調整は無い。

役割がはっきり違う。 は「どこまで合わせたいか」の宣言であって フィッティングパラメータではない。バンド端から上に だけの範囲を要求する、 という意味なので、評価する窓の上端と同じ値にする(既定はどちらも 2 eV)。 が唯一の調整ノブで、残差が大きいときに動かすのはこちらである(§7)。

mlo_method = 4 として実装済み。 大域の伝導帯端は新しく計算する必要はなく、 lmf が SCF の BZ 積分で既に求めて efermi.lmf に書いている (evtop = VBM、ecbot = CBM。金属では のすぐ上の準位になるので、 一つの量で金属と絶縁体の両方を覆う)。 m_readqplist がこれを読み、原点のずれに強いよう差分 として eferm に足している (qplist.dat は零点に estaticav を使うことがあるため)。 efermi.lmf が無ければ に落ちる。

物質ごとに書く調整パラメータはゼロになった。mlo_emax を 0 / 5 / 7 / auto と 使い分ける必要が消えている。mlo_method = 4 は既定なので、書く必要すらない。

mlo_lm — 原理的には自動化できる

mlo_lm([mlo] 内、どの lm チャネルで MTO 部分空間を作るか。2026-09-17 までは [blocks]mlo_lm という名前で、古い置き場・名前のままでも読める)は物質ごとに 書く。調整ノブではなく模型の定義そのものであり、method に関係なく MLO には 常に必要なものである。

gwinit は全原子 × s,p,d の行を雛形として書き出すが、 ! を外せばよいというものではない。 実際のサンプルはこうなっている:

mlo_lm
Si, GaAs全原子 1–9(sp³d⁵)
NiONi は 5–9 (d のみ)、O は 2–4 (p のみ)
SrTiO₃Sr は空、Ti は 5–9、O は 2–4
RuO₂Ru は 5–9、O は 2–4
Al₂O₃:CrAl は 1–9、Cr は 5–9、O は 2–4

規則は一つで、目的の窓にバンドを出しているチャネルだけ取る。酸化物なら O 2p と遷移金属 3d がそれで、陽イオンの s,p や O の s,d は窓の外にあるから 取らない。SrTiO₃ の Sr が空なのはそのためである。sp 半導体では価電子帯も 伝導帯も sp³d⁵ が担うので全部取る。

番号は job_band が PROCAR に書く実調和関数の順で、殻ごとに連番になっている:

lm内訳
s1s
p2, 3, 4py, pz, px
d5, 6, 7, 8, 9dxy, dyz, dz², dxz, dx²−y²
f10 – 16f−3 … f3

殻の一部だけを取ることもできる。 たとえば Cu の t2g だけなら 5 6 8 (dxy, dyz, dxz) で、実際に 3 軌道の模型になる。

2026-09-17 以前のバイナリでは部分殻が効かない

m_HamPMT.f90 の選別ループに、殻の先頭の lm(1 / 2 / 5 / 10)が書いてあれば 殻全体、無ければ殻全体なしとして、それ以外の番号を無視するバグがあった (lold を更新しておらず、 が常に に張り付いていた)。 完全殻を先頭から並べる普通の書き方では影響しないが、部分殻は選べず、 先頭を欠いた並び(例: 11 12 13 14 15 16)は黙って殻ごと落ちていた。 FeMgO の mlo_lm に長く残っていた Fe/Mg の f の指定がまさにそれで、 f は基底にあったのに模型には一度も入っていなかった。

この判断は原理的には自動化できる。 「窓の中のバンドに、どの原子の どの チャネルが重みを持っているか」は計算から出る量で、lmf --mkprocar が出す射影重み(fat band に使うもの)がまさにそれだからである。閾値を一つ 決めて拾えばよい。ただし現状そこは実装されておらず、手で書いている。

手で書かざるを得ないのは、そこから更に狙って絞るときである:

  • d だけ、4f だけを取り出す(§3)。窓に他のバンドがあっても敢えて捨てる
  • 真空層を持つスラブに空格子球を足す(§5)。原子の無い場所に基底を置くので 構造からは出てこない

入力キー

gwinit が生成する ctrlg.<sname>.toml[mlo] セクションに、既定値が 陽に書き出される(2026-09-17 までは [gw] の中にあった。古い置き場のままでも 読めるが、一行の案内が出る):

toml
[mlo]
mlo_method = 4      # theta = sigma((eps - ecut_j)/mlo_w),
                    #   ecut_j = max(CBM + mlo_delta, eps^MTO_j)
mlo_delta  = 2.0    # (eV) how far above the band edge (EF in metals) the
                    #   model must be accurate. A statement of what you want,
                    #   not a fitting parameter: match it to your target window.
mlo_w      = 2.0    # (eV) width of the fall-off above that floor. THIS is the
                    #   knob to turn if the residual is too large. Measured
                    #   optima: semiconductors ~2, Fe/Cu-like metals ~11.

mlo_deltamlo_w で、単位はすべて eV (mlo_emax が元から eV なので mlo_* が揃う)。模型のチャネルを決める mlo_lm も 同じ [mlo] にあり、Wannier(hmaxloc、cRPA・magnon)もこれを読む。

MLO を作る k メッシュは [mlo] mlo_nkabc で必ず書く(2026-09-17、既定なし):

toml
mlo_nkabc = [10, 10, 10]   # k mesh the MLO Hamiltonian is built on; required

lmf --writeham --mlo がこのメッシュの全 BZ 点で PMT ハミルトニアンを書き、mlo が そこから実空間表現を作る。無いと lmf はその場で止まる(SCF の [bz] nkabc を黙って 流用しない — 模型を何の上に作ったかは入力に書いてあるべきなので)。効くのは --writeham --mlo のパスだけで、SCF・バンド図は [bz] nkabc[gw] n1n2n3 のまま。 gwinit[bz] nkabc と同じ値を書き出すので、通常はそのままでよい。

射影子から外す最下位の PMT 状態(半芯 LO、O 2s のような模型に乗らない低い帯)の数 nskip は自動で決まる: 各 k で「模型部分空間への重みが 1/2 未満の最下位状態の数」を 数え、その全 k での最小値を全 k に使う(2026-09-18)。k ごとに決めると、Cu の d 模型の ように s 帯が最下位になる k とならない k で射影子が入れ替わり、バンドに折れが出る。 手動指定 mlo_nskip は廃止した。

mlo_lm で指定した (原子, l) に半芯の局所軌道pz、例 Ga 3d の pz = 3.9)があるとき、 どちらの動径関数を模型に使うかも自動で決まる(2026-09-18): その LO の帯(LO 部分空間への 射影重みが 1/2 を超える占有状態)の最高エネルギーが E_F − 10 eV よりなら「浅い」LO と して LO を模型関数にし(ZnO の Zn 3d、−3.8 eV: これで 476 → 0.8 meV)、なら従来どおり EH 関数を使って LO の状態は nskip で射影子から外す(GaAs の Ga 3d、−15 eV)。lmlolocal orbital atom ... SHALLOW / deep と出る。価電子殻より上の拡張 LO(pz > pnu)は対象外。 Cu の d 模型で 10³ → 16³ にすると d 帯の rms は 98 → 90 meV (Samples/MLOsamples/BackUp_notes/mlo_nskip_cu_problem.md)。

通常はこのまま使える。 Samples/MLOsamples の 18 サンプルは全部この既定値 ( eV)で、物質ごとに変えていない(§2)。3 つとも既定値なので、 そもそも書かなくてよい。

ただし には系による調整の余地がある。 残差が大きいときに動かすのは こちらで、実測した最適値は半導体で eV、Fe・Cu のような単原子遷移金属で eV と 6 倍違う(§7)。Fe では を 11 eV にすると窓内誤差が 19.8 → 9.7 meV と半減する(§2)。 は動かさない — あれは 「バンド端から上にどこまで合わせたいか」の宣言であって、合わせ込む対象ではない。


2. ミニマム模型 — を含む領域を再現する

MLO の使い方は大きく 2 つに分かれ、測り方も評価の仕方も違う

何を取るか測り方
ミニマム模型(本節)窓の中の第一原理バンドを全部Si, GaAs, Fe, NiO, Al₂O₃:Cr, FeMgO …窓型の損失(§7)
部分バンド模型(§3)特定のチャネルだけCu の d のみ、4f のみ準位の重なり

本節は前者。窓の中に第一原理バンドが 本あれば模型も 本持ち、 両者がどれだけ重なるかを測る。物質ごとの調整は無いmlo_lm は要るが、 これは調整ではなく模型の定義で、窓に重みを持つチャネルを取るだけである(§1)。

実測 — 既定値のまま

mlo_method = 4 の既定値( eV、 eV)での実測。 MLOsamples の 18 サンプル全部がこの設定に統一してある(2026-09-16)。 物質ごとの入力は mlo_lm だけで、mlo_emax はどのサンプルからも消えた。

表の見出しは次の 5 つ(定義は §7):

見出し単位範囲
ΔE rmsmeVVBM−2 〜 CBM+2 eV(金属は E_F±2 eV)
占有ΔE rmsmeVE_F−12 〜 E_F−2 eV
分散経路方向の勾配の相対誤差無次元窓と同じ
ギャップバンドギャップ誤差(符号付き)meV絶縁体のみ
m*比m*(MLO) / m*(DFT)。1.00 が一致(誤差ではなく比)無次元絶縁体のみ

誤差の一覧

窓 (meV)占有 (meV)分散ギャップ (meV)m*比
FeMgO (76)2.50.50.006
Al₂O₃:Cr (50)7.22.20.004+11.04
FeCo (18)8.34.70.021
GaAs (18)8.51.90.008+60.82
SrTiO₃ (14)8.95.50.009+91.03
RuO₂ (22)9.99.40.048
NiO (16)15.418.50.071+81.10
C (spd, 18)16.64.80.013−11.05
Fe (spd, 9)19.812.90.057
Si (18)20.09.70.019+381.41
C.sp (sp のみ, 8)26.78.00.021−390.65
中央値9.95.50.019

最良は FeMgO の 2.5 meV で、真空層に空格子球を入れた 76 軌道模型(§5)。 最悪は C.sp の 26.7 meV(sp だけ 8 軌道)と Si の 。 どちらも を動かせば下がる(§7)。

  • Si は で別物(窓 20.0 → 7.1 meV、ギャップ +38 → +3 meV、 1.41 → 1.03)。 の値は補間の雑音を含む。サンプルは のまま。
  • NiO の占有側 18.5 meV は窓内 15.4 meV より大きい。窓だけ見ていたら 見落とす種類の誤差である。

代表図 — Si と Fe

灰線が第一原理 PMT バンド、赤 × が MLO 模型。どちらも 基準。 全 38 枚(18 系 × 窓/全域 + Fe の 比較 2 枚)は ecalj/Samples/MLOsamples/plots/ にあり、SRC/exec/mlo_bandplot.py <サンプルdir> で再生成できる。

Si

Si(QSGW、18 MTO = 2 原子 × sp³d⁵)。価電子帯から伝導帯 +5 eV まで 赤 × が灰線に完全に乗る。


図に「目的窓」の帯は描いていない。 が決めるのは 上側の床だけで、下限は評価の都合にすぎない。しかも第 2 引数の が軌道ごとに違うので、一本の水平線では描けない

Fe

Fe(DFT、9 MTO = sp³d⁵)。majority と minority を並べた。両スピンとも同等に乗る。 FeCo も同様、NiO は両スピン同値で、磁性系でスピンによる偏りは出ていない。


は効く — Fe の実例

Fe は既定の eV では合わせきれない。 だけを 11 eV に上げると:

Fe窓 (meV)占有 (meV)分散
(既定)19.8 meV12.9 meV0.057
9.7 meV9.0 meV0.024

窓内の誤差が半分以下になる。ただしバンド図を並べても違いは見えない — 差は meV の桁で、図の縦軸では潰れてしまう。どこで効いているかは 準位ごとの誤差を第一原理側のエネルギーで分けて見る必要がある:

Fe w 依存

効いているのは より上だけである。 eV で 2〜3 倍改善する一方、 より下は勝ったり負けたりで、minority の eV や eV では のほうが良い。これは床 の上にあり、 がその上での落ち方を決めているのだから当然である。 を上げれば良くなる」ではなく「 は床より上の当たり方を決める」 と読むべきで、 を別に立てているのもこのためである(§7)。


高エネルギー側 — トランケーションは滑らか

MLO 模型は MTO 部分空間の次元しかバンドを持たないので、どこかで第一原理バンドから離れる。 その離れ方がリンギングになっていないかを見るため、MLO が伸びきるところまで描いた (<系>_full.png)。実測した上限:

系 (MTO 数)MLO が伸びる上限 (eV)第一原理の上限 (eV)
NiO (16)1.6 eV141.8 eV
RuO₂ (22)5.5 eV146.9 eV
SrTiO₃ (14)8.4 eV153.6 eV
C.sp (sp のみ, 8)16.8 eV124.5 eV
FeMgO (76)29.7 eV152.0 eV
Si (18)28.8 eV108.3 eV
GaAs (18)31.6 eV116.5 eV
FeCo (18)31.8 eV142.6 eV
Al₂O₃:Cr (50)32.0 eV141.1 eV
Fe (spd, 9)32.8 eV124.6 eV
C (spd, 18)86.1 eV151.4 eV

軌道数と上限は比例しない。 NiO は 16 軌道で 1.6 eV までしか伸びず、 Fe は 9 軌道で 32.8 eV まで伸びる。どのチャネルを取るかで決まる (NiO は Ni d と O p だけ、Fe は分散の大きい sp を含む)。 目的の窓( 近傍)に影響する話ではない。

床の上でも MLO バンドは連続な曲線で、折れや振動は見えない。数値でも確かめた — バンドに沿った の中央値(eV、括弧内は第一原理の同じ量):

系 / の範囲 (eV)−10..00..33..88..1515..2525..40
Si7.9 (8.1)12.5 (9.2)15.9 (14.2)24.2 (21.8)30.3 (45.1)20.4 (45.9)
Fe12.4 (10.2)45.8 (20.4)37.8 (24.5)41.3 (36.3)94.2 (54.8)216.3 (79.4)
GaAs7.6 (6.5)15.7 (11.4)13.8 (13.4)24.4 (20.7)46.2 (37.4)36.4 (59.5)
Al₂O₃:Cr207.6 (138.2)62.8 (42.1)367.2 (216.7)307.7 (240.6)338.5 (586.1)

Si・GaAs・Al₂O₃:Cr は高エネルギー側で MLO の曲率が第一原理を下回る (Si は 20 対 46)。リンギングどころか元のバンドより滑らかである。 Fe だけが 25 eV 超で 216 対 79 と 2.7 倍になる。spd 9 軌道しかない模型が 33 eV まで引き伸ばされている領域で、模型の容量を超えている。

Si full

Si(QSGW)— 床(+3 eV)まで完全に一致し、その上は離れつつ 29 eV まで滑らかに伸びる。


Fe full

Fe — を横切る sp バンドをゾーン境界の 33 eV まで追えている。


参照バンドについて

比較相手はどの系も PMT 基底で解いた第一原理バンドで、実験値ではない。 そのうち Si・Al₂O₃:Cr・RuO₂・GdION は QSGW(sigm.<sname> を持つ)、 残りは DFT である。本書で「」と書いているのは MLO 模型と この第一原理バンドの差で、比 の分母も同じ。

全サンプルのバンドプロット(灰線: 第一原理 PMT、赤 ×: MLO)

課題 (1) — 近傍の模型

Al2O3_Cr

Al₂O₃:Cr(50 軌道)— この系が最終形の要点。O 2p 価電子帯(−2〜−4 eV)、 ギャップ中の Cr d 準位( 近傍)、CBM(+6.5 eV)、さらに上の帯まですべて乗る。 床を に置くと CBM が拘束されずギャップが 128 meV 縮む。 手調整 mlo_emax = 7 eV を置いていたのはこの CBM を掴むためで、 method 4 の はそれを自動で当てる。窓 7.2 meV。


FeMgO

FeMgO(76 軌道)— 本表の最良、窓 2.5 meV。真空層 30.5 a.u. に空格子球 7 個を 入れた Fe/MgO スラブ。空格子球なしの 78 軌道模型は 126.9 meV だったので、 ほぼ同じ大きさで 51 分の 1 になる。詳細は §5。


GaAs

GaAs(18 軌道)— Γ 点の分散の大きい伝導帯を含めて一致。窓 8.5 meV、ギャップ +6 meV。


SrTiO3RuO2

SrTiO₃(14 軌道、窓 8.9 meV)と RuO₂(22 軌道、窓 9.9 meV)。


NiO

NiO(LDA、16 軌道)— sp と局在 d が共存する系。窓 15.4 meV に対し占有側 18.5 meV と 逆転しており、窓だけ見ていたら見落とす。


CC.sp

ダイヤモンド C — spd 18 軌道(窓 16.6 meV)と sp のみ 8 軌道(窓 26.7 meV)。 後者は伝導帯の一部が MTO 部分空間の外にあり、比 0.65、ギャップ −39 meV。


FeCo

FeCo(18 軌道、窓 8.3 meV)— 磁性金属で両スピンとも良く乗る。



MLO フィッティング一覧 — 全サンプル

Samples/MLOsamples の 25 系すべて(灰: 第一原理 PMT バンド、赤 ×: MLO)。testecalj が 回すものと同じ入力・同じ参照。図は SRC/exec/mlo_bandplot.py <sampledir>_work で再生成。 表の後半 7 系は Materials Project の構造をそのまま ctrlgenToml.py に通し、 mlo_lm に全原子の s,p,d を入れて既定( eV)で回したもの (2026-09-18、Samples/MLOsamples/BackUp_notes/mp_20260918)。

半導体・絶縁体
Si (QSGW)GaAs (QSGW)GaAs+SOCC (diamond)
C.spSrTiO3Al2O3:Cr (QSGW80)NiO (LDA, AFM)
金属・磁性
Cu (d だけ)FeFe+SOCFeCo
RuO2 (QSGW)GdCo5 (4f)GdION (4f, QSGW)SmP (4f, so=2)
スラブ
FeMgO + 空格子球 (76 MLO)FeMgO+SOC
Materials Project、既定のまま (DFT)
AgAlNaClSiC (3C)
CdTeZnO (Zn 3d は LO を模型に)TiO2 (rutile)

MP 7 系の窓内 rms(金属 [E_F−8, +2]、絶縁体 [E_F−8, CBM+3] eV): Ag 15, Al 74(自由電子帯は 窓外), NaCl 2.9, SiC 3.3, CdTe 28, ZnO 0.8, TiO2 0.8 meV。

3. 部分バンドを取る模型 — d だけ / 4f だけ

こちらははじめから一部のバンドしか取らない模型である。Cu の d 5 本、 4f 7 本といった具合で、窓の中の第一原理バンドの大半は模型に無い。 §7 の窓型の損失はここには使えない — 無いものを「再現できていない」と 数えてしまうからである。

mlo_lm窓型損失 (meV)これは失敗か
CuCu の lm 5–9(d のみ)147.8 meV。sp バンドを模型が持たないだけ
SmPSm の 10–16(4f のみ)、P は空121.3 meV。価電子帯を持たない
GdIONGd の 10–16(4f のみ)0.2 meV窓に 4f しか無く、逆に測れてしまう
GdCo5Gd の 10–16 のみ、Co 5 サイトは空(データ不足)同上

(GaAsSoc の窓 105.9 meV も同種の産物 — 比較対象が 2N スピノルで本数が合わない。)

4f 模型 — 準位の重なりで測る

4f だけを取り出す模型は「模型の 7 本が第一原理の 4f 準位に乗っているか」で 測る。各 k 点で MLO の各準位から最も近い第一原理準位までの距離(meV):

spinmethod 0, 旧 (meV)method 4 (meV)
GdION1rms 0.19 / max 0.49rms 0.19 / max 0.49
2rms 1.76 / max 8.62rms 1.85 / max 9.30
GdCo51rms 10.99 / max 44.79rms 12.46 / max 52.67
2rms 13.78 / max 106.25rms 14.43 / max 104.21
SmP1rms 71.57 / max 265rms 76.30 / max 278
2rms 76.29 / max 273rms 75.04 / max 275

3 系とも method 4 は method 0 と同等で、4f バンドは乗っている。

ただし はここでは効いていない。 4f 準位 は 床 より遥かに下なので は常に床側が選ばれ、 しかも GdION では床が eV(Gd イオンの巨大ギャップ)と全部より上に来るため 、すなわち (素の射影)に戻る。 4f 模型にはバンド端の要求自体が無いので、 の「どこまで合わせたいか」 という意味が消える — method 4 でも壊れないが、効いてもいない。

SmP の rms 70–76 meV は元から。 中央値は 6–13 meV なので大半の準位は合っており、 一部(max 275 meV)が外れる。Sm 4f は P 3p と混成するのに mlo_lm で P のチャネルを 一つも取っていないためと思われる。method の問題ではない。

部分バンドだけを取る模型(§3)

Cu

Cu — d 5 軌道だけの模型。 を貫く sp バンドを模型が持たないので、 窓型の損失は 147.8 meV になるが、d バンド自身は乗っている(図を見よ)。

PMT バンドに対して有効なエネルギー下限を切っていないのもあって、いくらか 滑らかでない。 式 (4) の は上側の床 しか持たず、 下限が無いので、d の帯域より遥かに下の PMT 状態まで重み 1 で入ってくる。 を両方向に振っても散らばりは既定値より良くならず、最大誤差は どの設定でも 1.0〜1.2 eV 残る。sp が d の帯域に入る で第一原理側が 6 本あるのに模型は 5 本しか持てない、という模型空間の側の限界でもある。


GdION

GdION(Gd 単イオン、QSGW)— 占有と非占有の 4f を別々の窓で描いた。 majority の 7 本は 直下( eV)、minority の 7 本は eV eV 近く離れており、同じ縦軸には収まらない。 どちらも赤 × が灰線にそのまま乗る(rms 0.19 / 1.85 meV、上の表)。 minority の下に見える eV の灰線は 4f ではない帯で、 模型が取っていないので赤 × が無い。

この巨大なギャップが、4f 模型で が効かない理由でもある。 床 eV に置かれ、4f 準位の ほとんど全部より上に来るので 、素の射影に戻る。


GdCo5SmP

GdCo5 は Co 5 サイトを空にして Gd 4f だけ、SmP は P を空にして Sm 4f だけ。 準位の重なりで測った結果は上の表。




4. スピン軌道相互作用 — job_mlo_soc

SOC は MLO を作り直さずに、あとから摂動として載せる。スカラー相対論で 作った MLO 模型に を射影して足し、 のスピノルとして 解き直す形である。SOC 入りで自己無撞着を取り直す必要はない。

bash
job_mlo_soc <sname> -np <N>

3 段の手順

コマンド何をするか
1lmf --quit=band --ctrlg:ham.so=1フル LS のスピノルを全 BZ メッシュで解き SOC の を決める。efermi.lmfefermi_soc に保存
2lmf --writeham --socmatrix --ctrlg:ham.so=0スカラー相対論の __HamiltonianPMT に、SOC 行列を __HamiltonianPMTsoc に別ファイルで書く
3mlo --socmatrixPMT→MLO 縮約のあと SOC 行列を MLO に射影し、対称線上で を対角化

共通で --ctrlg:ham.nspin=2 --ctrlg:ham.phispinsym=true が付く。 phispinsym(スピン平均した動径関数)が要るのは、 の代わりに を使うためである。

1 段目が efermi.lmf を SOC の値で上書きする点に注意。非 SOC の計算を 同じディレクトリで続けるなら、efermi.lmf を退避しておくこと (サンプルは非 SOC 版を同梱してある)。

実装上の要点

  • 対称化はスピノルとして行う。 SOC は なので、 little group の回転や の回転では 軌道部分 とスピン部分 (SU(2))のテンソル積として と作用させる (so3_to_su2, spinor_rotate in m_HamPMT.f90)
  • 射影の基底を合わせる。 cmlo は PMT 固有状態 基底、hammhsop は PMT 基底関数 基底なので、 で後者に 揃えてから
  • --skiphammsoclso=1 でも に SOC を足さないためのフラグ(摂動を 後段で当てるため)

結果 — 非 SOC と同程度

窓 (meV)占有 (meV)分散
FeMgOSoc (76)3.92.80.006
FeSoc (9)21.915.40.057

非 SOC 版の FeMgO 2.5、Fe 19.8 meV とほぼ同じで、SOC を入れても劣化しない。 空格子球を入れた模型(§5)でも 3 段は問題なく通る。

FeMgOSocFeSocGaAsSoc

上から FeMgOSoc、FeSoc、GaAsSoc。GaAs では As 4p の eV の 分裂が再現されている。


注意: SOC 版の スピノルを非 SOC の 本と機械的に比べてはいけない。 GaAsSoc の窓型損失が 105.9 meV と出るのはそのためで、本数が合っていない だけである(§3 の表を見よ)。SOC の参照は band_MLO_spin1.soc.dat の側。


5. FeMgO — 真空スラブに空格子球を置く

長らく「 をどう変えても合わない外れ値」だった系である。原因は でも method でもなく、模型が置かれていない領域があったことだった。 同じ落とし穴は真空層を持つスラブなら何にでもあるので、独立の節にする。

何が起きていたか

まず構造の理解が誤っていた。Fe/MgO の界面ではなく、真空層 30.5 a.u. を持つ スラブ(Fe 3 層 + MgO 3 層、 a.u.)である。 eV に集中して いた残差は界面状態ではなく表面/真空状態で、真空領域に基底関数が一つも無いので サイト中心の MTO では原理的に表現できなかった をどう作っても 無いものは作れない。

空格子球の置き方

真空に空格子球()を 7 層置いた。半径は自分で決める:

  • a.u. なら表面の O () と Fe () のどちらにも当たらず、 lmchk の報告する重なりは 0%
  • 層は表面からの逃げを確保して等間隔に並べる
  • 面内は を交互(スラブの積層を継続)
toml
[[site]]
atom = "E"          # 空格子球
xpos = [0.0, 0.0, 0.3]
[[spec]]
atom = "E"
z    = 0
r    = 1.9          # 自分で決める。lmchk で重なりを確認すること
lmx  = 2            # DFT 側は s,p,d を持たせる (下記)
lmxa = 2

r = 0.0 は MT 球なしの浮遊軌道を意味するので、球を置きたいなら明示すること。

効果 — 空格子球を足すと 1 桁

majority / minority の窓内誤差(meV):

模型MLO 本数窓 (meV)
空格子球なし78126.9 / 73.5
ES に s のみ852.2 / 1.1
ES に s,p + Mg,O の d 削除(採用)762.5 / 1.3
ES に s,p1061.8 / 1.1
ES に s,p,d1411.6 / 0.9

空格子球 1 個あたり s を 1 本、合計 7 本足すだけで 126.9 → 2.2 meV(58 分の 1)。 MLO は 78 → 85 本で 9% しか増えない。ここが一番大きい効き目である。

FeMgO 空格子球の比較

4 列が模型、上段が 近傍、下段が広域。左上(空格子球なし)を見よ の上 eV に赤 × の乗っていない灰線が残っている。これが 真空側にしみ出す表面状態である。価電子帯( eV、Fe 3d と O 2p)は 空格子球が無くても合っており、欠けていたのは真空側の状態だけだった。

右の 3 枚( / / 本)は上段ではほとんど区別がつかない。 下段の広域では、一番小さい模型だけ eV 以上が空く — 削った Mg,O の d と 空格子球の p,d がそこを担っていた。


空格子球には p まで入れる

上の表では s だけでほぼ足りているように見えるが、 の上を細かく見ると p が要る。窓型の損失(窓は eV)がそこを測っていないだけである。

ES s のみ と s,p の比較

左が ES に s のみ(55 本)、右が s,p(76 本)。 eV で描くと、 左は eV に赤 × の乗っていない灰線が残るのに対し、右は埋まっている。

ES s のみ と s,p の誤差

準位ごとの誤差を第一原理側のエネルギーで分けると、どこで効いているかが分かる:

領域ES s のみ (55)ES s,p (76)
eV(価電子帯)0.3〜0.7 meV同じ
eVやや悪い少し良い
eV20〜170 meV3〜5 倍良い

全体の数字でも:

軌道数窓 (meV)占有 (meV)分散準位ごと平均 (meV)最大 (meV)
ES s のみ553.10.60.00815.9 / 11.4860
ES s,p(採用)762.50.50.0068.3 / 6.0294

窓型の損失では 3.1 → 2.5 meV と控えめだが、準位ごとに見ると平均が半分、 最大が 860 → 294 meV と 3 分の 1 になる。窓の外での改善なので、窓型の指標には ほとんど出てこない。§7 で「一方向では決まらない」と書いているのはこういう事情である。

採用した模型 — 76 本

Samples/MLOsamples/FeMgOFeMgOSoc はこの 76 軌道の模型で、入力一式を 共有する(mlo_lm は Fe が s,p,d の 9 本、Mg が s,p の 4 本、O が p の 3 本、 空格子球が s,p の 4 本: 3×9 + 3×4 + 3×3 + 7×4 = 76)。Fe と Mg の基底には f の MTO もあるが模型には入れていない。

元の空格子球なしの模型は 78 本だったので、**ほぼ同じ大きさで窓内誤差が 126.9 → 2.5 meV(51 分の 1)**になる。

FeMgO

用途は磁気ゆらぎの計算で、必要なのは 近傍である。そこだけなら 55 本でも 足りるが(上の表)、+10 eV まで使うなら p を入れておくほうがよい。 7 サイト × 3 = 21 本の増加で済む。

落とし穴 2 つ

(a) mlo_lm だけを絞る。[[spec]]lmx は 2 のままにする。 DFT 計算側で の球から チャネルを削ると動径方程式が発散し lmf が落ちる:

[[spec]] の E結果
lmx=2, lmxa=2収束
lmx=1, lmxa=1lmf rc=11。動径解が Ry へ発散
lmx=1, lmxa=2同上
lmx=1, lmxa=2 + p 明示同上。 Ry で q が桁あふれ

動作する場合の空格子球の pnu は 1.509 / 2.256 / 3.150 (s/p/d) で、これを p として 与えても直らない。既知の yh3fcc_gwsc666 の暴走と同じ症状である。 DFT には s,p,d を持たせ、MLO の選択は mlo_lm で行うのが筋の通ったやり方。

(b) 真空スラブには ESM が要る。[esm] を書き忘れないこと。 真空層があると Coulomb の 成分の扱いでエネルギーのゼロ点が決まる。 [esm] が無いと lmf は通常の周期境界で解き、警告一行を出すだけで止まらない。 FeMgO では 4.4155 eV ずれた。全エネルギー・Vesav・磁気モーメントは 8〜13 桁一致するので、Fermi エネルギーを比べるまで何も異常に見えない。

toml
[esm]
boundary  = "vac/slab/vac"   # 真空(-z)/スラブ/真空(+z)
origin    = -8.63717         # (a.u.)
shiftmode = 0
zb        = [23.907104, -23.907104]   # (a.u.)
potential = [0.0, 0.0]       # (Ry)
field     = [0.0, 0.0]       # (Ry/a.u.)

esm_input.dat は廃止した(2026-09-16)。 設定は ctrlg.<sname>.toml[esm] セクションに書く。Fortran は ctrlg 以外を読まないので(2026-09-17)、 esm_input.dat が残っていると lmf止まって ctrlg_absorb.py <sname> を 案内する(黙って ESM 無しで走らないように、無視ではなく abort):

状況ctrlg_absorb.py がすること
ctrlg[esm]あるそちらが使われる。esm_input.datesm_input.dat.bk へ退避され、.bk の冒頭に「この設定は使われなかった」と記録される
ctrlg[esm]ないesm_input.dat を変換して ctrlg[esm] を書き込み(GW セクションの前)、原本を esm_input.dat.bk へ退避(移送先を .bk 冒頭に明記)

Legacy2toml.py も同じ規則で変換する。詳細は ESM

この件で長く回り道をした。同じ rst から別の機械で別の が出るのを見て コンパイラや MPI を疑い、rst のバイナリ互換性・atmpnu・負の電荷密度・非決定性を 順に潰したが、真相は新サンプルを組み立てたときに esm_input.dat を コピーし忘れていただけだった。Vesav が 13 桁一致していた時点で密度側は無実と 分かるので、SCF のログを先に diff すべきだった。



6. 有効相互作用 job_mloW

MLO 模型でバンドが再現できたら、次に要るのはその模型の中での電子間相互作用 である。模型ハミルトニアンに載せる Hubbard 、磁気ゆらぎの計算で使う 相互作用がこれにあたる。cRPA で言う「模型空間に射影した遮蔽相互作用」で、 MLO 基底で評価するのが job_mloW である。

何を計算するか

MLO 軌道 と格子ベクトル 、振動数 について

を計算し、 を別々のファイルに書く。オンサイト対角成分 が、模型の に相当する量である。

bash
job_mloW <sname> -np <N>

lmfa → lmf → --jobgw=0/1qg4gwheftethbasfp0mlohvccfp0hwmatK_MPIhx0fp0hwmatK_MPI の順に回る。 MLO のバンド計算 (job_mlo) より重い — GW の部品を一通り通るためである。

出力の読み方

スピンごとに 2 ファイル。単位は eV

ファイル中身
Coulomb_v.UP / .DN
Screening_W-v.UP / .DN

列は main_wannier_hwmatK.f90 の書式そのままで:

 Wannier  ir1 irws1  Rx Ry Rz  is i j k l  [omega omega2]  Re  Im

Coulomb_v には の 2 列が無く、Screening_W-v には有る。 欲しいのは の実部で、 Samples/MLOsamples/Fe/test.py_parse_diag() がその抜き出しの実例である。

として足し合わせる。

は巨大に打ち消す

Fe(bcc、sp³d⁵ 9 軌道)の d 軌道、majority スピン:

d 軌道 (lm) (eV) (eV) (eV)
5, 6, 8 (, , )22.98−21.471.517
7, 9 (, )23.06−21.391.678

eV と eV が打ち消して eV になる。 の 7% しかない。したがって:

  • を単独で見て議論してはいけない。 模型の作り方を少し変えると どちらも 1〜2 eV 動くが、その 90% は相殺する
  • の相対誤差は の相対誤差の 14 倍に増幅される。 が 1% ずれれば は 14% ずれる勘定になる

模型の作り方に はどれだけ依存するか

Fe の d 軌道、 の平均(eV):

模型 (eV) (eV)
method 0(旧サンプル)1.66841.5972
method 4、(既定)1.58151.4248
method 4、1.63081.5546

の d 成分は method 0 → 4 で UP eV、DN eV 動くが、 上記の打ち消しで残る の変化は UP %、DN % である。 minority の d は の上にあって床 に近いので、 majority の倍ほど動く。

を上げると は戻る( で UP %、DN %)。 バンドの当たりも のほうが良い(§2)。

どの が正しいかは、ここでは決まっていない。 確かめたのは「 は模型の作り方に 10% の桁で依存する」ことだけである。 のほうがバンドの当たりは良いが、それは床より上の領域での話で、 を直接検証したわけではない。method 0 の値が に近いことも、 method 0 を基準と見なす理由にはならない。

したがって実用上は、 を使うなら 依存を自分の系で確かめること。 既定値をそのまま使って 10% を気にしないで済むかどうかは用途次第である。 サンプルは 18 系すべて既定値で統一してある。

回帰試験

Samples/MLOsamples/Fe はこの のオンサイト対角 9 成分 × 2 スピンを 参照ファイルではなく test.py に直書きして照合する(許容 0.05 eV)。 模型の作り方を変えると値が動くので、変えたら期待値も更新すること。


7. 誤差の測り方 — 一方向では決まらない

定義 — 生の量をベクトルで持つ

用途によって重んじる方向が変わるので、スカラーに潰さずベクトルで持つ。 規格化も 2 乗もしない。どれくらいずれているかが直接読めるほうがよい。 実装は SRC/exec/mlo_losscheck.py

意味単位
eV(金属 eV)の rmsmeV
占有側 eV の rmsmeV
分散(経路方向の勾配)の相対誤差無次元
バンドギャップ誤差(符号付き、絶縁体のみ)meV
(絶縁体のみ)無次元

比 は比であって誤差ではない。1.00 が一致、1.18 なら MLO の質量が 18% 重い。 は対称線経路座標 についての勾配で、 の分母は窓内の第一原理側の勾配の rms。 準位の対応づけは順序を保つ最適割当(動的計画法)で、縮退・交差・バンド数の差に耐える。

を別に立てるのは、窓だけ見ていると深い価電子帯の劣化を 見落とすためである(Si は を上げると窓内はほぼ不変なのに eV が 2.5 → 10.7 meV と悪化する)。

既定値での各量

既定 eV での実測は §2 の表のとおり。特徴的なのは Si の の差( 20.0 → 7.1 meV、 +38 → +3 meV、比 1.41 → 1.03)で、 の値は補間の雑音を含む。Si は を基準に取ること。

方向ごとの最適

固定で を振り、各量を最小にする (eV)。括弧内はそこでの値 (ΔE は meV、比 は無次元):

占有分散ギャップm*比
Fe (9) 金属10.9 (5.2)10.9 (4.5)10.9 (0.012)
Cu (9) 金属10.9 (8.5)10.9 (2.7)10.9 (0.027)
RuO₂ (22) 金属1.8 (8.1)2.7 (9.5)1.8 (0.030)
Si (18) 絶縁1.8 (5.7)2.7 (2.8)2.0 (0.005)2.0 (+2)2.7 (1.00)
GaAs (18) 絶縁1.8 (7.4)2.0 (1.5)2.0 (0.008)1.4 (+1)2.0 (1.02)
Al₂O₃:Cr (50) 絶縁2.0 (6.7)2.0 (2.2)2.0 (0.003)1.8 (+1)1.8 (1.03)
C.sp (8) 絶縁2.7 (14.9)3.4 (2.7)3.4 (0.005)3.4 (−4)4.1 (0.83)

系の中では各量がよく揃う( eV 以内)。割れるのは系をまたいだときで、 Fe・Cu の 10.9 eV と半導体の 1.8–2.7 eV は 6 倍違う。したがって系ごとの 最適化は well-posed であり、固定値一つで全系を満たすことはできない。

を大きくする極限は誤差自身が罰する

、 すなわち となり 、つまり MTO 部分空間だけで対角化した限界に達する。その極限は実際に悪い:

(eV)10.92768272
Fe7.839.8151309
Cu7.844.7148367
Si 546123027042854

(広窓 eV の rms、meV)

MTO だけの限界は Fe でも 309 meV ずれる。 よって「MTO に戻ってはいけない」という 制約を外から課す必要はなく、誤差が自分で上限を与える。Fe・Cu の最適 eV は 自明極限に近いからではなく、そこが有限の最適点だからである。

以下の振る舞いは系で逆を向く

第一原理バンドのエネルギーでビン分けした rms (meV):

Fe / (eV)
eV37.220.214.621.253.2
eV6.64.54.13.29.9
Si / (eV)
eV2.53.64.45.24.2
eV10.77.26.83.357.8

Fe は を上げると全ビンが改善するが、Si は逆で、 直下だけが少し良くなり 深い価電子帯と伝導帯が悪化する。 近傍だけを見ていると を上げたくなるが、 広く見ると損をする — を別に立てているのはこのためである。

メッシュ — 比 とギャップは粗いメッシュで決めてはいけない

eV 固定、Si。各セルは (meV) / (meV) / 比:

(eV)
1.820.7 / +50 / 1.645.6 / +3 / 1.053.7 / −5 / 0.93
2.018.3 / +39 / 1.426.8 / +2 / 1.025.8 / −3 / 0.95
2.719.4 / +25 / 1.1814.8 / +5 / 1.0014.3 / +3 / 0.96
4.145.3 / +50 / 1.0244.6 / +40 / 0.9644.4 / +38 / 0.93

eV を最良と言うが / eV と言う。 は系統的に大きい を良く見せる。 でギャップ誤差の符号が逆( eV で / meV)なのは 打ち切りの超格子依存性なので、2 つのメッシュで一致する範囲を採る。

使い方 — 単純規則

  1. は宣言であって調整ノブではない。 「バンド端から上に何 eV まで 合わせたいか」を書く。評価する窓の上端と同じ値にする。既定 2.0 eV
  2. 既定 eV でまず計算する。
  3. 残差が大きければ だけを動かす。 1 次元で足りる。実測の最適値は 半導体 2.0 eV 前後、Fe・Cu のような単原子遷移金属 11 eV、RuO₂ 1.8 eV。
  4. 半導体は 以上のメッシュで判断する。 比 とギャップに 補間の雑音が乗り、系統的に大きい を良く見せる。Si の が基準になる。

mlo_w の既定は method 依存にしてある。mlo_method = 4 では 2.0 eV、 旧 method 0/1/2/3 では 2.72 eV(= 0.2 Ry の従来値)。旧 method を使う 既存サンプルの結果とその参照ファイルを変えないためで、mlo_w を明示すれば どの method でもその値が使われる。

の効きは よりはるかに弱い。 を 1→4 eV と振っても誤差の変化は 数割だが、 は Si で 1.8 eV → 4.1 eV とするだけで窓の誤差が 5.6 → 44.6 meV と 8 倍になる。動かすのは でよい。

既定を / eV から / eV に変えた根拠 (全 12 系の平均、生の誤差):

既定||
, eV16.9 meV11.6 meV16 meV
eV15.0 meV7.4 meV13 meV

効いたのは SrTiO₃ の占有側 52.9 → 5.5 meV と Al₂O₃:Cr の窓 17.5 → 7.2 meV。 悪化したのは C.sp(14.9 → 26.7 meV)で、これは を上げたい側の系である(§4)。


8. 残る問題

以下はすべて mlo_method = 4(§1 の最終形)で測り直したもの。

解決済み

  • Al₂O₃:Cr のギャップ — 付録 D (c) の実装で −128 → +7 meV( 比 0.58 → 1.08)。- FeMgO をサンプルに入れるのは保留 — 機械依存が残っているため。解決した(2026-09-15)。機械依存ではなく、私が esm_input.dat を 新サンプル FeMgO_ES にコピーし忘れていただけだった。

    FeMgO は真空層 30.5 a.u. を持つスラブなので、既存の Samples/MLOsamples/FeMgO/ には 2 月から esm_input.dat(ESM = Effective Screening Medium)が入っている。 そこから FeMgO_ES を組み立てたときにこれを落とした。 ファイルが無いと lmf は静電ポテンシャルを通常の周期境界で解き、 ログに一行出すだけで停止しない:

    ローカル: esmsmves: ESM is not turned on, you need esm_input.dat for ESM mode
    kt1     : effective screening medium method jesm=  1
              system : vaccum(-z)/slab/vaccum(+z)

    真空を含むスラブでは Coulomb の 成分の扱いがエネルギーのゼロ点を決めるので、 ESM の有無で固有値が丸ごとずれる。実測:

    ローカル(ESM なし)ローカル(ESM あり)kt1
    (Ry)
    mmom8.4190838.41308037414938.4130803741352
    sev (eV)
    val*vef (Ry)

    esm_input.dat を置くだけで は 12 桁一致する。 バンドそのものも kt1 と一致する(bnd001、4563 点):

    最大差rms
    spin1 eV eV
    spin2 eV eV

    testecalj の許容値 0.001 eV に対して 5 桁の余裕がある。機械依存は無い。 失敗の仕方が悪い: esmsmves.f90:44open(...,status='old',err=201) はファイルが無いと jesm=0 のまま一行書いて return し、 異常終了しない。真空スラブの計算が黙って別物になる。

    ずれ幅は Ry eV で、これは以前 「 に比例して Ry ずれる」と測っていた量そのものである。

    その後の措置(2026-09-16)

    1. esm_input.dat を廃止し、ctrlg.<sname>.toml[esm] セクションへ移した。 当初は Fortran がその場で移行していたが、翌 09-17 に「Fortran は ctrlg 以外を 読まない」に統一: ファイルが残っていれば abort して ctrlg_absorb.py を案内する。 変換は ctrlg_absorb.py / Legacy2toml.py が行い、[esm] が既に有ればそちらを 残し、無ければ変換して ctrlg に説明付きで書く。原本はどちらの場合も esm_input.dat.bk へ移し、冒頭に移送先(または「TOML 側が使われた」)を書く。 なのに [esm] が無ければ警告も出す。

    2. FeMgOSoc も同じ病気だった。 FeMgOctrlgrst.femgo も バイト一致の同じスラブなのに esm_input.dat が置かれておらず、 Ry(ESM 無し)対 Ry(ESM 有り)、 差 eV。ESM で収束させた rst を ESM 無しで展開した参照になっていた。

    3. サンプルを空格子球ありの 55 軌道模型に一本化した。 空格子球なしの旧 78 軌道模型(mlo_method=0, mlo_emax=5)は削除し、 FeMgOFeMgOSoc も入力一式を共有する形にした。ローカルで実測:

      軌道数dE_windE_occdv/v
      旧(空格子球なし)78113.3 meV7.7 meV0.270
      新(空格子球あり)553.1 meV0.6 meV0.008

      旧模型は全サンプル中で最悪だった。テストが通っていたのは自分の参照を 再現していただけで、模型の精度とは別である。 空格子球ありでも job_mlo_soc の 3 段は問題なく通り、 SOC の Ry(非 SOC から 3.1 meV シフト)。

    4. その過程で readbandedge の黙ったフォールバックが見つかった。 efermi.lmf が無いと ecbot に落ちるので、method 4 の床が ではなく になる。 FeMgO では eV の差が θ を通って MLO バンドを meV 動かし、許容値 Ry を超えた。 警告を出すようにし、サンプルに efermi.lmf を同梱した。 絶縁体ならギャップ幅ぶん丸ごと外すので、これは実害のある穴だった。

    切り分けに時間をかけすぎた。 rst のバイナリ互換性、atmpnu/__atm、 負の密度の警告、非決定性 — どれも潰したが、どれも無実だった。 Vesav が 13 桁一致していた時点で密度側は無実と分かるので、 llmf_ef(SCF/band 1 段目の出力)を先に diff すべきだった。 一行で ESM is not turned on と書いてある。 「空格子球が引き金」という見立ても誤りで、引き金は esm_input.dat の有無だけ。

  • Cu (spd) の残差 — 実体は無く、評価側の産物が 2 つ重なっていた

    1. eV の窓に入るのは 92 k 点中 21 点だけ。Cu の d バンドは全て eV より下にあり、窓に居るのは急峻な sp バンドだけである。 誤差は局所傾き 10–14 eV/x の点に集中し、傾き eV/x に限ると rms は 0.051 → 0.017 eV と他系並みになる。傾き 13 eV/x のバンドでの 0.05 eV は経路座標で 0.004 のずれにすぎない。
    2. 「ギャップ誤差 meV」は、第一原理側の最大占有 eV と最小非占有 eV の 差 0.1995 eV が判定閾値 0.15 eV を超え、Cu を絶縁体と誤判定したもの。Cu は金属。 判定を「占有本数が によらず一定か」に変えて修正済み (Cu 5/6、Fe 5–9、RuO₂ 18–21 に対し Si/GaAs/Al₂O₃/NiO は一定)。

生きている

  • 固定 では半導体と金属を同時に満たせない。 §3 のとおり最適 は 半導体 0.13–0.20、Fe・Cu 0.80 と 6 倍違い、どちらも有限の最適点である。 系ごとの最適化は well-posed だが、固定値一つで全系は満たせない。 既定を から半導体寄りの に下げる余地はある(未変更。 変更すると testecalj の MLO 参照ファイルの再生成が要る)。

  • Si の は信用できない。 でギャップ +25 meV・ 1.18、 で +5 meV・1.00(§2)。振れは補間の雑音であり模型の欠陥ではない。 パラメータ調整を で行ってはいけない(§3 のメッシュの項)。

使ってはいけない指標(記録)

検討の途中で eV の rms を使っていたが、ワイドギャップ系では無効だった。 バンドファイルの零点が VBM に取られるため が価電子帯上端付近に来て、 価電子側しか見ない。C.sp で を 0.20 → 0.80 と広げると は 0.0064 → 0.0170 と鈍い一方、ギャップ誤差は meV と暴走する。 現在の測り方(§3)はこの指標を使っていない。



経緯(記録)

この方法に至るまでの経緯 — 5 つの mlo_method が実は同じ一本の式だったこと、 原本サンプルが何をしていたか、床を に置いた中間段階、 最終形に至る 3 つの設計判断の実測根拠、および途中で見つかった評価器と m_hreduction.f90 のバグ — は別頁にまとめてある:

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

本文の結論を読むだけなら不要だが、なぜこの式なのかを疑うときはそちらを見よ。