1.AIMD算完之后,从文件中提取步数、温度和能量的数据
grep T |awk '{print$1,$3,$7}'>1.dat
这里用到两个关键命令:
grep(过滤文本)和awk(处理文本)。还被经常放在一起讨论的有sed(修改文本)。
grep命令先选择包含T的行,然后awk命令,逐行读取文本,执行结果可以通过print功能将字段数据打印显示。print$1,$3,$7表示输出每行的第一、第三、第七字段。
看一下文件中的内容会更加清晰,比如,我们做了5000步的分子动力学模拟,每一步都会做静态自洽计算,因此会跑几个电子步,直到收敛为止。
所以,N表示电子结构的迭代步数;
E代表当前电子步的体系能量;
dE表示当前电子步与上一电子步能量的差值,这个值肯定是随着迭代逐渐减少的,直到达到我们设置的收敛标准,比如这里的10-5次方,即停止。所以AIMD,每一步其实都是在做静态计算。
deps能带结构能量的变化;
ncg作用于波函数的哈密顿量的评价数;
rms试用波函数的残差的范数(即它们的近似误差);
rms(c)输入和输出电荷密度之差。
但我们需要得到的是迭代过程中温度、总能等信息随步数的变化,因此首先需要对数据最一个筛选,用到:grep T 命令,就可以筛选出只有T的行。
因为T有很多行,我们再逐行去读取每一行,并选择需要的字段,字段是通过空格隔断的,比如最后一行,第1,2,3,4,5,6,7个字段分别是指“5000”,“T=”,“2792.”,“E=”,“-.+02”,“F=”,“-.+02”awk命令,... ...,如果,想要把所选择的数据都输入制定文档的话,还需要“>1.dat”
2.跑完AIMD之后,从中提取压强值。
grep 'total ' | cut -c 20-30|awk'{print$1}'>P.dat
我们可以先使用grep 命令查看一下:
发现有几个相关值:
:外部压强,正值表示该结构在0GPa下会膨胀;
:拉伸应力awk命令,预设压强
(ideal gas 理想气体校正):流体中的动态压强、静水压强
total :总压强,等于 +
我们这里选择总压强:
grep 'total '
然后根据实际情况做字符段的截取,只选择数据部分,然后再借助awk逐行读取,print命令输出到.dat文件。
3.应用
我之前跑了不同体积下的NVT,需要提取温度和压强信息,所以,根据上面的命令写一个for循环的脚本,一次性输出:
当然,也可以直接把后处理的命令直接加在投任务的脚本后面,或者,也可以根据需要把所有数据,放在同一个文件中。