<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Meta Vector Field</title>
    <subtitle>A blog about computational materials science</subtitle>
    <link href="https://weizhengqing.github.io/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://weizhengqing.github.io"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-18T00:00:00+00:00</updated>
    <id>https://weizhengqing.github.io/atom.xml</id>
    <entry xml:lang="en">
        <title>将 DeepSeek V4 Pro 接入 Claude Code：非侵入式配置指南</title>
        <published>2026-06-29T00:00:00+00:00</published>
        <updated>2026-06-29T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/deepseek-v4-claude-code-guide/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/deepseek-v4-claude-code-guide/</id>
        <summary type="html">&lt;p&gt;Claude Code 是 Anthropic 官方推出的命令行 AI 编程助手，日常使用体验非常出色——但如果你也想尝试 DeepSeek V4 的能力，或者希望在特定场景下切换不同模型，怎么办？好消息是，DeepSeek 官方提供了 &lt;strong&gt;Anthropic 兼容接口&lt;&#x2F;strong&gt;，让 Claude Code 可以无缝对接 DeepSeek V4 作为后端模型，同时完全不影响你原有的 Anthropic 订阅。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>Mac 上跑 Claude Code 如何防止睡眠？caffeinate 完全指南</title>
        <published>2026-06-24T00:00:00+00:00</published>
        <updated>2026-06-24T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/mac-caffeinate-claude-code-guide/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/mac-caffeinate-claude-code-guide/</id>
        <summary type="html">&lt;p&gt;很多 Mac 用户在使用 Claude Code 运行长任务时都会有这样一个疑问：&lt;strong&gt;锁屏之后，Claude Code 还能继续跑吗？&lt;&#x2F;strong&gt; 答案取决于你的 Mac 到底只是锁屏，还是进入了真正的睡眠状态。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>Abinit K 点（布里渊区采样）：参数、公式与代码实现详解</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-kpoint-brillouin-zone-sampling/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-kpoint-brillouin-zone-sampling/</id>
        <content type="html" xml:base="https://weizhengqing.github.io/posts/2026/abinit-kpoint-brillouin-zone-sampling/">&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h1 id=&quot;abinit-kdian-bu-li-yuan-qu-cai-yang-can-shu-gong-shi-dai-ma-shi-xian-xiang-jie&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#abinit-kdian-bu-li-yuan-qu-cai-yang-can-shu-gong-shi-dai-ma-shi-xian-xiang-jie&quot; aria-label=&quot;Anchor link for: abinit-kdian-bu-li-yuan-qu-cai-yang-can-shu-gong-shi-dai-ma-shi-xian-xiang-jie&quot;&gt;Abinit K点（布里渊区采样）：参数 + 公式 + 代码实现详解&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;基于 Abinit 10.4.7 源码分析（核心：&lt;code&gt;src&#x2F;56_recipspace&#x2F;m_kpts.F90&lt;&#x2F;code&gt;、&lt;code&gt;shared&#x2F;common&#x2F;src&#x2F;29_kpoints&#x2F;m_symkpt.F90&lt;&#x2F;code&gt;、&lt;code&gt;src&#x2F;57_iovars&#x2F;m_inkpts.F90&lt;&#x2F;code&gt;）&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;yin-yan-kdian-de-wu-li-han-yi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#yin-yan-kdian-de-wu-li-han-yi&quot; aria-label=&quot;Anchor link for: yin-yan-kdian-de-wu-li-han-yi&quot;&gt;引言：K点的物理含义&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;固体物理中，由 Bloch 定理，单粒子态 $\psi_{n\mathbf{k}}(\mathbf{r}) = e^{i\mathbf{k}\cdot\mathbf{r}} u_{n\mathbf{k}}(\mathbf{r})$ 用波矢 $\mathbf{k}\in\text{BZ}$ 标记。任何物理量（密度、能量、力）都要在第一布里渊区上做积分：&lt;&#x2F;p&gt;
