计算化学公社

 找回密码 Forget password
 注册 Register
Views: 112585|回复 Reply: 74
打印 Print 上一主题 Last thread 下一主题 Next thread

[Gaussian/gview] 使用Gaussian时的几个实用脚本和命令

  [复制链接 Copy URL]

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

跳转到指定楼层 Go to specific reply
#
使用Gaussian时的几个实用脚本和命令
Several useful scripts and commands of using Gaussian

文/Sobereva @北京科音
First release: 2014-Nov-5  Last update: 2022-Jun-6


本文提供几个平时Gaussian计算时常用的简单小脚本和命令,对于实际研究很有用处,也希望读者能举一反三。另外也非常建议读者看看《详谈Multiwfn的命令行方式运行和批量运行的方法》(http://sobereva.com/612),里面对脚本编写有深入浅出的介绍和不少例子,仔细看过后就能轻松理解下文介绍的各种脚本并随意改编。


1 依次执行多个指令

比如要依次执行g09 < 1.gjf > 1.out、g09 < 2.gjf > 2.out、g09 < 3.gjf > 3.out,可以只输入一条命令,每条命令间用分号隔开:
g09 < 1.gjf > 1.out;g09 < 2.gjf > 2.out;g09 < 3.gjf > 3.out

也可以写一个文本文件比如t.sh,里面写上
g09 < 1.gjf > 1.out
g09 < 2.gjf > 2.out
g09 < 3.gjf > 3.out
然后用chmod +x *给它加上可执行权限,再输入./t.sh运行即可(后同)。

如果不让指令依次执行,而是同时执行,把每行命令后面都加上&即可。


2 一次性执行当前目录下所有Gaussian输入文件

把以下内容存到比如runall.sh里,然后执行之即可。会把每个.gjf文件用g09执行,生成同文件名但后缀为.out的输出文件。脚本会提示正在运行哪个文件、总共有多少要算的、当前算的是第几个,每个运行完之后还会输出用时多少。
  1. #!/bin/bash
  2. icc=0
  3. nfile=`ls ./*.gjf|wc -l`
  4. for inf in *.gjf
  5. do
  6. ((icc++))
  7. echo Running ${inf} ... \($icc of $nfile\)
  8. time g09 < ${inf} > ${inf//gjf/out}
  9. echo ${inf} has finished
  10. echo
  11. done
复制代码

PS:如果是windows环境,需要写DOS批处理脚本,实现方式见《从高斯windows下的批量执行谈DOS批处理文件》(http://sobereva.com/6


3 一次性把当前目录下所有chk文件转换为fchk文件

把以下内容存到比如chk2fch.sh里,然后执行之即可。会依次调用formchk把当前目录下每个chk转换为同文件名的.fchk文件。
  1. #!/bin/bash
  2. for inf in *.chk
  3. do
  4. formchk ${inf}
  5. done
复制代码


4 一次性执行当前文件夹下所有子目录里的Gaussian输入文件

此脚本会依次进入当前目录下的每个下一级目录,并把其中的.gjf都依次执行,产生的.out文件的文件名和所在位置都和输入文件相同。把以下内容存到比如folder_runall.sh里,然后执行它之即可。
  1. #!/bin/bash
  2. shopt -s nullglob
  3. for i in `ls -F |grep /`
  4. do
  5. cd $i
  6. for inf in *.gjf
  7. do
  8. echo Running ${inf} ...
  9. time g09 < ${inf} > ${inf//gjf/out}
  10. echo ${inf} has finished
  11. echo
  12. done
  13. cd ..
  14. done
复制代码

上面的脚本只能进入下一级的目录,而再下一级的目录(或者更深的目录)里的.gjf文件,以及当前目录下的.gjf文件都不会执行。如果想把这些.gjf也都执行,应当把以下内容存到比如allfolder_runall.sh里,然后执行它。为清楚起见,每次进入新的目录时屏幕上都会提示。
  1. #!/bin/bash
  2. shopt -s nullglob
  3. for i in `ls -R |grep :|tr : " "`
  4. do
  5. echo
  6. cd $i
  7. echo "****** Entered" $i folder;echo
  8. for inf in *.gjf
  9. do
  10. echo Running ${inf} ...
  11. time g09 < ${inf} > ${inf//gjf/out}
  12. echo ${inf} has finished;echo
  13. done
  14. cd - > /dev/null
  15. done
复制代码


5 字符替换

下面这个方法可以批量修改计算的级别和任务类型。

例如将当前目录下包括任意级子目录下的.gjf中的M062X替换为B3LYP,执行:sed -i "s/M062X/B3LYP/g" `grep M062X -rl *|grep .gjf`

如果要替换的字符有*、/这样的符号,需要前面加上\避免被sed转义。比如6-31G**需要写成6-31G\*\*,M062X/cc-pVTZ需要写成M062X\/cc-pVTZ。另外,如果有括号或空格出现,那么grep后面应该用双引号括住。
例如把MP2/6-311+G(2d,p)都替换成M062X/6-31G*:sed -i "s/MP2\/6-311+G(2d,p)/M062X\/6-31G\*/g" `grep "MP2/6-311+G(2d,p)" -rl *|grep .gjf`
例如把opt freq都替换成NMR关键词:sed -i "s/opt freq/NMR/g" `grep "opt freq" -rl *|grep .gjf`

如果只想替换当前目录下的.gjf,则把-rl改成-l即可。如果想处理所有文件而不仅限于.gjf,则把|grep .gjf部分删掉即可。


6 批量删除文件

用下面的命令可以删除当前目录和任意级子目录下的所有.out文件
find ./ -name "*.out"|xargs rm -f


7 显示几何优化收敛情况

这个很简单。比如C4H8.out是几何优化输出文件,执行
grep Converged C4H8.out -A4
就会把当前的优化收敛情况输出出来。

如果执行
grep Converged C4H8.out -c
就会输出匹配的次数,也就是相当于显示优化到了第几步了。

也可以执行grep -E "out of|Converged" C4H8.out -A4。这样步数和收敛情况都会输出。


8 做Counterpoise任务时只用一半的BSSE校正能

笔者在《谈谈BSSE校正与Gaussian对它的处理》(http://sobereva.com/46)专门谈过BSSE校正问题。在J. Chem. Theory Comput., 10, 49 (2014)文中,作者建议对于<= aug-cc-pVTZ档次基组的计算时如果用Counterpoise方式考虑BSSE,应当只用一半BSSE校正能。但是直接用Gaussian的Counterpoise关键词只会产生不考虑和考虑完整的BSSE校正能的情况。如果把以下脚本放到当前目录,而且当前目录里有一批使用了Counterpoise关键词的.log输出文件,程序就会计算出只使用了一半BSSE校正能的结果。
  1. for filename in `ls -v *.log`
  2. do
  3. echo $filename":"
  4. Edimer=`grep "Counterpoise corrected energy =" $filename | awk -F = '{print $2}'`
  5. EBSSE=`grep "BSSE energy =" $filename | awk -F = '{print $2}'`
  6. Esum=`grep "sum of fragments =" $filename | awk -F = '{print $2}'`
  7. echo "($Edimer-$EBSSE*0.5-$Esum)*627.51" |bc | awk '{printf "%6.2f", $0}'
  8. echo " kcal/mol"
  9. done
复制代码

结果显示在屏幕上,如下所示
1.log:
-3.03 kcal/mol
2.log:
-31.46 kcal/mol
3.log:
-20.91 kcal/mol
...略



9 将当前目录下所有Gaussian输出文件(out)转换为输入文件(gjf)

参见下文,需要利用Multiwfn程序。
一键把所有gjf文件转成xyz文件、把所有Gaussian输出文件转成gjf文件的脚本
http://sobereva.com/530http://bbs.keinsci.com/thread-16161-1-1.html


10 显示当前目录下所有out文件最后一次SCF Done的能量

比如当前目录下有一大批分子做几何优化的输出信息,我们想把最后一次含有SCF Done的行连同输出文件名显示出来,由此得到每个体系最终结构下的电子能量,可以用以下脚本
  1. #!/bin/bash
  2. for inf in *.out
  3. do
  4. tac $inf | grep -m 1 "SCF Done" | tr '\n' ' '
  5. echo $inf
  6. done
复制代码

输出信息示例:
SCF Done:  E(RB3LYP) =  -619.115825500     A.U. after    1 cycles C16H16.out
SCF Done:  E(RB3LYP) =  -696.562886104     A.U. after    1 cycles C18H18.out
SCF Done:  E(RB3LYP) =  -773.962700591     A.U. after    1 cycles C20H20.out
...略

评分 Rate

参与人数
Participants 33
eV +120 收起 理由
Reason
dsjmd + 3 とてもいい!
IceBear + 4 好物!
srosher + 1 好物!
liu1216081301 + 1
quantumlink + 4 谢谢
Jinzhao + 4 谢谢
the_phantom + 3 好物!
LEVELF + 4 赞!
ChemG + 5 好物!
dongdong + 4 谢谢
oyqw + 4 谢谢分享
zhoutao2011 + 1
元气蛋 + 4 好物!
mlzhao + 2 好物!
韓澤勳 + 3 谢谢
yeahhanpei + 3 赞!
xiewenli + 1 好物!
Chenglong_li + 5 谢谢
江月照相似 + 3 赞!
ericzhou93 + 5 好物!

查看全部评分 View all ratings

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

74#
 楼主 Author| 发表于 Post on 2025-7-15 04:18:23 | 只看该作者 Only view this author
对于个人的单一微型脚本的编写,不需要太有洁癖
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

880

帖子

3

威望

1662

eV
积分
2602

Level 5 (御坂)

傻傻的木瓜

73#
发表于 Post on 2025-7-14 10:28:57 | 只看该作者 Only view this author
像icc这样的字符串一看就容易和可执行程序/命令冲突,用在shell脚本里当变量名属实是自找麻烦。

所有写shell脚本的都应该认真研读Bash Pitfalls避免踩坑,并且写完后拿ShellCheck检查语法问题。

考虑到bash的兼容性问题,像((var++))这种语法特性不要也罢。
√546=23.36664289109

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

72#
 楼主 Author| 发表于 Post on 2025-7-14 02:46:46 | 只看该作者 Only view this author
Prof.Huang 发表于 2025-7-13 22:11
各位大佬,使用第二个脚本一次性执行当前目录下所有Gaussian输入文件,编译器是Intel OneAPI 2025.2 ,执行 ...

学点shell脚本编写常识,避免胡思乱想
参考
详谈Multiwfn的命令行方式运行和批量运行的方法
http://sobereva.com/612http://bbs.keinsci.com/thread-24929-1-1.html
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

410

帖子

5

威望

1630

eV
积分
2140

Level 5 (御坂)

鸩羽

71#
发表于 Post on 2025-7-13 22:55:05 | 只看该作者 Only view this author
Prof.Huang 发表于 2025-7-13 22:11
各位大佬,使用第二个脚本一次性执行当前目录下所有Gaussian输入文件,编译器是Intel OneAPI 2025.2 ,执行 ...

这个跟编译器没啥关系吧。。那个icc纯粹是一个计数器

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
Stardust0831 + 5

查看全部评分 View all ratings

某不知名实验组从苞米地里长出来的计算选手

9

帖子

0

威望

307

eV
积分
316

Level 3 能力者

70#
发表于 Post on 2025-7-13 22:11:44 | 只看该作者 Only view this author
各位大佬,使用第二个脚本一次性执行当前目录下所有Gaussian输入文件,编译器是Intel OneAPI 2025.2 ,执行后显示icc++not found, 把脚本中的icc和icc++改成icx,后,又显示 error: no input files Bad substitution,这是要改icc编译器么

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

69#
 楼主 Author| 发表于 Post on 2022-6-6 18:56:19 | 只看该作者 Only view this author
新加入一个脚本“10 显示当前目录下所有out文件最后一次SCF Done的能量”
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

68#
 楼主 Author| 发表于 Post on 2020-12-13 04:30:09 | 只看该作者 Only view this author
dengzf 发表于 2020-12-11 11:06
sob老师,有没有 可以把优化的结构文件.log或者.out里面的所有的坐标都保存下来来的脚本呢?

学点awk的知识,以及linux下的grep等命令的使用,自然就懂了
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

2

帖子

0

威望

69

eV
积分
71

Level 2 能力者

67#
发表于 Post on 2020-12-11 11:06:14 | 只看该作者 Only view this author
sob老师,有没有 可以把优化的结构文件.log或者.out里面的所有的坐标都保存下来来的脚本呢?

2

帖子

0

威望

353

eV
积分
355

Level 3 能力者

66#
发表于 Post on 2020-12-5 19:21:43 | 只看该作者 Only view this author
这个真心实用  谢谢分享

12

帖子

0

威望

51

eV
积分
63

Level 2 能力者

65#
发表于 Post on 2020-7-13 20:24:45 | 只看该作者 Only view this author
长知识了,好文

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

64#
 楼主 Author| 发表于 Post on 2020-6-21 02:37:38 | 只看该作者 Only view this author
quora 发表于 2020-6-20 17:17
提取单点能的脚本有吗

自己用grep提取就完了
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

39

帖子

0

威望

247

eV
积分
286

Level 3 能力者

63#
发表于 Post on 2020-6-20 17:17:12 | 只看该作者 Only view this author
提取单点能的脚本有吗

6万

帖子

99

威望

5万

eV
积分
120060

管理员

公社社长

62#
 楼主 Author| 发表于 Post on 2020-4-6 20:31:52 | 只看该作者 Only view this author
zhoutao2011 发表于 2020-4-4 12:34
sob老师,1 依次执行多个指令:是前一个gjf计算完毕后自动开始计算下一个gjf直到命令中所有的gjf文件都计算 ...

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

5

帖子

0

威望

49

eV
积分
54

Level 2 能力者

61#
发表于 Post on 2020-4-4 12:34:15 | 只看该作者 Only view this author
sob老师,1 依次执行多个指令:是前一个gjf计算完毕后自动开始计算下一个gjf直到命令中所有的gjf文件都计算完是吗?也就是如果我有16核的话每个任务都按照16核计算?谢谢

214

帖子

5

威望

2197

eV
积分
2511

Level 5 (御坂)

60#
发表于 Post on 2020-3-31 09:30:12 | 只看该作者 Only view this author
Novice 发表于 2020-3-31 00:05
谢谢社长的分享,最近有个小困惑,就是我有好几千个小任务要去做xtb优化,我自己参考您这篇博文和 http:/ ...

这个不难。我有个思路,虽然我不做量化,但是可以实现你的想法,自己修改一下即可。查看博文https://liuyujie714.com/61.html 最后部分。任务太多,直接用&挂后台很危险。

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-12 17:53 , Processed in 2.339608 second(s), 29 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list