dpa-phonon 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dpa_phonon-0.4.0/LICENSE +22 -0
- dpa_phonon-0.4.0/MANIFEST.in +8 -0
- dpa_phonon-0.4.0/PKG-INFO +468 -0
- dpa_phonon-0.4.0/README.md +440 -0
- dpa_phonon-0.4.0/THIRD_PARTY_NOTICES.md +9 -0
- dpa_phonon-0.4.0/docs/anh-config-reference.zh-CN.md +120 -0
- dpa_phonon-0.4.0/docs/config-reference.zh-CN.md +290 -0
- dpa_phonon-0.4.0/docs/qha-config-reference.zh-CN.md +280 -0
- dpa_phonon-0.4.0/examples/sio2/config.yaml +40 -0
- dpa_phonon-0.4.0/examples/sio2/inputs/POSCAR +14 -0
- dpa_phonon-0.4.0/examples/sio2/inputs/dispatcher/machine.json.example +12 -0
- dpa_phonon-0.4.0/examples/sio2/inputs/dispatcher/resources.json.example +8 -0
- dpa_phonon-0.4.0/examples/sio2/inputs/vasp/INCAR +12 -0
- dpa_phonon-0.4.0/examples/sio2/inputs/vasp/KPOINTS +6 -0
- dpa_phonon-0.4.0/examples/sio2/inputs/vasp/README.md +2 -0
- dpa_phonon-0.4.0/models/README.md +16 -0
- dpa_phonon-0.4.0/pyproject.toml +54 -0
- dpa_phonon-0.4.0/requirements-verified.txt +13 -0
- dpa_phonon-0.4.0/setup.cfg +4 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/SKILL.md +262 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/agents/openai.yaml +4 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/references/anharmonic-workflow.md +69 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/references/configuration.md +211 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/references/qha-workflow.md +201 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/references/results-and-recovery.md +286 -0
- dpa_phonon-0.4.0/skills/materials-science/phonon-kit/references/scientific-interpretation.md +219 -0
- dpa_phonon-0.4.0/src/dpa_phonon.egg-info/PKG-INFO +468 -0
- dpa_phonon-0.4.0/src/dpa_phonon.egg-info/SOURCES.txt +98 -0
- dpa_phonon-0.4.0/src/dpa_phonon.egg-info/dependency_links.txt +1 -0
- dpa_phonon-0.4.0/src/dpa_phonon.egg-info/entry_points.txt +2 -0
- dpa_phonon-0.4.0/src/dpa_phonon.egg-info/requires.txt +15 -0
- dpa_phonon-0.4.0/src/dpa_phonon.egg-info/top_level.txt +1 -0
- dpa_phonon-0.4.0/src/phonon_kit/__init__.py +3 -0
- dpa_phonon-0.4.0/src/phonon_kit/analysis.py +277 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_analysis.py +323 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_compare.py +106 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_config.py +262 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_deepmd.py +50 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_initializer.py +60 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_runner.py +164 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_snapshot.py +49 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_state.py +92 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_structure.py +154 -0
- dpa_phonon-0.4.0/src/phonon_kit/anh_worker.py +109 -0
- dpa_phonon-0.4.0/src/phonon_kit/cli.py +291 -0
- dpa_phonon-0.4.0/src/phonon_kit/compare.py +123 -0
- dpa_phonon-0.4.0/src/phonon_kit/config.py +417 -0
- dpa_phonon-0.4.0/src/phonon_kit/data/models/dpa4_0704.pt +0 -0
- dpa_phonon-0.4.0/src/phonon_kit/data/models/dpa4_0704.pt.sha256 +1 -0
- dpa_phonon-0.4.0/src/phonon_kit/deepmd_worker.py +271 -0
- dpa_phonon-0.4.0/src/phonon_kit/dispatcher.py +89 -0
- dpa_phonon-0.4.0/src/phonon_kit/errors.py +22 -0
- dpa_phonon-0.4.0/src/phonon_kit/initializer.py +139 -0
- dpa_phonon-0.4.0/src/phonon_kit/model_manager.py +97 -0
- dpa_phonon-0.4.0/src/phonon_kit/providers/__init__.py +6 -0
- dpa_phonon-0.4.0/src/phonon_kit/providers/base.py +16 -0
- dpa_phonon-0.4.0/src/phonon_kit/providers/deepmd.py +155 -0
- dpa_phonon-0.4.0/src/phonon_kit/providers/vasp.py +175 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_analysis.py +603 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_config.py +496 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_deepmd.py +57 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_dispatcher.py +101 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_initializer.py +173 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_runner.py +446 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_state.py +194 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_structure.py +171 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_validation.py +151 -0
- dpa_phonon-0.4.0/src/phonon_kit/qha_vasp.py +276 -0
- dpa_phonon-0.4.0/src/phonon_kit/runner.py +287 -0
- dpa_phonon-0.4.0/src/phonon_kit/snapshot.py +147 -0
- dpa_phonon-0.4.0/src/phonon_kit/state.py +160 -0
- dpa_phonon-0.4.0/src/phonon_kit/structure.py +194 -0
- dpa_phonon-0.4.0/src/phonon_kit/util.py +67 -0
- dpa_phonon-0.4.0/src/phonon_kit/validation.py +75 -0
- dpa_phonon-0.4.0/src/phonon_kit/vasp_input.py +45 -0
- dpa_phonon-0.4.0/tests/conftest.py +62 -0
- dpa_phonon-0.4.0/tests/test_analysis.py +32 -0
- dpa_phonon-0.4.0/tests/test_anh_analysis.py +186 -0
- dpa_phonon-0.4.0/tests/test_anh_config.py +132 -0
- dpa_phonon-0.4.0/tests/test_anh_runner.py +75 -0
- dpa_phonon-0.4.0/tests/test_compare.py +41 -0
- dpa_phonon-0.4.0/tests/test_config.py +78 -0
- dpa_phonon-0.4.0/tests/test_deepmd_real.py +24 -0
- dpa_phonon-0.4.0/tests/test_dispatcher.py +71 -0
- dpa_phonon-0.4.0/tests/test_hermes_skill.py +117 -0
- dpa_phonon-0.4.0/tests/test_init.py +14 -0
- dpa_phonon-0.4.0/tests/test_legacy_result.py +31 -0
- dpa_phonon-0.4.0/tests/test_model_manager.py +36 -0
- dpa_phonon-0.4.0/tests/test_qha_analysis.py +127 -0
- dpa_phonon-0.4.0/tests/test_qha_config.py +81 -0
- dpa_phonon-0.4.0/tests/test_qha_dispatcher.py +86 -0
- dpa_phonon-0.4.0/tests/test_qha_init_state.py +32 -0
- dpa_phonon-0.4.0/tests/test_qha_relax.py +44 -0
- dpa_phonon-0.4.0/tests/test_qha_structure.py +64 -0
- dpa_phonon-0.4.0/tests/test_qha_vasp.py +64 -0
- dpa_phonon-0.4.0/tests/test_resume.py +72 -0
- dpa_phonon-0.4.0/tests/test_snapshot.py +134 -0
- dpa_phonon-0.4.0/tests/test_state.py +36 -0
- dpa_phonon-0.4.0/tests/test_structure.py +39 -0
- dpa_phonon-0.4.0/tests/test_vasp.py +104 -0
dpa_phonon-0.4.0/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 phonon-kit contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
include README.md LICENSE THIRD_PARTY_NOTICES.md requirements-verified.txt
|
|
2
|
+
recursive-include models *.md
|
|
3
|
+
recursive-include src/phonon_kit/data/models *.pt *.sha256
|
|
4
|
+
recursive-include examples *
|
|
5
|
+
recursive-include docs *.md
|
|
6
|
+
recursive-include skills *.md *.yaml
|
|
7
|
+
recursive-include tests *.py
|
|
8
|
+
global-exclude *.pt2 *.pt2.sha256
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dpa-phonon
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Phonon and thermal-property workflows powered by DPA models, with VASP support
|
|
5
|
+
Author: phonon-kit contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/moliyes/phonon-kit
|
|
8
|
+
Project-URL: Issues, https://github.com/moliyes/phonon-kit/issues
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
License-File: THIRD_PARTY_NOTICES.md
|
|
13
|
+
Requires-Dist: ase>=3.26
|
|
14
|
+
Requires-Dist: dpdispatcher<2,>=1.0
|
|
15
|
+
Requires-Dist: h5py>=3.11
|
|
16
|
+
Requires-Dist: matplotlib>=3.8
|
|
17
|
+
Requires-Dist: numpy>=1.26
|
|
18
|
+
Requires-Dist: phonopy==4.4.0
|
|
19
|
+
Requires-Dist: phono3py==4.4.0
|
|
20
|
+
Requires-Dist: phonors==0.3.0
|
|
21
|
+
Requires-Dist: PyYAML>=6
|
|
22
|
+
Requires-Dist: seekpath>=2.1
|
|
23
|
+
Requires-Dist: spglib>=2.4
|
|
24
|
+
Provides-Extra: test
|
|
25
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
26
|
+
Requires-Dist: pytest-timeout>=2; extra == "test"
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# dpa-phonon
|
|
30
|
+
|
|
31
|
+
`dpa-phonon` 是一个以 DPA 系列模型为核心的有限位移声子、三阶非谐声子与准谐近似工作流。
|
|
32
|
+
它用 YAML 管理结构、DPA3/DPA4、VASP/DFT、声子谱、振动热力学、RTA 晶格热
|
|
33
|
+
导率、多相 QHA 和 P–T 相图,并把临时文件与最终结果严格分开。全局命令为 `ph`。
|
|
34
|
+
|
|
35
|
+
普通 `ph run` 处理一个结构的谐声子,`ph anh` 使用 DeepMD + Phono3py 处理三阶
|
|
36
|
+
声子,`ph qha` 处理相同组成的多个晶相。项目不实现 VASP-DFPT、变组成凸包、
|
|
37
|
+
四阶声子、熔化或模型训练。
|
|
38
|
+
|
|
39
|
+
## 1. 安装
|
|
40
|
+
|
|
41
|
+
要求 Python 3.11 或更新版本。发布到 PyPI 后可直接安装:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
python -m pip install dpa-phonon
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
发布前或需要固定 Git 版本时,可从公开仓库安装:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
python -m pip install "dpa-phonon @ git+https://github.com/moliyes/phonon-kit.git@dpa-phonon-v0.4.0"
|
|
51
|
+
ph --version
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
GitHub 安装方式需要 Git。`pip` 会在当前 Python 环境中生成 `ph`
|
|
55
|
+
命令,无需安装脚本、sudo 或手工创建全局启动器。使用前激活对应环境;也可用
|
|
56
|
+
`python -m phonon_kit.cli --version` 确认正在调用该环境中的版本。
|
|
57
|
+
|
|
58
|
+
发布包名为 `dpa-phonon`;GitHub 仓库、Python 导入名 `phonon_kit` 和现有数据路径
|
|
59
|
+
保持不变。如果当前环境安装过旧包 `phonon-kit`,请先运行
|
|
60
|
+
`python -m pip uninstall phonon-kit`,再安装新包,避免两者共用文件。
|
|
61
|
+
|
|
62
|
+
本地开发安装:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git clone https://github.com/moliyes/phonon-kit.git
|
|
66
|
+
cd phonon-kit
|
|
67
|
+
python -m pip install -e ".[test]"
|
|
68
|
+
python -m pytest -m "not gpu and not integration"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
需要 DeepMD 推理时,请在已经配置好兼容 DeepMD、Torch 和所需计算设备的环境中
|
|
72
|
+
安装本工具。它们不作为本包的自动安装依赖;VASP 及其授权和 POTCAR 也需自行准备。
|
|
73
|
+
Phonopy、Phono3py、ASE、SeeK-path、spglib、Matplotlib 和 DPDispatcher
|
|
74
|
+
会作为 Python 依赖安装。安装成功不代表 GPU 推理或远程 VASP 环境已就绪。
|
|
75
|
+
`requirements-verified.txt` 记录了本机完整验收时使用的依赖版本;它不负责安装
|
|
76
|
+
DeepMD/Torch。
|
|
77
|
+
|
|
78
|
+
包内只携带可重新冻结的 DPA4 checkpoint `dpa4_0704.pt`,不再分发机器相关的
|
|
79
|
+
`.pt2`。安装后建议在实际计算使用的 DeepMD 环境中运行:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
ph model freeze
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
它会把本机冻结结果写入 `~/.cache/phonon-kit/models/dpa4_0704.pt2`。
|
|
86
|
+
`builtin:dpa4` 会优先使用这个 `.pt2`;若尚未冻结,则自动回退到包内 `.pt`。
|
|
87
|
+
迁移到另一台机器后应重新执行冻结与 `ph validate`。
|
|
88
|
+
|
|
89
|
+
## 2. 最快用法
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
ph init sio2_case
|
|
93
|
+
cd sio2_case
|
|
94
|
+
ph validate config.yaml
|
|
95
|
+
ph run config.yaml
|
|
96
|
+
ph status config.yaml
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`ph init` 会提供一个 SiO₂ 示例结构和使用内置 DPA4 的配置。默认不启用 VASP,
|
|
100
|
+
所以只要 GPU/DeepMD 可用即可运行。
|
|
101
|
+
|
|
102
|
+
三阶声子先预估任务量,再启动:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
ph anh init sio2_anh
|
|
106
|
+
cd sio2_anh
|
|
107
|
+
ph anh plan anh.yaml
|
|
108
|
+
ph anh run anh.yaml
|
|
109
|
+
ph anh status anh.yaml
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
系统三阶位移数可能达到数千,务必先执行 `plan`。
|
|
113
|
+
|
|
114
|
+
运行产生:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
runs/sio2-001/
|
|
118
|
+
├── inputs/ # 本次运行的结构、模型、VASP 和调度配置快照
|
|
119
|
+
├── config.resolved.yaml
|
|
120
|
+
├── state.json
|
|
121
|
+
├── work/
|
|
122
|
+
│ ├── canonical/
|
|
123
|
+
│ ├── displacements/
|
|
124
|
+
│ ├── relaxation/
|
|
125
|
+
│ └── methods/
|
|
126
|
+
├── results/
|
|
127
|
+
│ ├── dpa4/
|
|
128
|
+
│ ├── dft/
|
|
129
|
+
│ └── comparison/
|
|
130
|
+
└── logs/
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
只需要长期保存 `config.yaml`、`inputs/` 和所需的 `runs/*/results/`;完整复现或
|
|
134
|
+
续跑时应保留整个 run 目录。
|
|
135
|
+
|
|
136
|
+
## 3. YAML 说明
|
|
137
|
+
|
|
138
|
+
路径均相对 `config.yaml` 解析。每份 YAML 对应一个结构,但可以同时定义多个
|
|
139
|
+
DPA 模型和一个 VASP 参考。
|
|
140
|
+
|
|
141
|
+
当前配置格式全部字段、默认值、单位和组合限制见
|
|
142
|
+
[config.yaml 参数说明](docs/config-reference.zh-CN.md)。
|
|
143
|
+
|
|
144
|
+
### 声子参数
|
|
145
|
+
|
|
146
|
+
```yaml
|
|
147
|
+
phonon:
|
|
148
|
+
supercell: [2, 2, 2] # 有限位移超胞
|
|
149
|
+
displacement_angstrom: 0.01 # 位移幅度,Å
|
|
150
|
+
displacement_plusminus: auto # 可设 true,强制生成正负位移
|
|
151
|
+
displacement_diagonal: true # false 时只使用 x/y/z 轴向位移
|
|
152
|
+
primitive: auto
|
|
153
|
+
symmetry_tolerance: 1.0e-5
|
|
154
|
+
band:
|
|
155
|
+
path: auto # SeeK-path 自动路径
|
|
156
|
+
points_per_segment: 101
|
|
157
|
+
mesh: [30, 30, 30] # DOS 与热力学 q 网格
|
|
158
|
+
thermal:
|
|
159
|
+
temperature_min_k: 0
|
|
160
|
+
temperature_max_k: 1000
|
|
161
|
+
temperature_step_k: 10
|
|
162
|
+
imaginary_policy: exclude
|
|
163
|
+
significant_imaginary_thz: -0.1
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
所有方法复用同一个 `phonopy_disp.yaml` 和同一条 q 路径。更改超胞、位移、结构、
|
|
167
|
+
模型或模板后,配置指纹随之变化,不会把旧力数组混进新任务。
|
|
168
|
+
|
|
169
|
+
复现已有基准时可将 `primitive` 设为 `P` 来保留输入晶胞,并把 `band.path`
|
|
170
|
+
写成显式约化 q 点列表;这可避免自动约胞或自动选路改变比较口径。
|
|
171
|
+
|
|
172
|
+
### DPA3/DPA4
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
methods:
|
|
176
|
+
dpa4:
|
|
177
|
+
type: deepmd
|
|
178
|
+
model: builtin:dpa4
|
|
179
|
+
device: cuda:0
|
|
180
|
+
|
|
181
|
+
dpa3:
|
|
182
|
+
type: deepmd
|
|
183
|
+
model: inputs/models/my_dpa3.pth
|
|
184
|
+
device: cuda:0
|
|
185
|
+
head: null
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
支持 DeepMD 可加载的 `.pt2`、`.pt`、`.pth`、`.pb`。`ph validate` 会实际计算
|
|
189
|
+
输入结构的一次能量、力和应力,并检查模型 type map 是否覆盖全部元素。模型能
|
|
190
|
+
否运行由真实推理决定,不依赖文件名判断 DPA3/DPA4。
|
|
191
|
+
|
|
192
|
+
每个位移保存在独立 `checkpoints/disp-xxxx.npz`。中断后再次运行:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
ph resume config.yaml
|
|
196
|
+
ph resume runs/sio2-001 # 案例输入修改后,精确恢复指定运行
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
只会补算缺失或损坏的位移。
|
|
200
|
+
|
|
201
|
+
### 可选 DPA 弛豫
|
|
202
|
+
|
|
203
|
+
```yaml
|
|
204
|
+
relaxation:
|
|
205
|
+
enabled: true
|
|
206
|
+
method: dpa4
|
|
207
|
+
variable_cell: true
|
|
208
|
+
pressure_gpa: 0.0
|
|
209
|
+
fmax_ev_angstrom: 0.01
|
|
210
|
+
max_steps: 1000
|
|
211
|
+
trajectory_interval: 10
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
使用 `FrechetCellFilter + LBFGS`。弛豫模型必须是 `methods` 中启用的 DeepMD
|
|
215
|
+
方法。初始帧、每 10 步及最终帧写入 `relax.traj`;未收敛时不生成声子位移。
|
|
216
|
+
所有 DPA/DFT 方法共享同一个弛豫末态,便于严格比较。
|
|
217
|
+
|
|
218
|
+
## 4. VASP 与 DPDispatcher
|
|
219
|
+
|
|
220
|
+
把 `INCAR`、`KPOINTS`、`POTCAR` 放在一个模板目录。软件不会生成或分发
|
|
221
|
+
POTCAR。推荐的 INCAR 至少包含:
|
|
222
|
+
|
|
223
|
+
```text
|
|
224
|
+
PREC = Accurate
|
|
225
|
+
IBRION = -1
|
|
226
|
+
NSW = 0
|
|
227
|
+
EDIFF = 1E-8
|
|
228
|
+
LREAL = .FALSE.
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
在 YAML 增加:
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
dft:
|
|
235
|
+
type: vasp
|
|
236
|
+
template_dir: inputs/vasp
|
|
237
|
+
executor:
|
|
238
|
+
type: dpdispatcher
|
|
239
|
+
machine: inputs/dispatcher/machine.json
|
|
240
|
+
resources: inputs/dispatcher/resources.json
|
|
241
|
+
command: "source /opt/intel/oneapi/setvars.sh && mpirun -n 16 vasp_std"
|
|
242
|
+
clean_remote_after_success: false
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
可从 `ph init` 生成的 `.example` 文件复制并填写 DPDispatcher 配置。凭据文件、
|
|
246
|
+
POTCAR 和 runs 默认被 `.gitignore` 排除。
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
ph run config.yaml # DPA 算完;VASP 提交后立即返回
|
|
250
|
+
ph status config.yaml
|
|
251
|
+
ph resume config.yaml # 当前案例输入未改变时,查找匹配运行
|
|
252
|
+
ph resume runs/sio2-001 # 推荐:精确恢复指定运行
|
|
253
|
+
ph resume runs/sio2-001/config.resolved.yaml
|
|
254
|
+
ph resume runs/sio2-001 --wait
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
每个 VASP 位移目录都保存 `atom-map.json`。程序用 Phonopy 官方 VASP parser 从
|
|
258
|
+
`vasprun.xml` 读取力,再显式恢复成规范 Phonopy 原子顺序。缺失或截断的 XML
|
|
259
|
+
不会被当成成功结果。若你用其他方式提交,只需把 `vasprun.xml` 放回对应
|
|
260
|
+
`work/methods/dft/jobs/disp-xxxx/`,然后运行 `ph collect config.yaml`。
|
|
261
|
+
|
|
262
|
+
## 5. 输出与物理含义
|
|
263
|
+
|
|
264
|
+
每个完成的方法自动生成:
|
|
265
|
+
|
|
266
|
+
- `forces.npy`、可用时的 `energies.npy`
|
|
267
|
+
- `FORCE_SETS`、`force_constants.hdf5`、`phonopy_params.yaml`
|
|
268
|
+
- `band.yaml`、`total_dos.dat`、`thermal_properties.yaml/csv`
|
|
269
|
+
- `phonon_band.png`、`phonon_band_dos.png`、`thermal_properties.png`
|
|
270
|
+
- `summary.json`
|
|
271
|
+
|
|
272
|
+
`thermal_properties.csv` 同时给出 Phonopy 摩尔单位和 eV/atom。自由能是谐振动
|
|
273
|
+
自由能,包含零点能,不包含结构静态能、电子自由能或 `PV` 项。
|
|
274
|
+
|
|
275
|
+
负频率按 Phonopy `cutoff_frequency=0` 排除。若存在低于
|
|
276
|
+
`significant_imaginary_thz` 的模式,图和 summary 会标记
|
|
277
|
+
`thermodynamic_stability: false`;此时自由能只适合作诊断,不能作为严格相稳定
|
|
278
|
+
结论。
|
|
279
|
+
|
|
280
|
+
当 DFT 和至少一个 DPA 都完成时,`results/comparison/` 自动生成:
|
|
281
|
+
|
|
282
|
+
- `metrics.csv`:力 MAE/RMSE、频率 MAE/RMSE、最低频率
|
|
283
|
+
- `phonon_band_compare.png`
|
|
284
|
+
- `force_comparison.png`
|
|
285
|
+
- `frequency_error.png`
|
|
286
|
+
|
|
287
|
+
## 6. 运行版本与恢复
|
|
288
|
+
|
|
289
|
+
- 第一次运行创建 `name-001`。
|
|
290
|
+
- 配置相同且任务未完成:`ph run` 自动恢复。
|
|
291
|
+
- 配置相同且任务已完成:返回原结果,不重复计算。
|
|
292
|
+
- 已完成后修改配置:自动创建 `name-002`。
|
|
293
|
+
- 未完成时修改配置:拒绝混用;用具体运行目录恢复,或加 `--new` 新建版本。
|
|
294
|
+
|
|
295
|
+
从 0.2.1 开始,每个新运行会把实际使用的结构、模型、VASP 模板和
|
|
296
|
+
DPDispatcher 配置复制到运行内 `inputs/`,`config.resolved.yaml` 只引用这份
|
|
297
|
+
快照。之后修改案例级 `config.yaml` 或 `inputs/` 不会改变已有运行。恢复任务时
|
|
298
|
+
优先传具体运行目录;`collect` 和 `plot` 也接受运行目录。调度快照可能包含凭据,
|
|
299
|
+
请勿上传 `runs/`。
|
|
300
|
+
|
|
301
|
+
状态文件采用原子写入。失败详情保存在 `state.json` 和 `logs/`,软件不会制造
|
|
302
|
+
假的声子结果来掩盖失败。
|
|
303
|
+
|
|
304
|
+
独立执行 `ph validate` 的推理日志保存在案例目录的
|
|
305
|
+
`.phonon-kit/validation/logs/`,该目录默认被 Git 忽略。
|
|
306
|
+
|
|
307
|
+
## 7. 多相 QHA 与 P–T 相图
|
|
308
|
+
|
|
309
|
+
QHA 使用独立配置,不会改变前述单结构声子流程。快速创建三个 SiO₂ 晶相案例:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
ph qha init sio2_qha --phases quartz coesite stishovite
|
|
313
|
+
cd sio2_qha
|
|
314
|
+
# 替换 inputs/phases/*/POSCAR
|
|
315
|
+
ph qha plan qha.yaml
|
|
316
|
+
ph qha validate qha.yaml
|
|
317
|
+
ph qha run qha.yaml
|
|
318
|
+
ph qha status qha.yaml
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
核心流程是每个方法、每个相分别执行多个固定体积点:
|
|
322
|
+
|
|
323
|
+
```text
|
|
324
|
+
固定体积优化原子和晶胞形状
|
|
325
|
+
→ 静态 U(V)
|
|
326
|
+
→ 每个体积的有限位移声子
|
|
327
|
+
→ Fvib(V,T)
|
|
328
|
+
→ G(P,T)
|
|
329
|
+
→ 多相最低 Gibbs 能比较
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
DPA 使用 `FrechetCellFilter(constant_volume=True)`;VASP 使用三套模板:
|
|
333
|
+
`volume_relax` 必须为 `ISIF=4`,`static` 和 `phonon` 必须为静态计算。程序不会
|
|
334
|
+
自动修改 INCAR,也不会生成 POTCAR。
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
ph qha run qha.yaml --only dpa4
|
|
338
|
+
ph qha run qha.yaml --only dft --new
|
|
339
|
+
ph qha resume qha.yaml
|
|
340
|
+
ph qha resume qha.yaml --wait
|
|
341
|
+
ph qha resume runs/sio2_qha-001
|
|
342
|
+
ph qha plot qha.yaml
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
不同晶相的 primitive cell 可能含不同数量的原子。程序先按 primitive cell 完成
|
|
346
|
+
Phonopy-QHA,再统一换算成 `eV/最简化学式单元` 比较。体积范围不足的 P–T 网格
|
|
347
|
+
点不会外推成稳定相,而是在图中显示灰色无数据区域。
|
|
348
|
+
|
|
349
|
+
若出现显著虚频,负频模式仍按 `cutoff_frequency=0` 排除并继续分析,但终端、
|
|
350
|
+
CSV、JSON 和图片都会标记 `thermodynamic_stability=false`。这类相图只能视为诊断
|
|
351
|
+
结果。
|
|
352
|
+
|
|
353
|
+
完整字段、VASP 模板、目录结构和结果含义见
|
|
354
|
+
[QHA 配置与使用说明](docs/qha-config-reference.zh-CN.md)。
|
|
355
|
+
|
|
356
|
+
## 8. 三阶非谐声子与 RTA 热导率
|
|
357
|
+
|
|
358
|
+
三阶工作流不弛豫结构,输入应已经可靠弛豫。所有模型共享相同结构、系统位移和
|
|
359
|
+
q 网格,因此适合比较预训练与微调模型带来的变化:
|
|
360
|
+
|
|
361
|
+
```text
|
|
362
|
+
POSCAR → 系统有限位移 → DeepMD 力 → fc2/fc3
|
|
363
|
+
→ 三声子散射 gamma → lifetime → RTA kappa(T)
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
默认 fc2 和 fc3 使用同一超胞及位移幅度;若二阶相互作用需要更长范围,可以设置
|
|
367
|
+
独立的 `fc2_supercell`。此时还可用 `fc2_displacement_angstrom` 单独指定 fc2
|
|
368
|
+
位移幅度,并用 `fc2_is_diagonal` 控制是否允许非轴向 fc2 位移;不设置则沿用 fc3
|
|
369
|
+
的 `displacement_angstrom`。`subtract_residual_forces`
|
|
370
|
+
默认关闭,与普通声子流程的原始力口径一致。极性体系可通过
|
|
371
|
+
`structure.born_file` 提供 Phonopy BORN 文件启用 NAC。
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
ph anh run anh.yaml # 相同未完成配置会自动续算
|
|
375
|
+
ph anh run runs/sio2_anh-001 # 案例输入改变后精确恢复
|
|
376
|
+
ph anh plot runs/sio2_anh-001
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
每个位移力和每个不可约 q 点的散射率都有 checkpoint。主要结果位于
|
|
380
|
+
`results/<method>/`:`fc2.hdf5`、`fc3.hdf5`、`kappa.hdf5`、热导率/寿命 CSV、
|
|
381
|
+
三张 PNG 和 `summary.json`。`gamma` 是半线宽,`linewidth=2*gamma`,寿命为
|
|
382
|
+
`1/(4*pi*gamma)` ps;非正 gamma 对应 `NaN` 寿命。
|
|
383
|
+
|
|
384
|
+
明显虚频默认不会阻断计算,但图表和摘要会标记为诊断结果。三阶首版只计算纯
|
|
385
|
+
三声子本征 RTA 热导率,不含同位素、边界、电子或四声子散射。超胞、位移幅度和
|
|
386
|
+
q 网格都必须做收敛检查。完整字段见
|
|
387
|
+
[三阶配置说明](docs/anh-config-reference.zh-CN.md)。
|
|
388
|
+
|
|
389
|
+
## 9. 常见问题
|
|
390
|
+
|
|
391
|
+
`ph validate` 提示 `.pt2` 无法加载:冻结模型依赖生成它的 GPU、Torch/DeepMD
|
|
392
|
+
构建和 CUDA。删除或移走 `~/.cache/phonon-kit/models/dpa4_0704.pt2`,确认命令
|
|
393
|
+
使用正确的 DeepMD Python,然后执行 `ph model freeze --force`。如果没有本机
|
|
394
|
+
`.pt2`,`builtin:dpa4` 会回退到包内 `.pt`。
|
|
395
|
+
|
|
396
|
+
VASP 一直显示 waiting:检查每个 `disp-xxxx/vasprun.xml` 是否完整,而不仅是
|
|
397
|
+
OUTCAR 是否存在,然后执行 `ph resume` 或 `ph collect`。
|
|
398
|
+
|
|
399
|
+
自动高对称路径失败:通常是输入结构晶胞或对称性异常。先确保结构已弛豫、晶胞
|
|
400
|
+
非奇异,并适当调整 `symmetry_tolerance`。
|
|
401
|
+
|
|
402
|
+
自由能有警告:查看 `summary.json` 的最低频率、显著虚频比例和积分模式比例。
|
|
403
|
+
|
|
404
|
+
QHA 相图出现灰色区域:至少一个相在对应 P–T 点的拟合平衡体积超出采样体积
|
|
405
|
+
范围,或 EOS 无效。查看每相的 `volume_points.csv` 和 `qha_grid.csv`,扩大压缩侧
|
|
406
|
+
或膨胀侧体积范围后使用 `--new` 重新计算。
|
|
407
|
+
|
|
408
|
+
三阶热导率异常大或不平滑:先检查显著虚频、输入是否充分弛豫、`fc2/fc3`
|
|
409
|
+
超胞和 q 网格是否收敛;有限模型比较不能替代这些收敛性检查。
|
|
410
|
+
|
|
411
|
+
## 10. Hermes Agent Skill
|
|
412
|
+
|
|
413
|
+
项目在 `skills/materials-science/phonon-kit/` 内提供可版本化的 Hermes Skill,
|
|
414
|
+
用于配置、运行和诊断普通声子、三阶声子与多相 QHA 工作流。推荐从项目目录直接加载,避免
|
|
415
|
+
把 Skill 复制到用户目录后产生两份不同版本。
|
|
416
|
+
|
|
417
|
+
在 Hermes `config.yaml` 中保留已有配置并加入:
|
|
418
|
+
|
|
419
|
+
```yaml
|
|
420
|
+
skills:
|
|
421
|
+
external_dirs:
|
|
422
|
+
- /path/to/phonon-kit/skills
|
|
423
|
+
config:
|
|
424
|
+
phonon_kit:
|
|
425
|
+
project_root: /path/to/phonon-kit
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
如果 `external_dirs` 或 `skills.config` 已存在,应在原列表和映射中追加,而不是
|
|
429
|
+
覆盖。新机器只需把两个路径换成实际项目目录,然后新建 Hermes 会话或执行
|
|
430
|
+
`/reload-skills`。可用下面的命令确认发现情况:
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
hermes skills list
|
|
434
|
+
hermes config get skills --json
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
显式调用示例:`/phonon-kit 检查这个 QHA 运行的体积覆盖和虚频警告`。自然语言
|
|
438
|
+
提及 Phonopy/Phono3py、DeepMD/VASP 声子、热导率、寿命、QHA 或 P–T 相图时也可自动触发。
|
|
439
|
+
Skill 不会因状态检查而擅自执行 `run`、`resume`、DFT 提交或模型推理。
|
|
440
|
+
|
|
441
|
+
## 11. 构建与发布
|
|
442
|
+
|
|
443
|
+
在独立的 Python 3.11+ 环境中构建标准 wheel 和源码包:
|
|
444
|
+
|
|
445
|
+
```bash
|
|
446
|
+
python -m pip install build twine
|
|
447
|
+
python -m build --outdir dist-release
|
|
448
|
+
python -m twine check dist-release/dpa_phonon-0.4.0*
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
发布前,在干净环境中安装 wheel,检查依赖与命令,再测试源码包安装:
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
python -m pip install dist-release/dpa_phonon-0.4.0-py3-none-any.whl
|
|
455
|
+
python -m pip check
|
|
456
|
+
ph --version
|
|
457
|
+
ph --help
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
PyPI 发布需要维护者自己的账号和发布授权。完成安装与模型验证后,在本机终端
|
|
461
|
+
使用 Twine 上传本次版本的两个文件(API Token 仅在终端认证提示中输入):
|
|
462
|
+
|
|
463
|
+
```bash
|
|
464
|
+
python -m twine upload dist-release/dpa_phonon-0.4.0-py3-none-any.whl dist-release/dpa_phonon-0.4.0.tar.gz
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
上传成功后,用户才可使用 `python -m pip install dpa-phonon==0.4.0`。
|
|
468
|
+
后续发布需更新版本号,并使用对应版本的文件名和 Git 标签。
|