1. 引言
aiida-kkr 是一个基于 AiiDA 工作流框架开发的 Python 包,用于自动化管理和运行 KKR(Korringa-Kohn-Rostoker)多重散射方法的电子结构计算。它把复杂的 KKR 计算流程封装成可复现、可追踪的工作流,让科研人员能够以声明式的方式提交、监控和归档第一性原理计算任务。
本文将从功能特性、安装配置、核心语法与参数、9 个实际应用案例以及常见错误与使用注意事项五个方面,系统介绍 aiida-kkr 包的使用方法。
2. 功能概述
aiida-kkr 包的核心价值在于把 KKR 计算从「手工脚本 + 文件管理」升级为「工作流 + 数据溯源」的科研范式。其主要功能包括:
- 计算任务封装:将 KKR 的输入文件生成、任务提交、结果解析封装为 AiiDA 的 CalcJob 和 WorkChain。
- 数据自动归档:每次计算的结构、参数、输出结果自动存入 AiiDA 数据库,形成可追溯的数据图谱。
- 工作流编排:支持自洽计算、能带计算、态密度计算等多步骤串联,自动传递中间结果。
- 参数校验:内置输入参数检查机制,在提交前发现明显错误,减少无效计算。
- 结果可视化辅助:提供解析工具,将 KKR 输出转换为便于绘图的 Python 数据结构。
3. 安装与环境配置
3.1 环境准备
aiida-kkr 依赖 Python 3.8 及以上版本,建议使用 conda 或 venv 创建独立环境,避免与系统 Python 冲突。
conda create -n aiida-kkr python=3.9 conda activate aiida-kkr3.2 安装 aiida-core
aiida-kkr 基于 AiiDA 框架运行,因此需要先安装 aiida-core 并完成初始化。
pip install aiida-core reentry scan verdi quicksetupverdi quicksetup 会引导创建 AiiDA 配置文件、数据库和存储目录。安装完成后可用 verdi status 检查服务状态。
3.3 安装 aiida-kkr
pip install aiida-kkr安装完成后,需要注册插件并重启 AiiDA 守护进程:
reentry scan verdi daemon restart3.4 配置 KKR 可执行文件
aiida-kkr 本身不包含 KKR 计算内核,需要单独安装配套的 KKR 程序(如 JuKKR 代码套件),并在 AiiDA 中注册为计算插件:
verdi code create core.code.installed --label kkr --computer localhost --filepath-executable /path/to/kkr4. 核心语法与参数
4.1 基本工作流提交
使用 aiida-kkr 提交一个自洽计算任务,核心代码如下:
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run 加载 KKR 计算代码 code = load_code('kkr@localhost') 构造晶体结构(以体心立方铁为例) structure = StructureData(cell=[[2.87, 0, 0], [0, 2.87, 0], [0, 0, 2.87]]) structure.append_atom(position=(0, 0, 0), symbols='Fe') structure.append_atom(position=(1.435, 1.435, 1.435), symbols='Fe') 构造输入参数 params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 12], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, }) 提交自洽计算工作流 kkr_wc = WorkflowFactory('kkr.scf') result = run(kkr_wc, code=code, structure=structure, parameters=params) print(result)4.2 常用参数说明
| 参数名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| xc_functional | str | 交换关联泛函类型 | LDA、PBE |
| nkpts | list | K 点网格密度 | [12, 12, 12] |
| rmt | float | Muffin-tin 球半径 | 1.2 |
| emax | float | 能量积分上限 | 1.5 |
| nsteps | int | 自洽迭代最大步数 | 100 |
| lmax | int | 角动量截断 | 3 |
| temperature | float | 电子温度(费米分布展宽) | 300 |
4.3 能带与态密度计算
aiida-kkr 支持在自洽计算基础上串联能带和态密度计算:
from aiida.plugins import WorkflowFactory 能带计算工作流 bands_wc = WorkflowFactory('kkr.bands') result = run(bands_wc, code=code, structure=structure, parameters=params) 态密度计算工作流 dos_wc = WorkflowFactory('kkr.dos') result = run(dos_wc, code=code, structure=structure, parameters=params)5. 9 个实际应用案例
案例 1:体心立方铁的基态自洽计算
这是最基础的入门案例,计算 bcc Fe 的基态电子结构,验证安装配置是否正确。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') structure = StructureData(cell=[[2.87, 0, 0], [0, 2.87, 0], [0, 0, 2.87]]) structure.append_atom(position=(0, 0, 0), symbols='Fe') structure.append_atom(position=(1.435, 1.435, 1.435), symbols='Fe') params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 12], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, }) result = run(WorkflowFactory('kkr.scf'), code=code, structure=structure, parameters=params) print('总能量:', result['total_energy'])案例 2:面心立方铜的收敛性测试
通过扫描 K 点密度和能量截断参数,确定 fcc Cu 计算的收敛条件。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') structure = StructureData(cell=[[3.61, 0, 0], [0, 3.61, 0], [0, 0, 3.61]]) structure.append_atom(position=(0, 0, 0), symbols='Cu') for nk in [8, 12, 16]: params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [nk, nk, nk], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, }) result = run(WorkflowFactory('kkr.scf'), code=code, structure=structure, parameters=params) print(f'nkpts={nk}, 总能量={result["total_energy"]}')案例 3:镍的能带结构计算
在自洽计算基础上,沿高对称路径计算 fcc Ni 的能带结构。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') structure = StructureData(cell=[[3.52, 0, 0], [0, 3.52, 0], [0, 0, 3.52]]) structure.append_atom(position=(0, 0, 0), symbols='Ni') params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 12], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, }) result = run(WorkflowFactory('kkr.bands'), code=code, structure=structure, parameters=params) print('能带数据节点:', result['bands'])案例 4:钴的态密度分析
计算 hcp Co 的态密度,分析 d 电子对磁性的贡献。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') structure = StructureData(cell=[[2.51, 0, 0], [-1.255, 2.174, 0], [0, 0, 4.07]]) structure.append_atom(position=(0, 0, 0), symbols='Co') structure.append_atom(position=(1.255, 0.725, 2.035), symbols='Co') params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 8], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, }) result = run(WorkflowFactory('kkr.dos'), code=code, structure=structure, parameters=params) print('态密度数据节点:', result['dos'])案例 5:二元合金 FeCo 的混合势计算
使用相干势近似(CPA)计算 FeCo 无序合金的电子结构。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') structure = StructureData(cell=[[2.87, 0, 0], [0, 2.87, 0], [0, 0, 2.87]]) structure.append_atom(position=(0, 0, 0), symbols='Fe') structure.append_atom(position=(1.435, 1.435, 1.435), symbols='Co') params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 12], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, 'use_cpa': True, 'cpa_concentration': {'Fe': 0.5, 'Co': 0.5}, }) result = run(WorkflowFactory('kkr.scf'), code=code, structure=structure, parameters=params) print('合金总能量:', result['total_energy'])案例 6:铁磁性 Fe 的磁矩计算
通过设置初始自旋极化,计算 bcc Fe 的磁矩。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') structure = StructureData(cell=[[2.87, 0, 0], [0, 2.87, 0], [0, 0, 2.87]]) structure.append_atom(position=(0, 0, 0), symbols='Fe') structure.append_atom(position=(1.435, 1.435, 1.435), symbols='Fe') params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 12], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, 'spin_polarized': True, 'initial_moment': {'Fe': 2.2}, }) result = run(WorkflowFactory('kkr.scf'), code=code, structure=structure, parameters=params) print('磁矩:', result['magnetic_moment'])案例 7:表面体系 Fe(001) 的薄膜计算
构建 Fe(001) 表面模型,计算表面态和功函数。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') 构建 5 层 Fe(001) 薄膜 structure = StructureData(cell=[[2.87, 0, 0], [0, 2.87, 0], [0, 0, 14.35]]) for i in range(5): structure.append_atom(position=(0, 0, i * 2.87), symbols='Fe') structure.append_atom(position=(1.435, 1.435, i * 2.87 + 1.435), symbols='Fe') params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [12, 12, 1], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, 'vacuum': 5.0, }) result = run(WorkflowFactory('kkr.scf'), code=code, structure=structure, parameters=params) print('表面体系总能量:', result['total_energy'])案例 8:杂质体系 Fe 中掺杂 Cr 的电子结构
在 bcc Fe 超胞中替换一个原子为 Cr,研究杂质对电子结构的影响。
from aiida.orm import load_code, Dict, StructureData from aiida.plugins import WorkflowFactory from aiida.engine import run code = load_code('kkr@localhost') 2x2x2 超胞,共 16 个原子 structure = StructureData(cell=[[5.74, 0, 0], [0, 5.74, 0], [0, 0, 5.74]]) for i in range(2): for j in range(2): for k in range(2): structure.append_atom(position=(i * 2.87, j * 2.87, k * 2.87), symbols='Fe') structure.append_atom(position=(i * 2.87 + 1.435, j * 2.87 + 1.435, k * 2.87 + 1.435), symbols='Fe') 将第一个原子替换为 Cr structure.sites[0].kind_name = 'Cr' params = Dict(dict={ 'xc_functional': 'LDA', 'nkpts': [6, 6, 6], 'rmt': 1.2, 'emax': 1.5, 'nsteps': 100, }) result = run(WorkflowFactory('kkr.scf'), code=code, structure=structure, parameters=params) print('含 Cr 杂质体系总能量:', result['total_energy'])《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。