ASE数据库、结构筛选与文件比较
把结构及计算结果保存到数据库,按元素筛选,导出并检查几何与能量。
阅读本篇目录
下载完整脚本、实际输入、参考输出和四张高清图。在集群新解压目录执行 bash run.sh,结果写入 work/;使用ASE3.29.0、单进程和单线程,不调用GPU或新DFT计算。
1 先准备两个可解释的条目#
附件 bash run.sh 会建立Cu32 EMT结果和水分子几何两个条目。Cu条目保存能量、力、晶胞和坐标;水条目用于几何示例,没有把它标为DFT结果。

先进入生成的目录查看:
cd work/output
ase db samples.db
ase db samples.db 'Cu>0' --csv -c id,formula,natoms,energy
ase db samples.db 'label=Cu32' -l
包含 > 或 < 的条件要加引号,否则shell可能将它解释为重定向。SQLite数据库是本地文件,不需要启动额外数据库服务。
2 自己建立一个新库#
在 work/output 中选择一个尚不存在的库名,例如:
ase db my-data.db --add-from-file cu32-emt.extxyz -k label=Cu32,method=EMT
ase db my-data.db --add-from-file ../inputs/water.extxyz -k label=water,method=geometry
ase db my-data.db --count
这些命令会新增行;重复执行会继续添加,不能以为第二次运行只是更新。标签 label、method是自己定义的检索字段,能量与力则来自文件中真实保存的计算结果。
导出一个子集:
ase db my-data.db 'Cu>0' --insert-into cu-selected.json
ase db cu-selected.json
附件同时核对了导出前后能量、力和结构。数据库格式能保存的内容也取决于输入文件:如果原始文件没有力,数据库不会替你计算力。
3 用Python取出原子与数据#
from ase.db import connect
import numpy as np
db = connect('samples.db')
row = db.get(label='Cu32')
atoms = row.toatoms()
print(row.energy) # eV,整胞能量
print(len(atoms)) # 32
print(np.max(np.linalg.norm(row.forces, axis=1)))
本例整胞能量为−0.214040597945eV;如果要每原子量,应明确除以32。JSON与SQLite条目经过同一数值检查,ID是各库内部标识,不应用ID跨库推定同一个结构。
4 修改字段和删除演示#
ase db samples.db 'label=Cu32' -k checked=1
ase db samples.db --insert-into temporary.db
ase db temporary.db 'label=water' --delete -y
ase db samples.db --count
ase db temporary.db --count
原库仍为2行,临时库为1行。这里删除的是刚创建的 temporary.db 中匹配的行;自己使用时先查询条件,确认库和条目正确。--insert-into同样会新增,练习时使用全新的目标库名。
5 搜索、比较和逐帧执行#
ase find ../inputs 'Cu>0' -i .extxyz
ase diff cu32.traj cu32-shift.traj --as-csv
ase exec -e 'print(index, len(atoms), atoms.get_volume())' cu32.traj
find只搜索你指定的结构目录;diff示例将一个原子沿x移动0.05Å,比较两份文件;exec对读取到的每帧执行自己给出的Python表达式。这里不应把任意来源的表达式直接执行。
这三个工具能快速检查批量转换,但不替代势函数、拓扑、电荷或原子编号映射的核对。
6 查看体系的几何维度#
ase dimensionality ../inputs/water.extxyz ../inputs/cu111.extxyz cu32.traj
维度工具根据成键连通和周期性判断分子、链、层、体相或混合维度,并输出相应评分。真空层、距离阈值和几何都会影响分析,不能仅以盒子三个方向都存在就认定是三维材料。水、Cu(111)薄层和Cu体相提供了三个可对照的实际结构。
数据库功能依据:ASE官方数据库文档。更复杂的数据库服务器、网络服务和权限管理不需要包含在这些本地文件操作中。