OVITO专题

OVITO晶体识别、化学键与结构因子

从理想晶体和苯分子出发,实际识别结构、计算键序和六元环,提取结构因子。

更新于 2026-10-28约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载输入、完整脚本和实际结果,在新目录解压后运行:

bash run.sh

分析使用OVITO3.16.1的Python接口,作图使用ASE3.29.0环境中的Matplotlib。共享环境提供预编译程序,用户无需自己编译。inputs/保存结构和轨迹,reference/保存参考数据,新结果写入work/。下面的单项命令在完整运行之后执行。

1. 先分清输入是什么#

本例的Al FCC、Fe BCC、Si金刚石都是明确晶格常数的理想几何;“冰”只构造立方冰的氧子晶格,不含氢,也没有进行成冰模拟。苯分子来自ASE几何数据库。它们适合判断分析工具的输入和输出,不能当成有限温度稳定性结论。

module purge
module load ovito/3.16.1
cd work
python examples.py classify
结构与原子数 方法 本例结果
Fe BCC,128原子,a=2.87 Å Ackland–Jones、VoroTop 全部BCC
Al FCC,108原子,a=4.05 Å CNA、PTM、VoroTop 全部FCC
Si金刚石,216原子,a=5.43 Å IdentifyDiamond 全部立方金刚石
理想冰氧子晶格,216个O,a=6.35 Å CHILL+,cutoff=3.5 Å 全部立方冰型局域环境
Al FCC 中心对称参数,12近邻 最大约3.23×10⁻²⁹ Ų

实际管线很短:

from ovito.io import import_file
from ovito.modifiers import PolyhedralTemplateMatchingModifier
p = import_file('inputs/fcc.xyz')
p.modifiers.append(PolyhedralTemplateMatchingModifier(output_orientation=True))
d = p.compute()
print(d.particles['Structure Type'])
print(dict(d.attributes))

更换算法时,输出数字编码也可能变化;按对应类的Type枚举解释,不能把所有方法的数字1一律理解为FCC。CHILL+分析水时应先只保留氧位置。VoroTop还需要filter,本包带上游BCC/FCC过滤器和许可;筛选器不是势函数。

2. 苯的成键、键序、键长与环#

python examples.py bonds
head results/benzene-bond-length.csv
head results/benzene-bond-angle.csv
from ovito.io import import_file
from ovito.modifiers import (CreateBondsModifier, BondOrderModifier,
    FindRingsModifier, BondLengthDistributionModifier,
    BondAngleDistributionModifier)
p = import_file('inputs/benzene.xyz')
p.modifiers.append(CreateBondsModifier(mode=CreateBondsModifier.Mode.CovalentRadius))
p.modifiers.append(BondOrderModifier(redistribute_bond_orders=True))
p.modifiers.append(FindRingsModifier(minimum_ring_size=3, maximum_ring_size=8))
p.modifiers.append(BondLengthDistributionModifier())
p.modifiers.append(BondAngleDistributionModifier())
d = p.compute()
print(d.particles.bonds['Bond Order'])
print(d.tables['ring-size-histogram'].xy())

得到12条键:6条C–H和6条C–C;芳香键重新分配后C–C键序为1.5,C–H为1。关闭redistribute_bond_orders时为整数单/双键表示。环统计只有1个六元环,键长直方图计数合计12,键角合计18。键序是基于几何与化学类型的推断,不能代替电子结构软件计算的键级。

苯结构、原子编号与实际键长统计

元素名称必须是C、H等实际化学符号。若轨迹只有数字类型,先正确映射元素再使用共价半径建键。成键截断太大可能把非键合邻居也连起来。旧BondAnalysisModifier在本版本仍可计算,但新脚本分别使用键长与键角两个处理器更明确。

3. 从FCC位置得到结构因子#

python structure_factor.py
head results/fcc-direct-structure-factor.csv
from ovito.modifiers import StructureFactorModifier
p = import_file('inputs/fcc.xyz')
p.modifiers.append(StructureFactorModifier(
    mode=StructureFactorModifier.Mode.Direct,
    k_min=1, k_max=5, k_bins=200))
data = p.compute()
print(data.tables['structure-factor'].xy())

本例峰位为2.69、3.11、4.39 Å⁻¹,对应FCC的111、200、220反射。由a=4.05 Å计算的理论位置分别为2.68711、3.10281、4.38803 Å⁻¹;输出位置取直方图中心,存在0.02 Å⁻¹分箱精度。不要把本例归一化峰高直接解释为实验粉末衍射强度。

FCC结构因子与分项求和

脚本还把前54个和后54个Al人为标记为A/B,只用于检查分项规则:总量等于AA+2AB+BB。最大数值差约4.44×10⁻¹⁶;这不是二元合金模型。对Na真实轨迹,python examples.py rdf还会生成Debye形式的结构因子;小体系、有限RDF截断和窗函数会影响曲线,不能仅凭峰的有无判断相变。

参考:OVITO结构因子、VoroTop过滤器。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