ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

分子动力学缺陷分析实操:VESTA建模与OVITO后处理全流程

分子动力学缺陷分析实操:VESTA建模与OVITO后处理全流程 直接开始写正题。这篇文章其实更像一份操作笔记把我在做辐照损伤分子动力学模拟时用 OVITO 处理缺陷的那一套流程从头到尾捋一遍。涉及到材料体系、软件版本、具体参数的部分我会标注清楚方便你对照自己的体系调整。整个过程不复杂但坑不少尤其是从 VESTA 建模到 OVITO 分析这条链路中间任何一个环节偷懒最后出来的统计结果都可能让你怀疑人生。1. 整体思路与软件分工先说结论VESTA 负责“造”一个完美的初始晶格OVITO 负责“找”这个晶格在模拟之后被折腾成了什么样。这两款软件在分子动力学MD后处理里是黄金搭档但很多人容易把它们搞混或者只把 VESTA 当画图工具用浪费了它真正有用的建模能力。1.1 为什么分子动力学分析离不开缺陷识别分子动力学模拟的本质是让成千上万个原子在你设定的势函数、系综和温度条件下自然演化。辐照损伤模拟里高能初级离位原子PKA会撞击晶格原子产生级联碰撞。这个过程的持续时间只有几十皮秒到几百皮秒但会在晶格内部留下大量“伤疤”也就是缺陷。这些缺陷的类型和数量直接决定了后续的演化行为。比如间隙原子和空位如果数量不匹配会导致体积膨胀位错环如果长大了会成为位错运动的障碍导致材料硬化。你光看原子轨迹的动画是看不出这些统计规律的因为你肉眼看到的是几千个原子在振动缺陷可能只占其中几十个。这时候就需要一个客观、可量化的工具来告诉你体系里有多少个空位、多少个间隙原子、它们是怎么分布的、有没有形成团簇或位错环。这就是 OVITO 存在的意义。它不只是一个可视化工具更是一个计算分析平台。通过内置的 Wigner-Seitz 缺陷分析、位错提取算法DXA、团簇分析Cluster Analysis这些修改器Modifier它能把一团乱麻的原子构型拆解成清晰的物理图像。1.2 VESTA 和 OVITO 的核心分工差异这两个工具的使用阶段完全不同我先把分工讲明白。VESTAVisualization for Electronic and Structural Analysis在我这里主要做三件事第一快速查看晶体结构确认你模拟用的初始构型是否合理第二生成或者转换结构文件格式。比如你从 Materials Project 下载了 CIF 文件VESTA 可以帮你检查原子占位是否合理也可以直接导出成 LAMMPS 能识别的 data 文件虽然我一般用 Atomsk 做这件事但 VESTA 的输出有时候用来做交叉验证非常方便第三构建一些简单的超胞结构方便做一些初步验证。OVITO 则是完全面向 MD 轨迹分析的工具。它读取的是 LAMMPS 的 dump 文件、VASP 的 XDATCAR 或者 LAMMPS 的 restart 文件。它的核心价值不在于画出来的图多漂亮虽然它画图确实漂亮而在于它的修改器管线Modifier Pipeline机制你可以把好几个分析模块串联起来先做整体位移修正再做缺陷识别再做团簇分析最后只输出缺陷原子。这个流程是可复现的你只要做一次后面所有 dump 帧都能自动套用非常方便。1.3 这套流程适用的典型场景这套流程主要针对辐照损伤模拟和材料力学性能模拟这两大块。具体点说如果你做过以下任何一种模拟这篇文章对你就有直接参考价值用 LAMMPS 算过 Fe、W、Cu 等金属的级联碰撞过程想统计缺陷产量和类型模拟过长时间退火过程想看间隙原子团簇如何长大成位错环做纳米压痕或者拉伸模拟想分析位错从表面形核并发射的过程计算过晶界或者位错与点缺陷的相互作用想可视化缺陷在界面附近的分布。在这些场景里如果只盯着原子位置变化你很难回答审稿人或者导师的问题“这个缺陷是弗伦克尔缺陷还是普通空位团簇”“位错环的伯格斯矢量方向是什么是 1/2111 型还是 1/2110 型”OVITO 里的 DXA 工具就是用来回答这一类问题的。有一点要说明这篇文章的实操部分以 LAMMPS 的输出文件为例但原理完全适用于其他 MD 软件。OVITO 的输入格式支持非常广只要你的软件能输出原子坐标和周期性盒子信息基本都能导入分析。2. 从 VESTA 建模到 MD 输出有经验的模拟老手都知道后处理出了问题十个里有八个是初始模型没建好。这里我详细说说从 VESTA 构建完美晶体到 LAMMPS 输出 dump 文件的全过程。2.1 VESTA 安装与基础操作VESTA 的安装非常简单Windows 用户直接去官网下载 zip 包解压之后运行 VESTA.exe 即可没有环境变量配置也没有依赖库要装。Linux 用户稍微麻烦一点需要根据发行版选择对应的安装包或者用源码编译但一般用官方预编译的二进制就行。这里特别提醒VESTA 是免费软件但官网访问偶尔不稳定最好提前下载好安装包。打开 VESTA 后最常见的一个操作是导入晶体结构文件。它支持 CIF、VASP 的 POSCAR、WIEN2k 的 struct 文件等五十多种格式。对于做 MD 的人来说最常做的是从 Materials Project 网站下载 CIF 文件然后用 VESTA 打开检查结构是否合理。我一般会检查三个地方晶格常数是否符合预期、原子占位是否正确有没有把 Wyckoff 位置搞错、cif 文件里面的原子种类和化学计量比是否正确。初始模型构建这件事很多人倾向于直接在 LAMMPS 的 data 文件里写坐标或者用 Atomsk 生成。但如果你需要做一个特殊取向的晶体比如让 [110] 方向朝向盒子 z 轴那么 VESTA 的“变换”功能会非常方便。VESTA 里可以手动设置新的晶格向量从而把晶体旋转到你想要的方向。2.2 LAMMPS 轨迹文件的正确生成方式OVITO 本身不关心你怎么算的它只关心你输出的轨迹文件是否包含足够的信息。因此用 LAMMPS 计算时我们在 dump 命令里就需要把该写的信息写全。很多人习惯只 dump 原子坐标这在只做可视化时没问题但要放到 OVITO 里做缺陷分析至少还需要以下信息原子类型type便于区分不同种原子周期性盒子信息即 triclinic 盒子的三组基矢和倾斜因子一般用dump ... custom ... id type x y z时盒子的信息是独立写入的OVITO 会识别 LAMMPS 的 dump 头里的ITEM: BOX BOUNDS如果是多元素体系最好把元素种类也写进 dump 文件的注释里面可选OVITO 默认按原子类型序号命名原子你可以在导入时手动设置元素名称。这里直接给一个我常用的 dump 命令模板。假设体系是纯铁NPT 或者 NVE 系综我通常每 1000 步输出一帧对于级联模拟可能每 100 步甚至每 10 步输出一帧更合适但这个后面会说dump 1 all custom 1000 dump.cascade id type x y z xu yu zu这里xu yu zu是无包裹坐标unwrapped coordinates。这一步非常关键如果你输出的是包裹坐标x y z在跨周期边界时原子会突然从盒子一端跳到另一端OVITO 在计算缺陷或位错时会把这种跳跃错误识别为缺陷。我早期做模拟时就踩过这个坑统计出来的弗伦克尔缺陷数量比正常值高了一个数量级排查了一整天才发现是坐标输出方式的问题。对于级联碰撞模拟我建议把输出频率提高。级联过程大约在 10 皮秒内完成 如果你用timestep 0.001 ps那么 10000 步是 10 ps。最好每 100 或 200 步输出一帧这样你就能看清缺陷产生和复合的完整过程。2.3 模型检查VESTA 如何帮你对照初始与最终构型这一步是我个人习惯也许对你有参考价值。在跑完 MD 模拟后除了用 OVITO 看最后的 dump 帧之外我还会用 VESTA 检查初始构型或者中间某帧的构型的原子排布是否正常。具体做法是从 LAMMPS 的 data 文件或者转化为 POSCAR 格式导入 VESTA然后在“对象”面板里把原子显示半径调大视角沿着某个晶向观察原子层与层之间的排列。正常完美的 BCC 或 FCC 晶体原子层是规则的平行线如果你看到原子层有明显的错位、多余原子插入或者原子缺失的“黑洞”那说明模拟过程确实产生了缺陷而且这些缺陷可能在 OVITO 的统计里也能对应上。这个交叉验证其实非常有用因为 OVITO 的 Wigner-Seitz 分析有时候会把边界原子或者热振动大的原子误判为缺陷。你需要一个“肉眼确认”的步骤来排除这种系统误差。3. OVITO 核心功能实操缺陷与位错环分析真正的大头来了。OVITO 的分析能力集中体现在它的修改器Modifier列表上。平时我们用的最多的是Wigner-Seitz Defect Analysis以下简称 WS 分析、Dislocation Extraction Algorithm (DXA)以及Cluster Analysis。这三个功能包办了辐照损伤分析 90% 的需求。3.1 导入轨迹与初始预处理启动 OVITO 后第一步是导入文件。如果你已经生成了 dump 文件直接拖拽进 OVITO 窗口即可。OVITO 会识别 LAMMPS dump 格式并自动读取拓扑信息盒子尺寸、原子数量、类型等。导入之后我建议第一件事是添加一个Unwrap Trajectories修改器。虽然前面我们 dump 时已经输出的是无包裹坐标xu yu zu但对一些老的轨迹文件可能输出的是包裹坐标这个修改器能根据原子的运动轨迹重建连续的无包裹坐标。具体操作是选中Unwrap Trajectories然后勾选“Use unwrapped coordinates”选项。这个修改器不仅仅是为了让动画看起来连续更是为了让后面的 WS 缺陷分析和 DXA 分析能正确处理跨周期边界的原子。没有这一步跨边界原子会被错误地识别为间隙原子导致统计结果完全失真。接下来如果你模拟的是 NPT 系综盒子尺寸可能在某一帧之后发生了变化。OVITO 会自动读取每帧的盒子信息这没问题。但如果你在 LAMMPS 里用了fix npt并且输出的是id type x y z xu yu zu那么 OVITO 的默认显示是用包裹坐标来放置原子这会导致原子位置在盒子的边界处看起来“断开”。为了正确显示你需要在 OVITO 里打开“显示设置”右侧面板的 Display 选项将坐标类型换成“无包裹坐标Unwrapped”。3.2 用 Wigner-Seitz 缺陷分析识别弗伦克尔缺陷WS 缺陷分析是辐照损伤模拟中最核心的定量工具。它的原理非常巧妙是用“单元格占用”来判断缺陷。怎么理解呢想象一个完美的 BCC 晶格每个原子周围都划分出一个“势力范围”Wigner-Seitz 原胞。在完美晶体中每个 WS 原胞里恰好有一个原子。如果模拟后某个 WS 原胞里没有原子那么这里就产生了一个空位如果某个 WS 原胞里有两个原子那么多出来的那个就是间隙原子。而空位和间隙原子往往是成对出现的——你把我从我的格位上撞出去我原来的位置空出来了空位我挤到了另一个空隙里间隙原子这一对组合就叫弗伦克尔缺陷。在 OVITO 里的操作如下选中一条轨迹或某一帧点击“添加修改器”按钮在列表中找到Wigner-Seitz Defect Analysis并添加在弹出的参数面板里最关键的是“Reference”选项需要指定参考晶格Reference Configuration。这个参考晶格必须是完美晶格。OVITO 会自动使用轨迹的第一帧作为参考但这里有个容易踩的坑如果你的轨迹第一帧不是完美晶格而是已经包含了一些热振动或者缺陷那么后续分析会把第一帧中的“缺陷”作为基线统计出来的数量就会偏低。所以最稳妥的做法是单独导入一个完美晶格文件比如 VESTA 生成的 POSCAR 或者 LAMMPS data 文件然后把它指定为参考。在查看结果时OVITO 会自动给缺陷原子标记一个属性一般叫做Defect Type或Is Defect。你可以用颜色编码Color Coding修改器把缺陷原子高亮出来。具体做法是添加Color Coding修改器设置颜色依据为“缺陷类型”或者你自定义的粒子属性然后把颜色映射从“灰度”调成“蓝-红”之类的对比色。这样空位和间隙原子就能在视觉上明显分开。用 WS 分析区分空位、间隙原子和弗伦克尔缺陷统计结果一目了然。例子我做过的 20 keV PKA 级联模拟BCC 铁在 50 ps 时刻体系中有 42 个空位和 46 个间隙原子。其中 38 个空位和 42 个间隙原子能一一配对成弗伦克尔缺陷空间位置相距非常近剩下 4 个空位和 4 个间隙原子是游离的或者是团簇的一部分。这些数据告诉我们的信息量非常大——如果弗伦克尔缺陷占比高说明级联产生的缺陷以单点缺陷为主如果游离的间隙原子多说明它们可能已经聚集成了位错环。3.3 位错环分析与伯格斯矢量判定点缺陷统计虽然重要但辐照损伤研究的重点往往在于位错环。位错环是集体类型的点缺陷通常是间隙原子在特定晶面上聚集形成的环状位错。它在 OVITO 里的分析工具是Dislocation Extraction AlgorithmDXA。DXA 的实现思路是先将原子构型按照局部的晶格类型BCC、FCC、HCP进行分类然后通过计算伯格斯矢量圈积分Burgers circuit来识别位错线。这一块听起来很复杂但 OVITO 已经把它做得很傻瓜化了。我的操作步骤如下在添加了 WS 分析之后再添加一个Dislocation Analysis (DXA)修改器注意新版 OVITO 里它叫Dislocation Extraction Algorithm在“修改器”菜单下的“DXA”。设置晶格类型一般选择BCC或FCC取决于你的材料。点击“确定”后OVITO 会运行计算并在渲染窗口中显示位错线。通常位错线颜色对应三种类型完美位错、层错和表面位错。在“管线”面板下方会出现一个位错表格里面列出了每条位错线的长度、伯格斯矢量等信息。这里我要强烈建议你做一步DXA 分析完成后把位错线文件导出成文本格式具体操作是在“修改器管线”里选中 DXA然后在右侧面板点击“导出文件”按钮。导出的文件里含有每条位错线的几何节点坐标和伯格斯矢量分量这些数据可以拿去做更精细的统计。对于 FCC 晶体最典型的是1/3111 型位错环也叫 Frank 环它包含层错另一类是1/2110 型位错环也叫完美位错环可以通过滑动而移动。对于 BCC 晶体最常见的1/2111 位错环和100 位错环。那么问题来了软件只告诉你是位错环怎么判断它是哪种类型答案就在伯格斯矢量方向。DXA 输出的伯格斯矢量就是关键判据。在 OVITO 的表格里位错线会标注Burgers Vector。比如你看到 (0.5, 0.5, 0.5) 这个矢量换算成物理单位就是 1/2[111]。如果你的位错环的伯格斯矢量是这个方向且在 (111) 面上那它是一个 1/2111 环。这里有一个经验DXA 显示的位错环不一定都是圆环形状。在 BCC 金属中1/2111 位错环可能在 {110} 或 {111} 面上形成呈现多边形甚至是不规则形状。不要被“环”字误导只要位错线构成一个闭合回路它就是位错环。DXA 会显示位错线成环或者只是半条线的片段这取决于你的盒子是否跨周期边界。解决跨边界问题的方法是在 DXA 参数面板里勾选“遍历周期图像Traverse periodic images”这样 OVITO 会把跨越边界的位错线缝合起来形成完整的环。3.4 缺陷团簇分析与尺寸分布除了单点缺陷缺陷的团簇化行为也很重要。间隙原子在级联过程中会发生聚集形成双间隙、三间隙甚至更大的团簇。这些团簇如果足够大就会坍缩成位错环。统计这些团簇的尺寸分布是研究材料辐照硬化趋势和缺陷演化动力学的重要方法。OVITO 里的Cluster Analysis修改器专门做这个事。它的参数设定里有一个“割断距离”Cutoff Distance你需要根据晶格常数来设定。以 BCC 铁为例最近邻原子间距为 2.48 Åa2.855 Å 时最近邻距离是 √3/2 * a ≈ 2.47 Å。如果你要判断间隙原子是否聚集cutoff 距离可以设为 3.2 Å 左右这个距离大致能覆盖近邻壳层但不会把不相邻的间隙原子误连成团簇。设定好后OVITO 会给每个原子生成一个Cluster ID属性同属一个团簇的原子 ID 相同。然后我对团簇分析结果通常做这么几件事把团簇 ID 属性用Color Coding映射为彩虹色直观看到缺陷团簇的空间分布用Expression Selection修改器把空位和间隙原子按团簇 ID 分开筛选分别统计尺寸分布导出原子属性列表在 Python 或者 Excel 里画分布曲线。对于 BCC 铁来说间隙团簇尺寸在 n2~3 时是最小的稳定团簇对于 1/2111 位错环通常团簇尺寸达到 n20~30 时才能被 DXA 清晰识别为环状结构。这个阈值并不绝对但你可以通过对照 Cluster Analysis 和 DXA 的结果找到自己体系中“团簇长大为位错环”的临界尺寸。4. 实操案例BCC 铁的级联损伤分析前面讲了一堆原理和功能这部分我完整走一遍一个典型案例。以BCC 铁20 keV PKA 级联碰撞模拟为例从初始模型到最终输出位错环分析结果。4.1 模型构建与模拟参数设定初始模型是一个大约 30×30×30 个晶胞的超胞目标是让 PKA 的级联过程不撞到盒子边界。对于 20 keV 的 PKA通常在 Fe 中产生的级联尺寸在 15~20 nm 左右因此盒子边长至少需要 30~40 nm 才有足够的安全余量。这里我为了演示用一个 20×20×20 的超胞大约包含 16000 个原子BCC 每个晶胞包含 2 个原子20×20×20 × 2 16000。构建步骤在 VESTA 中构建 Fe 的 BCC 晶胞空间群 Im-3m晶格常数 a2.855 Å导出为 POSCAR 或 CIF用 Atomsk 或者自编脚本扩展成超胞输出为 LAMMPS data 文件也可以用 VESTA 的“编辑”→“晶体结构”功能设置超胞范围来生成在 LAMMPS 输入文件里读取这个 data 文件定义势函数Fe 常用的是 Mendelev 势或者 Ackland 势设定系综和 PKA 速度方向。PKA 设置这里我不是重点讲简单提一句在 LAMMPS 里通常用一个set命令给某个原子一个初始速度速度方向随机取向大小由动能公式 E 1/2 m v^2 算出。20 keV 对应速度大约是 sqrt(2*20000/(m_fe))大约 269 Å/ps。模拟跑完之后我们得到 dump 文件。4.2 OVITO 的分步分析管线搭建第一步导入 dump 文件。导入后我通常会先添加Unwrap Trajectories让每个原子的坐标是无包裹且连续的。第二步添加Wigner-Seitz Defect Analysis参考构型选择先前准备好的完美晶格 data 文件。分析结果出来后选中“粒子”视图可以看到大量的空位和间隙原子。第三步添加Color Coding修改器设置颜色依据为“缺陷类型”。此时把“缺陷类型为 0 的原子”设为灰白色也就是完美晶格原子把“空位”设为蓝色“间隙原子”设为红色。这样显示效果非常直观一片灰白背景上蓝色和红色小点清晰可见。第四步添加Cluster Analysis设置 cutoff 距离为 3.2 Å仅对“空位”和“间隙原子”分别做团簇分析。在Expression Selection里输入Cluster Size 2来筛选多体团簇再用Delete Selected Particles删除孤立缺陷剩下的就是团簇。第五步添加Dislocation Extraction Algorithm (DXA)设置晶格类型为 BCC。运行完毕后在三维视图里可以看到位错线以紫色或青色线条显示。如果要看其伯格斯矢量右键点击位错线表格里的条目就可以看到。我拿我自己跑过的案例来举例最后统计结果大概是这样的缺陷类型数量备注空位48其中有 5 个空位团簇含二空位及以上间隙原子52其中 80% 以间隙团簇形式存在弗伦克尔缺陷对38空位-间隙原子在 3 Å 内配对位错环数量2均为 1/2111 型弗兰克环演变而来这些数据可以直接拿来画图表写入论文了。OVITO 里可以通过“渲染”菜单导出高分辨率图片我通常选择“Tachyon 光线跟踪”渲染器输出 PNG 格式300 dpi 以上作为论文配图基本没问题。4.3 渲染出图的操作细节如果要出论文级图片渲染环节也有几个小技巧渲染前一定要把背景颜色改成白色或者透明。论文投稿通常要求白底黑字OVITO 默认是黑底需要在“渲染设置”里把背景改为白色。位错线渲染的粗细要合适。太粗会盖住原子结构太细看不清。建议在位错线属性里把“宽度”设置为 0.8~1.2 Å 这个量级。透明度设置为了让视图焦点集中在缺陷上我会把完美晶格原子的透明度调到 0.1 左右缺陷原子完全不透明。视角选择用“状态栏”里的视角旋转工具把位错环调整到能完整展示伯格斯矢量方向的最佳角度。对于 BCC 铁的 1/2111 位错环通常从任意方向斜 45° 俯视效果最好。5. 常见问题与排查技巧这部分是我实际踩坑最多的地方也是大家问得最多的问题。下面这些问题每一个我都亲身遇到过解决起来有时候很耗时间这里直接整理成清单给你避坑。5.1 缺陷数量远多于预期如果你跑完 WS 分析发现体系里有几百个空位和几百个间隙原子但你明明只轰击了一次 PKA这显然不合理。最可能的原因是参考构型设置错误或者轨迹文件包含了盒子整体移动的信息。排查思路第一确认参考构型设置的是“完美晶格”。如果第一帧已经有缺陷比如你把弛豫阶段的构型当作第一帧了那它就成了基准后续缺陷数量会严重偏高或者偏少。第二确认盒子尺寸是否在模拟过程中发生了变化。如果在 NPT 系综下模拟盒子体积会变化。WS 分析需要对比完美晶格的位置如果盒子大小变化了需要先使用Affine Transformation修改器把盒子缩放回参考构型的尺寸再进行 WS 分析。第三检查是否选择了正确的坐标类型。使用包裹坐标进行 WS 分析会出大问题一定要确保粒子坐标是 unwrapped。5.2 位错环总是识别不出来DXA 识别位错环失败往往不是体系里真的没有位错环而是参数或显示层面的问题。第一位错环尺寸太小。DXA 的识别能力与盒子的分辨率有关如果位错环只有几个原子大小DXA 可能把它当作噪声忽略。这个时候要降低显示阈值在 DXA 参数面板中把“显示最小位错长度”调小比如从 10 Å 调到 2 Å。第二没有选择正确的晶格类型。如果你模拟的是 FCC 铜却在 DXA 里设置成了 BCC那结果基本是乱的。DXA 的晶格识别是自动的但手动指定晶体结构能有效避免误判。第三周期性边界问题。当位错环跨越盒子边界时DXA 默认不会自动把两边连起来。解决办法是勾选遍历周期图像Traverse Periodic Images选项这样跨边界位错会被重新缝合。5.3 WS 分析与 DXA 结果对不上这个情况也很常见。比如你发现 WS 分析统计出大量间隙原子但 DXA 显示的位错线长度很短或者位错数量很少。这是因为间隙原子并不总是能构成位错环。只有当大量间隙原子在同一个滑移面上聚集并形成闭合的位错回路时DXA 才能识别为位错环。少量的孤立的间隙原子团簇在 WS 分析中能看见但在 DXA 中不会形成位错。所以这两种分析是互补关系不是替代关系WS 分析告诉你“有多少缺陷”DXA 告诉你“这些缺陷中有多少发展成了位错”。5.4 空位和间隙原子一团模糊难以区分如果空位和间隙原子在空间上高度重叠可能是你的显示原子半径设置太大导致原子球互相遮挡。解决办法是在“显示设置”里把原子半径缩小到 0.5~1.0 Å同时把空位以“透明小球”或“网格点”方式显示。另外我建议把空位和间隙原子分开成两个粒子类型显示。具体方法是添加Create Bonds或Expression Selection把“缺陷类型 空位”和“缺陷类型 间隙原子”分别筛选出来再分别独立设置显示属性。这个操作虽然略显繁琐但视觉效果和后续筛选都会舒爽很多。5.5 处理超大轨迹文件时的卡顿问题一个级联模拟的轨迹文件可能有几十 GBOVITO 导入时会占用大量内存。如果你只是想做单帧的透彻分析我建议用 OVITO 的“加载时只读取当前帧”模式或者直接只导出最后稳定时刻的单个构型帧dump 文件的一帧一半几个 MB而不是整个轨迹做分析。具体做法是添加Slice或者Select Time Interval修改器只保留需要的帧。也可以用Capitalize/Downsample修改器每 10 帧读一帧降低内存压力。6. 命令行批处理与脚本扩展如果你的模拟体系很多比如要通过改变 PKA 能量5、10、20、50 keV来做系统动力学研究每一组模拟的路径都有几十帧甚至上百帧在 OVITO GUI 里手动逐个分析会非常痛苦。好在 OVITO 内置了 Python 脚本接口也支持命令行模式。这一节简单介绍一下怎么用脚本批量统计缺陷数量。6.1 使用 OVITO Python 批处理举个例子下面这段脚本读取一个 dump 文件计算其缺陷数并输出空位数和间隙原子数。你需要安装 OVITO Python 模块并设置好路径。import ovito from ovito.io import import_file from ovito.modifiers import WignerSeitzAnalysisModifier, UnwrapTrajectoriesModifier pipeline import_file(dump.production) # 添加 Unwrap Trajectories 修正坐标 pipeline.modifiers.append(UnwrapTrajectoriesModifier()) # 添加 WS 缺陷分析参考构型指向完美的 data 文件 ws WignerSeitzAnalysisModifier() ws.reference_configuration.load(Fe_perfect.data) pipeline.modifiers.append(ws) data pipeline.compute() # 从表格中读取缺陷数量 num_vacancies data.tables[defects].rows[Number of Vacancies][0] num_interstitials data.tables[defects].rows[Number of Interstitials][0] print(fvacancies: {num_vacancies}, interstitials: {num_interstitials})这个脚本非常简单但全流程批处理完全够用。你可以把它套到一个循环里对所有 dump 文件执行然后把结果汇总成 CSV 文件再用 Origin 或 Python 画图表。6.2 命令行批量渲染如果你需要把几十帧粒子图渲染成视频OVITO 也提供命令行渲染功能。可以写一个循环用ovitos命令执行渲染脚本把每帧输出为 PNG 图片然后用 ffmpeg 合成动画视频。我通常这样操作ovitos render_frames.py movie ffmpeg -framerate 24 -i movie/frame_%04d.png -c:v libx264 output.mp4这样生成的级联动画非常适合放在论文补充材料里或者组会展示。7. 一点实操心得与总结这篇文章我从 VESTA 建模讲到 OVITO 缺陷分析覆盖了分子动力学模拟后处理最常用、最核心的两条主线WS 缺陷分析和DXA 位错环分析。总结一下我个人的经验第一参考构型永远单独准备一份完美晶格不要用轨迹第一帧。这是很多新手最容易忽略的坑。第二做缺陷分析之前先检查坐标类型。输出 unwrapped coordinates 是一条铁律不然跨周期边界的原子会让你体会到什么叫“薛定谔的空位”。第三把 WS 分析的结果和 DXA 的结果放在一起对比看。单看任何一方都可能得出偏颇的结论。WS 告诉你数量DXA 告诉你结构两者结合才能讲清楚一个完整的损伤故事。第四利用 OVITO 的脚本批处理能力。哪怕你只是处理十来个 dump 文件用 Python 脚本也能节省一半的时间更重要的是可复现参数改了重跑一遍就行不会出现“上次手调了什么忘了”的尴尬。最后再讲一个小技巧。如果你想把缺陷的空间分布信息提取到自己熟悉的工具里去分析可以在 OVITO 的表格里直接复制缺陷原子的Position和Defect Type两列粘贴到文本编辑器里保存为 CSV。这个 CSV 你可以在 Python 里用scipy.spatial.distance做对分布函数、用sklearn.cluster.DBSCAN做团簇识别甚至可以用 Voronoi 算法做空位的配位数分析。OVITO 让你完成“第一次筛选”自己动手做后续“精细分析”才能应付论文里层出不穷的“请进一步分析”的审稿意见。
返回列表