&lt;p&gt;$$n(\mathbf{r}) = \sum_n \frac{V}{(2\pi)^3} \int_{\text{BZ}} f_{n\mathbf{k}} |\psi_{n\mathbf{k}}(\mathbf{r})|^2 d^3\mathbf{k}$$&lt;&#x2F;p&gt;
&lt;p&gt;DFT 求解只能在&lt;strong&gt;离散&lt;&#x2F;strong&gt;的 k 点上做。Abinit 把这个积分变成加权和：&lt;&#x2F;p&gt;
&lt;p&gt;$$\int_{\text{BZ}} F(\mathbf{k}),d^3\mathbf{k} ;\approx; \frac{(2\pi)^3}{V}\sum_{i=1}^{N_k} w_i,F(\mathbf{k}_i),\qquad \sum_i w_i = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;K点采样涉及三件事：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;生成均匀网格&lt;&#x2F;strong&gt;（Monkhorst–Pack 方案）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;用对称操作折叠到不可约布里渊区 IBZ&lt;&#x2F;strong&gt;（symkpt）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;分配权重 $w_i$&lt;&#x2F;strong&gt;（每个 IBZ 点代表多少个 BZ 等效点）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;特殊情形：能带结构计算需要沿高对称线采样（&lt;code&gt;kptopt&amp;lt;0&lt;&#x2F;code&gt; 路径模式）。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;shu-ru-can-shu-zong-lan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shu-ru-can-shu-zong-lan&quot; aria-label=&quot;Anchor link for: shu-ru-can-shu-zong-lan&quot;&gt;输入参数总览&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;下表按使用频率列出所有 k 点相关变量（定义位置：&lt;code&gt;abimkdocs&#x2F;variables_abinit.py&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;输入变量&lt;&#x2F;th&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;默认值&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kptopt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1（&lt;code&gt;nspden=4&lt;&#x2F;code&gt; 时为 4）&lt;&#x2F;td&gt;&lt;td&gt;生成模式：0 手动，1–4 自动，&amp;lt;0 能带路径&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ngkpt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int(3)&lt;&#x2F;td&gt;&lt;td&gt;0,0,0&lt;&#x2F;td&gt;&lt;td&gt;Monkhorst–Pack 网格三方向点数（最常用）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kptrlatt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int(3,3)&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;k 点超晶格矩阵（与 &lt;code&gt;ngkpt&lt;&#x2F;code&gt; 二选一，更灵活）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nshiftk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;平移子网格数（FCC&#x2F;BCC 可减少 IBZ 点数）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;shiftk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(3,nshiftk)&lt;&#x2F;td&gt;&lt;td&gt;0.5,0.5,0.5&lt;&#x2F;td&gt;&lt;td&gt;每个子网格的平移量（约化坐标）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kptrlen&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;30.0&lt;&#x2F;td&gt;&lt;td&gt;不指定 &lt;code&gt;ngkpt&lt;&#x2F;code&gt; 时，自动搜索的最小实空间向量长度&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kptbounds&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(3,N+1)&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;kptopt&amp;lt;0&lt;&#x2F;code&gt; 时的能带路径端点&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ndivsm&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;路径最短段的分点数（推荐方式）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ndivk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int(N)&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;路径每段的分点数（与 &lt;code&gt;ndivsm&lt;&#x2F;code&gt; 二选一）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kpt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(3,nkpt)&lt;&#x2F;td&gt;&lt;td&gt;0,0,0&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;kptopt=0&lt;&#x2F;code&gt; 时手动输入的 k 点&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kptnrm&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;1.0&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;kpt&lt;&#x2F;code&gt; 的总归一化分母（避免输入分数）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;wtk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(nkpt)&lt;&#x2F;td&gt;&lt;td&gt;1.0&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;kptopt=0&lt;&#x2F;code&gt; 时手动权重&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nkpt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;0（自动）&lt;&#x2F;td&gt;&lt;td&gt;k 点总数（&lt;code&gt;kptopt≠0&lt;&#x2F;code&gt; 时通常自动算出）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;istwfk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int(nkpt)&lt;&#x2F;td&gt;&lt;td&gt;0（自动）&lt;&#x2F;td&gt;&lt;td&gt;波函数存储模式（利用时间反演压缩 50% 存储）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;chksymbreak&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;是否检查网格对称性，破缺则报错&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;prtkpt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;=1 输出候选 k 网格分析并退出&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;qptn&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(3)&lt;&#x2F;td&gt;&lt;td&gt;0,0,0&lt;&#x2F;td&gt;&lt;td&gt;整体平移所有 k 点的 q 向量（响应函数）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;主要场景对照&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;半导体&#x2F;绝缘体 SCF：&lt;code&gt;kptopt 1&lt;&#x2F;code&gt;, &lt;code&gt;ngkpt 4 4 4&lt;&#x2F;code&gt;, &lt;code&gt;nshiftk 1&lt;&#x2F;code&gt;, &lt;code&gt;shiftk 0.5 0.5 0.5&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;金属 SCF：用更密的 &lt;code&gt;ngkpt&lt;&#x2F;code&gt;（如 &lt;code&gt;12 12 12&lt;&#x2F;code&gt;），加 &lt;code&gt;tsmear&lt;&#x2F;code&gt;（见 smearing 报告）&lt;&#x2F;li&gt;
&lt;li&gt;能带结构：先 SCF（&lt;code&gt;prtden 1&lt;&#x2F;code&gt;），再 &lt;code&gt;iscf -2&lt;&#x2F;code&gt;, &lt;code&gt;kptopt -N&lt;&#x2F;code&gt;, &lt;code&gt;kptbounds ...&lt;&#x2F;code&gt;, &lt;code&gt;ndivsm 20&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;DFPT 响应函数：&lt;code&gt;kptopt 2&lt;&#x2F;code&gt;（仅时间反演）或 &lt;code&gt;kptopt 3&lt;&#x2F;code&gt;（无对称）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;monkhorst-pack-gong-shi-yu-dai-ma-shi-xian&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#monkhorst-pack-gong-shi-yu-dai-ma-shi-xian&quot; aria-label=&quot;Anchor link for: monkhorst-pack-gong-shi-yu-dai-ma-shi-xian&quot;&gt;Monkhorst–Pack 公式与代码实现&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shu-xue-ding-yi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shu-xue-ding-yi&quot; aria-label=&quot;Anchor link for: shu-xue-ding-yi&quot;&gt;数学定义&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;对每个方向 $\alpha\in{1,2,3}$，取 $N_\alpha = \tt{ngkpt}(\alpha)$ 个点：&lt;&#x2F;p&gt;
&lt;p&gt;$$\mathbf{k}&lt;em&gt;{ijk} = \sum&lt;&#x2F;em&gt;{\alpha=1}^3 \frac{i_\alpha - 1 + s_\alpha}{N_\alpha},\mathbf{b}&lt;em&gt;\alpha,\qquad i&lt;&#x2F;em&gt;\alpha \in {1,\ldots,N_\alpha}$$&lt;&#x2F;p&gt;
&lt;p&gt;其中 $\mathbf{b}&lt;em&gt;\alpha$ 是倒格矢，$s&lt;&#x2F;em&gt;\alpha = \tt{shiftk}(\alpha)$ 是平移。&lt;&#x2F;p&gt;
&lt;p&gt;更一般的形式用 &lt;code&gt;kptrlatt&lt;&#x2F;code&gt;：k 点是&lt;strong&gt;晶格倒格矢&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;$$\mathbf{B}&lt;em&gt;{\text{kpt}} = (B&lt;&#x2F;em&gt;{\text{rec}})\cdot(\tt{kptrlatt})^{-T}$$&lt;&#x2F;p&gt;
&lt;p&gt;的子格。一个简单的对应关系：当 &lt;code&gt;nshiftk=1&lt;&#x2F;code&gt; 时，&lt;code&gt;kptrlatt&lt;&#x2F;code&gt; 是对角矩阵 &lt;code&gt;diag(ngkpt)&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dai-ma-smpbz-sampling-of-brillouin-zone&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dai-ma-smpbz-sampling-of-brillouin-zone&quot; aria-label=&quot;Anchor link for: dai-ma-smpbz-sampling-of-brillouin-zone&quot;&gt;代码：&lt;code&gt;smpbz&lt;&#x2F;code&gt;（Sampling of Brillouin Zone）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;位置：&lt;code&gt;src&#x2F;56_recipspace&#x2F;m_kpts.F90:2088-2615&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;主要分支按 &lt;code&gt;brav&lt;&#x2F;code&gt; 区分：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brav=1&lt;&#x2F;code&gt;：通用（任意 &lt;code&gt;kptrlatt&lt;&#x2F;code&gt;，包含简单晶格）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;brav=2&lt;&#x2F;code&gt;：面心立方专用&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;brav=3&lt;&#x2F;code&gt;：体心立方专用&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;brav=4&lt;&#x2F;code&gt;：六方专用&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;通用分支的核心循环（&lt;code&gt;m_kpts.F90:2274-2354&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nn = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do kk = boundmin(3), boundmax(3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   coord(3) = kk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do jj = boundmin(2), boundmax(2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      coord(2) = jj&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      do ii = boundmin(1), boundmax(1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         coord(1) = ii&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         do ikshft = 1, nshiftk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ! 试探 k 点在 k 晶格上的整数坐标&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            k1(1) = ii + shiftk(1, ikshft)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            k1(2) = jj + shiftk(2, ikshft)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            k1(3) = kk + shiftk(3, ikshft)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ! 变换到倒格矢约化坐标&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            k2(:) = k1(1)*klatt(:,1) + k1(2)*klatt(:,2) + k1(3)*klatt(:,3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ! 只保留 [0,1) 内的点&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            if (k2(1) &amp;lt; -tol10 .or. k2(1) &amp;gt; one-tol10) cycle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            if (k2(2) &amp;lt; -tol10 .or. k2(2) &amp;gt; one-tol10) cycle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            if (k2(3) &amp;lt; -tol10 .or. k2(3) &amp;gt; one-tol10) cycle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ! 折叠到 ]-1&#x2F;2, 1&#x2F;2]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            call wrap2_pmhalf(k2(1), k1(1), shift)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            call wrap2_pmhalf(k2(2), k1(2), shift)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            call wrap2_pmhalf(k2(3), k1(3), shift)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            spkpt(:, nn) = k1(:)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            nn = nn + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nkpt = nn - 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;整个 BZ 上的 k 点总数应满足：&lt;&#x2F;p&gt;
&lt;p&gt;$$N_{\text{BZ}} = \det(\tt{kptrlatt}) \times \tt{nshiftk}$$&lt;&#x2F;p&gt;
&lt;p&gt;这是通过 &lt;code&gt;nkptlatt = det(kptrlatt)&lt;&#x2F;code&gt;（&lt;code&gt;m_kpts.F90:2179-2184&lt;&#x2F;code&gt;，按矩阵展开公式）然后乘 &lt;code&gt;nshiftk&lt;&#x2F;code&gt; 来核对的。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-dong-xuan-you-testkgrid&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zi-dong-xuan-you-testkgrid&quot; aria-label=&quot;Anchor link for: zi-dong-xuan-you-testkgrid&quot;&gt;自动选优：&lt;code&gt;testkgrid&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;如果输入既没给 &lt;code&gt;ngkpt&lt;&#x2F;code&gt; 也没给 &lt;code&gt;kptrlatt&lt;&#x2F;code&gt;，Abinit 会枚举大量候选 &lt;code&gt;kptrlatt + shiftk&lt;&#x2F;code&gt; 组合，按以下准则选优：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;首要标准&lt;&#x2F;strong&gt;：所谓 &lt;em&gt;k 点格的实空间长度&lt;&#x2F;em&gt; &lt;code&gt;kptrlen&lt;&#x2F;code&gt;（k 格的倒格 = 一个超晶格，其最短实空间向量长度即 &lt;code&gt;kptrlen&lt;&#x2F;code&gt;）。比 &lt;code&gt;kptrlen&lt;&#x2F;code&gt;（默认 30 Bohr）大的网格才被接受。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;次要标准&lt;&#x2F;strong&gt;：使用 &lt;code&gt;kptopt=1&lt;&#x2F;code&gt; 全对称约化后 IBZ 点数最少的组合获胜。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;代码位置：&lt;code&gt;m_kpts.F90:2654&lt;&#x2F;code&gt;（&lt;code&gt;testkgrid&lt;&#x2F;code&gt; 子程序）。这一步耗时较多（枚举可达上万组合），所以建议 &lt;code&gt;prtkpt=1&lt;&#x2F;code&gt; 单独跑一次得到推荐网格，记下来再用。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;dui-cheng-yue-hua-bz-ibz&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dui-cheng-yue-hua-bz-ibz&quot; aria-label=&quot;Anchor link for: dui-cheng-yue-hua-bz-ibz&quot;&gt;对称约化：BZ → IBZ&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shu-xue-yuan-li&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shu-xue-yuan-li&quot; aria-label=&quot;Anchor link for: shu-xue-yuan-li&quot;&gt;数学原理&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;固体的点群 ${S_i}$（含可能的时间反演 $T$）对 k 空间有作用：&lt;&#x2F;p&gt;
&lt;p&gt;$$\mathbf{k}&#x27; = S_i,\mathbf{k} \pmod{\mathbf{G}}$$&lt;&#x2F;p&gt;
&lt;p&gt;如果 $\mathbf{k}_a$ 与 $\mathbf{k}_b$ 由某个对称操作连接（可能差一个倒格矢 $\mathbf{G}$），则它们是&lt;strong&gt;等价&lt;&#x2F;strong&gt;的，只需计算其中一个，权重相加。&lt;&#x2F;p&gt;
&lt;p&gt;经过 BZ→IBZ 约化后：&lt;&#x2F;p&gt;
&lt;p&gt;$$\sum_{\mathbf{k}\in\text{BZ}} F(\mathbf{k}) = \sum_{\mathbf{k}\in\text{IBZ}} w_\mathbf{k},F(\mathbf{k}),\qquad w_\mathbf{k} = \frac{|\text{star}(\mathbf{k})|}{|G_0|}$$&lt;&#x2F;p&gt;
&lt;p&gt;其中 $|\text{star}(\mathbf{k})|$ 是 k 点的 star 大小，$|G_0|$ 是阶（用于归一化使权重总和=1）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dai-ma-symkpt&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dai-ma-symkpt&quot; aria-label=&quot;Anchor link for: dai-ma-symkpt&quot;&gt;代码：&lt;code&gt;symkpt&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;位置：&lt;code&gt;shared&#x2F;common&#x2F;src&#x2F;29_kpoints&#x2F;m_symkpt.F90:93-404&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;kptopt&lt;&#x2F;code&gt; 的语义控制对称使用范围&lt;&#x2F;strong&gt;（见 &lt;code&gt;m_kpts.F90:1401-1424&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;code&gt;kptopt&lt;&#x2F;code&gt;&lt;&#x2F;th&gt;&lt;th&gt;空间对称&lt;&#x2F;th&gt;&lt;th&gt;时间反演&lt;&#x2F;th&gt;&lt;th&gt;反铁磁对称&lt;&#x2F;th&gt;&lt;th&gt;典型用途&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;全部&lt;&#x2F;td&gt;&lt;td&gt;用&lt;&#x2F;td&gt;&lt;td&gt;不用&lt;&#x2F;td&gt;&lt;td&gt;GS 标准选项&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;不用&lt;&#x2F;td&gt;&lt;td&gt;用&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;DFPT q=0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;不用&lt;&#x2F;td&gt;&lt;td&gt;不用&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;DFPT q≠0 &#x2F; 非共线磁&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;全部&lt;&#x2F;td&gt;&lt;td&gt;不用&lt;&#x2F;td&gt;&lt;td&gt;用&lt;&#x2F;td&gt;&lt;td&gt;非共线磁（nspden=4）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;代码片段：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (kptopt == 1 .or. kptopt == 4) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   nsym_used = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do isym = 1, nsym&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (symafm(isym) == 1 .or. kptopt == 4) nsym_used = nsym_used + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ABI_MALLOC(symrec, (3,3,nsym_used))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 把实空间对称矩阵 symrel 取逆转置得到倒空间矩阵 symrec&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do isym = 1, nsym&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (symafm(isym) == 1 .or. kptopt == 4) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         call mati3inv(symrel(:,:,isym), symrec(:,:,nsym_used))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;else if (kptopt == 2) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   nsym_used = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 只放一个单位矩阵；时间反演由 timrev=1 单独开启&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   symrec(1:3, 1:3, 1) = identity&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;核心约化算法&lt;&#x2F;strong&gt;（&lt;code&gt;m_symkpt.F90:269-340&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;! 按 k 向量长度排序，方便快速跳出&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do ikpt = 1, nkbz - 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ind_ikpt = list(ikpt)               ! 排序后的索引&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (wtk_folded(ind_ikpt) &amp;lt; tol16) cycle ! 已被合并&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do ikpt2 = ikpt + 1, nkbz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (length2(ikpt2) - length2(ikpt) &amp;gt; tol8) exit  ! 长度不同，必不等价&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ind_ikpt2 = list(ikpt2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (wtk_folded(ind_ikpt2) &amp;lt; tol16) cycle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! 尝试用每个对称操作把 ikpt 映到 ikpt2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      do isym = 1, nsym&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         do itim = 1, (1 - 2*timrev), -2     ! itim = +1 然后 -1（若 timrev=1）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            if (isym &#x2F;= identi .or. itim &#x2F;= 1) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;               ksym(:) = itim * matmul(symrec(:,:,isym), kbz(:,ind_ikpt))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;               ! 检查 ksym - kbz(:,ind_ikpt2) 是否为整向量（差一个倒格矢）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;               if (sum(|reduce|) &amp;lt; tol8) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  ! 找到对称等价，把 ikpt2 的权重并到 ikpt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  wtk_folded(ind_ikpt)  = wtk_folded(ind_ikpt) + wtk_folded(ind_ikpt2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  wtk_folded(ind_ikpt2) = zero&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  ! 记录映射：S*k1 + G = k2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  bz2ibz_smap(1, ind_ikpt2) = ind_ikpt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  bz2ibz_smap(2, ind_ikpt2) = isym&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  bz2ibz_smap(3:5, ind_ikpt2) = nint(-ksym(:) + kbz(:,ind_ikpt2) + tol12)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  bz2ibz_smap(6, ind_ikpt2) = (itim == -1) ? 1 : 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                  exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;               end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;! 取出权重非零的点作为 IBZ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nkibz = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do ikpt = 1, nkbz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (wtk_folded(ikpt) &amp;gt; tol8) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      nkibz = nkibz + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ibz2bz(nkibz) = ikpt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;输出&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nkibz&lt;&#x2F;code&gt;：IBZ 内 k 点数（最终的 &lt;code&gt;nkpt&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ibz2bz(1:nkibz)&lt;&#x2F;code&gt;：IBZ 索引 → BZ 索引&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;wtk_folded(1:nkbz)&lt;&#x2F;code&gt;：聚合后的权重（IBZ 点上非零，其余为零）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;bz2ibz_smap(6, 1:nkbz)&lt;&#x2F;code&gt;：BZ 上每点对应的 IBZ 点 + 用了哪个对称操作 + 偏移倒格矢 + 时间反演标志&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;quan-zhong-de-zui-zhong-gui-yi-hua&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#quan-zhong-de-zui-zhong-gui-yi-hua&quot; aria-label=&quot;Anchor link for: quan-zhong-de-zui-zhong-gui-yi-hua&quot;&gt;权重的最终归一化&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;getkgrid&lt;&#x2F;code&gt; 完成后，所有权重之和应为 1：&lt;&#x2F;p&gt;
&lt;p&gt;$$\sum_{i\in\text{IBZ}} w_i = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;代码会自动除以 $N_{\text{BZ}} = \det(\tt{kptrlatt}) \cdot \tt{nshiftk}$ 来归一化。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;neng-dai-lu-jing-kptopt-0&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#neng-dai-lu-jing-kptopt-0&quot; aria-label=&quot;Anchor link for: neng-dai-lu-jing-kptopt-0&quot;&gt;能带路径（&lt;code&gt;kptopt &amp;lt; 0&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shu-ru-jie-xi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shu-ru-jie-xi&quot; aria-label=&quot;Anchor link for: shu-ru-jie-xi&quot;&gt;输入解析&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;kptopt = -N&lt;&#x2F;code&gt; 表示路径有 N 段、N+1 个端点。代码位置：&lt;code&gt;src&#x2F;57_iovars&#x2F;m_inkpts.F90:285-373&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ABI_MALLOC(kptbounds, (3, nsegment+1))    ! 端点&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ABI_MALLOC(ndivk, (nsegment))             ! 每段分点数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;! 路径生成：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jkpt = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kpt(:, 1) = kptbounds(:, 1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do ii = 1, nsegment&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   dkpt = ndivk(ii)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do ikpt = 1, dkpt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      fraction = dble(ikpt) &#x2F; dble(dkpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      kpt(:, ikpt+jkpt) = fraction * kptbounds(:, ii+1) &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                       + (one-fraction) * kptbounds(:, ii)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   jkpt = jkpt + dkpt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;ndivsm-zi-dong-jun-yun-fen-duan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ndivsm-zi-dong-jun-yun-fen-duan&quot; aria-label=&quot;Anchor link for: ndivsm-zi-dong-jun-yun-fen-duan&quot;&gt;&lt;code&gt;ndivsm&lt;&#x2F;code&gt; 自动均匀分段&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;如果用户给的是 &lt;code&gt;ndivsm&lt;&#x2F;code&gt;（推荐），由 &lt;code&gt;mknormpath&lt;&#x2F;code&gt;（&lt;code&gt;m_kpts.F90:3318-3398&lt;&#x2F;code&gt;）根据每段在倒空间中的物理长度自动决定每段的 &lt;code&gt;ndivk&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do ii = 1, nbounds-1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   dd(:) = bounds(:,ii+1) - bounds(:,ii)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 倒空间度规：lng = sqrt(d^T * gmet * d)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   lng(ii) = sqrt( dd(1)*gmet(1,1)*dd(1) + dd(2)*gmet(2,2)*dd(2) + dd(3)*gmet(3,3)*dd(3) &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                 + 2*(dd(1)*gmet(1,2)*dd(2) + dd(1)*gmet(1,3)*dd(3) + dd(2)*gmet(2,3)*dd(3)) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fct = minval(lng) &#x2F; ndiv_small&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ndiv(:) = nint(lng(:) &#x2F; fct)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;npt_tot = sum(ndiv) + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样最短段恰好有 &lt;code&gt;ndivsm&lt;&#x2F;code&gt; 个分点，其他段按比例放大，可视化时每两个 k 点在图上等距。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;kptopt&amp;lt;0&lt;&#x2F;code&gt; 路径模式下权重不需要&lt;&#x2F;strong&gt;（NSCF 计算，不积分）；&lt;code&gt;getkgrid&lt;&#x2F;code&gt; 跳过 &lt;code&gt;symkpt&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;getkgrid-gao-ceng-feng-zhuang&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#getkgrid-gao-ceng-feng-zhuang&quot; aria-label=&quot;Anchor link for: getkgrid-gao-ceng-feng-zhuang&quot;&gt;&lt;code&gt;getkgrid&lt;&#x2F;code&gt;：高层封装&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;位置：&lt;code&gt;m_kpts.F90:1257-1842&lt;&#x2F;code&gt;。这是 SCF 设置阶段调用的真正入口（由 &lt;code&gt;src&#x2F;57_iovars&#x2F;m_inkpts.F90:468&lt;&#x2F;code&gt; 调起）。&lt;&#x2F;p&gt;
&lt;p&gt;它的工作流：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;预处理 &lt;code&gt;nshiftk&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：尝试用素因子分解减少 &lt;code&gt;shiftk&lt;&#x2F;code&gt; 数量（&lt;code&gt;m_kpts.F90:1432-1690&lt;&#x2F;code&gt;，约 250 行的优化算法）。如果两个 shift 之间差一个 k 格矢量，可以合并成更大的 &lt;code&gt;kptrlatt&lt;&#x2F;code&gt; + 更少的 shift。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;调 &lt;code&gt;smpbz&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; 生成完整 BZ 上的所有 k 点（&lt;code&gt;spkpt(3, nkptlatt*nshiftk)&lt;&#x2F;code&gt;）和均匀权重 $1&#x2F;N$。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kptopt=1,2,4&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：调 &lt;code&gt;symkpt&lt;&#x2F;code&gt; 做对称约化，得到 IBZ k 点和权重。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kptopt=3&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：直接保留 BZ 全部点。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;检查对称性破缺&lt;&#x2F;strong&gt;（&lt;code&gt;chksymbreak=1&lt;&#x2F;code&gt; 时）：所有对称操作下网格应自映射，否则报错。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;输出&lt;&#x2F;strong&gt;：&lt;code&gt;kpt(3, nkpt)&lt;&#x2F;code&gt; 是 IBZ 点，&lt;code&gt;wtk(nkpt)&lt;&#x2F;code&gt; 是归一化权重。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;istwfk-shi-jian-fan-yan-ya-suo-cun-chu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#istwfk-shi-jian-fan-yan-ya-suo-cun-chu&quot; aria-label=&quot;Anchor link for: istwfk-shi-jian-fan-yan-ya-suo-cun-chu&quot;&gt;&lt;code&gt;istwfk&lt;&#x2F;code&gt;：时间反演压缩存储&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;当 k 点的所有分量都是 0 或 1&#x2F;2 时（&quot;半整数点&quot;），波函数满足额外的对称性：&lt;&#x2F;p&gt;
&lt;p&gt;$$u_{\mathbf{G}&lt;em&gt;0&#x2F;2}(\mathbf{G}) = u&lt;&#x2F;em&gt;{\mathbf{G}_0&#x2F;2}(-\mathbf{G} - \mathbf{G}_0)^*$$&lt;&#x2F;p&gt;
&lt;p&gt;只需存一半的 G 向量，内存和 FFT 时间减半。&lt;&#x2F;p&gt;
&lt;p&gt;代码：&lt;code&gt;src&#x2F;44_abitools&#x2F;m_cgtools.F90:919-950&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;integer pure function set_istwfk(kpoint) result(istwfk)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   real(dp), intent(in) :: kpoint(3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   integer :: bit0, ii, bit(3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   bit0 = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do ii = 1, 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (DABS(kpoint(ii)) &amp;lt; tol10) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         bit(ii) = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      else if (DABS(kpoint(ii) - half) &amp;lt; tol10) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         bit(ii) = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         bit0 = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (bit0 == 0) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      istwfk = 1   ! 普通 k 点，不能压缩&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      istwfk = 2 + bit(1) + 4*bit(2) + 2*bit(3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end function&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;返回值含义：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;istwfk = 1&lt;&#x2F;code&gt;：通用 k 点，不压缩&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;istwfk = 2&lt;&#x2F;code&gt;：$\Gamma$ 点 (0, 0, 0)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;istwfk = 3..9&lt;&#x2F;code&gt;：八个 BZ 边角点（如 (1&#x2F;2, 0, 0)、(1&#x2F;2, 1&#x2F;2, 1&#x2F;2) 等）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;用户通常不设 &lt;code&gt;istwfk&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;，让 Abinit 在 &lt;code&gt;m_inkpts.F90:508-520&lt;&#x2F;code&gt; 自动判断。响应函数（RF）、自旋极化（&lt;code&gt;nspinor=2&lt;&#x2F;code&gt;）、SOC 等情形强制为 1。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;kdian-zai-scf-zhong-de-bing-xing-hua&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kdian-zai-scf-zhong-de-bing-xing-hua&quot; aria-label=&quot;Anchor link for: kdian-zai-scf-zhong-de-bing-xing-hua&quot;&gt;K点在 SCF 中的并行化&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;jin-cheng-fen-bu-distrb2&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jin-cheng-fen-bu-distrb2&quot; aria-label=&quot;Anchor link for: jin-cheng-fen-bu-distrb2&quot;&gt;进程分布：&lt;code&gt;distrb2&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;位置：&lt;code&gt;src&#x2F;51_manage_mpi&#x2F;m_mpinfo.F90:2299-2574&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;把每个 (k 点, 自旋, 能带) 三元组分配到一个 MPI 进程：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mpi_enreg%proc_distrb(ikpt, iband, isppol) = 该任务所属进程号&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;策略：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;paralbd=0&lt;&#x2F;code&gt;：按 k 点平均分配，要求 &lt;code&gt;nkpt*nsppol&lt;&#x2F;code&gt; 能被 &lt;code&gt;nproc_spkpt&lt;&#x2F;code&gt; 整除（否则警告&quot;不高效&quot;）。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;paralbd=1&lt;&#x2F;code&gt;：再把每个 k 点的能带切到多个进程上。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;之后 &lt;code&gt;mpi_enreg%my_kpttab(ikpt)&lt;&#x2F;code&gt; 给出本地 k 点索引（仅属于本进程的那些）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;scf-k-dian-xun-huan-vtorho&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#scf-k-dian-xun-huan-vtorho&quot; aria-label=&quot;Anchor link for: scf-k-dian-xun-huan-vtorho&quot;&gt;SCF k 点循环（&lt;code&gt;vtorho&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;位置：&lt;code&gt;src&#x2F;79_seqpar_mpi&#x2F;m_vtorho.F90:826-1300&lt;&#x2F;code&gt;（标注为&quot;BIG FAT k POINT LOOP&quot;）。骨架：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do isppol = 1, nsppol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 装载该自旋通道的有效势 vlocal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   call gs_hamk%load_spin(isppol, vlocal=vlocal, ...)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ikpt_loc = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do while (ikpt_loc &amp;lt; nkpt1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ikpt_loc = ikpt_loc + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ikpt = ikpt_loc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      my_ikpt = mpi_enreg%my_kpttab(ikpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! 跳过非本进程的 k 点&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (proc_distrb_cycle(mpi_enreg%proc_distrb, ikpt, 1, nband_k, isppol, me_distrb)) cycle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      nband_k = dtset%nband(ikpt + (isppol-1)*dtset%nkpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      istwf_k = dtset%istwfk(ikpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      npw_k   = npwarr(ikpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! 调对角化器（CG &#x2F; RMM-DIIS &#x2F; LOBPCG &#x2F; ChebFi），算出 nband_k 个本征值&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      call vtowfk(...)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! 累加每个量到全局：能量、密度&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      do iband = 1, nband_k&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         energies%e_kinetic     = energies%e_kinetic     + wtk(ikpt)*occ_k(iband)*ek_k(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         energies%e_eigenvalues = energies%e_eigenvalues + wtk(ikpt)*occ_k(iband)*eig_k(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         energies%e_nlpsp_vfock = energies%e_nlpsp_vfock + wtk(ikpt)*occ_k(iband)*enlx_k(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! rho(r) += wtk(ikpt) * occ_k * |psi_k(r)|^2  (在 fft 网格上累加)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! MPI 规约：把各进程的 rho、E 加在一起&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   call xmpi_sum(rhoaug, spaceComm_distrb, ierr)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;wtk(ikpt)&lt;&#x2F;code&gt; 在这里就是 BZ 积分的离散权重。&lt;strong&gt;所有物理量都通过这个权重做 BZ 平均&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zhan-ju-shu-ji-suan-xian-jie-smearing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zhan-ju-shu-ji-suan-xian-jie-smearing&quot; aria-label=&quot;Anchor link for: zhan-ju-shu-ji-suan-xian-jie-smearing&quot;&gt;占据数计算（衔接 smearing）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;每次 SCF 迭代后：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;收集所有 $\epsilon_{n\mathbf{k}}$；&lt;&#x2F;li&gt;
&lt;li&gt;调 &lt;code&gt;newocc&lt;&#x2F;code&gt;（见 smearing 报告）二分法求 Fermi 能级和占据数 $f_{n\mathbf{k}}$；&lt;&#x2F;li&gt;
&lt;li&gt;用 $w_\mathbf{k} \cdot f_{n\mathbf{k}}$ 加权累积下一轮 $\rho(\mathbf{r})$。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;abinit-zhong-k-dian-de-wan-zheng-sheng-ming-zhou-qi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#abinit-zhong-k-dian-de-wan-zheng-sheng-ming-zhou-qi&quot; aria-label=&quot;Anchor link for: abinit-zhong-k-dian-de-wan-zheng-sheng-ming-zhou-qi&quot;&gt;Abinit 中 k 点的完整生命周期&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;下面按时间顺序，描述一次 SCF 计算从输入到输出，k 点的每个阶段。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jie-duan-1-shu-ru-jie-xi-m-inkpts-f90&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jie-duan-1-shu-ru-jie-xi-m-inkpts-f90&quot; aria-label=&quot;Anchor link for: jie-duan-1-shu-ru-jie-xi-m-inkpts-f90&quot;&gt;阶段 1：输入解析（&lt;code&gt;m_inkpts.F90&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;读 &lt;code&gt;kptopt&lt;&#x2F;code&gt;、&lt;code&gt;ngkpt&lt;&#x2F;code&gt;、&lt;code&gt;shiftk&lt;&#x2F;code&gt;、&lt;code&gt;kptrlatt&lt;&#x2F;code&gt; 等&lt;&#x2F;li&gt;
&lt;li&gt;若 &lt;code&gt;kptopt &amp;lt; 0&lt;&#x2F;code&gt;：直接构造路径 &lt;code&gt;kpt(:,:)&lt;&#x2F;code&gt;（&lt;code&gt;m_inkpts.F90:285-380&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;若 &lt;code&gt;kptopt &amp;gt; 0&lt;&#x2F;code&gt; 且未给 &lt;code&gt;ngkpt&#x2F;kptrlatt&lt;&#x2F;code&gt;：调 &lt;code&gt;testkgrid&lt;&#x2F;code&gt; 自动搜索最优网格（&lt;code&gt;m_inkpts.F90:456&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;调 &lt;code&gt;getkgrid&lt;&#x2F;code&gt; 生成 IBZ k 点 + 权重（&lt;code&gt;m_inkpts.F90:468&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;对每个 k 点调 &lt;code&gt;set_istwfk&lt;&#x2F;code&gt; 决定存储模式（&lt;code&gt;m_inkpts.F90:511&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;jie-duan-2-mpi-chu-shi-hua-m-mpinfo-f90&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jie-duan-2-mpi-chu-shi-hua-m-mpinfo-f90&quot; aria-label=&quot;Anchor link for: jie-duan-2-mpi-chu-shi-hua-m-mpinfo-f90&quot;&gt;阶段 2：MPI 初始化（&lt;code&gt;m_mpinfo.F90&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;调 &lt;code&gt;distrb2&lt;&#x2F;code&gt; 把 k 点分配到 MPI 进程：&lt;code&gt;mpi_enreg%proc_distrb&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;建立本地映射 &lt;code&gt;mpi_enreg%my_kpttab(ikpt)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;jie-duan-3-mei-ge-k-dian-de-nei-cun-yu-fen-pei&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jie-duan-3-mei-ge-k-dian-de-nei-cun-yu-fen-pei&quot; aria-label=&quot;Anchor link for: jie-duan-3-mei-ge-k-dian-de-nei-cun-yu-fen-pei&quot;&gt;阶段 3：每个 k 点的内存预分配&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;在 G 空间球内填入 G 向量：&lt;code&gt;m_kg.F90:kpgio&lt;&#x2F;code&gt;，每个 k 点的 &lt;code&gt;npw_k&lt;&#x2F;code&gt; 和 &lt;code&gt;kg_k(3, npw_k)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;计算非局域投影：&lt;code&gt;nonlocal&#x2F;&lt;&#x2F;code&gt;、&lt;code&gt;fock&#x2F;&lt;&#x2F;code&gt; 等&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;jie-duan-4-scf-zhu-xun-huan-m-dft-energy-m-vtorho&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jie-duan-4-scf-zhu-xun-huan-m-dft-energy-m-vtorho&quot; aria-label=&quot;Anchor link for: jie-duan-4-scf-zhu-xun-huan-m-dft-energy-m-vtorho&quot;&gt;阶段 4：SCF 主循环（&lt;code&gt;m_dft_energy&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;m_vtorho&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;对每次迭代 &lt;code&gt;istep = 1..nstep&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do isppol = 1, nsppol               # 自旋外循环&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   load V_xc, V_H, V_ext            # 当前势函数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do ikpt = 1, nkpt                # k 点循环&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (该进程不负责 ikpt) cycle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      H_k = T_k + V_loc + V_nl(k)   # 构造 k 处 Hamiltonian&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      solve H_k |psi_nk&amp;gt; = e_nk |psi_nk&amp;gt;      # 对角化（npw_k * nband_k 维）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      do iband = 1, nband_k&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         rho(r) += wtk(ikpt) * occ_k(iband) * |psi_nk(r)|^2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         E_band += wtk(ikpt) * occ_k(iband) * e_nk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;xmpi_sum(rho, E_band, ...)           # 跨进程规约&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# 算 V_xc[rho]、E_total = E_band - E_dc + ... - TS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# 调 newocc 更新 occ 和 fermie&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (rho 已收敛) exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;jie-duan-5-shu-chu-m-iowf-m-clnup1&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jie-duan-5-shu-chu-m-iowf-m-clnup1&quot; aria-label=&quot;Anchor link for: jie-duan-5-shu-chu-m-iowf-m-clnup1&quot;&gt;阶段 5：输出（&lt;code&gt;m_iowf&lt;&#x2F;code&gt;、&lt;code&gt;m_clnup1&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;写 WFK 文件：每个 k 点的 (kpt, wtk, npw_k, kg_k, eigen_k, occ_k, cg_k)&lt;&#x2F;li&gt;
&lt;li&gt;写 EIG 文件：本征值数据&lt;&#x2F;li&gt;
&lt;li&gt;写 DOS（若 &lt;code&gt;prtdos=1&lt;&#x2F;code&gt;）：在所有 IBZ 点上用 smearing 函数做加权求和&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;dian-xing-li-zi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dian-xing-li-zi&quot; aria-label=&quot;Anchor link for: dian-xing-li-zi&quot;&gt;典型例子&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;fcc-si-ban-dao-ti-8x8x8-wang-ge&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fcc-si-ban-dao-ti-8x8x8-wang-ge&quot; aria-label=&quot;Anchor link for: fcc-si-ban-dao-ti-8x8x8-wang-ge&quot;&gt;FCC Si（半导体），&lt;code&gt;8×8×8&lt;&#x2F;code&gt; 网格&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;输入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kptopt 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ngkpt 8 8 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nshiftk 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;shiftk 0.5 0.5 0.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       0.5 0.0 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       0.0 0.5 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       0.0 0.0 0.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;执行：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;BZ 全部点数：&lt;code&gt;det(kptrlatt) * nshiftk = 8³ * 4 = 2048&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Si 的 Fd-3m 对称群有 48 个操作 + 时间反演 = 96 个&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;symkpt&lt;&#x2F;code&gt; 把 2048 → 通常约 &lt;strong&gt;60&lt;&#x2F;strong&gt; 个 IBZ 点（具体数依赖网格规整性）&lt;&#x2F;li&gt;
&lt;li&gt;每个 IBZ 点权重 $w_i \in {1&#x2F;2048, 2&#x2F;2048, ...}$，总和=1&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;bcc-fe-jin-shu-ci-xing-16x16x16&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bcc-fe-jin-shu-ci-xing-16x16x16&quot; aria-label=&quot;Anchor link for: bcc-fe-jin-shu-ci-xing-16x16x16&quot;&gt;BCC Fe（金属磁性），&lt;code&gt;16×16×16&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kptopt 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ngkpt 16 16 16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nshiftk 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;shiftk 0.5 0.5 0.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nsppol 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsmear 0.001&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;执行：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;BZ 点数：4096&lt;&#x2F;li&gt;
&lt;li&gt;O_h 群 + 时间反演 = 96&lt;&#x2F;li&gt;
&lt;li&gt;IBZ ≈ &lt;strong&gt;126&lt;&#x2F;strong&gt; 点（具体由 Abinit 计算）&lt;&#x2F;li&gt;
&lt;li&gt;每个 IBZ 点要算 2 套自旋（共 252 个独立对角化任务）&lt;&#x2F;li&gt;
&lt;li&gt;用 MPI 16 进程：每进程平均 16 个 k 点，建议设置 &lt;code&gt;paral_kgb 1&lt;&#x2F;code&gt; 让 nproc=nproc_kpt × nproc_band × nproc_fft&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;gaas-neng-dai-jie-gou&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#gaas-neng-dai-jie-gou&quot; aria-label=&quot;Anchor link for: gaas-neng-dai-jie-gou&quot;&gt;GaAs 能带结构&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ndtset 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# dataset 1: SCF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kptopt1 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ngkpt1 4 4 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;shiftk1 0.5 0.5 0.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;prtden1 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# dataset 2: NSCF along L-Γ-X-W-K-Γ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;iscf2 -2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;getden2 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kptopt2 -5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kptbounds2 0.5  0.5  0.5  # L&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;           0.0  0.0  0.0  # Gamma&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;           0.0  0.5  0.5  # X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;           0.25 0.5  0.75 # W&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;           0.375 0.375 0.75 # K&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;           0.0  0.0  0.0  # Gamma&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ndivsm2 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tolwfr2 1d-10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;mknormpath&lt;&#x2F;code&gt; 算出路径总长，按最短段 20 分点比例分配，生成约 100 个 k 点的等距路径。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;guan-jian-dai-ma-di-tu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#guan-jian-dai-ma-di-tu&quot; aria-label=&quot;Anchor link for: guan-jian-dai-ma-di-tu&quot;&gt;关键代码地图&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;模块 &#x2F; 子程序&lt;&#x2F;th&gt;&lt;th&gt;文件&lt;&#x2F;th&gt;&lt;th&gt;行号&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;inkpts&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_inkpts.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;全文件&lt;&#x2F;td&gt;&lt;td&gt;输入参数解析 + 路径生成&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;getkgrid&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;56_recipspace&#x2F;m_kpts.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;1257&lt;&#x2F;td&gt;&lt;td&gt;高层 IBZ k 网格生成&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;smpbz&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;2088&lt;&#x2F;td&gt;&lt;td&gt;Monkhorst-Pack BZ 采样&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;testkgrid&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;2654&lt;&#x2F;td&gt;&lt;td&gt;自动枚举最优 k 网格&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;mknormpath&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;3318&lt;&#x2F;td&gt;&lt;td&gt;能带路径均匀分点&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;listkk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;866&lt;&#x2F;td&gt;&lt;td&gt;两套 k 网格之间的对称映射&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;get_full_kgrid&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;1843&lt;&#x2F;td&gt;&lt;td&gt;由 IBZ 反展开到完整 BZ&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;symkpt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;shared&#x2F;common&#x2F;src&#x2F;29_kpoints&#x2F;m_symkpt.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;93&lt;&#x2F;td&gt;&lt;td&gt;BZ → IBZ 对称约化&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;symkpt_new&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;424&lt;&#x2F;td&gt;&lt;td&gt;新版（用 hash 表，O(N) 复杂度）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;mapkptsets&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;670&lt;&#x2F;td&gt;&lt;td&gt;把一组 k 点映到另一组&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;set_istwfk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;44_abitools&#x2F;m_cgtools.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;919&lt;&#x2F;td&gt;&lt;td&gt;时间反演压缩选择&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;distrb2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;51_manage_mpi&#x2F;m_mpinfo.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;2299&lt;&#x2F;td&gt;&lt;td&gt;k 点 MPI 分配&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;vtorho&lt;&#x2F;code&gt; 的 k 循环&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;79_seqpar_mpi&#x2F;m_vtorho.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;826&lt;&#x2F;td&gt;&lt;td&gt;SCF k 点积分主循环&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;mknormpath&lt;&#x2F;code&gt; 调用&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_inkpts.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;326&lt;&#x2F;td&gt;&lt;td&gt;路径模式入口&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;can-shu-xuan-ze-jian-yi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#can-shu-xuan-ze-jian-yi&quot; aria-label=&quot;Anchor link for: can-shu-xuan-ze-jian-yi&quot;&gt;参数选择建议&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;绝缘体&#x2F;半导体&lt;&#x2F;strong&gt;：&lt;code&gt;ngkpt 4 4 4&lt;&#x2F;code&gt;～&lt;code&gt;8 8 8&lt;&#x2F;code&gt;，&lt;code&gt;nshiftk 1&lt;&#x2F;code&gt;，&lt;code&gt;shiftk 0.5 0.5 0.5&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;金属&lt;&#x2F;strong&gt;：从 &lt;code&gt;12 12 12&lt;&#x2F;code&gt; 起步，根据收敛性增加到 &lt;code&gt;24 24 24&lt;&#x2F;code&gt; 甚至更密。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;小元胞超导&#x2F;磁性体&lt;&#x2F;strong&gt;：&lt;code&gt;16 16 16&lt;&#x2F;code&gt;～&lt;code&gt;32 32 32&lt;&#x2F;code&gt; 不罕见，配 smearing 收敛。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;大元胞（&amp;gt;50 原子）&lt;&#x2F;strong&gt;：从 &lt;code&gt;2 2 2&lt;&#x2F;code&gt; 或 &lt;code&gt;Gamma-only&lt;&#x2F;code&gt; 开始，必要时加密。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;二维材料&lt;&#x2F;strong&gt;：&lt;code&gt;ngkpt N N 1&lt;&#x2F;code&gt;（真空方向 1 点），用 &lt;code&gt;slabwsrad&lt;&#x2F;code&gt; 切断。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;能带结构&lt;&#x2F;strong&gt; &lt;code&gt;ndivsm&lt;&#x2F;code&gt;：粗略图 10、出版图 20–40。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;shiftk&lt;&#x2F;strong&gt; 的选择：
&lt;ul&gt;
&lt;li&gt;默认 &lt;code&gt;0.5 0.5 0.5&lt;&#x2F;code&gt; 在很多体系收敛最快，但&lt;strong&gt;破缺四方&#x2F;六方对称&lt;&#x2F;strong&gt;，会被 Abinit 拒绝。&lt;&#x2F;li&gt;
&lt;li&gt;兼容性最好但收敛慢：&lt;code&gt;0 0 0&lt;&#x2F;code&gt;（含 Γ）。&lt;&#x2F;li&gt;
&lt;li&gt;FCC 优选：4 个 shift &lt;code&gt;(½ ½ ½) (½ 0 0) (0 ½ 0) (0 0 ½)&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;六方推荐：&lt;code&gt;0 0 ½&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;chksymbreak&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：建议保留默认 1，否则错误的网格会静默给出错的结果。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;fu-lu-yi-ci-wan-zheng-scf-zhong-k-dian-chu-li-zhu-bu-zhui-zong&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fu-lu-yi-ci-wan-zheng-scf-zhong-k-dian-chu-li-zhu-bu-zhui-zong&quot; aria-label=&quot;Anchor link for: fu-lu-yi-ci-wan-zheng-scf-zhong-k-dian-chu-li-zhu-bu-zhui-zong&quot;&gt;附录：一次完整 SCF 中 k 点处理逐步追踪&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;设输入：FCC Si, &lt;code&gt;ngkpt 4 4 4&lt;&#x2F;code&gt;, &lt;code&gt;nshiftk 4&lt;&#x2F;code&gt;（默认 FCC 4-shift）, &lt;code&gt;kptopt 1&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-1-shu-ru-jie-xi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-1-shu-ru-jie-xi&quot; aria-label=&quot;Anchor link for: step-1-shu-ru-jie-xi&quot;&gt;Step 1: 输入解析&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;m_inkpts.F90&lt;&#x2F;code&gt; 读到 &lt;code&gt;kptopt=1&lt;&#x2F;code&gt;, &lt;code&gt;ngkpt=4 4 4&lt;&#x2F;code&gt;, 自动构造 &lt;code&gt;kptrlatt = diag(4,4,4)&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-2-jin-ru-getkgrid&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-2-jin-ru-getkgrid&quot; aria-label=&quot;Anchor link for: step-2-jin-ru-getkgrid&quot;&gt;Step 2: 进入 &lt;code&gt;getkgrid&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nshiftk_reduction&lt;&#x2F;code&gt;：发现 4 个 shifts 可以合并成 &lt;code&gt;kptrlatt = ((-4 4 4), (4 -4 4), (4 4 -4))&lt;&#x2F;code&gt; + &lt;code&gt;nshiftk=1&lt;&#x2F;code&gt;（FCC k 格的紧致表示）。&lt;&#x2F;li&gt;
&lt;li&gt;调 &lt;code&gt;smpbz&lt;&#x2F;code&gt;，扫 BZ 上 $\det(\tt{kptrlatt}) = 128$ 个 k 点。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;step-3-symkpt-yue-hua&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-3-symkpt-yue-hua&quot; aria-label=&quot;Anchor link for: step-3-symkpt-yue-hua&quot;&gt;Step 3: &lt;code&gt;symkpt&lt;&#x2F;code&gt; 约化&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Si 有 48 个空间对称 + 时间反演 = 96&lt;&#x2F;li&gt;
&lt;li&gt;排序 128 个 k 点的长度（&lt;code&gt;m_symkpt.F90:178-204&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;双重循环找等价对：每个对称操作作用后看能否落到其他 k 点上&lt;&#x2F;li&gt;
&lt;li&gt;最终 &lt;code&gt;nkibz = 10&lt;&#x2F;code&gt;（FCC Si 的标准结果），权重比例如 &lt;code&gt;(1, 8, 6, 24, 8, 6, 12, 8, 24, 3) &#x2F; 128&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;step-4-she-zhi-istwfk&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-4-she-zhi-istwfk&quot; aria-label=&quot;Anchor link for: step-4-she-zhi-istwfk&quot;&gt;Step 4: 设置 &lt;code&gt;istwfk&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;对每个 IBZ k 点，调 &lt;code&gt;set_istwfk&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Γ 点得到 &lt;code&gt;istwfk = 2&lt;&#x2F;code&gt;，X 点得到 &lt;code&gt;istwfk = 3..4&lt;&#x2F;code&gt;（看具体哪个分量），其余多为 1&lt;&#x2F;li&gt;
&lt;li&gt;这影响 G 球内 &lt;code&gt;npw_k&lt;&#x2F;code&gt; 的实际存储数&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;step-5-g-qiu-yu-fen-pei&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-5-g-qiu-yu-fen-pei&quot; aria-label=&quot;Anchor link for: step-5-g-qiu-yu-fen-pei&quot;&gt;Step 5: G 球预分配&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;对每个 k，从 &lt;code&gt;0.5*|k+G|² &amp;lt; ecut&lt;&#x2F;code&gt; 选出 &lt;code&gt;npw_k&lt;&#x2F;code&gt; 个 G 向量&lt;&#x2F;li&gt;
&lt;li&gt;调 &lt;code&gt;kpgio&lt;&#x2F;code&gt; 建立 &lt;code&gt;kg_k(3, npw_k)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;step-6-mpi-fen-fa-jia-she-5-ge-mpi-jin-cheng&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-6-mpi-fen-fa-jia-she-5-ge-mpi-jin-cheng&quot; aria-label=&quot;Anchor link for: step-6-mpi-fen-fa-jia-she-5-ge-mpi-jin-cheng&quot;&gt;Step 6: MPI 分发（假设 5 个 MPI 进程）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;distrb2&lt;&#x2F;code&gt;：10 IBZ kpt &#x2F; 5 proc = 每进程 2 个 k 点&lt;&#x2F;li&gt;
&lt;li&gt;例：proc 0 拿 (k=1,2)，proc 1 拿 (k=3,4)，…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;step-7-scf-die-dai&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-7-scf-die-dai&quot; aria-label=&quot;Anchor link for: step-7-scf-die-dai&quot;&gt;Step 7: SCF 迭代&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;每步 SCF：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;每进程并行求解自己负责的 2 个 k 点的 Hamiltonian 矩阵：
$H_\mathbf{k} \psi_{n\mathbf{k}} = \epsilon_{n\mathbf{k}} \psi_{n\mathbf{k}}$（约 200 plane waves × 20 bands）&lt;&#x2F;li&gt;
&lt;li&gt;局部累积 &lt;code&gt;rho_proc(r) += wtk(k) * occ * |psi|²&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;xmpi_sum&lt;&#x2F;code&gt;：把 5 个进程的 rho 加起来&lt;&#x2F;li&gt;
&lt;li&gt;算 V_new(r) = V_H[rho] + V_xc[rho] + V_ext&lt;&#x2F;li&gt;
&lt;li&gt;调 &lt;code&gt;newocc&lt;&#x2F;code&gt; 二分找 Fermi 能级（&lt;strong&gt;只用 IBZ 的 10 个 k 点&lt;&#x2F;strong&gt;，因为权重已经包含了 BZ 折叠）&lt;&#x2F;li&gt;
&lt;li&gt;检查 &lt;code&gt;tolvrs &#x2F; toldfe &#x2F; ...&lt;&#x2F;code&gt; 是否达标&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;step-8-shu-chu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-8-shu-chu&quot; aria-label=&quot;Anchor link for: step-8-shu-chu&quot;&gt;Step 8: 输出&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;写 WFK：保存 &lt;code&gt;kpt(3, 10)&lt;&#x2F;code&gt;, &lt;code&gt;wtk(10)&lt;&#x2F;code&gt;, &lt;code&gt;eigen(nband, 10)&lt;&#x2F;code&gt;, &lt;code&gt;occ(nband, 10)&lt;&#x2F;code&gt;, &lt;code&gt;cg(2, npw_k*nband, 10)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;写 EIG：纯本征值文本&lt;&#x2F;li&gt;
&lt;li&gt;若 &lt;code&gt;prtdos=1&lt;&#x2F;code&gt;：在 10 个 IBZ 点上用展宽函数做加权和得到 DOS&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;em&gt;报告生成于 2026-05-19，基于 Abinit 10.4.7。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#references&quot; aria-label=&quot;Anchor link for: references&quot;&gt;References&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Gonze, Xavier, et al. &quot;The Abinit Project: Impact, Environment and Recent Developments.&quot; &lt;em&gt;Computer Physics Communications&lt;&#x2F;em&gt;, vol. 248, 2020, p. 107042. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.cpc.2019.107042&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Monkhorst, Hendrik J., and James D. Pack. &quot;Special Points for Brillouin-Zone Integrations.&quot; &lt;em&gt;Physical Review B&lt;&#x2F;em&gt;, vol. 13, no. 12, 1976, pp. 5188–5192. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1103&#x2F;PhysRevB.13.5188&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Abinit Code. Version 10.4.7, 2024. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.abinit.org&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Abinit occopt：占据数选项完整解析</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-occopt-occupation-options/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-occopt-occupation-options/</id>
        <content type="html" xml:base="https://weizhengqing.github.io/posts/2026/abinit-occopt-occupation-options/">&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h1 id=&quot;abinit-occopt-zhan-ju-shu-xuan-xiang-wan-zheng-jie-xi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#abinit-occopt-zhan-ju-shu-xuan-xiang-wan-zheng-jie-xi&quot; aria-label=&quot;Anchor link for: abinit-occopt-zhan-ju-shu-xuan-xiang-wan-zheng-jie-xi&quot;&gt;Abinit &lt;code&gt;occopt&lt;&#x2F;code&gt;：占据数选项完整解析&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;基于 Abinit 10.4.7 源码分析
核心模块：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;src&#x2F;44_abitypes_defs&#x2F;m_dtset.F90&lt;&#x2F;code&gt;（占据数初始化 &lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_invars1.F90&lt;&#x2F;code&gt;（&lt;code&gt;fband&lt;&#x2F;code&gt; → &lt;code&gt;nband&lt;&#x2F;code&gt; 自动计算）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_chkinp.F90&lt;&#x2F;code&gt;（&lt;code&gt;occ&lt;&#x2F;code&gt; 一致性检查）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;src&#x2F;61_occeig&#x2F;m_occ.F90&lt;&#x2F;code&gt;（占据更新 &lt;code&gt;newocc&lt;&#x2F;code&gt;, &lt;code&gt;getnel&lt;&#x2F;code&gt;, &lt;code&gt;occ_fd&lt;&#x2F;code&gt; 等）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;src&#x2F;79_seqpar_mpi&#x2F;m_vtorho.F90&lt;&#x2F;code&gt;（SCF 中的固定&#x2F;可变占据分支）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;src&#x2F;67_common&#x2F;m_mkrho.F90&lt;&#x2F;code&gt;（占据数 × 波函数 → 密度）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;abimkdocs&#x2F;variables_abinit.py&lt;&#x2F;code&gt;（变量定义）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;yin-yan-zhan-ju-shu-zai-dft-zhong-de-jiao-se&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#yin-yan-zhan-ju-shu-zai-dft-zhong-de-jiao-se&quot; aria-label=&quot;Anchor link for: yin-yan-zhan-ju-shu-zai-dft-zhong-de-jiao-se&quot;&gt;引言：占据数在 DFT 中的角色&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Kohn-Sham 密度的构造是&lt;&#x2F;p&gt;
&lt;p&gt;$$\rho(\mathbf{r}) = \sum_{\sigma}\sum_{n,\mathbf{k}} w_\mathbf{k},f_{n\mathbf{k}\sigma},|\psi_{n\mathbf{k}\sigma}(\mathbf{r})|^2$$&lt;&#x2F;p&gt;
&lt;p&gt;其中 $f_{n\mathbf{k}\sigma} \in [0, f_{\max}]$ 是占据数。它必须满足全电子数约束&lt;&#x2F;p&gt;
&lt;p&gt;$$\sum_{\sigma n \mathbf{k}} w_\mathbf{k}, f_{n\mathbf{k}\sigma} = N_{\text{elect}}$$&lt;&#x2F;p&gt;
&lt;p&gt;总能（变分）&lt;&#x2F;p&gt;
&lt;p&gt;$$E_{\text{tot}}[\rho, {f}] = \sum w_\mathbf{k},f_{n\mathbf{k}},\epsilon_{n\mathbf{k}} - E_{\text{dc}}[\rho] - T,S[{f}]$$&lt;&#x2F;p&gt;
&lt;p&gt;最后一项熵贡献只在有限温（金属型 smearing）时出现。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;occopt&lt;&#x2F;code&gt; 决定了 ${f_{n\mathbf{k}\sigma}}$ 如何确定：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;由用户手动给定&lt;&#x2F;strong&gt;（&lt;code&gt;occopt = 0, 2&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;由代码按&quot;半导体满填&quot;自动给定&lt;&#x2F;strong&gt;（&lt;code&gt;occopt = 1&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;由 Fermi-Dirac &#x2F; Gaussian &#x2F; Cold smearing 等公式根据当前本征值动态计算&lt;&#x2F;strong&gt;（&lt;code&gt;occopt = 3..8&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;双 Fermi 能级，强制激发态&lt;&#x2F;strong&gt;（&lt;code&gt;occopt = 9&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;下文按&quot;输入参数 → 物理原理 → 公式 → 代码实现 → 一步步流程&quot;展开。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;occopt-quan-bu-10-chong-qu-zhi-su-cha&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-quan-bu-10-chong-qu-zhi-su-cha&quot; aria-label=&quot;Anchor link for: occopt-quan-bu-10-chong-qu-zhi-su-cha&quot;&gt;&lt;code&gt;occopt&lt;&#x2F;code&gt; 全部 10 种取值速查&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;code&gt;occopt&lt;&#x2F;code&gt;&lt;&#x2F;th&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;占据决定方式&lt;&#x2F;th&gt;&lt;th&gt;$N_{\text{band}}$ 行为&lt;&#x2F;th&gt;&lt;th&gt;物理含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;固定&lt;&#x2F;td&gt;&lt;td&gt;用户手动 &lt;code&gt;occ&lt;&#x2F;code&gt; 数组 + 用户手动 &lt;code&gt;wtk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;单一标量&lt;&#x2F;td&gt;&lt;td&gt;完全自定义；适合特殊计算&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;固定&lt;&#x2F;td&gt;&lt;td&gt;代码自动生成&quot;半导体填充&quot;&lt;&#x2F;td&gt;&lt;td&gt;单一标量；可由 &lt;code&gt;fband&lt;&#x2F;code&gt; 推算&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;绝缘体&#x2F;半导体默认&lt;&#x2F;strong&gt;；要求整数填充&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;固定&lt;&#x2F;td&gt;&lt;td&gt;用户手动 &lt;code&gt;occ&lt;&#x2F;code&gt;（k 点&#x2F;带分别给）+ 手动 &lt;code&gt;wtk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;数组 &lt;code&gt;nband(ikpt,isppol)&lt;&#x2F;code&gt; 可不同&lt;&#x2F;td&gt;&lt;td&gt;每个 k 点不同 band 数；最大自由度&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;Fermi-Dirac（真有限温）&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;真实有限温金属&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;Marzari 冷展宽，a=−0.5634&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;金属 + 收敛&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;Marzari 冷展宽，a=−0.8165&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;金属 + 单调占据&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;Methfessel-Paxton 2 阶&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;金属 + 高精度&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;Gaussian smearing&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;金属默认推荐&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;均匀展宽&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;仅测试用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;可变&lt;&#x2F;td&gt;&lt;td&gt;双 quasi-Fermi 能级（FD）&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;激发态（ΔSCF），需 &lt;code&gt;ivalence&lt;&#x2F;code&gt;, &lt;code&gt;nqfd&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;判定标准：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;occopt &amp;lt; 3&lt;&#x2F;code&gt; → 固定占据（&lt;code&gt;fixed_occ = .true.&lt;&#x2F;code&gt;）：SCF 期间不调 &lt;code&gt;newocc&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occopt &amp;gt;= 3&lt;&#x2F;code&gt; → 金属型（可变）：每次 SCF 步都调 &lt;code&gt;newocc&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;关键代码（&lt;code&gt;src&#x2F;79_seqpar_mpi&#x2F;m_vtorho.F90:527&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fixed_occ = (dtset%occopt &amp;lt; 3 .or. electronpositron_calctype(electronpositron) == 1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;yu-zhan-ju-xiang-guan-de-shu-ru-can-shu-zong-lan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#yu-zhan-ju-xiang-guan-de-shu-ru-can-shu-zong-lan&quot; aria-label=&quot;Anchor link for: yu-zhan-ju-xiang-guan-de-shu-ru-can-shu-zong-lan&quot;&gt;与占据相关的输入参数总览&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;下表收齐了所有与 &lt;code&gt;occopt&lt;&#x2F;code&gt; 直接&#x2F;间接相关的输入变量（定义位置 &lt;code&gt;abimkdocs&#x2F;variables_abinit.py&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;输入变量&lt;&#x2F;th&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;默认值&lt;&#x2F;th&gt;&lt;th&gt;适用 &lt;code&gt;occopt&lt;&#x2F;code&gt;&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;occopt&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;占据方案选择&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;occ&lt;&#x2F;code&gt; &#x2F; &lt;code&gt;occ_orig&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(nband*nkpt*nsppol)&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;0, 2&lt;&#x2F;td&gt;&lt;td&gt;手动输入占据数&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nband&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;自动&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;k 点上的能带数（&lt;code&gt;occopt=2&lt;&#x2F;code&gt; 可数组）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;fband&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;0.125（occopt=1）&#x2F; 0.5（其他）&lt;&#x2F;td&gt;&lt;td&gt;1, 3..9&lt;&#x2F;td&gt;&lt;td&gt;自动 &lt;code&gt;nband&lt;&#x2F;code&gt; 时附加 band 系数&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;wtk&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(nkpt)&lt;&#x2F;td&gt;&lt;td&gt;1.0&lt;&#x2F;td&gt;&lt;td&gt;0, 2&lt;&#x2F;td&gt;&lt;td&gt;手动 k 点权重（其他自动归一化）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;cellcharge&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real(nimage)&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;单胞电荷数（决定 &lt;code&gt;nelect&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nelect&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;INTERNAL&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;价电子总数（由 zion-cellcharge 算出）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;tsmear&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;0.01 Ha&lt;&#x2F;td&gt;&lt;td&gt;3..9&lt;&#x2F;td&gt;&lt;td&gt;展宽宽度 &#x2F; 电子温度&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;tphysel&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;0.0&lt;&#x2F;td&gt;&lt;td&gt;4..7&lt;&#x2F;td&gt;&lt;td&gt;物理温度（双重 smearing）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;spinmagntarget&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;−99.99&lt;&#x2F;td&gt;&lt;td&gt;1, 3..7&lt;&#x2F;td&gt;&lt;td&gt;固定磁矩&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ivalence&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;价带最高指标&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nqfd&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;0.0&lt;&#x2F;td&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;激发电子&#x2F;空穴数&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nspinor&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;自旋自由度（影响 maxocc）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nsppol&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;自旋通道数&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nspden&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;自旋密度组件数&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;prtstm&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;STM 模式偏置占据&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;stmbias&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;real&lt;&#x2F;td&gt;&lt;td&gt;0.0&lt;&#x2F;td&gt;&lt;td&gt;7 + prtstm&lt;&#x2F;td&gt;&lt;td&gt;STM 偏压&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nbdbuf&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;int&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;全&lt;&#x2F;td&gt;&lt;td&gt;顶端 band 缓冲（不参与收敛检查）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;nelect-de-ji-suan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nelect-de-ji-suan&quot; aria-label=&quot;Anchor link for: nelect-de-ji-suan&quot;&gt;&lt;code&gt;nelect&lt;&#x2F;code&gt; 的计算&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;代码位置：&lt;code&gt;src&#x2F;44_abitypes_defs&#x2F;m_dtset.F90:1199-1208&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;zval = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do iatom = 1, natom&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   zval = zval + ziontypat(typat(iatom))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nelect = zval - (cellcharge - nelectjell)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;其中 &lt;code&gt;ziontypat&lt;&#x2F;code&gt; 来自每种伪势文件头部的 Zion（价电子数）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;maxocc-yu-mei-tiao-dai-rong-liang&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#maxocc-yu-mei-tiao-dai-rong-liang&quot; aria-label=&quot;Anchor link for: maxocc-yu-mei-tiao-dai-rong-liang&quot;&gt;&lt;code&gt;maxocc&lt;&#x2F;code&gt; 与每条带容量&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;maxocc = 2 &#x2F; (nsppol * nspinor)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nsppol=1, nspinor=1&lt;&#x2F;code&gt; → &lt;code&gt;maxocc=2&lt;&#x2F;code&gt;（每条带可装 2 个电子，自旋简并）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nsppol=2, nspinor=1&lt;&#x2F;code&gt; → &lt;code&gt;maxocc=1&lt;&#x2F;code&gt;（自旋极化，每条带 1 个）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nsppol=1, nspinor=2&lt;&#x2F;code&gt; → &lt;code&gt;maxocc=1&lt;&#x2F;code&gt;（非共线，自旋升降同等地位）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nsppol=2, nspinor=2&lt;&#x2F;code&gt; → &lt;code&gt;maxocc=0.5&lt;&#x2F;code&gt;（理论上禁止，代码会报错）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;zhan-ju-shu-chu-shi-hua-dtset-initocc-chkneu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zhan-ju-shu-chu-shi-hua-dtset-initocc-chkneu&quot; aria-label=&quot;Anchor link for: zhan-ju-shu-chu-shi-hua-dtset-initocc-chkneu&quot;&gt;占据数初始化：&lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;代码位置：&lt;code&gt;src&#x2F;44_abitypes_defs&#x2F;m_dtset.F90:1181-1444&lt;&#x2F;code&gt;，是整个 SCF 启动前的占据数主入口。它做三件事：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;计算 &lt;code&gt;nelect&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：核电荷数减去 &lt;code&gt;cellcharge&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;初始化 &lt;code&gt;occ_orig&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;（仅当 &lt;code&gt;occopt = 1&lt;&#x2F;code&gt; 或 &lt;code&gt;3..9&lt;&#x2F;code&gt; 时；&lt;code&gt;occopt = 0, 2&lt;&#x2F;code&gt; 时占据数由用户手动给）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;检查电荷平衡&lt;&#x2F;strong&gt;：&lt;code&gt;Σ wtk × occ ≈ nelect&lt;&#x2F;code&gt;，偏差超 &lt;code&gt;tol8&lt;&#x2F;code&gt; 报错&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;ban-dao-ti-tian-chong-suan-fa-occopt-1-huo-3-9-de-chu-shi-cai-ce&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ban-dao-ti-tian-chong-suan-fa-occopt-1-huo-3-9-de-chu-shi-cai-ce&quot; aria-label=&quot;Anchor link for: ban-dao-ti-tian-chong-suan-fa-occopt-1-huo-3-9-de-chu-shi-cai-ce&quot;&gt;半导体填充算法（&lt;code&gt;occopt = 1&lt;&#x2F;code&gt; 或 &lt;code&gt;3..9&lt;&#x2F;code&gt; 的初始猜测）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;代码 &lt;code&gt;m_dtset.F90:1216-1289&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (occopt == 1 .or. (occopt &amp;gt;= 3 .and. occopt &amp;lt;= 9)) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   maxocc = 2.0 &#x2F; (nsppol * nspinor)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 全占满的能带数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   nocc = int((nelect - nh_qFD - 1e-8) &#x2F; maxocc) + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 最高占据带的&amp;quot;残量&amp;quot;（可能 &amp;lt; maxocc）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   occlast = nelect - nh_qFD - maxocc * (nocc - 1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 检查 nband 足够&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (nocc &amp;lt;= nband(1) * nsppol .or. iscf == -2) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! 情况 A: 无磁矩约束&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (spinmagntarget &amp;lt; -99.98) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         tmpocc(1 : nocc-1) = maxocc        ! 全满&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         tmpocc(nocc)      = occlast        ! 最后一带部分填&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         tmpocc(nocc+1 :)  = zero           ! 空带&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ! 情况 B: 固定磁矩 (nsppol=2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         do isppol = 1, nsppol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            sign_spin = 3 - 2*isppol         ! +1 spin-up, -1 spin-down&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            nelect_spin = 0.5 * (nelect * maxocc + sign_spin * spinmagntarget)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            nocc = ceiling(nelect_spin &#x2F; maxocc)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            occlast = nelect_spin - (nocc-1)*maxocc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            occ(1:nocc-1, isppol) = maxocc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            occ(nocc,    isppol) = occlast&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            occ(nocc+1:, isppol) = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;&#x2F;strong&gt;：&lt;code&gt;nelect=8&lt;&#x2F;code&gt; (Si), &lt;code&gt;nsppol=1&lt;&#x2F;code&gt;, &lt;code&gt;nspinor=1&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;maxocc = 2&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nocc = int((8-0-1e-8)&#x2F;2) + 1 = 4&lt;&#x2F;code&gt; → 4 条全满带&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occlast = 8 - 2*3 = 2&lt;&#x2F;code&gt; → 第 4 带也是满的&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occ_orig = [2, 2, 2, 2, 0, 0, 0, 0]&lt;&#x2F;code&gt;（如果 nband=8）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;有半填的例子&lt;&#x2F;strong&gt;：&lt;code&gt;nelect=7&lt;&#x2F;code&gt; (Al, nsppol=1)：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nocc = int(7&#x2F;2-eps) + 1 = 4&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occlast = 7 - 2*3 = 1&lt;&#x2F;code&gt; → 第 4 带半填&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occ_orig = [2, 2, 2, 1, 0, 0, 0]&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;这种&quot;非 0 非满&quot;的半填会触发 &lt;code&gt;occopt=1&lt;&#x2F;code&gt; 报错（除非是 H 原子），告诉用户改用 &lt;code&gt;occopt=7&lt;&#x2F;code&gt;。检查代码 &lt;code&gt;m_chkinp.F90:2780-2792&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;occopt-9-de-shuang-fermi-fen-zhi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-9-de-shuang-fermi-fen-zhi&quot; aria-label=&quot;Anchor link for: occopt-9-de-shuang-fermi-fen-zhi&quot;&gt;occopt=9 的双 Fermi 分支&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;m_dtset.F90:1245-1268&lt;&#x2F;code&gt;，先填价带（留 &lt;code&gt;nh_qFD&lt;&#x2F;code&gt; 个空穴）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (occopt == 9) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 填到 ivalence-1 满，第 ivalence 部分填到 nelect-nh_qFD&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   tmpocc(nocc+1 : ivalence*nsppol) = zero    ! 价带顶部留空穴&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   nocc2 = (ne_qFD - 1e-8) &#x2F; maxocc + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   occlast2 = ne_qFD - maxocc * (nocc2 - 1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 然后在导带（ivalence+1..）填 ne_qFD 个电子&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   tmpocc(ivalence*nsppol + 1 : ivalence*nsppol + nocc2 - 1) = maxocc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   tmpocc(ivalence*nsppol + nocc2)                          = occlast2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到例如：&lt;code&gt;occ = [2, 2, 2, 1.5, 0, ..., 0, 0.5, 0, ...]&lt;&#x2F;code&gt;（价带顶部 0.5 个空穴，导带底部 0.5 个电子）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dian-he-ping-heng-jian-cha&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dian-he-ping-heng-jian-cha&quot; aria-label=&quot;Anchor link for: dian-he-ping-heng-jian-cha&quot;&gt;电荷平衡检查&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;代码 &lt;code&gt;m_dtset.F90:1380-1442&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nelect_occ = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do isppol, ikpt, iband&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   nelect_occ = nelect_occ + wtk(ikpt) * occ_orig(...)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (|nelect_occ - nelect| &amp;gt; tol11) → 警告&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (|nelect_occ - nelect| &amp;gt; tol8)  → 错误并停止&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;occopt = 0, 2&lt;&#x2F;code&gt;：用户给定占据。代码核对总数&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occopt = 1, 3..9&lt;&#x2F;code&gt;：代码刚生成占据，这步检查只是个 sanity check&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occopt = 2&lt;&#x2F;code&gt; 特殊：&lt;code&gt;wtk&lt;&#x2F;code&gt; &lt;strong&gt;不自动归一化&lt;&#x2F;strong&gt;，必须用户保证 $\sum w_k = 1$（其他都自动归一化）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;nband-de-zi-dong-jue-ding-yu-fband-lian-dong&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nband-de-zi-dong-jue-ding-yu-fband-lian-dong&quot; aria-label=&quot;Anchor link for: nband-de-zi-dong-jue-ding-yu-fband-lian-dong&quot;&gt;&lt;code&gt;nband&lt;&#x2F;code&gt; 的自动决定（与 &lt;code&gt;fband&lt;&#x2F;code&gt; 联动）&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;代码位置：&lt;code&gt;src&#x2F;57_iovars&#x2F;m_invars1.F90:1933-2021&lt;&#x2F;code&gt;。当用户没指定 &lt;code&gt;nband&lt;&#x2F;code&gt;（且 &lt;code&gt;occopt&lt;&#x2F;code&gt; 不是 0 或 2），由 &lt;code&gt;fband&lt;&#x2F;code&gt; 自动算出：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;! fband 默认值&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (occopt == 1) fband = 0.125    ! 绝缘体只需少量空带&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;else            fband = 0.5       ! 金属需要更多空带做 smearing&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;! 自动 nband 公式&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;zelect = zval - cellcharge_min&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mband_upper = nspinor * ( (ceiling(zelect-tol10) + 1) &#x2F; 2          &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                          + ceiling(fband*natom - tol10) )         &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            + (nsppol - 1) * ceiling(half * sum_spinat)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nband(:) = mband_upper&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;含义：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基础&lt;&#x2F;strong&gt;：填满 &lt;code&gt;zelect&lt;&#x2F;code&gt; 个电子所需的最小 band 数 ≈ &lt;code&gt;ceiling(zelect&#x2F;2)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;缓冲&lt;&#x2F;strong&gt;：再加 &lt;code&gt;fband × natom&lt;&#x2F;code&gt; 条空带（默认绝缘体 12.5%，金属 50%）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;自旋极化补丁&lt;&#x2F;strong&gt;：&lt;code&gt;nsppol=2&lt;&#x2F;code&gt; 时额外加 &lt;code&gt;spinat&lt;&#x2F;code&gt; 总和的一半&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;&#x2F;strong&gt;：Si (8 电子, natom=1)：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;occopt=1&lt;&#x2F;code&gt;：&lt;code&gt;mband_upper = 1 * (4 + ceiling(0.125*1)) = 5&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occopt=7&lt;&#x2F;code&gt;：&lt;code&gt;mband_upper = 1 * (4 + ceiling(0.5*1)) = 5&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;&#x2F;strong&gt;：Al (3 电子, natom=1)：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;occopt=7&lt;&#x2F;code&gt;：&lt;code&gt;mband_upper = 1 * (2 + 1) = 3&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;用户可以显式给 nband，覆盖 fband 默认&lt;&#x2F;strong&gt;，对金属强烈建议显式设大（例如 1.5 倍占据 band 数）。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;occopt-0-shou-dong-zhan-ju&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-0-shou-dong-zhan-ju&quot; aria-label=&quot;Anchor link for: occopt-0-shou-dong-zhan-ju&quot;&gt;&lt;code&gt;occopt = 0&lt;&#x2F;code&gt;：手动占据&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shu-ru-yao-qiu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shu-ru-yao-qiu&quot; aria-label=&quot;Anchor link for: shu-ru-yao-qiu&quot;&gt;输入要求&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nband 8                          # 单标量&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nkpt 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nsppol 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occ                              # nband*nsppol = 8 个数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  2.0 2.0 2.0 2.0  0.0 0.0 0.0 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wtk                              # nkpt = 10 个数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  0.5  1.0 ... ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;所有 k 点共享同一组 &lt;code&gt;occ&lt;&#x2F;code&gt;，&lt;code&gt;wtk&lt;&#x2F;code&gt; 由用户保证 $\sum w_k = 1$。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dai-ma-chu-li&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dai-ma-chu-li&quot; aria-label=&quot;Anchor link for: dai-ma-chu-li&quot;&gt;代码处理&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;m_chkinp.F90:2743-2769&lt;&#x2F;code&gt; 做：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if ((iscf &amp;gt; 0 .or. iscf == -1 .or. iscf == -3) .and. (occopt == 0 .or. occopt == 2)) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   sumocc = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do iband over all bands:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (occ &amp;lt; -tol8) → 报错&amp;quot;负占据&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      sumocc += occ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (sumocc &amp;lt; 1e-8) → 报错&amp;quot;未定义&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;进一步通过 &lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt; 检查 $\sum w_k \cdot \text{occ} = N_{\text{elect}}$。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ying-yong-chang-jing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ying-yong-chang-jing&quot; aria-label=&quot;Anchor link for: ying-yong-chang-jing&quot;&gt;应用场景&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;强制磁矩高自旋态（如 Cr+5+ d¹ 配置）&lt;&#x2F;li&gt;
&lt;li&gt;验证波函数耦合（特殊几何）&lt;&#x2F;li&gt;
&lt;li&gt;与外部代码做对比测试&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;occopt-1-ban-dao-ti-zi-dong-tian-chong-mo-ren-zhi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-1-ban-dao-ti-zi-dong-tian-chong-mo-ren-zhi&quot; aria-label=&quot;Anchor link for: occopt-1-ban-dao-ti-zi-dong-tian-chong-mo-ren-zhi&quot;&gt;&lt;code&gt;occopt = 1&lt;&#x2F;code&gt;：半导体自动填充（&lt;strong&gt;默认值&lt;&#x2F;strong&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;hong-fa-tiao-jian&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hong-fa-tiao-jian&quot; aria-label=&quot;Anchor link for: hong-fa-tiao-jian&quot;&gt;触发条件&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;需满足&quot;整数填充&quot;：&lt;code&gt;(nelect - nh_qFD)&lt;&#x2F;code&gt; 必须正好等于 &lt;code&gt;maxocc * n&lt;&#x2F;code&gt; 形式（n 整数），否则代码报错。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;suan-fa&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#suan-fa&quot; aria-label=&quot;Anchor link for: suan-fa&quot;&gt;算法&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt; 第 4.1 节算法的退化情形（&lt;code&gt;spinmagntarget = -99.99&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-xuan-ji-hua-shi-de-qiang-zhi-spinmagntarget&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zi-xuan-ji-hua-shi-de-qiang-zhi-spinmagntarget&quot; aria-label=&quot;Anchor link for: zi-xuan-ji-hua-shi-de-qiang-zhi-spinmagntarget&quot;&gt;自旋极化时的强制 &lt;code&gt;spinmagntarget&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;m_chkinp.F90:2780-2792&lt;&#x2F;code&gt;：当 &lt;code&gt;nsppol=2&lt;&#x2F;code&gt; 且 &lt;code&gt;occopt=1&lt;&#x2F;code&gt; 时，&lt;strong&gt;必须&lt;&#x2F;strong&gt;显式给 &lt;code&gt;spinmagntarget&lt;&#x2F;code&gt;（除非是 H 原子）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (nsppol == 2 .and. occopt == 1 .and. abs(spinmagntarget+99.99) &amp;lt; tol8) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (natom &#x2F;= 1 .or. |znucl-1| &amp;gt; tol8) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      ABI_ERROR(&amp;quot;In nsppol=2 + occopt=1 case, must specify spinmagntarget. ...&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;原因：纯填充无法决定 spin-up &#x2F; spin-down 各占多少；需要用户告诉系统期望的磁矩。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fan-tie-ci-de-te-shu-chu-li&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fan-tie-ci-de-te-shu-chu-li&quot; aria-label=&quot;Anchor link for: fan-tie-ci-de-te-shu-chu-li&quot;&gt;反铁磁的特殊处理&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;反铁磁体（如 NiO）用 &lt;code&gt;nsppol=1, nspden=2&lt;&#x2F;code&gt;：自旋密度分量在同一通道内交替分布，不需要 &lt;code&gt;spinmagntarget&lt;&#x2F;code&gt;。&lt;code&gt;occopt=1&lt;&#x2F;code&gt; 在这种情形下也能用。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;occopt-2-mei-k-dian-zi-you-zhan-ju&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-2-mei-k-dian-zi-you-zhan-ju&quot; aria-label=&quot;Anchor link for: occopt-2-mei-k-dian-zi-you-zhan-ju&quot;&gt;&lt;code&gt;occopt = 2&lt;&#x2F;code&gt;：每 k 点自由占据&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shu-ru-yao-qiu-1&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shu-ru-yao-qiu-1&quot; aria-label=&quot;Anchor link for: shu-ru-yao-qiu-1&quot;&gt;输入要求&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nband     12 8 10 8 ...           # nkpt*nsppol 个值&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occ       2.0 2.0 ...             # Σ_ikpt nband(ikpt) * nsppol 个数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wtk       0.05 0.10 ...           # NOT 自动归一化&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;每 k 点的 band 数可以不一样（其他 occopt 都要求 &lt;code&gt;nband&lt;&#x2F;code&gt; 是标量）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dai-ma-fen-zhi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dai-ma-fen-zhi&quot; aria-label=&quot;Anchor link for: dai-ma-fen-zhi&quot;&gt;代码分支&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_invars1.F90:2009-2017&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;else if (occopt == 2) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ABI_MALLOC(reaalloc, (nkpt*nsppol))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   call intagm(reaalloc, nband, ..., &amp;#39;nband&amp;#39;, tnband, &amp;#39;INT&amp;#39;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (tnband == 1) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      do ikpt = 1, nkpt*nsppol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         if (nband(ikpt) &amp;gt; mband_upper) mband_upper = nband(ikpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;vtorho&lt;&#x2F;code&gt; 在 k 点循环时有特殊分支（&lt;code&gt;m_vtorho.F90:215, 267 等&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (occopt == 2) high_band_index = nband(ikpt + nkpt*(isppol-1))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;ying-yong-chang-jing-1&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ying-yong-chang-jing-1&quot; aria-label=&quot;Anchor link for: ying-yong-chang-jing-1&quot;&gt;应用场景&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;强迫某 k 点上的占据 (响应函数测试)&lt;&#x2F;li&gt;
&lt;li&gt;在特定 k 点用更多 band 提高精度&lt;&#x2F;li&gt;
&lt;li&gt;历史用法：早期版本算 SOC 的 workaround&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;不推荐普通用户使用，复杂且易错。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;occopt-3-9-ke-bian-zhan-ju-smearing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-3-9-ke-bian-zhan-ju-smearing&quot; aria-label=&quot;Anchor link for: occopt-3-9-ke-bian-zhan-ju-smearing&quot;&gt;&lt;code&gt;occopt = 3..9&lt;&#x2F;code&gt;：可变占据（smearing）&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;这部分已在 &lt;code&gt;abinit_smearing_report.md&lt;&#x2F;code&gt; 中详细写过。这里仅给一个&lt;strong&gt;与本报告焦点相关的浓缩&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ba-chong-smearing-he-han-shu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ba-chong-smearing-he-han-shu&quot; aria-label=&quot;Anchor link for: ba-chong-smearing-he-han-shu&quot;&gt;八种 smearing 核函数&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;设 $x = (\mu - \epsilon)&#x2F;k_BT$，下表给出展宽 δ 函数 $\tilde{\delta}(x)$ 与对应占据数函数 $f(x) = \int_{-\infty}^x \tilde{\delta}(x&#x27;)dx&#x27;$：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;code&gt;occopt&lt;&#x2F;code&gt;&lt;&#x2F;th&gt;&lt;th&gt;$\tilde{\delta}(x)$&lt;&#x2F;th&gt;&lt;th&gt;$f(x)$&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{1}{4\cosh^2(x&#x2F;2)}$&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{1}{1+e^{-x}}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{e^{-x^2}}{\sqrt{\pi}}\bigl(1.5 - 1.5ax - x^2 + ax^3\bigr)$, $a=-0.5634$&lt;&#x2F;td&gt;&lt;td&gt;（数值积分）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;同 4 但 $a=-0.8165$&lt;&#x2F;td&gt;&lt;td&gt;（数值积分）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{1}{\sqrt{\pi}}(1.5-x^2)e^{-x^2}$&lt;&#x2F;td&gt;&lt;td&gt;（数值积分）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{1}{\sqrt{\pi}}e^{-x^2}$&lt;&#x2F;td&gt;&lt;td&gt;$\tfrac{1}{2}(1+\text{erf}(x))$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;矩形函数（$\lvert x\rvert&amp;lt;1&#x2F;2$ 时 1，否则 0）&lt;&#x2F;td&gt;&lt;td&gt;线性&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;同 3，但两个独立 $\mu$&lt;&#x2F;td&gt;&lt;td&gt;同 3&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;代码位置：&lt;code&gt;src&#x2F;61_occeig&#x2F;m_occ.F90:1116-1168&lt;&#x2F;code&gt;。所有公式被预先在 12001 点的查找表里离散化，运行时通过 &lt;code&gt;splfit&lt;&#x2F;code&gt; 三次样条插值得到 $f$、$s$、$df&#x2F;dx$。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;scf-zhong-de-zhan-ju-geng-xin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#scf-zhong-de-zhan-ju-geng-xin&quot; aria-label=&quot;Anchor link for: scf-zhong-de-zhan-ju-geng-xin&quot;&gt;SCF 中的占据更新&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;每次 SCF 步在 &lt;code&gt;vtorho&lt;&#x2F;code&gt; 里：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;求解 $H\psi = \epsilon\psi$ 得新本征值 ${\epsilon_{n\mathbf{k}}}$&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;调 &lt;code&gt;newocc&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; 用二分法（最多 120 次）找 Fermi 能级 $\mu$ 使 $\sum w_\mathbf{k} f_{n\mathbf{k}} = N_{\text{elect}}$&lt;&#x2F;li&gt;
&lt;li&gt;更新 &lt;code&gt;occ(:)&lt;&#x2F;code&gt; 和 &lt;code&gt;doccde(:)&lt;&#x2F;code&gt;（占据对能量的导数）&lt;&#x2F;li&gt;
&lt;li&gt;用新 occ 累加密度 $\rho(\mathbf{r})$&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;代码片段（&lt;code&gt;m_vtorho.F90:1365-1369&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;call newocc(doccde, eigen, energies%entropy_ks, energies%e_fermie, energies%e_fermih, &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ivalence, spinmagntarget, mband, nband, nelect, ne_qFD, nh_qFD, &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            nkpt, nspinor, nsppol, occ, occopt, prtvol, tphysel, tsmear, wtk, &amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            prtstm=prtstm, stmbias=stmbias, extfpmd=extfpmd)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;shang-jin-ru-zong-neng&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shang-jin-ru-zong-neng&quot; aria-label=&quot;Anchor link for: shang-jin-ru-zong-neng&quot;&gt;熵进入总能&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;occopt ∈ {3..8}&lt;&#x2F;code&gt; 时（不含 9），总能多一项 $-TS$：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (occopt &amp;gt;= 3 .and. occopt &amp;lt;= 8) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   if (|tphysel| &amp;lt; tol10) then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      e_entropy = -tsmear * entropy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      e_entropy = -tphysel * entropy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这就是 Mermin 自由能 $F = E - TS$。代码 &lt;code&gt;src&#x2F;67_common&#x2F;m_dft_energy.F90:1148-1156&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;zhan-ju-yu-mi-du-de-ou-he-mkrho&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zhan-ju-yu-mi-du-de-ou-he-mkrho&quot; aria-label=&quot;Anchor link for: zhan-ju-yu-mi-du-de-ou-he-mkrho&quot;&gt;占据与密度的耦合（&lt;code&gt;mkrho&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;代码位置：&lt;code&gt;src&#x2F;67_common&#x2F;m_mkrho.F90&lt;&#x2F;code&gt;。每个 SCF 步收尾时由本子程序把占据数 × 波函数 → 密度：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do isppol, ikpt:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   weight = wtk(ikpt) &#x2F; ucvol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   do iband = 1, nband_k:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      if (|occ(iband)| &amp;gt; tol8) then         ! 跳过零占据的 band&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         weight_t(nband_occ) = occ(iband) * wtk(ikpt) &#x2F; ucvol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         cwavef = cg(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         nband_occ = nband_occ + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      end if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ! 用 FFT 把 ψ(G) → ψ(r)，并累加 |ψ|² × weight 到 rhoaug&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   call fourwf(option=1, rhoaug, cwavef, ..., weight_array_r=weight_t, ...)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;关键点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;零占据带不进入密度&lt;&#x2F;strong&gt;（节省 FFT）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;每个 band 的权重 = occ × wtk &#x2F; ucvol&lt;&#x2F;strong&gt;（这就是 BZ 积分的离散权重）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;PAW 还要额外加上&quot;球内&quot;贡献 &lt;code&gt;rhoij&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;，由 &lt;code&gt;pawmkrhoij&lt;&#x2F;code&gt; 处理&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;最后跨 MPI 进程求和（k 点并行）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;call xmpi_sum(rhoaug, mpi_comm_kpt, ierr)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;zhan-ju-yu-ben-zheng-zhi-neng-liang&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zhan-ju-yu-ben-zheng-zhi-neng-liang&quot; aria-label=&quot;Anchor link for: zhan-ju-yu-ben-zheng-zhi-neng-liang&quot;&gt;占据与本征值能量&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;代码位置：&lt;code&gt;src&#x2F;61_occeig&#x2F;m_occ.F90&lt;&#x2F;code&gt; 调用 &lt;code&gt;e_eigen&lt;&#x2F;code&gt;（&lt;code&gt;src&#x2F;79_seqpar_mpi&#x2F;m_vtorho.F90:727&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;e_eigenvalues = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;do isppol, ikpt, iband:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   e_eigenvalues = e_eigenvalues + wtk(ikpt) * occ(iband) * eigen(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;类似地，动能、非局域能、Fock 能等都用同样权重 &lt;code&gt;wtk * occ&lt;&#x2F;code&gt; 加和（&lt;code&gt;m_vtorho.F90:1165-1171&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;energies%e_kinetic     += wtk(ikpt) * occ_k(iband) * ek_k(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;energies%e_nlpsp_vfock += wtk(ikpt) * occ_k(iband) * enlx_k(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;energies%e_fock        += 0.5 * wtk(ikpt) * occ_k(iband) * fock_eigen(iband)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;occopt-dui-scf-liu-cheng-de-ying-xiang-tu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-dui-scf-liu-cheng-de-ying-xiang-tu&quot; aria-label=&quot;Anchor link for: occopt-dui-scf-liu-cheng-de-ying-xiang-tu&quot;&gt;&lt;code&gt;occopt&lt;&#x2F;code&gt; 对 SCF 流程的影响图&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;下图把 &lt;code&gt;occopt&lt;&#x2F;code&gt; 在三大阶段的分支条件用 Mermaid 流程图表达，便于直观对比&quot;固定占据&quot;（&lt;code&gt;occopt &amp;lt; 3&lt;&#x2F;code&gt;）与&quot;可变占据&quot;（&lt;code&gt;occopt ≥ 3&lt;&#x2F;code&gt;）两条主路径。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;flowchart TD&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Start([输入文件 + 伪势]) --&amp;gt; A1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    subgraph PhaseInit[&amp;quot;阶段一：初始化（istep = 0）&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A1[&amp;quot;&amp;lt;b&amp;gt;chkinp&amp;lt;&#x2F;b&amp;gt;&amp;lt;br&#x2F;&amp;gt;检查 occ, wtk, fband, occopt 一致性&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A2[&amp;quot;&amp;lt;b&amp;gt;invars1&amp;lt;&#x2F;b&amp;gt;&amp;lt;br&#x2F;&amp;gt;由 fband 自动决定 nband&amp;lt;br&#x2F;&amp;gt;mband = ceiling(zelect&#x2F;2) + ceiling(fband·natom)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A3[&amp;quot;&amp;lt;b&amp;gt;dtset_initocc_chkneu&amp;lt;&#x2F;b&amp;gt;&amp;lt;br&#x2F;&amp;gt;nelect = zval − cellcharge&amp;lt;br&#x2F;&amp;gt;maxocc = 2 &#x2F; (nsppol·nspinor)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A4{&amp;quot;occopt 分支&amp;quot;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A5[&amp;quot;验证用户给的 occ&amp;lt;br&#x2F;&amp;gt;(总和需 = nelect)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A6[&amp;quot;自动生成 occ_orig&amp;lt;br&#x2F;&amp;gt;nocc = int(nelect&#x2F;maxocc) + 1&amp;lt;br&#x2F;&amp;gt;occlast = nelect − maxocc·(nocc−1)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A7[&amp;quot;电荷检查：&amp;lt;br&#x2F;&amp;gt;|Σ wtk·occ − nelect| &amp;lt; tol8&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A1 --&amp;gt; A2 --&amp;gt; A3 --&amp;gt; A4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A4 -- &amp;quot;occopt = 0 或 2&amp;lt;br&#x2F;&amp;gt;(固定占据，用户输入)&amp;quot; --&amp;gt; A5 --&amp;gt; A7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A4 -- &amp;quot;occopt = 1 或 3..9&amp;lt;br&#x2F;&amp;gt;(半导体填充作为初值)&amp;quot; --&amp;gt; A6 --&amp;gt; A7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A7 --&amp;gt; B1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    subgraph PhaseSCF[&amp;quot;阶段二：SCF 主循环（istep = 1..nstep）— vtorho&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B1[&amp;quot;fixed_occ = (occopt &amp;amp;lt; 3)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B2[&amp;quot;对每个 k 点：&amp;lt;br&#x2F;&amp;gt;solve H ψ = ε ψ → eigen(k)&amp;lt;br&#x2F;&amp;gt;(CG &#x2F; LOBPCG &#x2F; ChebFi)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B3{&amp;quot;fixed_occ?&amp;quot;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B4[&amp;quot;跳过占据更新&amp;lt;br&#x2F;&amp;gt;occ 保持初始化时的值&amp;lt;br&#x2F;&amp;gt;(occopt ≤ 2)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B5[&amp;quot;&amp;lt;b&amp;gt;call newocc&amp;lt;&#x2F;b&amp;gt;&amp;lt;br&#x2F;&amp;gt;二分法找 μ，重算 occ&amp;lt;br&#x2F;&amp;gt;(occopt ≥ 3)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B6[&amp;quot;&amp;lt;b&amp;gt;get_entropy&amp;lt;&#x2F;b&amp;gt;&amp;lt;br&#x2F;&amp;gt;S = Σ wtk · s(x)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B7[&amp;quot;&amp;lt;b&amp;gt;e_eigen&amp;lt;&#x2F;b&amp;gt;：&amp;lt;br&#x2F;&amp;gt;E_band = Σ wtk · occ · ε&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B8[&amp;quot;&amp;lt;b&amp;gt;mkrho&amp;lt;&#x2F;b&amp;gt;：&amp;lt;br&#x2F;&amp;gt;ρ(r) = Σ wtk · occ · |ψ(r)|²&amp;lt;br&#x2F;&amp;gt;(零占据带跳过 FFT)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B1 --&amp;gt; B2 --&amp;gt; B3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B3 -- &amp;quot;true (固定)&amp;quot; --&amp;gt; B4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B3 -- &amp;quot;false (可变)&amp;quot; --&amp;gt; B5 --&amp;gt; B6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B4 --&amp;gt; B7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B6 --&amp;gt; B7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B7 --&amp;gt; B8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    B8 --&amp;gt; C1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    subgraph PhaseEtot[&amp;quot;阶段三：能量汇总 — etotfor&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C1{&amp;quot;3 ≤ occopt ≤ 8?&amp;quot;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C2[&amp;quot;e_entropy = −tsmear × S&amp;lt;br&#x2F;&amp;gt;&amp;lt;i&amp;gt;Mermin 自由能 F = E − TS&amp;lt;&#x2F;i&amp;gt;&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C3[&amp;quot;e_entropy = 0&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C4[&amp;quot;etotal = e_band − e_dc + e_entropy + E_ewald + ...&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C1 -- &amp;quot;是&amp;quot; --&amp;gt; C2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C1 -- &amp;quot;否 (occopt ≤ 2 或 = 9)&amp;quot; --&amp;gt; C3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C2 --&amp;gt; C4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C3 --&amp;gt; C4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    C4 --&amp;gt; D1{&amp;quot;收敛？&amp;lt;br&#x2F;&amp;gt;res2 &amp;amp;lt; tolvrs ?&amp;lt;br&#x2F;&amp;gt;|Δetotal| &amp;amp;lt; toldfe ?&amp;quot;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    D1 -- &amp;quot;否&amp;quot; --&amp;gt; Mix[&amp;quot;Pulay&#x2F;Anderson 混合&amp;lt;br&#x2F;&amp;gt;(m_ab7_mixing)&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Mix --&amp;gt; B1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    D1 -- &amp;quot;是&amp;quot; --&amp;gt; End([输出 WFK, EIG,&amp;lt;br&#x2F;&amp;gt;etotal, fermie, forces])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    classDef fixedOcc fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px,color:#0d47a1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    classDef varOcc   fill:#fce4ec,stroke:#c2185b,stroke-width:1.5px,color:#880e4f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    classDef phase    fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    classDef decision fill:#fff9c4,stroke:#f9a825,stroke-width:1.5px,color:#e65100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    class A5,B4,C3 fixedOcc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    class A6,B5,B6,C2 varOcc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    class A4,B3,C1,D1 decision&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;图例：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;蓝色节点代表&quot;固定占据&quot;路径（&lt;code&gt;occopt = 0, 1, 2&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;粉色节点代表&quot;可变占据&quot;路径（&lt;code&gt;occopt = 3..9&lt;&#x2F;code&gt;，需在 SCF 中调 &lt;code&gt;newocc&lt;&#x2F;code&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;黄色菱形是 &lt;code&gt;occopt&lt;&#x2F;code&gt; 控制的关键分支判断&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occopt = 9&lt;&#x2F;code&gt; 落在阶段二的可变路径，但&lt;strong&gt;不进入&lt;&#x2F;strong&gt; Mermin 自由能（C1 判断为&quot;否&quot;）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;dian-xing-li-zi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dian-xing-li-zi&quot; aria-label=&quot;Anchor link for: dian-xing-li-zi&quot;&gt;典型例子&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;li-1-silicon-ban-dao-ti-tui-jian-occopt-1&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#li-1-silicon-ban-dao-ti-tui-jian-occopt-1&quot; aria-label=&quot;Anchor link for: li-1-silicon-ban-dao-ti-tui-jian-occopt-1&quot;&gt;例 1：Silicon 半导体（推荐 &lt;code&gt;occopt=1&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nband 8           # 8 价电子，半导体只需 4 占据 + 几条空带&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# 不需要 tsmear&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt; 自动生成 &lt;code&gt;occ = [2, 2, 2, 2, 0, 0, 0, 0]&lt;&#x2F;code&gt;。SCF 不调 &lt;code&gt;newocc&lt;&#x2F;code&gt;，占据数永不改变。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;li-2-aluminum-jin-shu-tui-jian-occopt-7&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#li-2-aluminum-jin-shu-tui-jian-occopt-7&quot; aria-label=&quot;Anchor link for: li-2-aluminum-jin-shu-tui-jian-occopt-7&quot;&gt;例 2：Aluminum 金属（推荐 &lt;code&gt;occopt=7&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nband 10          # 3 价电子 + 缓冲带（fband=0.5 默认）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsmear 0.01       # Ha = 3160 K&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ngkpt 16 16 16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;初始 &lt;code&gt;occ_orig = [2, 0.5, 0, 0, 0, 0, 0, 0, 0, 0]&lt;&#x2F;code&gt;（来自 &lt;code&gt;initocc_chkneu&lt;&#x2F;code&gt; 第 4.1 节）。每次 SCF 步通过 &lt;code&gt;newocc&lt;&#x2F;code&gt; 重算：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;istep 1 : occ = [2.0, 0.50, 0.001, 1e-8, 0, ...]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;istep 2 : occ = [2.0, 0.48, 0.020, 1e-5, 0, ...]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;istep 8 : occ = [1.99, 0.41, 0.45, 0.15, 0.001, ...]  # 真实 metallic 分布&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;fermie&lt;&#x2F;code&gt; 在迭代中逐步收敛到正确值。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;li-3-fe-tie-ci-occopt-7-nsppol-2-spinmagntarget-2-2&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#li-3-fe-tie-ci-occopt-7-nsppol-2-spinmagntarget-2-2&quot; aria-label=&quot;Anchor link for: li-3-fe-tie-ci-occopt-7-nsppol-2-spinmagntarget-2-2&quot;&gt;例 3：Fe 铁磁（&lt;code&gt;occopt=7, nsppol=2, spinmagntarget=2.2&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nsppol 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nspinor 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsmear 0.01&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;spinmagntarget 2.2     # μ_B per Fe atom&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;initocc_chkneu&lt;&#x2F;code&gt; 第 4.1 节&quot;情况 B&quot;路径：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nelect_up   = (8 + 2.2)&#x2F;2 = 5.1    ! 5.1 个 spin-up 电子&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nelect_down = (8 - 2.2)&#x2F;2 = 2.9    ! 2.9 个 spin-down 电子&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意 &lt;code&gt;maxocc = 2&#x2F;(2*1) = 1&lt;&#x2F;code&gt; 了（每带每自旋通道最多 1 个）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occ_spin_up   = [1, 1, 1, 1, 1, 0.1, 0, ...]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occ_spin_down = [1, 1, 0.9, 0, ...]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;SCF 后 &lt;code&gt;newocc&lt;&#x2F;code&gt; 在分自旋通道上独立做二分（&lt;code&gt;m_occ.F90:836-913&lt;&#x2F;code&gt; 的固定磁矩分支），各自旋通道有不同的 Fermi 能级。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;li-4-dscf-ji-fa-tai-occopt-9&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#li-4-dscf-ji-fa-tai-occopt-9&quot; aria-label=&quot;Anchor link for: li-4-dscf-ji-fa-tai-occopt-9&quot;&gt;例 4：ΔSCF 激发态（&lt;code&gt;occopt=9&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occopt 9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ivalence 4         # 价带最高指标&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nqfd 1.0           # 强制 1 个电子激发&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nband 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsmear 0.005&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;initocc_chkneu&lt;&#x2F;code&gt; 第 4.2 节路径，初始 &lt;code&gt;occ = [2, 2, 2, 1, 0, 1, 0, 0, 0, 0]&lt;&#x2F;code&gt;（价带顶 1 空穴，导带底 1 电子）。SCF 中 &lt;code&gt;newocc&lt;&#x2F;code&gt; 同时维持 2 个 Fermi 能级 $\mu_e, \mu_h$（&lt;code&gt;m_occ.F90:583-606, 718-737&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;p&gt;熵不进入 Mermin 自由能（&lt;code&gt;occopt=9&lt;&#x2F;code&gt; 排除），因为它是约束态而非有限温。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;li-5-stm-mo-ni-occopt-7-prtstm-1-stmbias-0-001&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#li-5-stm-mo-ni-occopt-7-prtstm-1-stmbias-0-001&quot; aria-label=&quot;Anchor link for: li-5-stm-mo-ni-occopt-7-prtstm-1-stmbias-0-001&quot;&gt;例 5：STM 模拟（&lt;code&gt;occopt=7, prtstm=1, stmbias=0.001&lt;&#x2F;code&gt;）&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;m_occ.F90:786-829&lt;&#x2F;code&gt;：在 Fermi 能级附近 &lt;code&gt;[μ - stmbias, μ]&lt;&#x2F;code&gt; 区间内的占据数被单独保留：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;call getnel(... fermie_biased = fermie - stmbias ...)  ! 算偏置后的占据&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;occ(:) = occ_at_fermie(:) - occ_at_biased(:)            ! 只留差值&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;得到的 &lt;code&gt;occ&lt;&#x2F;code&gt; 仅在 STM 偏压窗口内非零，对应 STM 像的&quot;差分密度&quot;。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;chang-jian-xian-jing-yu-zhen-duan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#chang-jian-xian-jing-yu-zhen-duan&quot; aria-label=&quot;Anchor link for: chang-jian-xian-jing-yu-zhen-duan&quot;&gt;常见陷阱与诊断&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;occopt-1-zheng-shu-tian-chong-bu-tong-guo&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-1-zheng-shu-tian-chong-bu-tong-guo&quot; aria-label=&quot;Anchor link for: occopt-1-zheng-shu-tian-chong-bu-tong-guo&quot;&gt;&quot;occopt=1 整数填充不通过&quot;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;症状&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ERROR initialization of occupation numbers ... charge balance ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;&#x2F;strong&gt;：&lt;code&gt;nelect &#x2F; maxocc&lt;&#x2F;code&gt; 不是整数（半填的 band）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;对策&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;改用 &lt;code&gt;occopt 7 + tsmear 0.01&lt;&#x2F;code&gt;（金属型）&lt;&#x2F;li&gt;
&lt;li&gt;或检查 &lt;code&gt;cellcharge&lt;&#x2F;code&gt; 是否设错&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;nsppol-2-occopt-1-dan-mei-gei-spinmagntarget&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nsppol-2-occopt-1-dan-mei-gei-spinmagntarget&quot; aria-label=&quot;Anchor link for: nsppol-2-occopt-1-dan-mei-gei-spinmagntarget&quot;&gt;&quot;nsppol=2 + occopt=1 但没给 spinmagntarget&quot;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;症状&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ERROR This is a calculation with spin-up and spin-down wavefunctions ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;must be specified, while the default value is observed.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;对策&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;加 &lt;code&gt;spinmagntarget X.X&lt;&#x2F;code&gt;（先做小型测试估算磁矩）&lt;&#x2F;li&gt;
&lt;li&gt;或改 &lt;code&gt;occopt 7&lt;&#x2F;code&gt;（让代码自己决定磁矩）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;jin-shu-yong-occopt-1-shou-lian-ji-man-zhen-dang&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jin-shu-yong-occopt-1-shou-lian-ji-man-zhen-dang&quot; aria-label=&quot;Anchor link for: jin-shu-yong-occopt-1-shou-lian-ji-man-zhen-dang&quot;&gt;&quot;金属用 occopt=1 收敛极慢&#x2F;振荡&quot;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;症状&lt;&#x2F;strong&gt;：SCF 不收敛，能量上下抖动。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;&#x2F;strong&gt;：Fermi 面附近的能带跨越导致占据数突变。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;对策&lt;&#x2F;strong&gt;：必须用 &lt;code&gt;occopt 7&lt;&#x2F;code&gt;（或 3、4、6），加 &lt;code&gt;tsmear 0.005..0.02&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;occopt-2-de-wtk-mei-gui-yi-hua&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#occopt-2-de-wtk-mei-gui-yi-hua&quot; aria-label=&quot;Anchor link for: occopt-2-de-wtk-mei-gui-yi-hua&quot;&gt;&quot;occopt=2 的 wtk 没归一化&quot;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;症状&lt;&#x2F;strong&gt;：&lt;code&gt;nelect_occ ≠ nelect&lt;&#x2F;code&gt; 警告。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;&#x2F;strong&gt;：&lt;code&gt;occopt=2&lt;&#x2F;code&gt; 是唯一一个&lt;strong&gt;不自动归一化 wtk&lt;&#x2F;strong&gt; 的选项。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;对策&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;显式让 $\sum w_k = 1$&lt;&#x2F;li&gt;
&lt;li&gt;或改 &lt;code&gt;occopt 1&lt;&#x2F;code&gt; 让代码自动归一化&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;cold-smearing-4-5-6-neng-liang-tiao-bian&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cold-smearing-4-5-6-neng-liang-tiao-bian&quot; aria-label=&quot;Anchor link for: cold-smearing-4-5-6-neng-liang-tiao-bian&quot;&gt;&quot;Cold smearing (4, 5, 6) 能量跳变&quot;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;症状&lt;&#x2F;strong&gt;：几何优化中相邻几何能量出现台阶。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;&#x2F;strong&gt;：cold smearing 的占据函数非单调，二分法可能落到不同 Fermi 解上。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;对策&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;改用单调的 &lt;code&gt;occopt 7&lt;&#x2F;code&gt;（Gaussian）&lt;&#x2F;li&gt;
&lt;li&gt;或 occopt 5（cold smearing 单调版）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ji-he-chi-yu-zhong-nband-bu-gou&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ji-he-chi-yu-zhong-nband-bu-gou&quot; aria-label=&quot;Anchor link for: ji-he-chi-yu-zhong-nband-bu-gou&quot;&gt;&quot;几何弛豫中 nband 不够&quot;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;症状&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ERROR There are not enough bands to get charge balance right&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;&#x2F;strong&gt;：体积膨胀后能带数下降，原本占据带超出 &lt;code&gt;nband&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;对策&lt;&#x2F;strong&gt;：增大 &lt;code&gt;nband&lt;&#x2F;code&gt; 留出余量；或用 &lt;code&gt;fband 0.7&lt;&#x2F;code&gt; 而非 0.5。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;guan-jian-dai-ma-di-tu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#guan-jian-dai-ma-di-tu&quot; aria-label=&quot;Anchor link for: guan-jian-dai-ma-di-tu&quot;&gt;关键代码地图&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;子程序&lt;&#x2F;th&gt;&lt;th&gt;文件&lt;&#x2F;th&gt;&lt;th&gt;行号&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;44_abitypes_defs&#x2F;m_dtset.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;1181&lt;&#x2F;td&gt;&lt;td&gt;占据初始化主入口；电荷检查&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;chkinp&lt;&#x2F;code&gt; (occ 部分)&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_chkinp.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;2741&lt;&#x2F;td&gt;&lt;td&gt;验证手动 &lt;code&gt;occ&lt;&#x2F;code&gt; 合理性&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;invars1&lt;&#x2F;code&gt; (nband 部分)&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;57_iovars&#x2F;m_invars1.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;1933&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;fband&lt;&#x2F;code&gt; → &lt;code&gt;nband&lt;&#x2F;code&gt; 自动算&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;newocc&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;61_occeig&#x2F;m_occ.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;453&lt;&#x2F;td&gt;&lt;td&gt;二分法找 Fermi 能级&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;getnel&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;124&lt;&#x2F;td&gt;&lt;td&gt;给定 μ 算 N、occ、S&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;init_occ_ent&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;1007&lt;&#x2F;td&gt;&lt;td&gt;建 12001 点 smearing 查找表&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;occ_fd&lt;&#x2F;code&gt; &#x2F; &lt;code&gt;occ_dfde&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;1643 &#x2F; 1695&lt;&#x2F;td&gt;&lt;td&gt;解析 Fermi-Dirac&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;occeig&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;1552&lt;&#x2F;td&gt;&lt;td&gt;DFPT 用：(occ_kq - occ_k)&#x2F;(ε_kq - ε_k)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;vtorho&lt;&#x2F;code&gt; (fixed_occ 分支)&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;79_seqpar_mpi&#x2F;m_vtorho.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;527, 1301&lt;&#x2F;td&gt;&lt;td&gt;SCF 中选固定 &#x2F; 可变占据&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;e_eigen&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;同上&lt;&#x2F;td&gt;&lt;td&gt;727&lt;&#x2F;td&gt;&lt;td&gt;算 $E_{\text{band}} = \sum w,f,\epsilon$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;mkrho&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;67_common&#x2F;m_mkrho.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;410&lt;&#x2F;td&gt;&lt;td&gt;算 $\rho = \sum w,f,\lvert\psi\rvert^2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;entropy&lt;&#x2F;code&gt; (汇总)&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;67_common&#x2F;m_dft_energy.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;1130&lt;&#x2F;td&gt;&lt;td&gt;$-TS$ 进入总能&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;get_fact_spin_tol_empty&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;src&#x2F;61_occeig&#x2F;m_occ.F90&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;1947&lt;&#x2F;td&gt;&lt;td&gt;自旋因子辅助&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;fu-lu-yi-ci-wan-zheng-scf-zhong-occ-de-zhu-bu-zhui-zong&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fu-lu-yi-ci-wan-zheng-scf-zhong-occ-de-zhu-bu-zhui-zong&quot; aria-label=&quot;Anchor link for: fu-lu-yi-ci-wan-zheng-scf-zhong-occ-de-zhu-bu-zhui-zong&quot;&gt;附录：一次完整 SCF 中 &lt;code&gt;occ&lt;&#x2F;code&gt; 的逐步追踪&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;设输入：FCC Al（3 价电子），&lt;code&gt;occopt=7&lt;&#x2F;code&gt;，&lt;code&gt;tsmear=0.01&lt;&#x2F;code&gt;，&lt;code&gt;ngkpt 8 8 8&lt;&#x2F;code&gt; → 10 IBZ k 点，&lt;code&gt;nband=6&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-0-chu-shi-hua&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-0-chu-shi-hua&quot; aria-label=&quot;Anchor link for: step-0-chu-shi-hua&quot;&gt;Step 0: 初始化&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;invars1&lt;&#x2F;code&gt;：&lt;code&gt;fband=0.5&lt;&#x2F;code&gt;，&lt;code&gt;mband_upper = 1 * (ceiling(3) + ceiling(0.5)) = 1 * (3 + 1) = 4&lt;&#x2F;code&gt;。用户给了 &lt;code&gt;nband=6&lt;&#x2F;code&gt;，覆盖之。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;dtset_initocc_chkneu&lt;&#x2F;code&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zval = 3&lt;&#x2F;code&gt;, &lt;code&gt;cellcharge = 0&lt;&#x2F;code&gt; → &lt;code&gt;nelect = 3&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;maxocc = 2 &#x2F; (1*1) = 2&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nocc = int(3&#x2F;2 - 1e-8) + 1 = 2&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occlast = 3 - 2*1 = 1&lt;&#x2F;code&gt; → 第 2 带半填&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;occ_orig = [2, 1, 0, 0, 0, 0]&lt;&#x2F;code&gt;（10 个 k 点都一样）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;电荷检查：&lt;code&gt;Σ wtk × occ = 1 × (2 + 1 + 0 + 0 + 0 + 0) = 3 = nelect&lt;&#x2F;code&gt; ✓&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;step-1-di-yi-ci-scf&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-1-di-yi-ci-scf&quot; aria-label=&quot;Anchor link for: step-1-di-yi-ci-scf&quot;&gt;Step 1: 第一次 SCF&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;vtorho&lt;&#x2F;code&gt; 设 &lt;code&gt;fixed_occ = (7 &amp;lt; 3) = .false.&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;求解 H ψ = ε ψ 得 &lt;code&gt;eigen = [k=1: -0.42, -0.08, +0.15, ...; k=2: ...; ...]&lt;&#x2F;code&gt;（10 k × 6 bands = 60 eigenvalues）&lt;&#x2F;li&gt;
&lt;li&gt;调 &lt;code&gt;newocc&lt;&#x2F;code&gt;：
&lt;ul&gt;
&lt;li&gt;边界：&lt;code&gt;fermie_lo = min(eigen) - 0.06 = -0.48&lt;&#x2F;code&gt;, &lt;code&gt;fermie_hi = max(eigen) + 0.06&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;二分到 &lt;code&gt;fermie ≈ -0.05 Ha&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;用 Gaussian smearing 表查得每个 (ε, k) 处的 occ&lt;&#x2F;li&gt;
&lt;li&gt;结果约：&lt;code&gt;occ_k1 = [2.0, 1.6, 0.05, 1e-7, ...]&lt;&#x2F;code&gt;（k=1 处）；其他 k 略不同&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;mkrho&lt;&#x2F;code&gt;：&lt;code&gt;ρ(r) = Σ_{k,n} wtk(k) × occ(k,n) × |ψ_kn(r)|²&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;etotfor&lt;&#x2F;code&gt;：&lt;code&gt;E_tot = E_band - E_dc - tsmear × S = ... - 0.01 × 0.02 = ...&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;step-2-7-hou-xu-scf&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-2-7-hou-xu-scf&quot; aria-label=&quot;Anchor link for: step-2-7-hou-xu-scf&quot;&gt;Step 2-7: 后续 SCF&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;每步 occ 都微调（因为 eigen 在变）。典型情况下：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;istep    fermie       Σ entropy×wtk     occ at fermi level&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  1     -0.0521      0.0184            ~0.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  2     -0.0498      0.0156            ~0.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  7     -0.0501      0.0152            ~0.49&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;occ&lt;&#x2F;code&gt; 数组在每次 SCF 步都会重新计算，但因为 &lt;code&gt;eigen&lt;&#x2F;code&gt; 变化越来越小，&lt;code&gt;occ&lt;&#x2F;code&gt; 也越来越稳定。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-8-shou-lian-tui-chu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-8-shou-lian-tui-chu&quot; aria-label=&quot;Anchor link for: step-8-shou-lian-tui-chu&quot;&gt;Step 8: 收敛退出&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #ABB2BF; background-color: #282C34;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;res2 &amp;lt; tolvrs (1e-12) 连续 2 次 → quit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;final fermie = -0.0501 Ha&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;final entropy = 0.0152&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;final etotal = ... - 0.0001 (= -tsmear × S)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;em&gt;报告生成于 2026-05-19，基于 Abinit 10.4.7。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#references&quot; aria-label=&quot;Anchor link for: references&quot;&gt;References&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Gonze, Xavier, et al. &quot;The Abinit Project: Impact, Environment and Recent Developments.&quot; &lt;em&gt;Computer Physics Communications&lt;&#x2F;em&gt;, vol. 248, 2020, p. 107042. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.cpc.2019.107042&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Marzari, Nicola, and David Vanderbilt. &quot;Maximally Localized Generalized Wannier Functions for Composite Energy Bands.&quot; &lt;em&gt;Physical Review B&lt;&#x2F;em&gt;, vol. 56, no. 20, 1997, pp. 12847–12865. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1103&#x2F;PhysRevB.56.12847&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Mermin, N. David. &quot;Thermal Properties of the Inhomogeneous Electron Gas.&quot; &lt;em&gt;Physical Review&lt;&#x2F;em&gt;, vol. 137, no. 5A, 1965, pp. A1441–A1443. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1103&#x2F;PhysRev.137.A1441&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Methfessel, M., and A. T. Paxton. &quot;High-Precision Sampling for Brillouin-Zone Integration in Metals.&quot; &lt;em&gt;Physical Review B&lt;&#x2F;em&gt;, vol. 40, no. 6, 1989, pp. 3616–3621. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1103&#x2F;PhysRevB.40.3616&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Paillard, Charles, et al. &quot;Noncollinear Magnetism from First Principles.&quot; &lt;em&gt;Physical Review B&lt;&#x2F;em&gt;, vol. 100, no. 2, 2019, p. 024426. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1103&#x2F;PhysRevB.100.024426&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Abinit Code. Version 10.4.7, 2024. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.abinit.org&quot;&gt;link&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Abinit SCF 计算：收敛标准与代码流程详解</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-scf-convergence-criteria/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-scf-convergence-criteria/</id>
        <summary type="html">&lt;p&gt;本文总结了Abinit当中SCF计算的收敛标准，以及代码运行的详细流程。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>Abinit SCF 波函数收敛过程：原理与代码实现详解</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-scf-wavefunction-convergence/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-scf-wavefunction-convergence/</id>
        <summary type="html">&lt;p&gt;本文详细介绍了Abinit的SCF计算过程中波函数收敛的过程。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>Abinit Smearing（占据数展宽）计算：参数与代码实现详解</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-smearing-occupation-broadening/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-smearing-occupation-broadening/</id>
        <summary type="html">&lt;p&gt;本文总结了Abinit当中smearing的参数细节以及代码实现的方法。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>Abinit 结构优化（离子移动）：计算流程与代码实现详解</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-structural-relaxation-ion-movement/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-structural-relaxation-ion-movement/</id>
        <summary type="html">&lt;p&gt;本文总结了Abinit结构优化的计算流程，以及代码的实现方法。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>COHP 计算中 SCF 后阶段阻塞问题的诊断与修复</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/cohp-scf-post-blocking-fix/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/cohp-scf-post-blocking-fix/</id>
        <summary type="html">&lt;p&gt;在利用 ABINIT + LOBSTER 进行 $\mathrm{Al}(111)$ slab 吸附体系的 COHP 计算时，发现所有 24 个任务在 SCF 收敛后进入长达约 12 小时的静默阻塞状态，无任何输出写入日志文件。本文记录该问题的诊断过程与修复方案。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>PAW 赝势 SCF 收敛问题的诊断与修复</title>
        <published>2026-05-19T00:00:00+00:00</published>
        <updated>2026-05-19T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/paw-scf-convergence-fix/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/paw-scf-convergence-fix/</id>
        <summary type="html">&lt;p&gt;将赝势从 norm-conserving（psp8，ta015）切换到 PAW（xml，PseudoDojo pbe&#x2F;paw-sr-11，ta031）后，所有 COHP 计算的 SCF 迭代出现严重的收敛困难。能量在前几步快速下降后开始振荡上升，残差（&lt;code&gt;vres2&lt;&#x2F;code&gt;）在 $\sim1\times10^{-2}$ 处停滞不前。本文记录该问题的诊断与修复过程。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>ABINIT 8.6.3 + LOBSTER 5.1.1 COHP 计算工作流</title>
        <published>2026-05-17T00:00:00+00:00</published>
        <updated>2026-05-17T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-lobster-cohp-workflow/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-lobster-cohp-workflow/</id>
        <summary type="html">&lt;p&gt;本文档记录使用 ABINIT 8.6.3 计算波函数，配合 LOBSTER 5.1.1 进行 COHP（Crystal Orbital Hamilton Population）分析的完整流程，包括版本选择理由、关键参数设置、输入文件模板、资源估算及常见问题排查。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>等离子球的物理原理与公式推导</title>
        <published>2026-05-10T00:00:00+00:00</published>
        <updated>2026-05-10T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/plasma-globe-formula-derivation/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/plasma-globe-formula-derivation/</id>
        <summary type="html">&lt;p&gt;等离子球（plasma globe）内部的发光&quot;电弧&quot;严格说更接近&lt;strong&gt;低压气体放电丝状通道&lt;&#x2F;strong&gt;，不是空气中高温金属电弧那种连续强电流电弧。它的形成涉及高频高压电场、气体击穿、电离、电子雪崩、等离子体鞘层和介质阻挡放电等过程。本文将逐一解释其中每一个关键公式的推导过程。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>ABINIT 单原子计算 SCF 收敛问题排查：开壳层占据与混合参数优化</title>
        <published>2026-05-01T00:00:00+00:00</published>
        <updated>2026-05-01T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-single-atom-scf-convergence/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-single-atom-scf-convergence/</id>
        <summary type="html">&lt;p&gt;在使用 ABINIT 进行单原子参考能计算时，O 和 S 两种开壳层原子出现了 SCF 自洽迭代不收敛的问题。本文记录从问题发现到最终解决的完整排查过程，涵盖输入文件设置、根因分析和修正方案。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>从 CubicSpline 到 PchipInterpolator：DFT 吸附能曲线插值振荡问题的排查与修复</title>
        <published>2026-05-01T00:00:00+00:00</published>
        <updated>2026-05-01T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/cubic-spline-to-pchip-interpolation-adsorption-energy/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/cubic-spline-to-pchip-interpolation-adsorption-energy/</id>
        <summary type="html">&lt;p&gt;在使用 Python 绘制 DFT 吸附能曲线的过程中，发现某些元素的曲线图在特定 $z$ 坐标附近出现不符合物理预期的异常振荡。排查后定位到问题根源：&lt;code&gt;CubicSpline&lt;&#x2F;code&gt; 三次样条插值在面对尖峰数据时会产生严重的过冲（overshoot）。本文将记录这一问题的分析过程和修复方案。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>使用 Python&#x2F;Matplotlib 绘制多元素吸附能曲线网格图</title>
        <published>2026-05-01T00:00:00+00:00</published>
        <updated>2026-05-01T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/python-matplotlib-adsorption-energy-curves-grid/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/python-matplotlib-adsorption-energy-curves-grid/</id>
        <summary type="html">&lt;p&gt;在密度泛函理论（DFT）计算化学研究中，绘制 adatom（吸附原子）沿表面法线方向的吸附能曲线是分析表面催化性质的重要手段。本文介绍一个完整的 Python 脚本，利用 Matplotlib 将六种元素（N、H、C、Si、O、S）在四种吸附位点（Top、Bridge、fcc、hcp）上的 $\Delta E_{\mathrm{ads}}$ 曲线以 $3 \times 2$ 网格布局呈现，每个面板同时包含主图和局部放大图。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>ABINIT结构优化`ionmov=2`算法：BFGS方法实现与分析</title>
        <published>2026-04-15T00:00:00+00:00</published>
        <updated>2026-04-15T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-bfgs-ionmov2/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-bfgs-ionmov2/</id>
        <summary type="html">&lt;p&gt;在ABINIT软件中，当设置计算参数 &lt;code&gt;ionmov=2&lt;&#x2F;code&gt; 时，程序采用 &lt;strong&gt;Broyden-Fletcher-Goldfarb-Shanno (BFGS)&lt;&#x2F;strong&gt; 的拟牛顿法来进行晶体结构和原子位置的几何优化。BFGS方法通过近似目标函数（系统总能量）的逆海森矩阵来引导原子坐标朝着能量极小值收敛，在计算效率与优化收敛性之间取得了极佳的平衡。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>ABINIT结构优化算法分析：ionmov=22 (L-BFGS)</title>
        <published>2026-04-15T00:00:00+00:00</published>
        <updated>2026-04-15T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/abinit-ionmov22-lbfgs-analysis/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/abinit-ionmov22-lbfgs-analysis/</id>
        <summary type="html">&lt;p&gt;在ABINIT的结构优化过程中，参数 &lt;code&gt;ionmov=22&lt;&#x2F;code&gt; 对应于&lt;strong&gt;有限内存Broyden-Fletcher-Goldfarb-Shanno (Limited-memory BFGS, L-BFGS) 方法&lt;&#x2F;strong&gt;。该方法是一种著名的拟牛顿法（Quasi-Newton Method），不需要显式计算并存储庞大的Hessian矩阵及其逆矩阵，而是通过保存最近几步的迭代历史信息来近似逆Hessian矩阵，特别适用于拥有大量自由度（如大体系多原子结构的弛豫和晶胞优化）的问题。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>VASP计算中BFGS优化器突然爆力问题的诊断与解决</title>
        <published>2026-04-14T00:00:00+00:00</published>
        <updated>2026-04-14T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/bfgs-optimization-issue/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/bfgs-optimization-issue/</id>
        <summary type="html">&lt;p&gt;在VASP计算中，经常会遇到这样的情况：前面十几步优化都在正常进行，结构逐渐改善，但突然在某一步力值暴涨，结构开始&quot;跑飞&quot;或&quot;扩散&quot;。这种现象通常不是单一原因造成的，而是多种数值因素叠加的结果。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>第一性原理计算中的结构优化：从入门经验到实战策略</title>
        <published>2026-04-14T00:00:00+00:00</published>
        <updated>2026-04-14T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/first-principles-structure-optimization/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/first-principles-structure-optimization/</id>
        <summary type="html">&lt;p&gt;结构优化（structure optimization 或 structure relaxation）是第一性原理计算中最基础、也最容易&quot;算了很久却不一定算对&quot;的环节。它的目标是通过调整原子坐标、晶格形状或晶胞体积，使体系到达一个能量更低、受力更小的稳定构型。对于 VASP 而言，优化的自由度主要由 &lt;code&gt;ISIF&lt;&#x2F;code&gt; 控制，优化算法主要由 &lt;code&gt;IBRION&lt;&#x2F;code&gt; 控制，而是否收敛通常由 &lt;code&gt;EDIFFG&lt;&#x2F;code&gt; 等参数判断。&lt;&#x2F;p&gt;</summary>
    </entry>
    <entry xml:lang="en">
        <title>Hermes Agent 入门指南</title>
        <published>2026-04-11T00:00:00+00:00</published>
        <updated>2026-04-11T00:00:00+00:00</updated>
        <author>
            <name>Zhengqing Wei</name>
        </author>
        <link rel="alternate" href="https://weizhengqing.github.io/posts/2026/hermes-agent-guide/" type="text/html"/>
        <id>https://weizhengqing.github.io/posts/2026/hermes-agent-guide/</id>
        <summary type="html">&lt;p&gt;本文适合完全没有命令行经验的新手，也适合从 OpenClaw 迁移过来的用户。手把手带你从零开始，装好 Hermes Agent，接入 Telegram，并了解它的核心玩法。&lt;&#x2F;p&gt;</summary>
    </entry>
</feed>
