
1. 引言aiida-gulp 是 AiiDA 生态中用于集成 GULPGeneral Utility Lattice Program的插件包。GULP 是一款功能强大的分子模拟与晶格计算软件广泛应用于材料科学、固体化学和地球科学等领域。aiida-gulp 将 GULP 的计算能力与 AiiDA 的数据管理、工作流调度和可追溯性优势结合起来让科研人员能够以声明式、可复现的方式运行 GULP 计算。本文将从功能特性、安装方法、核心语法、关键参数、9 个实际应用案例以及常见错误与注意事项六个方面系统介绍 aiida-gulp 包的使用方法。2. 功能概述aiida-gulp 包的核心功能可以概括为以下几个方面计算封装将 GULP 的输入文件、执行命令和输出解析封装为 AiiDA 的 CalcJob 和 Parser用户无需手动编写 GULP 输入文件。数据结构化通过 AiiDA 的 Data 节点如 StructureData、Dict、SinglefileData管理输入输出实现计算数据的持久化存储和可追溯。工作流集成可与 AiiDA 的 WorkChain 结合构建自动化的计算流程如结构优化、性质计算、参数扫描等。多力场支持支持 GULP 内置的多种力场和势函数包括 Lennard-Jones、Buckingham、Morse、EAM 等。输出解析自动解析 GULP 输出文件中的能量、力、应力、晶格参数、弹性常数等关键物理量。可复现性所有计算参数、输入文件和输出结果均以 AiiDA 节点形式保存确保计算过程完全可复现。3. 安装方法aiida-gulp 的安装分为两个层面一是安装 Python 包本身二是确保 GULP 可执行文件可用。3.1 安装 Python 包推荐使用 pip 在虚拟环境中安装# 创建并激活虚拟环境推荐 python -m venv aiida_env source aiida_env/bin/activate 安装 aiida-core 和 aiida-gulp pip install aiida-core aiida-gulp如果需要从源码安装最新开发版本可以克隆仓库后执行git clone https://github.com/aiidateam/aiida-gulp.git cd aiida-gulp pip install -e .3.2 安装 GULP 可执行文件GULP 本身是独立软件需要单独获取。可以从 GULP 官网下载预编译二进制文件或从源码编译。安装完成后需要确保 gulp 命令在 PATH 中可用或者记录其绝对路径。3.3 配置 AiiDA 计算资源安装完成后需要在 AiiDA 中配置计算资源Computer和代码Code# 启动 AiiDA 守护进程 verdi daemon start 创建计算资源以本地机器为例 verdi computer create localhost -n verdi computer configure localhost -n --safe-interval 5 设置 GULP 代码 verdi code create core.code.installed --label gulp --computer localhost --filepath /path/to/gulp --default-calc-job-plugin gulp.gulp配置完成后可以通过verdi code show gulp验证代码是否配置成功。4. 核心语法与参数4.1 基本使用流程使用 aiida-gulp 的基本流程包括创建输入数据结构、构建计算进程、提交计算、解析结果。下面是一个最小示例from aiida.orm import load_code, StructureData from aiida_gulp.calculations.gulp import GulpCalculation 加载已配置的 GULP 代码 code load_code(gulplocalhost) 创建结构以 NaCl 为例 import ase from ase.build import bulk atoms bulk(NaCl, rocksalt, a5.64) structure StructureData(aseatoms) 构建计算进程 builder code.get_builder() builder.structure structure builder.parameters { task: single, keywords: [conp], options: { maxcyc: 100, tolerance: 1.0e-6, }, } builder.metadata.options.resources {num_machines: 1} builder.metadata.options.max_wallclock_seconds 3600 提交计算 from aiida.engine import run result run(builder) print(result[output_parameters].get_dict())4.2 参数说明aiida-gulp 的输入参数主要通过parameters字典传递其结构对应 GULP 输入文件的各个部分参数键类型说明示例taskstr计算任务类型如 single、optimise、transition 等singlekeywordslistGULP 关键字列表如 conp、qok、phon 等[conp, phon]optionsdict计算选项如收敛条件、最大迭代次数等{maxcyc: 100}specieslist原子种类定义包括电荷和力场参数[{name: Na, charge: 1.0}]buckinghamlistBuckingham 势参数[{name: Na core Na core, a: 1000, rho: 0.3, c: 0.0}]lennard_joneslistLennard-Jones 势参数[{name: Na core Na core, epsilon: 0.1, sigma: 2.5}]morselistMorse 势参数[{name: Na core Na core, d: 1.0, a: 2.0, r0: 2.5}]springlist壳模型弹簧参数[{name: Na core Na shell, k: 50.0}]outputdict输出控制选项{properties: [elastic, phonon]}4.3 输出解析计算完成后aiida-gulp 会解析输出文件并返回结构化结果。常见的输出键包括energy总能量单位随力场而定通常为 eVfinal_energy优化后的最终能量forces原子受力N×3 数组stress应力张量3×3 数组lattice_parameters晶格参数a、b、c、alpha、beta、gammaelastic_constants弹性常数矩阵phonon_frequencies声子频率若启用 phon 关键字5. 9 个实际应用案例5.1 案例一单点能计算最基础的应用是计算给定结构的单点能。这在验证力场参数或比较不同构型能量时非常有用。from aiida.orm import load_code, StructureData from aiida.engine import run from ase.build import bulk code load_code(gulplocalhost) structure StructureData(asebulk(MgO, rocksalt, a4.21)) builder code.get_builder() builder.structure structure builder.parameters { task: single, keywords: [conp], species: [ {name: Mg, charge: 2.0}, {name: O, charge: -2.0}, ], buckingham: [ {name: Mg core O core, a: 1000.0, rho: 0.3, c: 0.0}, ], } builder.metadata.options.resources {num_machines: 1} builder.metadata.options.max_wallclock_seconds 600 result run(builder) print(总能量:, result[output_parameters][energy])5.2 案例二结构优化结构优化是材料计算中最常见的任务之一。aiida-gulp 支持原子位置、晶胞参数或两者的同时优化。builder.parameters { task: optimise, keywords: [conp, opti], options: {maxcyc: 200, tolerance: 1.0e-8}, species: [ {name: Si, charge: 4.0}, {name: O, charge: -2.0}, ], buckingham: [ {name: Si core O core, a: 1000.0, rho: 0.3, c: 0.0}, ], } result run(builder) params result[output_parameters] print(优化后晶格常数:, params[lattice_parameters][a])5.3 案例三弹性常数计算通过设置 output 参数可以计算材料的弹性常数矩阵进而推导体积模量、剪切模量等力学性质。builder.parameters { task: single, keywords: [conp], output: {properties: [elastic]}, species: [ {name: Al, charge: 3.0}, {name: O, charge: -2.0}, ], buckingham: [ {name: Al core O core, a: 1500.0, rho: 0.3, c: 0.0}, ], } result run(builder) elastic result[output_parameters][elastic_constants] print(弹性常数矩阵:, elastic)5.4 案例四声子谱计算启用 phon 关键字可以计算声子频率用于研究材料的振动性质和热力学稳定性。builder.parameters { task: single, keywords: [conp, phon], output: {properties: [phonon]}, species: [ {name: C, charge: 0.0}, ], lennard_jones: [ {name: C core C core, epsilon: 0.004, sigma: 3.4}, ], } result run(builder) freqs result[output_parameters][phonon_frequencies] print(声子频率:, freqs)5.5 案例五壳模型离子晶体计算对于离子晶体壳模型可以更准确地描述极化效应。aiida-gulp 支持 core-shell 模型。builder.parameters { task: optimise, keywords: [conp, opti], species: [ {name: Na, charge: 1.0}, {name: Cl, charge: -1.0}, ], spring: [ {name: Na core Na shell, k: 50.0}, {name: Cl core Cl shell, k: 50.0}, ], buckingham: [ {name: Na core Cl core, a: 1000.0, rho: 0.3, c: 0.0}, ], } result run(builder)5.6 案例六缺陷形成能计算通过构建含缺陷的超胞并比较能量差可以计算缺陷形成能。这里以氧空位为例。from ase.build import bulk from ase import Atoms 构建含氧空位的 MgO 超胞 perfect bulk(MgO, rocksalt, a4.21) supercell perfect.repeat((2, 2, 2)) 移除一个氧原子假设索引已知 del supercell[0] structure_defect StructureData(asesupercell) 分别计算完美和含缺陷结构的能量 builder_perfect code.get_builder() builder_perfect.structure StructureData(aseperfect.repeat((2, 2, 2))) builder_perfect.parameters {...} # 相同参数 builder_defect code.get_builder() builder_defect.structure structure_defect builder_defect.parameters {...} # 相同参数 E_perfect run(builder_perfect)[output_parameters][energy] E_defect run(builder_defect)[output_parameters][energy] E_formation E_defect - E_perfect 0.5 * E_O2 # 需补充 O2 能量 print(氧空位形成能:, E_formation)5.7 案例七表面能计算通过构建 slab 模型并计算表面能可以研究材料表面的稳定性。from ase.build import fcc111, add_adsorbate 构建 Al(111) 表面 slab slab fcc111(Al, size(2, 2, 4), a4.05, vacuum10.0) structure_slab StructureData(aseslab) 计算 slab 能量 builder_slab code.get_builder() builder_slab.structure structure_slab builder_slab.parameters {...} # 设置力场参数 E_slab run(builder_slab)[output_parameters][energy] 计算体相能量用 bulk 结构 bulk_Al bulk(Al, fcc, a4.05) builder_bulk code.get_builder() builder_bulk.structure StructureData(asebulk_Al) builder_bulk.parameters {...} E_bulk run(builder_bulk)[output_parameters][energy] 表面能 (E_slab - N_layers * E_bulk_per_atom) / (2 * A) 其中 A 为表面积N_layers 为层数 surface_energy (E_slab - 4 * E_bulk) / (2 * slab.get_area()) print(Al(111) 表面能:, surface_energy)5.8 案例八吸附能计算计算分子在表面的吸附能是催化研究中的常见需求。from ase.build import fcc111, add_adsorbate from ase import Atoms 构建表面和吸附分子 slab fcc111(Pt, size(2, 2, 3), a3.92, vacuum12.0) adsorbate Atoms(CO, positions[(0, 0, 2.0), (0, 0, 3.1)]) add_adsorbate(slab, adsorbate, height2.0, positionontop) structure_ads StructureData(aseslab) structure_slab_only StructureData(asefcc111(Pt, size(2, 2, 3), a3.92, vacuum12.0)) structure_mol StructureData(aseadsorbate) 分别计算三个体系的能量 E_ads run(builder_ads)[output_parameters][energy] E_slab run(builder_slab)[output_parameters][energy] E_mol run(builder_mol)[output_parameters][《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。