@@ -6,16 +6,14 @@ DeltaP 是 ABACUS 中的约束 DFT 模块,用于**约束原子级 Berry 相位
66
77## 一、快速入门
88
9- ### 1.1 仅诊断(不计入 γ,不修改哈密顿量)
9+ ### 1.1 仅诊断(计算 γ,不修改哈密顿量)
1010
1111```
1212INPUT:
1313 deltap_switch 1
1414 deltap_corr 0
1515```
1616
17- γ 值每 SCF 步打印一次,但不施加约束力、不影响 SCF 收敛。
18-
1917### 1.2 约束模式 — STRU 中指定靶标(推荐)
2018
2119** INPUT** :
30280.0
31291
32306.744 7.500 8.086 dp_target -6.40 dp_constrain 1
33-
3431H
35320.0
36332
4643
4744| 参数 | 类型 | 默认 | 说明 |
4845| ------| ------| ------| ------|
49- | ` deltap_switch ` | bool | false | 启用 DeltaP。为 true 时计算每原子 Berry 相位 |
50- | ` deltap_corr ` | bool | false | 启用约束哈密顿修正。为 false 时仅诊断 γ 不改变 SCF |
51-
52- > ` deltap_corr ` 独立存在的原因是:用户可能只想要 γ 的诊断输出(类似于 ` berry_phase=1 ` 的旧功能),而不希望约束力影响 SCF 收敛。对于约束 DFT 应用(PES、BEC 测量),必须设为 true。
46+ | ` deltap_switch ` | bool | false | 启用 DeltaP |
47+ | ` deltap_corr ` | bool | false | 启用约束哈密顿修正。false=仅诊断 |
5348
5449### 2.2 计算控制
5550
5651| 参数 | 类型 | 默认 | 说明 |
5752| ------| ------| ------| ------|
58- | ` deltap_method ` | string | berry_connection | ` "berry_connection" ` :Berry 联络算子路径(推荐);` "wannier" ` :Wilson loop + Resta-Z 路径 |
59- | ` deltap_gdir ` | int | 3 | 约束施加方向:1=x, 2=y, 3=z。三方向的 γ 均计算输出 |
60- | ` deltap_gauge_mode ` | string | none | 规范固定模式。详见第三节 |
61- | ` deltap_anchor_thr ` | double | 1e-8 | SMO 锚定重选的投影阈值(仅 ` smo_anchored ` 模式有效) |
53+ | ` deltap_method ` | string | berry_connection | ` "berry_connection" ` (推荐)、` "wannier" ` |
54+ | ` deltap_gdir ` | int | 3 | 约束方向:1=x, 2=y, 3=z。γ 对三方向均输出 |
55+ | ` deltap_rm ` | double | 3.0 | SMO 重叠截断半径(Bohr) |
56+ | ` deltap_gauge_mode ` | string | none | 规范固定:` "none" ` 、` "smo_anchored" ` |
57+ | ` deltap_anchor_thr ` | double | 1e-8 | 锚定重选阈值 |
6258
6359### 2.3 λ 控制
6460
6561| 参数 | 类型 | 默认 | 说明 |
6662| ------| ------| ------| ------|
67- | ` deltap_lambda_init ` | double | 0.0 | 初始 λ(Ry),所有原子统一 |
68- | ` deltap_lambda_step ` | double | 0.01 | 梯度下降步长 |
69- | ` deltap_lambda_mixing ` | double | 0.1 | 混合因子:λ = β·λ_new + (1-β)·λ_old |
70- | ` deltap_inner_nmax ` | int | 0 | 内层优化最大迭代数。0=两阶段阈值模式 |
63+ | ` deltap_lambda_init ` | double | 0.0 | 初始 λ(Ry) |
64+ | ` deltap_lambda_step ` | double | 0.01 | 梯度下降步长(仅 ` inner_nmax=0 ` ) |
65+ | ` deltap_lambda_mixing ` | double | 0.1 | 混合因子(仅 ` inner_nmax=0 ` ) |
66+ | ` deltap_inner_nmax ` | int | 0 | ** 内层 BFGS 最大迭代数** 。0=两阶段阈值模式;3-5=内层优化 |
67+ | ` deltap_inner_thr ` | double | 1e-3 | drho 阈值:触发 λ 更新 |
68+ | ` deltap_conv_thr ` | double | 1e-3 | 内层收敛阈值 |
7169
72- ### 2.4 两阶段阈值模式(` deltap_inner_nmax=0 ` )
70+ ### 2.4 两阶段阈值模式(` deltap_inner_nmax=0 ` ,默认 )
7371
7472```
7573Phase 1: λ = 0, SCF 自然收敛
7674 ↓ drho < deltap_inner_thr
77- Phase 2: 一次性梯度下降更新 λ, mix_reset()
75+ Phase 2: 梯度下降更新 λ, mix_reset()
7876 ↓
7977Phase 3: λ 冻结, SCF 带约束继续收敛
8078```
8179
82- | 参数 | 类型 | 默认 | 说明 |
83- | ------| ------| ------| ------|
84- | ` deltap_inner_thr ` | double | 1e-3 | Phase 1→2 切换的 drho 阈值 |
85- | ` deltap_conv_thr ` | double | 1e-3 | 内层收敛阈值(仅 ` deltap_inner_nmax>0 ` 时有效) |
80+ 每次 SCF 步均需电荷密度混合——梯度步偏后需多次 SCF 修正。
8681
87- ### 2.5 约束模式
88-
89- | 参数 | 类型 | 默认 | 说明 |
90- | ------| ------| ------| ------|
91- | ` deltap_constraint_mode ` | string | per_atom | ` "per_atom" ` 每原子;` "total" ` 总和 Σγ |
92- | ` deltap_constraint_matrix ` | string | "" | 约束矩阵文件。设置后覆盖 ` constraint_mode ` |
93-
94- ### 2.6 靶标指定
95-
96- | 方式 | 说明 |
97- | ------| ------|
98- | ** STRU 关键字** (推荐) | 原子行尾加 ` dp_target γ_val dp_constrain 0/1 ` |
99- | ** target.dat 文件** | INPUT 设 ` deltap_target_file target.dat ` |
100-
101- ---
102-
103- ## 三、规范固定模式 (` deltap_gauge_mode ` )
104-
105- Wannier 函数的相位在 k 空间存在规范自由度:每个 k 点、每个带的波函数可以独立乘一个相位因子 ` e^{iθ} ` ,不改变物理结果。但 Berry 联络的计算涉及相邻 k 点间波函数的内积,** 相位不连续会导致离散导数发散** 。
106-
107- ### 3.1 模式对比
108-
109- | 模式 | 行为 |
110- | ------| ------|
111- | ` "none" ` | 不固定规范。直接用原始 Kohn-Sham 波函数计算 Berry 联络。适合大部分场景(KS 波函数随 k 连续变化) |
112- | ` "smo_anchored" ` | 对 ** 第一条 k-string** 的每个带在每个 k 点选取投影最强的 SMO 轨道作为锚点,追踪其相位,强制波函数该分量的相位连续。详见 3.2 |
113-
114- ### 3.2 smo_anchored 算法
82+ ### 2.5 内层 BFGS 优化模式(` deltap_inner_nmax=3~5 ` ,推荐)
11583
11684```
117- 对每个带 n:
118- Phase 1 — k_0 确定锚点:
119- 在所有原子/轨道中,找 |D_I[iat][lm][n]| 最大的那个(即该带投影最强的 SMO)
120- 将波函数该分量的相位归一化到实数正方向
121-
122- Phase 2 — k_1..k_{N-1} 追踪:
123- 在后续 k 点,用同样的锚点 (iat, lm) 追踪相位
124- 若锚点投影衰减到 anchor_thr 以下 → 重新搜索最强锚点
125-
126- 该规范固定仅作用于第一条 k-string,用于确定 Berry 联络所有计算的相位参考。
85+ Phase 1: λ = 0, SCF 自然收敛
86+ ↓ drho < deltap_inner_thr
87+ 内层: BFGS 优化 λ(冻结密度,3-5 次对角化)
88+ ↓ 收敛,锁定
89+ 冻结层: λ 固定,SCF 继续收敛
12790```
12891
129- ### 3.3 适用范围
130-
131- - ` berry_connection ` 方法下有效(` wannier ` 方法有自己的相位处理逻辑)
132- - 大多数体系用 ` "none" ` 即可。仅当遇到相位跳变导致极化异常振荡时才需开启
133-
134- ---
92+ ** 与两阶段对比** :
13593
136- ## 四、Berry Connection vs Wannier (` deltap_method ` )
94+ | | 两阶段 (nmax=0) | 内层 BFGS (nmax=3) |
95+ | ---| ---------------| -------------------|
96+ | λ 优化算法 | 固定步长梯度下降 | BFGS 共轭梯度(对齐 DeltaSpin) |
97+ | 每试步成本 | 全 SCF(混密),~ 1 次 | 仅对角化(不混密),~ 0.1 次 SCF |
98+ | 约束矩阵支持 | ✅ | ✅ |
99+ | drho 门控 | ✅ | ✅ |
100+ | 收敛后锁定 | ✅ | ✅ |
137101
138- | | berry_connection | wannier |
139- | ---| -----------------| ---------|
140- | 路径 | 有限差分 Berry 联络矩阵元 | Wilson loop(S 乘积 + 对角化)|
141- | 额外 | — | + Resta-Z 电子中心位移 |
142- | 测试状态 | ✅ 全部验证通过 | 未充分测试 |
143- | 推荐 | ** 默认** | 用于交叉验证 |
102+ ** 推荐** :设 ` deltap_inner_nmax 3 ` 。BFGS 在 3 步内找到最优 λ,远快于两阶段模式的重收敛过程。
144103
145- 两种方法在原理上等价。 ` berry_connection ` 直接计算 ` ⟨u_nk|∂_k|u_mk⟩ ` , ` wannier ` 通过对角化 ` ∏_j S(k_j,k_{j+1}) ` 取本征值。推荐用 ` berry_connection ` 作为主方法, ` wannier ` 作为交叉验证。
104+ ### 2.6 约束模式
146105
147- ---
106+ | 参数 | 类型 | 默认 | 说明 |
107+ | ------| ------| ------| ------|
108+ | ` deltap_constraint_mode ` | string | per_atom | ` "per_atom" ` 每原子独立;` "total" ` 总和 Σγ |
109+ | ` deltap_constraint_matrix ` | string | "" | 约束矩阵文件。设置后覆盖 ` constraint_mode ` |
148110
149- ## 五、STRU 靶标关键字
111+ ### 2.7 靶标指定
150112
151- ### 5.1 格式
113+ | 方式 | 用法 |
114+ | ------| ------|
115+ | ** STRU 关键字** (推荐) | 原子行尾加 ` dp_target γ_val dp_constrain 0/1 ` |
116+ | ** target.dat 文件** | INPUT 设 ` deltap_target_file target.dat ` |
117+ | ** 约束矩阵文件** | ` deltap_constraint_matrix constraint.mat ` |
152118
153- 在 ` ATOMIC_POSITIONS ` 的原子坐标后添加:
119+ ---
154120
155- | 关键字 | 值类型 | 默认 | 说明 |
156- | --------| --------| ------| ------|
157- | ` dp_target ` | double | 0.0 | 该原子的目标 Berry 相位(rad) |
158- | ` dp_constrain ` | int | 1 | 0=不约束(λ 始终为 0),1=约束 |
121+ ## 三、STRU 靶标关键字
159122
160- ### 5.2 示例
123+ ### 3.1 格式
161124
162- ** 全部约束** :
163125```
164126B 0.0 1 0.00 0.00 0.00 dp_target 4.0 dp_constrain 1
165127N 0.0 1 0.25 0.25 0.25 dp_target 3.5 dp_constrain 1
166128```
167129
168- ** 部分约束** (H2O 中只约束 O 和 H1,H2 自由):
169- ```
170- O 0.0 1 6.744 7.500 8.086 dp_target -6.40 dp_constrain 1
171- H1 0.0 1 6.744 7.500 7.043 dp_target -3.17 dp_constrain 1
172- H2 0.0 1 8.256 7.500 8.086 dp_constrain 0
173- ```
174-
175- > ` dp_constrain=0 ` 的原子 λ 始终为 0,不参与 λ 更新,但其 γ 依然被计算和输出。
130+ | 关键字 | 值 | 默认 | 说明 |
131+ | --------| -----| ------| ------|
132+ | ` dp_target ` | double | 0.0 | 目标 Berry 相位(rad) |
133+ | ` dp_constrain ` | int | 1 | 0=自由(λ 始终 0),1=约束 |
176134
177- ### 5.3 优先规则
135+ ### 3.2 优先规则
178136
179- 1 . ` deltap_target_file ` 设了 → 从文件读(向后兼容)
180- 2 . 没设 ` deltap_target_file ` → 从 STRU 读
181- 3 . ` deltap_constraint_matrix ` 设了 → 覆盖上述两种方式的靶标
137+ ` deltap_target_file ` > STRU 关键字 > 默认 0.0
182138
183139---
184140
185- ## 六、约束矩阵 (` deltap_constraint_matrix ` )
186-
187- 约束矩阵将 DeltaP 从"每原子固定 γ_i"推广到"固定任意线性组合 Σ_j C_ij·γ_j = t_i"。
141+ ## 四、约束矩阵 (` deltap_constraint_matrix ` )
188142
189- ### 6 .1 文件格式 ( ` constraint.mat ` )
143+ ### 4 .1 文件格式
190144
191145```
192- m n ← m=约束数, n=原子数
193- C_11 C_12 ... C_1n t_1
194- C_21 C_22 ... C_2n t_2
146+ m n ← 约束数, 原子数
147+ C_11 ... C_1n t_1 ← 约束1
195148...
149+ C_m1 ... C_mn t_m
196150```
197151
198- ### 6 .2 示例:差分约束 γ_O − γ_H1 = −3.23(H2O)
152+ ### 4 .2 示例:差分约束
199153
200- ** 约束文件 ` constraint.mat ` ** :
201154```
202- 1 3
203- 1 -1 0 -3.23
155+ 1 3
156+ 1 -1 0 -3.23 ← γ_O - γ_H1 = -3.23
204157```
205158
206- ** 约束效果 ** :系统被强制满足 ` γ_O − γ_H1 = −3.23 ` 。第三个原子(H2)系数为 0,不受约束。λ 只有 1 个分量(与约束数对齐),其物理意义是 O↔H1 电荷转移的"广义力"。
159+ ### 4.3 速查表
207160
208- ** 实测结果** (H2O,5 个靶标值):
161+ | 约束 | 矩阵 | 物理含义 |
162+ | ------| ------| ---------|
163+ | γ_1 = t | ` 1 0 0 ... t ` | 单原子 |
164+ | Σγ = t | ` 1 1 1 ... t ` | 总极化 |
165+ | γ_1−γ_2 = t | ` 1 −1 0 ... t ` | 电荷转移 |
166+ | w·γ = t | ` w_1 w_2 ... t ` | 加权极化 |
209167
210- | target_diff | γ_O | γ_H1 | γ_O−γ_H1 | λ (μRy) | 偏差 |
211- | ------------| ------| ------| ----------| ---------| ------|
212- | −3.430 | −6.600 | −3.171 | ** −3.429** | +0.38 | 1.4e-4 |
213- | −3.330 | −6.495 | −3.165 | ** −3.330** | +0.57 | 5.7e-4 |
214- | −3.230 | −6.396 | −3.165 | ** −3.231** | −0.89 | 9.5e-4 |
215- | −3.130 | −6.299 | −3.171 | ** −3.128** | +2.14 | 1.8e-3 |
216- | −3.030 | −6.197 | −3.165 | ** −3.032** | −1.83 | 1.8e-3 |
168+ ---
217169
218- 约束被精确满足(偏差 < 2 mrad),λ 与靶标差线性相关。测量 dλ/d(Δγ) 得到原子间 ** 电荷转移刚度 ** 。
170+ ## 五、规范固定 ( ` deltap_gauge_mode ` )
219171
220- ### 6.3 约束矩阵的行为
172+ | 模式 | 行为 |
173+ | ------| ------|
174+ | ` "none" ` | 不固定。适合大部分场景 |
175+ | ` "smo_anchored" ` | 对第一条 k-string 的每带选最强投影的 SMO 锚定相位。仅 ` berry_connection ` 方法下有效 |
221176
222- 1 . ** 分支选择** :顺序贪心算法在每个原子上选 k-vector 使 C·γ 逼近 t
223- 2 . ** λ 更新** :在约束空间(m 维)做梯度下降,再转换回 per-atom 有效 λ
224- 3 . ** 哈密顿修正** :使用 per-atom 有效 λ(与旧代码兼容):
225- ```
226- λ_eff[iat] = Σ_α λ[α]·C[α][iat]
227- ```
228- 4 . ** 输出** :显示每原子 γ、约束空间 C·γ、约束空间 λ
177+ ---
229178
230- ### 6.4 常用约束一览
179+ ## 六、Berry Connection vs Wannier
231180
232- | 约束 | 行 | 物理含义 |
233- | ------| -----| ---------|
234- | γ_1 = t | ` 1 0 0 ... t ` | 单原子约束 |
235- | Σγ = t | ` 1 1 1 ... t ` | 总极化约束 |
236- | γ_1 − γ_2 = t | ` 1 −1 0 ... t ` | 原子间电荷转移 |
237- | w_1γ_1 + w_2γ_2 = t | ` w_1 w_2 0 ... t ` | 加权总极化 |
238- | γ_1=t, γ_2=t' | 两行 | 多原子独立约束 |
181+ | | berry_connection | wannier |
182+ | ---| -----------------| ---------|
183+ | 路径 | 有限差分 Berry 联络 | Wilson loop + Resta-Z |
184+ | 测试状态 | ✅ 全部验证 | 未充分测试 |
185+ | 推荐 | 默认 | 交叉验证 |
239186
240187---
241188
@@ -246,60 +193,68 @@ C_21 C_22 ... C_2n t_2
246193```
247194deltap_switch 1
248195deltap_corr 1
196+ deltap_inner_nmax 3 ← 内层 BFGS 优化
249197```
250198
251- STRU 中设 ` dp_target ` ,不同靶标各自运行 SCF,收集 (γ, E, λ) 。
199+ STRU 中设 ` dp_target ` ,不同靶标各自运行 SCF。
252200
253- ### 7.2 dF/dλ 测 BEC
201+ ### 7.2 固定 λ 测力 ( dF/dλ BEC)
254202
255203```
256204deltap_switch 1
257205deltap_corr 1
258- deltap_lambda_init 1e-5 ← 固定 λ
259- deltap_lambda_step 0.0 ← 不更新 λ
206+ deltap_lambda_init 1e-5
207+ deltap_lambda_step 0.0 ← λ 不更新
208+ deltap_inner_nmax 0 ← 不用内层
260209cal_force 1
261210```
262211
263- λ=0 和 λ=δλ 各运行一次,` dF/dλ → Z* ` 。
212+ λ=0 和 λ=δλ 各运行一次,Z * = (a/π) × dF/dλ 。
264213
265214### 7.3 差分约束(电荷转移刚度)
266215
267216```
268217deltap_constraint_matrix constraint.mat
269218```
270219
271- ` constraint.mat ` 中 ` C = [1, −1, 0] ` ,扫描不同 t 值 → dλ/d(Δγ)。
220+ ` constraint.mat ` 中 C = [ 1, −1, 0] ,扫描不同 t → dλ/d(Δγ)。
221+
222+ ### 7.4 诊断模式(不约束)
223+
224+ ```
225+ deltap_switch 1
226+ deltap_corr 0
227+ ```
272228
273229---
274230
275231## 八、输出说明
276232
277233```
278234[DeltaP P3] iter=50 γ=(3.999, 3.495) λ=(8.09e-07, -2.02e-06) |γ-t|=5.31e-03
235+ [E-field] E_eff=1.01e-5 V/Angstrom (λ_avg=-6.04e-07 Ry)
279236```
280- - ** P1/P2/P3** :Phase 阶段
281- - ** γ=(...)** :每原子 Berry 相位(rad)
282- - ** λ=(...)** :每原子 λ(Ry)
283- - ** |γ-t|** :最大靶标偏差(rad)
284237
285- 约束矩阵模式额外显示:
286- ```
287- C·γ=(7.494) λ=4.66e-07
288- ```
238+ - ** P1/P2/P3** :Phase 阶段(仅两阶段模式)
239+ - ** λ=(...)** :每原子约束力(Ry/rad)
240+ - ** E_eff** :等效电场。` E_eff = -λ_avg × π / a_alpha × 51.42 V/Å `
241+ - ** \| γ-t\| ** :最大靶标偏差(rad)
242+
243+ 约束矩阵模式额外显示 ` C·γ=(...) ` 和约束空间 λ。
289244
290245---
291246
292247## 九、与 DeltaSpin 对照
293248
294249| 功能 | DeltaP | DeltaSpin |
295250| ------| --------| -----------|
296- | 总开关 | ` deltap_switch ` | ` sc_mag_switch ` |
251+ | 主开关 | ` deltap_switch ` | ` sc_mag_switch ` |
297252| 约束开关 | ` deltap_corr ` | switch 即约束 |
298- | 靶标指定 | STRU ` dp_target ` 或文件 | STRU ` mag ` /` magmom ` |
299- | λ 步长 | 固定梯度 ` lambda_step ` | BFGS 自适应 ` alpha_trial ` |
300- | λ 混合 | ` lambda_mixing ` | 无 |
301- | 内层 | ` inner_nmax ` | ` nsc ` +` nsc_min ` |
253+ | 靶标 | STRU ` dp_target ` 或文件 | STRU ` mag ` /` magmom ` |
254+ | λ 优化 | BFGS (nmax>0) / 梯度 (nmax=0) | BFGS (nsc>0) |
302255| 约束组合 | ` constraint_matrix ` | 无 |
303256| 约束跳过 | ` dp_constrain 0 ` | ` sc 0 0 0 ` |
304- | 加速 | 无 | ` sc_acceleration_mode ` |
257+ | 能量修正 | ` dp_escon ` | ` escon ` |
258+ | 内层加速 | 冻结密度对角化 | 子空间/一阶 加速 |
305259| 扫描 | 无 | ` linear_scan ` |
260+ | E-field输出 | ✅ | 无 |
0 commit comments