本帖最后由 Graphite 于 2024-9-25 03:26 编辑
1.0版本(稳定版本,C++二进制文件)
更新说明:
- 支持.xyz文件
- 已修复0.9版本在部分系统中不能保存输出文件的问题。
下载:
1.0版本
reax_tools
(5.51 MB, 下载次数 Times of downloads: 65)
特性:
- 长期迭代更新,直至完成所有的开发计划为止
- 采用C++全部重写,性能得到极大优化,路由器都能算的级别
- 增加直接读取轨迹的功能,包括.lammpstrj文件和cp2k等软件产生的连续.xyz文件
- 老功能清洗Lammps的.species.out输出依旧保留
- 唯一依赖是C++标准库(只要你的linux系统不太旧就可以)
使用方法:
(随便输入错误的选项,也会弹出该使用方法)
- -f .xyz/.lammpstrj file -> [读取轨迹] 采用van der Waals半径决定键、建立键长键角二面角、建立分子拓扑并分析
- -s lammps reaxff/species file (spieces.out) -> [读取物种文件(老功能)] 读取species.out文件清洗
- -r value 调整van der Waals半径的缩放因子,默认1.2,也就是OVITO的设置。
- -t element,element... 逗号分割的元素名称, 如C,H,O,N,S,F 读取lammpstrj这类只有type_id的轨迹时,此选项是必须的)
- -me element 通过元素的原子数量合并物种类型,例如C1~C4合并为group_C1-C4
- -mr range1,range2...通过原子数量合并物种类型的范围,例如1,4,8,16
- -rc 上述功能按指定原子的数量重算物种的权重,如C2H4被认为是权重2,而不是1个分子
- --order element,element...整理输出化学式中元素的顺序,逗号分割 (默认: C,H,O,N,S,F,P,其他元素按原子量排)
复制代码
实现细节:
- 两帧两帧地Tick-Tock交替式读取轨迹,建立结构对象(两帧是因为后续要做基团迁移、演化链等功能,并且节省内存)
- 每一帧的结构中,原子先用K-D树搜索近邻列表,得到邻居原子,再根据邻居原子的距离判据,建立化学键,根据键连关系,利用深度优先算法,全搜索间接连接的原子,构建分子图。
- 及时整理和清洗物种数量演化数据,建立反应演化链、基团转移信息(此功能尚在测试,很快上线)。
性能:
测试用例中,轨迹模式读取350MB的lammpstrj轨迹,1.3万原子,1000帧,单核低压U用时160秒,消耗内存不到100MB,物种文件模式读取对应species.out文件,用时1秒。
速度主要取决于轨迹的大小、成键的数量。
后期开发计划:
- 反应链:计算每个分子的下一帧后代(根据图的相关性计算),从而建立每个分子从生成到销毁的生命周期。(销毁指分解成数个不到原体积50%的小分子,后者作为一个新的分子开始它的生命周期)
- 基团转移:每一种基团(分子拓扑片段)的生命周期,原理同上,体现为何时依附于何种分子。
- 计算反应速率、反应级数
- 可视化输出图形和文档报表
示例:
指令:
- ./reax_tools -f input_file_traj_350M.lammpstrj -t Fe,C,H,O,N,S,F -me C
复制代码
----
0.3版本(稳定版本,Python)
更新说明:
修复如CHO等多个单原子元素构成的化学式导致的bug。
python版本(仅.species.out物种文件清洗功能)停止更新。
下载:
0.3版本
reax_species.py
(14.63 KB, 下载次数 Times of downloads: 192)
特性:
Lammps一大特色是可以用ReaxFF做反应模拟,最早不支持直接给出物种,只能输出键列表(reaxff/bonds, reax/c/bonds),需要用ChemTrayzer等软件从键列表再分析生成多少物种。后来支持了reax/c/species,实时输出产物分子。但因为是每帧输出,结构会很混乱,例如100 ps打印了10个物种,500 ps时已经20个物种了,而且前后顺序也不一致,不方便监控。反复调参数试的时候更是难受。
有感于此,写了个工具清理。该工具能实现以下功能:
- 将所有物种对齐成表格,还没出现或已消失的为0。
- 自定义合并,例如将C4-C6的碳团簇合并成一个组。
- 生成屏幕简报,包括初始、最终(最后5%的帧)、最大、平均数量。
- 原子权重重算、整理化学式、整理低频次物种等见解功能。
另:当reax/c/species输出的频次、平均值的取法、键级cutoff不合理时,判定的产物也可能不合理,这点不在讨论之列。如有需要可以改cutoff,rerun让lammps重新判断一遍(无需再做全模拟)。
用法:
- Usage: reax_species.py [opts] [args]
- -f inputfile # lammps reaxff/species (reax/c/species) 输出的文件
- -m, --merge C # 按照原子数合并物种,默认C
- -r, --range 1,5,9,17,65 # 设定合并的原子数上下限组,如C1, C2-C4, C5-C8, C9-C16, C17-C64, >=C64等
- -d, --drop-others # 将出现频次低(0.01)的物种扔进 "others"组里
- -c, --recalc # 以原子数作为权重重新计算物种出现量,如当-m设为C时,C4H10的权重为4,5个C2H6被视为10的权重。这在程序一开始就会重算,因此会影响整体结果。
- -o, --order C,H,O,N # 整理化学式的顺序,例如HCO -> CHO, H4C2NO -> C2H4ON
复制代码 示例:
指令:
- reax_species -f 05-shear.species.out -m C -r 1,4,8,16 -d --order C,H,O,N,S,F
复制代码 屏显输出:
- NOTE: 31 species merged into group C1-C3
- NOTE: 9 species merged into group C4-C7
- NOTE: 15 species merged into group C8-C15
- NOTE: 108 species merged into group >=C16
- NOTE: 12 species merged into group others
- Formula Init Final Max Avg
- H2 42.0 49.0 47.4 49.0
- H2O1 1116.8 1077.2 1078.2 1129.0
- H5O2 12.8 21.8 22.7 33.0
- H1O1 28.8 34.0 34.3 37.0
- O1 40.5 67.0 58.9 67.0
- H3O1 40.0 53.2 48.8 60.0
- C1-C3 0.0 10.0 5.2 10.0
- C4-C7 0.0 2.0 1.0 2.0
- C8-C15 4.5 7.0 6.1 7.0
- >=C16 36.0 36.5 35.3 37.0
- others 14.5 8.5 11.3 16.0
复制代码 保存的文件:
- Timestep Number-of-molecules Number-of-species H2 H2O1 H5O2 H1O1 O1 H3O1 C1-C3 C4-C7 C8-C15 >=C16 others
- 500 1336 31 41 1129 12 27 38 34 0 0 4 36 15
- 1000 1333 32 42 1116 12 27 40 40 0 0 4 36 16
- 1500 1338 31 42 1115 12 30 41 44 0 0 5 36 13
- 2000 1336 34 43 1107 15 31 43 42 0 0 5 36 14
- 2500 1343 35 44 1109 12 31 45 48 0 0 5 36 13
- 3000 1339 35 44 1103 17 32 46 44 0 0 5 36 12
- 3500 1336 35 44 1100 19 31 46 42 0 0 5 36 13
- 4000 1336 36 45 1097 21 31 47 40 0 0 6 36 13
复制代码
|