Python aiida-inq 包详解与实战案例

发布时间:2026/10/24 5:27:54
Python aiida-inq 包详解与实战案例

1. 引言

aiida-inq 是一个基于 AiiDA 工作流框架的 Python 包,专门用于高通量第一性原理计算与材料性质分析。它把密度泛函理论计算、数据管理和结果后处理封装成可复用的工作流,帮助科研人员以声明式方式组织计算任务,并自动记录计算 provenance(数据血缘)。

本文将从功能、安装、语法、参数、9 个实际应用案例以及常见错误与注意事项六个方面,系统介绍 aiida-inq 的使用方法。

2. 核心功能

aiida-inq 的核心功能可以概括为以下五个方面:

  • 工作流封装:将结构优化、自洽计算、态密度、能带、弹性常数等常见 DFT 任务封装为 AiiDA 工作流,支持链式调用与并行调度。
  • 数据管理:基于 AiiDA 的 provenance 图自动记录输入结构、参数、输出结果之间的依赖关系,实现计算全流程可追溯。
  • 多后端支持:默认对接 Quantum ESPRESSO,同时支持通过插件机制扩展至 VASP、CP2K 等计算引擎。
  • 结果后处理:内置能带插值、态密度投影、弹性张量分析等后处理工具,可直接生成科研图表所需数据。
  • 可复现性:所有计算参数、伪势版本、k 点网格均以节点形式存入数据库,便于复现与共享。

3. 安装与环境配置

3.1 环境要求

aiida-inq 要求 Python 3.9 及以上版本,并依赖 AiiDA 2.x 核心库。建议使用 conda 或 venv 创建独立环境,避免与系统 Python 冲突。

conda create -n aiida-inq python=3.10 conda activate aiida-inq

3.2 安装 aiida-inq

推荐通过 pip 从 PyPI 安装稳定版本:

pip install aiida-inq

如果需要使用开发版本或最新特性,可以直接从 GitHub 仓库安装:

pip install git+https://github.com/inq-ai/aiida-inq.git@main

3.3 初始化 AiiDA 配置文件

安装完成后,需要初始化 AiiDA 的配置文件与数据库:

aiida-inq setup verdi profile list

上述命令会创建默认 profile,并启动本地 SQLite 数据库用于存储计算节点。

3.4 配置计算资源

aiida-inq 通过 AiiDA 的 code 与 computer 机制管理远程计算资源。以配置本地 Quantum ESPRESSO 为例:

verdi computer create -L localhost -H localhost -T local -S direct local_computer verdi computer configure local_computer verdi code create core.code.installed --label pw.x --computer local_computer --filepath /usr/bin/pw.x

4. 基本语法与参数说明

4.1 工作流入口

aiida-inq 提供统一的InqWorkflow入口类,用户通过声明式字典传入计算参数:

from aiida_inq import InqWorkflow from aiida.orm import StructureData builder = InqWorkflow.get_builder() builder.structure = StructureData(ase=atoms) builder.parameters = { "functional": "PBE", "kpoints_mesh": [4, 4, 4], "cutoff_wfc": 40.0, "cutoff_rho": 160.0, } builder.code = "pw.x@local_computer" result = builder.submit().wait()

4.2 常用参数说明

参数名类型默认值说明
functionalstrPBE交换关联泛函,支持 PBE、PBEsol、LDA 等
kpoints_meshlist[int][4,4,4]Monkhorst-Pack k 点网格
cutoff_wfcfloat40.0波函数截断能,单位 Ry
cutoff_rhofloat160.0电荷密度截断能,单位 Ry
pseudosdictNone元素到伪势文件的映射
smearingstrNone展宽方法,如 gaussian、mp
degaussfloat0.01展宽宽度,单位 Ry
protocolstrfast计算精度协议:fast、moderate、precise

4.3 工作流类型

aiida-inq 内置多种工作流类型,通过workflow_type参数指定:

  • scf:自洽场计算,输出总能量与电荷密度。
  • relax:结构优化,支持原子位置与晶胞参数弛豫。
  • bands:能带结构计算,沿高对称路径采样。
  • dos:态密度计算,支持投影到原子轨道。
  • elastic:弹性常数计算,输出完整弹性张量。

5. 9 个实际应用案例

案例 1:单点自洽计算(SCF)

以硅晶体为例,计算其基态总能量:

from aiida_inq import InqWorkflow from ase.build import bulk atoms = bulk("Si", "diamond", a=5.43) builder = InqWorkflow.get_builder() builder.structure = StructureData(ase=atoms) builder.parameters = { "workflow_type": "scf", "functional": "PBE", "kpoints_mesh": [6, 6, 6], "cutoff_wfc": 40.0, "cutoff_rho": 160.0, } builder.code = "pw.x@local_computer" result = builder.submit().wait() print("Total energy:", result.outputs.total_energy.value)

案例 2:结构优化(Relax)

对水分子进行几何优化,获取平衡构型:

from ase.build import molecule atoms = molecule("H2O") builder = InqWorkflow.get_builder() builder.structure = StructureData(ase=atoms) builder.parameters = { "workflow_type": "relax", "relax_type": "atoms", "max_steps": 100, "force_convergence": 0.01, } builder.code = "pw.x@local_computer" result = builder.submit().wait() optimized = result.outputs.relaxed_structure.get_ase() print("Optimized bond length:", optimized.get_distance(0, 1))

