计算化学公社

标题: 监控dimer方法优化TS能量变化的一个小脚本 [打印本页]

作者
Author:
丁越    时间: 2021-11-23 19:25
标题: 监控dimer方法优化TS能量变化的一个小脚本
本帖最后由 丁越 于 2025-3-19 15:53 编辑

监控dimer方法优化TS能量变化的一个小脚本

  ***************
2025.3.19 注: 重新修改了脚本
****************
  最近坛友djjj148分享了CP2K中使用dimer方法时找过渡态的经验(http://bbs.keinsci.com/thread-23516-1-1.html),使得寻找过渡态一下子方便了太多,非常nice!但是我个人觉得在监控能量变化那块Python脚本使用起来有点不方便,有点长,老是记不住,尽管我写了alias。  于是写了shell小脚本来方便监控DM优化过程中能量变化(初次写脚本,写的不对的地方请各位坛友多多批评指正)

  1. #!/bin/bash
  2. #This script is used to monitor energy change during TS optimization with dimer method.

  3. function help() {
  4.         echo "Usage: DMmonitor.sh [output file of cp2k]"
  5. }

  6. if [[ $# -lt 1 ]]; then
  7.         help; exit 1
  8. fi

  9. inf=$1
  10. grep "ENERGY" ${inf} |head -1|awk '{print NR-1,"\t",$9}' > energy.txt
  11. grep "Informations at step" ${inf} -B 12|grep "ENERGY" |awk '{print NR,"\t",$9}' >> energy.txt
  12. cat energy.txt | awk 'NR==1{a=$2} NR>1{print NR-1,"\t",($2-a)*27.2114}' > deltaE.txt
  13. tail -10 deltaE.txt > last10E.txt

  14. gnuplot -p << EOF
  15. set multiplot layout 2,1
  16. set grid
  17. set xlabel "steps"
  18. set ylabel "Energy Variation (eV)"
  19. plot "deltaE.txt" u 1:2 w lp lw 1 lc rgb "dark-blue" ps 1 pt 7 t "total variation"
  20. plot "last10E.txt" u 1:2 w lp lw 1 lc rgb "dark-blue" ps 1 pt 7 t "last 10 steps variation"
  21. EOF

  22. rm -f energy.txt
  23. rm -f deltaE.txt
  24. rm -f last10E.txt
复制代码

  使用脚本时需要调用gnuplot画图,CentOS8中可以直接使用yum安装该软件。另外满分推荐MobaXterm这个免费的win下远程软件,这个软件可以直接调用Linux下的图形窗口如gnuplot、VMD、以及Multiwfn的一些绘图窗口等。所以Xshell之类的软件也就再无用武之地了。
使用:将脚本放到如~/script的目录下,然后在./bashrc中设置export PATH=$PATH:/home/xxx/script,之后就可以在任何目录下输入DMmonitor.sh使用脚本了。

  下面简单说明一下脚本的运行流程:

grep ENERGY ${inf} |head -1|awk '{print NR-1,"\t",$9}' > energy.txt  是提取out文件中第一个SCF结束后的能量来作为体系的初始能量。这里与坛友djjj148的设置有所不同,他是设置了第一个rotation步骤结束后的能量为体系的初始能量,也无所谓,想用这个能量的改一下这一行就可以了。
grep "Informations at step" ${inf} -B 12|grep ENERGY |awk '{print NR,"\t",$9}' >> energy.txt  Dimer 算法的运行流程有两步,旋转和平移过程。具体介绍阅读sob老师的(http://sobereva.com/44)博文。grep "Informations at step" ${inf} -B 12|head -1 这步是抓取每次dimer优化后当前体系的总能量,-B,berfoe,即向上抓取n行;awk '{print NR,"\t",$9}' 中 NR代表行号,这里面print NR就代表输出过渡态优化步数了。\t代表tab分隔。
cat energy.txt | awk 'NR==1{a=$2} NR>1{print NR-1,"\t",($2-a)*27.2114}' > deltaE.txt  这步就是将每步过渡态优化后的能量与体系的初始能量相减。energy.txt文件中第一行是体系的初始能量,NR==1{a=$2}是将体系的初始能量赋给变量a;NR>1{print NR-1,"\t",($2-a)*27.2114}表示将每步的过渡态能量与初始能量求差并且转化成以eV为单位输出,并且只打印第1,2,3。。。步过渡态能量的差值。

gnuplot 作图时支持交互模式输入,-p,persist,代表告诉程序在退出时不要关闭作图窗口。EOF是什么在sob老师博文(http://bbs.keinsci.com/thread-24929-1-1.html)说的很清楚了。
set grid 设置作图区域的网格线
set xlabel "steps" 设置x轴标签
set ylabel "Energy Variation (eV)" 设置y轴标签
unset key 取消显示图例
plot "deltaE.txt" u 1:2 w lp lw 1 lc rgb "dark-blue" ps 1 pt 7   u,using;1:2,代表作图的x、y轴数据是第几列;lp,linepoint的简写,点线样式;lw,line wides,线宽;lc,line color。这里如果不知道要用什么线型以及颜色,可以在输入gnuplot进入绘图模式后再输入test查看线的样式。另外也可以参照这篇文章设置线颜色(http://t066v5.coding-pages.com/2014/04/06/gnuplot%E9%A2%9C%E8%89%B2%E8%AE%BE%E7%BD%AE/);ps,pointsize,点的尺寸;pt,pointtype,点的类型;
rm两个文件确保下次使用脚本时产生的数据不会累加到当前的文件中。








作者
Author:
Aridea    时间: 2021-11-23 19:52
好物,感谢分享~
作者
Author:
neocc    时间: 2022-5-15 23:10
本帖最后由 neocc 于 2022-5-15 23:13 编辑

如果是在超算没有图形化界面的环境中,推荐 dumb 和 replot


  1. # $1 = out file
  2. # $2 = delay in seconds

  3. gnuplot -p <<EOF
  4. reset session
  5. set term dumb 120,30
  6. set tics nomirror scale 0.5
  7. set grid
  8. set xlabel "steps"
  9. set ylabel "Energy Variation (a.u.)"
  10. unset key
  11. plot '$1-data.txt' u 1:2  w l

  12. stop = 0

  13. while !stop {
  14.     pause $2     # delay in seconds
  15.     replot
  16. }
  17. EOF
复制代码







欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3