☰
aiida-tbmodels 完全指南及实战案例
2026/11/4 2:31:57 网站建设 项目流程

摘要:aiida-tbmodels 是 AiiDA 生态中用于处理紧束缚(Tight-Binding,TB)模型数据的插件包,它把 TB 模型参数、哈密顿量、能带与态密度等计算结果纳入 AiiDA 的可追溯数据图谱。本文系统梳理该包的核心功能、安装步骤、数据节点语法与参数含义,并通过 16 个由浅入深的实际案例演示建模、计算、查询与复用流程,最后总结常见错误与使用注意事项。

一、aiida-tbmodels 是什么

AiiDA 是一个面向计算材料科学的可追溯工作流框架,它通过「数据节点(Data Node)」和「计算节点(CalcJob / WorkChain)」记录每一次计算的输入、输出与代码环境,从而保证结果可复现、可查询、可共享。aiida-tbmodels 则是 AiiDA 插件体系中的一个领域扩展包,专注于紧束缚模型这一类轻量级电子结构方法。

与基于第一性原理的 DFT 计算相比,紧束缚模型以原子轨道为基组,用少量参数描述电子在格点之间的跃迁与在位能量,计算成本极低,适合处理大体系、做参数扫描、构建机器学习训练集,或作为理解能带拓扑与化学成键的直观工具。aiida-tbmodels 的价值在于:把这些「参数化模型」变成 AiiDA 图谱中一等公民的数据对象,让模型参数、结构、计算结果之间形成可查询的关联。

二、核心功能概览

2.1 数据节点封装

该包提供了一组自定义的 AiiDA 数据节点,用于存储紧束缚模型所需的各类信息,典型包括:

  • 模型参数节点:保存跃迁积分、在位能量、轨道类型、自旋极化设置等。
  • 结构节点:复用 AiiDA 内置的StructureData,描述晶格、原子位置与周期性边界。
  • 结果节点:保存能带、态密度、本征值、占据数等输出数组。

2.2 计算插件与工作流

包内通常包含若干CalcJob与WorkChain实现,把外部紧束缚求解器(如基于 Python 的 TB 求解脚本、Wannier90 接口或自定义哈密顿量构造器)包装成 AiiDA 可调度的计算过程,并自动解析输出文件为结构化数据。

2.3 查询与复用

借助 AiiDA 的 QueryBuilder,用户可以按模型参数、结构化学式、计算状态等条件检索历史计算,快速复用已有参数集,避免重复劳动。

三、安装与环境准备

3.1 前置条件

  • Python 3.8 及以上版本(建议 3.9 或 3.10)。
  • 已安装并初始化 AiiDA 核心(aiida-core),且verdi status显示 profile、daemon、数据库均正常。
  • 建议使用虚拟环境(venv 或 conda)隔离依赖。

3.2 安装步骤

# 创建并激活虚拟环境 python -m venv aiida-env source aiida-env/bin/activate 安装 AiiDA 核心 pip install aiida-core 安装 aiida-tbmodels pip install aiida-tbmodels 注册插件入口点 verdi plugin list aiida.data | grep tbmodels verdi plugin list aiida.calculations | grep tbmodels

3.3 验证安装

python -c "import aiida_tbmodels; print(aiida_tbmodels.__version__)" verdi status

若插件列表中出现tbmodels.*相关条目,说明安装成功。若未出现,通常是入口点未刷新,可尝试重新安装:pip install --force-reinstall aiida-tbmodels。

四、核心语法与参数说明

4.1 导入与基础对象

from aiida import load_profile from aiida.orm import StructureData, Dict, List from aiida_tbmodels.data import TbModelData load_profile()

4.2 模型参数节点

模型参数通常以字典形式组织,常见键值如下:

参数名类型含义
orbitalslist[str]每个格点的轨道标签,如["s"]、["p_x","p_y","p_z"]
onsite_energieslist[float]各轨道在位能量,单位 eV
hoppingsdict跃迁积分,键为 (i, j, R) 形式
spinstrNone、"up"、"down"或"polarized"
latticelist[list[float]]3×3 晶格矢量矩阵,单位 Å
positionslist[list[float]]分数坐标下的原子位置

4.3 构造与存储

params = { "orbitals": ["s"], "onsite_energies": [0.0], "hoppings": {(0, 0, (1, 0, 0)): -2.7}, "spin": None, "lattice": [[3.16, 0.0, 0.0], [0.0, 3.16, 0.0], [0.0, 0.0, 3.16]], "positions": [[0.0, 0.0, 0.0]], } model = TbModelData(params) model.store() print(model.pk)

4.4 运行计算

from aiida.engine import run from aiida.plugins import CalculationFactory TbCalculation = CalculationFactory("tbmodels.band") inputs = { "model": model, "kpoints": List(list=[[0.0, 0.0, 0.0], [0.5, 0.0, 0.0]]), "metadata": {"options": {"resources": {"num_machines": 1}}}, } results = run(TbCalculation, **inputs) print(results["bands"].get_array("eigenvalues"))

五、16 个实际应用案例

案例 1:一维单轨道链的能带

最简模型:一维链,最近邻跃迁 t = -2.7 eV。构造模型后沿 Γ–X 路径取 50 个 k 点,得到余弦型色散,验证插件链路是否打通。

params = { "orbitals": ["s"], "onsite_energies": [0.0], "hoppings": {(0, 0, (1, 0, 0)): -2.7}, "lattice": [[3.0, 0.0, 0.0], [0.0, 10.0, 0.0], [0.0, 0.0, 10.0]], "positions": [[0.0, 0.0, 0.0]], } model = TbModelData(params); model.store()

