背景
由于课题需要,现根据lammps运行得到的轨迹需要提取出目标原子的电荷值
步骤
思路
首先确定目标原子在轨迹中的序号(lammps每个原子都有自己独立的【分子号+原子号】)
其次要十分清楚体系中的分子号排序方式,然后只要筛选出目标原子的编号即可知道电荷值
1. 进入目标文件夹(conp-04_2V-02)
2. 确定目标原子序号:
vi lm-conp-0V.inp
查看阴阳离子数和气体个数,进行求和,记为A:106*2+32
其中,type里最后一位代表金属原子(我们的目标原子),记为B:21
不放心的话,可以查看最后一帧输出的data文件,序号仍为21
vi res.002
3. 输出最后一帧里目标原子的电荷值:
(如果lammps输出的data文件轨迹部分的原子序号没有按从小到大的排列的情况:)
grep "A+1 B" res.002
grep是linux中的提取命令,使用格式参考:linux命令查询某个条件的前10行
"A+1 B" 的格式是熟知res.002中轨迹格式后的总结
第一次获得的第一列数值记为C:5095
再取A+3输出一次,第一列数值记为D:6102
(两次是因为有上下两个极板,A+3是熟知原子序号的叠加方式后的总结,A和A+3都是目标原子所在的分子号,B是目标原子的原子号)
4. 如果是课题需要,建议使用目标原子电荷值的均值(虽然目前体系也处于平衡态,但个别数据存在波动性而不具备代表性)
在运行过程中,mote.charge文件存放了每一帧内所有原子的电荷值
grep "C " mote.charge | tail -n 120
这里注意:C后面有个空格(否则重复的太多了)
tail指的是输出mote.charge尾部的数据,如果是头部的话用head
这段命令意义:输出mote.charge中满足条件("")的尾部120行数据到屏幕上,如果需要放到文件put.txt里,可以用下面的命令:
grep "C " mote.charge | tail -n 120 > put.txt
第一列为原子序号值,然后三列为原子的xyz值,最后一列是电荷值
将最后一列拷贝到Excel里,数据-分列-完成,删除杂乱的内容,数据-筛选(核查原子序号是否都是满足条件的),求和后取均值即可
(没删干净:)
(删干净了:)