案例 3:能带结构计算(Bands)

计算硅沿高对称路径的能带:

builder.parameters = { "workflow_type": "bands", "bands_path": "G-X-W-K-G-L-W", } result = builder.submit().wait() bands = result.outputs.bands print("Number of bands:", len(bands.bands[0]))

案例 4:态密度计算(DOS)

计算铁磁体镍的投影态密度:

from ase.build import bulk atoms = bulk("Ni", "fcc", a=3.52) builder.parameters = { "workflow_type": "dos", "projected": True, "dos_energy_max": 10.0, "dos_energy_min": -10.0, } result = builder.submit().wait() pdos = result.outputs.projected_dos print("Projected DOS shape:", pdos.get_array("projected"))

案例 5:弹性常数计算(Elastic)

计算立方晶系铜的弹性常数:

atoms = bulk("Cu", "fcc", a=3.61) builder.parameters = { "workflow_type": "elastic", "strain_range": 0.01, "strain_steps": 5, } result = builder.submit().wait() elastic = result.outputs.elastic_tensor print("C11:", elastic.get_value("C11"))

案例 6:批量扫描晶格常数

通过循环提交多个 SCF 任务,扫描不同晶格常数下的能量:

energies = [] for a in [5.30, 5.40, 5.50]: atoms = bulk("Si", "diamond", a=a) builder = InqWorkflow.get_builder() builder.structure = StructureData(ase=atoms) builder.parameters = {"workflow_type": "scf", "kpoints_mesh": [6, 6, 6]} builder.code = "pw.x@local_computer" result = builder.submit().wait() energies.append((a, result.outputs.total_energy.value)) print(energies)

案例 7:异质结界面建模与优化

构建 Al/GaAs 异质结并优化界面结构:

from ase.build import fcc111, add_adsorbate slab = fcc111("Al", size=(2, 2, 4), vacuum=10.0) add_adsorbate(slab, "GaAs", height=2.0, position="ontop") builder.parameters = { "workflow_type": "relax", "relax_type": "atoms", "kpoints_mesh": [4, 4, 1], } result = builder.submit().wait() print("Interface energy:", result.outputs.total_energy.value)

案例 8:表面吸附能计算

计算 CO 分子在 Pt(111) 表面的吸附能:

from ase.build import fcc111, add_adsorbate from ase import Atoms slab = fcc111("Pt", size=(3, 3, 3), vacuum=12.0) co = Atoms("CO", positions=[[0, 0, 0], [0, 0, 1.2]]) add_adsorbate(slab, co, height=2.0, position="ontop") builder.parameters = {"workflow_type": "relax", "kpoints_mesh": [4, 4, 1]} result = builder.submit().wait() E_ads = result.outputs.total_energy.value - E_slab - E_co print("Adsorption energy:", E_ads)

案例 9:高通量筛选二元合金

批量计算不同组分比例的 Cu-Au 合金形成能:

from ase.build import bulk from ase import Atoms for x in [0.25, 0.5, 0.75]: atoms = bulk("Cu", "fcc", a=3.61) atoms[0].symbol = "Au" if x > 0.5 else "Cu" builder = InqWorkflow.get_builder() builder.structure = StructureData(ase=atoms) builder.parameters = {"workflow_type": "scf", "kpoints_mesh": [6, 6, 6]} result = builder.submit().wait() print(f"x={x}: E={result.outputs.total_energy.value:.3f} eV")

6. 常见错误与使用注意事项

6.1 常见错误

错误信息可能原因解决方案
ProfileNotFoundError未初始化 AiiDA profile运行aiida-inq setup
CodeNotFoundError计算 code 未注册使用verdi code create注册
CutoffWarning截断能过低提高 cutoff_wfc 或使用 protocol=precise
KpointsMeshErrork 点网格格式错误确保传入长度为 3 的整数列表
ConvergenceErrorSCF 未收敛增大 max_iterations 或调整 smearing

6.2 使用注意事项

  • 伪势一致性:同一研究项目中应统一伪势版本,避免因伪势差异导致结果不可比。
  • k 点收敛测试:正式批量计算前,建议先对 k 点网格和截断能做收敛性测试。
  • 数据库备份:AiiDA 数据库存储全部计算记录,建议定期备份,防止数据丢失。
  • 并行资源管理:提交大量任务时,注意远程计算资源的并行槽位限制,避免排队阻塞。
  • 版本兼容:aiida-inq 依赖 AiiDA 2.x,升级 AiiDA 前需确认 aiida-inq 的兼容版本。
  • 结果验证:对关键计算结果,建议与文献值或实验数据交叉验证,确保物理合理性。

7. 总结

aiida-inq 通过声明式工作流和自动化数据管理,显著降低了高通量 DFT 计算的复杂度。本文覆盖了其核心功能、安装配置、语法参数、9 个典型应用案例以及常见错误处理。建议读者从 SCF 和 Relax 两个基础工作流入手,逐步扩展到能带、弹性常数等高级计算,并结合 AiiDA 的 provenance 机制建立规范的计算数据管理习惯。

《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。