案例 2:二维方格晶格的紧束缚能带

在 x、y 两个方向同时设置最近邻跃迁,得到E(k) = -2t(cos kx + cos ky)的经典结果,可用于教学演示与代码回归测试。

案例 3:石墨烯蜂窝晶格的狄拉克锥

用两个子晶格 A、B 与最近邻跃迁构造蜂窝模型,沿 Γ–K–M 路径计算能带,观察 K 点处的线性交叉,验证模型对拓扑特征的描述能力。

案例 4:多轨道模型与在位能量劈裂

为同一格点设置 s、p 多轨道,并给出不同的在位能量,观察轨道劈裂对能带的影响,演示orbitals与onsite_energies的配合使用。

案例 5:自旋极化计算

设置spin="polarized",分别给出自旋向上与向下的跃迁参数,输出两套本征值,用于研究自旋分裂与磁性趋势。

案例 6:参数扫描与批量提交

from aiida.engine import submit for t in [-1.0, -2.0, -2.7, -3.5]: p = dict(params); p["hoppings"] = {(0, 0, (1, 0, 0)): t} m = TbModelData(p); m.store() submit(TbCalculation, model=m, kpoints=kpoints)

通过循环批量提交,把不同跃迁强度下的能带结果统一存入图谱,便于后续对比。

案例 7:态密度计算

在布里渊区均匀撒点,统计本征值分布并做高斯展宽,得到态密度曲线,用于判断带隙与范霍夫奇点位置。

案例 8:带隙自动提取

从能带结果中读取价带顶与导带底,计算最小直接带隙与间接带隙,并把结果写入Dict节点,供后续筛选使用。

案例 9:与 AiiDA 结构节点联动

从StructureData读取晶格与原子位置,自动生成模型参数,避免手工输入坐标导致的不一致。

案例 10:查询历史计算并复用参数

from aiida.orm import QueryBuilder qb = QueryBuilder() qb.append(TbModelData, filters={"attributes.spin": "polarized"}) for (node,) in qb.iterall(): print(node.pk, node.get_description())

案例 11:工作流串联——模型构建到能带分析

把「参数生成 → 能带计算 → 带隙提取」封装为WorkChain,一次提交完成全流程,并在失败时自动重试。

案例 12:导出数据用于机器学习训练集

批量导出结构、模型参数与能带特征为 JSON 或 NumPy 数组,构建「结构—电子结构」配对数据集,用于代理模型训练。

案例 13:与 Wannier90 结果对照

把第一性原理拟合得到的 Wannier 跃迁参数导入模型节点,与解析紧束缚结果对比,检验拟合质量。

案例 14:缺陷或掺杂的近似处理

通过修改特定格点的在位能量模拟掺杂效应,快速评估能带移动趋势,为后续 DFT 计算提供初筛。

案例 15:可视化与结果导出

把能带数组导出为 CSV,配合 Matplotlib 绘制能带图;也可将结果节点挂到 AiiDA 的 provenance 图谱中,在浏览器中查看依赖关系。

案例 16:可复现性验证与归档

使用verdi archive create打包整个计算图谱,在另一台机器上导入后重跑,验证结果一致,完成科研数据的归档与共享。

六、常见错误与排查

错误现象可能原因解决办法
ModuleNotFoundError: aiida_tbmodels未安装或虚拟环境不一致确认pip list中存在该包,检查 Python 解释器路径
插件未注册入口点缓存未刷新重新安装包,或执行verdi plugin list检查
ProfileNotLoaded未调用load_profile()在脚本开头加载 profile
节点未存储即使用忘记调用.store()所有数据节点在使用前必须存储
k 点格式错误传入的是元组而非列表统一使用List(list=...)包装
跃迁键格式不匹配键顺序或类型不一致严格使用(i, j, (Rx, Ry, Rz))元组
计算长时间挂起daemon 未启动或资源不足执行verdi daemon start,检查 metadata.options

七、使用注意事项

  • 单位统一:能量统一使用 eV,长度统一使用 Å,避免混用导致结果偏差。
  • 版本锁定:AiiDA 与插件版本需匹配,建议在requirements.txt中固定版本号。
  • 参数可追溯:尽量把模型参数存为独立节点而非硬编码在脚本中,保证 provenance 完整。
  • k 点收敛测试:态密度与带隙对 k 点密度敏感,正式计算前应做收敛性检查。
  • 数据备份:定期使用verdi archive备份 profile,防止数据库损坏导致数据丢失。
  • 文档优先:插件 API 可能随版本演进,使用前查阅对应版本的官方文档与示例仓库。

八、总结

aiida-tbmodels 把紧束缚模型这一轻量级方法接入了 AiiDA 的可追溯体系,使参数化模型也能像第一性原理计算一样被记录、查询与复用。掌握其数据节点结构、参数含义与计算流程后,可以快速构建从模型搭建、批量扫描到结果分析的完整链路,为教学演示、方法预筛和机器学习数据集构建提供高效支撑。

《AI提示工程必知必会》为读者提供了丰富的AI提示工程知识与实战技能,主要包括各类提示词的应用,如问答式、指令式、状态类、建议式、安全类和感谢类提示词,以及如何通过实战演练掌握提示词的使用技巧;使用提示词进行文本摘要、改写重述、语法纠错、机器翻译等语言处理任务,以及在数据挖掘、程序开发等领域的应用;AI在绘画创作上的应用,百度文心一言和阿里通义大模型这两大智能平台的特性与功能,以及市场调研中提示词的实战应用。通过阅读《AI提示工程必知必会》,读者可掌握如何有效利用AI提示工程提升工作效率,创新工作流程,并在职场中脱颖而出。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询