计算化学公社

标题: 使用Gaussian时的几个实用脚本和命令 [打印本页]

作者
Author:
sobereva    时间: 2014-11-5 06:55
标题: 使用Gaussian时的几个实用脚本和命令
使用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
...略


作者
Author:
lip    时间: 2014-11-5 08:39
学习了,值得推荐!
作者
Author:
aqhuangry    时间: 2014-11-5 08:41
很使用。谢谢!:)
作者
Author:
chiweijie    时间: 2014-11-5 09:01
方便了很多
作者
Author:
516518    时间: 2014-11-5 10:01
楼主不是一般的牛
作者
Author:
ter20    时间: 2014-11-5 11:49
如果能评100分,我一定评120分
作者
Author:
habigale    时间: 2015-3-18 14:15
例如将当前目录下包括任意级子目录下的.gjf中的M062X替换为B3LYP,执行:sed -i "s/M062X/B3LYP/g" `grep M062X -rl *|grep .gjf`

我在linux下执行:sed -i "s/pbe1pbe/B3LYP/g" `grep pbe1pbe -rl *|grep .gjf`时,出现如下错误:sed: no input file。可是我的当前目录下有13个gjf文件呢!
作者
Author:
jiameiye    时间: 2015-3-18 15:11
脚本1可以都简化成 g09 1.gjf &; g09 2.gjf &;  g09 3.gjf &  和
g09 1.gjf
g09 2.gjf
g09 3.gjf
吗?   到用时候试一下
作者
Author:
sobereva    时间: 2015-3-18 17:59
jiameiye 发表于 2015-3-18 15:11
脚本1可以都简化成 g09 1.gjf &; g09 2.gjf &;  g09 3.gjf &  和
g09 1.gjf
g09 2.gjf

也可以,这样的话输出文件名会和输入文件名相同,并且后缀是log(对于Linux版来说)
作者
Author:
jiameiye    时间: 2015-3-18 19:07
谢谢。
作者
Author:
jliang    时间: 2015-3-21 16:20
谢谢分享!
作者
Author:
ruanyang    时间: 2015-5-9 13:24
很适合初学者的脚本
作者
Author:
lastzealot    时间: 2015-5-9 15:59
大神给力 又学到了
作者
Author:
数据挖掘    时间: 2015-5-30 16:26
1 依次执行多个指令
并行  ls *gjf|xargs -I @ echo "nohup g09 @ &" >list;sh list
串行  ls *gjf|xargs -I @ echo -e "nohup g09 @ &\nwait\n" >list;sh list

作者
Author:
数据挖掘    时间: 2015-5-30 16:28
3 一次性把当前目录下所有chk文件转换为fchk文件
ls *.chk|xargs -I @ echo "formchk  @"  >list;sh list
作者
Author:
chrischen1128    时间: 2015-5-30 20:21
大神,请收下我的膝盖
作者
Author:
ChemiAndy    时间: 2015-6-1 16:41
habigale 发表于 2015-3-18 14:15
例如将当前目录下包括任意级子目录下的.gjf中的M062X替换为B3LYP,执行:sed -i "s/M062X/B3LYP/g" `grep M ...

可能是因为你的13个gjf文件中都没有pbe1pbe这个关键词,或者大小写不匹配。所以··中的grep命令返回了空的文件列表,导致sed提示无输入文件。
作者
Author:
habigale    时间: 2015-7-15 23:09
有没有提取计算结果中freq计算结果的脚本,例如将zero-point correction,Thermal correction to Energy, Thermal Correction to enthalpy,Thermal correction to Gibbis Free Energy的相应的值输出到文件中的方法。谢谢!

作者
Author:
sobereva    时间: 2015-7-16 02:06
habigale 发表于 2015-7-15 23:09
有没有提取计算结果中freq计算结果的脚本,例如将zero-point correction,Thermal correction to Energy,  ...

用grep命令加上重定向符号>就行了。
作者
Author:
hlmkh    时间: 2015-7-21 17:14
tanks for sharing

作者
Author:
brothers    时间: 2015-10-20 20:36
本帖最后由 brothers 于 2015-10-20 21:25 编辑

批处理的shell脚本,如何避免SSH连接hangup导致任务中断呢?
作者
Author:
sobereva    时间: 2015-10-20 21:42
brothers 发表于 2015-10-20 20:36
批处理的shell脚本,如何避免SSH连接hangup导致任务中断呢?


nohup ./runall.sh &
然后exit登出,就没问题了

或者用setsid代替nohup,这样连接断了应该也没关系
作者
Author:
brothers    时间: 2015-10-20 22:05
sobereva 发表于 2015-10-20 21:42
nohup ./runall.sh &
然后exit登出,就没问题了

谢谢老师,明天试试。
我今天用的是sh filename.sh来运行的,加上nohup没用,不知道是不是没加&的原因
前述脚本可以很方便地组合一下,依次运行所有子文件夹中的gjf,然后将chk文件转化为fchk。老师有时间可以更新一下~
作者
Author:
lsbp010    时间: 2015-11-12 09:40
学习学习
作者
Author:
milkxx    时间: 2015-11-12 20:48
如果不想有额外的list文件的话 ls *.chk|xargs -I @ echo "formchk  @"  >list;sh list;rm list
作者
Author:
hxd_yi    时间: 2016-1-8 15:53
本帖最后由 hxd_yi 于 2016-1-10 13:46 编辑

这个脚本可以用以显示计算结果,包括最小的频率,homo,lomo,电子能量,热力学校正数值。提醒:执行方式为:./a.sh b.com,后面参数可以更换成其他需要抓取数据的文件。
#!/bin/bash
for inf in $@; do
if ! [ -f $inf ]; then
   continue
fi
echo ' '$inf':'
echo ' -----------------------------'
if [ -z "$(head -n 1 $inf | grep 'Entering Gaussian System,')" ]; then
    echo " This File Is Not a Gaussian Log File."
    echo ''
    continue
fi
if [ -z "`tail -n 1 $inf| grep 'Normal termination of Gaussian 09'`" ]; then
   echo ' This Job Do Not Normally terminate.'
   echo ''
   tail $inf
   echo ''
   continue
fi
nf=`grep 'imaginary frequencies (negative Signs)' $inf | awk '{print $2}'`
if [ -z $nf ]; then
    nf=0
fi
# echo $nf
if [ $nf -gt 1 ]; then
    echo ' grep '$nf' imaginary frequencies'
    echo -n -e ' Max imaginary frequency is:\t'
    grep 'Frequencies --' $inf | head -n 1 | awk '{print $3}'
elif [ $nf -gt 0 ]; then
    echo ' grep '$nf' imaginary frequency'
    echo -n -e " Max imaginary frequency is:\t"
    grep 'Frequencies --' $inf | head -n 1 | awk '{print $3}'
fi
if [ $nf -eq 0 ]; then
#     echo ' no imaginary frequency'
    echo -ne " Min Frequency is:\t"
    grep 'Frequencies --' $inf | head -n 1 | awk '{print $3}'
fi
echo -ne "\n"
# str=`grep -e "Freq
# grep -e "^ Alpha  occ. eigenvalues" $inf | tail -n 1 | awk '{print "HOMO of Alpha:\t" $NF}'
# grep -e "^ Alpha virt. eigenvalues" $inf | head -n 1 | awk '{print "LUMO of Alpha:\t" $5}'
grep " SCF Done" $inf | tail -n 1 | awk '{print " SCF Energy:\t" $5}'
a=`grep -n 'Zero-point correction' $inf | cut -d ':' -f 1`
b=`expr $a + 7`
if [ -n "$a" ]; then
  sed -n -e "$a,$b"p $inf
else
  echo 'No Energy corrections Greppd!'
fi

str=`grep -e "Alpha  occ. eigenvalues" $inf | tail -n 1`
if [ ! -z "$str" ]; then
    echo "$str" | awk '{print " HOMO of Alpha:\t" $NF}'
fi

str=`grep -e "Alpha virt. eigenvalues" $inf | head -n 1`
if [ ! -z "$str" ]; then
    echo "$str" | awk '{print " LUMO of Alpha:\t" $5}'
fi

str=`grep -e "Beta  occ. eigenvalues" $inf | tail -n 1`
if [ ! -z "$str" ]; then
    echo "$str" | awk '{print " HOMO of Beta:\t" $NF}'
fi

str=`grep -e "Beta virt. eigenvalues" $inf | head -n 1`
if [ ! -z "$str" ]; then
    echo "$str" | awk '{print " LUMO of Beta:\t" $5}'
fi
echo ''
done

和下一个不同的是,下一个脚本抓取的结果输出为表格格式(用\t分隔数据),结果可以直接复制到excel中。

作者
Author:
hxd_yi    时间: 2016-1-8 15:57
本帖最后由 hxd_yi 于 2016-1-8 16:04 编辑
habigale 发表于 2015-7-15 23:09
有没有提取计算结果中freq计算结果的脚本,例如将zero-point correction,Thermal correction to Energy,  ...

这个脚本可以帮你,使用方法:脚本保存为gt.sh,然后执行./gt.sh *.out,就可以把out文件中结果提取出来了,也可以换成其他文件。
#!/bin/bash
echo -e "filename\tnumber of imaginary frequencies\tmin freq\tElectronic energy\t\
Zero-point correction\t\
Thermal correction to Energy\t\
Thermal correction to Enthalpy\t\
Thermal correction to Gibbs Free Energy"
for inf in $@; do
    if ! [ -f $inf ] ; then
        continue
    fi
    if [ -z "$(head -n 1 $inf | grep 'Entering Gaussian System,')" ]; then
        continue
    fi
    echo -ne $inf'\t'
    tf=`tail -n 1 $inf| grep 'Normal termination of Gaussian 09'`
    if [ -z "$tf" ]; then
        echo 'Error'
        continue
    fi
    nf=`grep 'imaginary frequencies (negative Signs)' $inf | awk '{print $2}'`
    if [ -z $nf ]; then
        nf=0
    fi
    echo -ne $nf'\t'
    grep 'Frequencies --' $inf | head -n 1 | awk '{printf("%s\t",$3);}'
    grep "SCF Done" $inf | tail -n 1 | awk '{printf("%s\t",$5);}'
    # a=`grep -n 'Zero-point correction' $inf | cut -d ':' -f 1`
    # b=`expr $a + 7`
    # sed -n -e "$a,$b"p $inf
    grep 'Zero-point correction' $inf | awk '{printf("%s\t",$3);}'
    grep 'Thermal correction to Energy' $inf | awk '{printf("%s\t",$NF);}'
    grep 'Thermal correction to Enthalpy' $inf | awk '{printf("%s\t",$NF);}'
    grep 'Thermal correction to Gibbs Free Energy' $inf | awk '{printf("%s",$NF);}'
    echo -e ""
###############################################################
#    str=`grep -e "Alpha  occ. eigenvalues" $inf | tail -n 1`
#    if [ ! -z "$str" ]; then
#        echo "$str" | awk '{print " HOMO of Alpha:\t" $NF}'
#    fi
#
#    str=`grep -e "Alpha virt. eigenvalues" $inf | head -n 1`
#    if [ ! -z "$str" ]; then
#        echo "$str" | awk '{print " LUMO of Alpha:\t" $5}'
#    fi
#
#    str=`grep -e "Beta  occ. eigenvalues" $inf | tail -n 1`
#    if [ ! -z "$str" ]; then
#        echo "$str" | awk '{print " HOMO of Beta:\t" $NF}'
#    fi
#
#    str=`grep -e "Beta virt. eigenvalues" $inf | head -n 1`
#    if [ ! -z "$str" ]; then
#        echo "$str" | awk '{print " LUMO of Beta:\t" $5}'
#    fi
##############################################################
done

作者
Author:
mol    时间: 2016-1-27 15:25
期待sob老师写个《使用GMX时的几个实用脚本和命令》
譬如:计算PMF时依次执行多个计算
  1. #!/bin/bash
  2. for i in 0 1 2 3 4
  3. do
  4. grompp -f md_umbrella.mdp -c conf$i.pdb -p out.top -n index.ndx -o umbrella$i.tpr
  5. mdrun -np 10 -s umbrella$i.tpr -deffnm umbrella$i -pf pullf-umbrella$i.xvg -px pullx-umbrella$i.xvg </dev/null
  6. done
复制代码

作者
Author:
linuxprobe    时间: 2016-5-4 15:22
真爱粉~~简直不要太厉害
作者
Author:
一直在路上    时间: 2018-1-18 09:16
hxd_yi 发表于 2016-1-8 15:53
这个脚本可以用以显示计算结果,包括最小的频率,homo,lomo,电子能量,热力学校正数值。提醒:执行方式为 ...

试了一下,两个都没有输出为表格格式,都是在屏幕上直接显示啊?
作者
Author:
happyknighthawk    时间: 2018-6-29 23:02
hxd_yi 发表于 2016-1-8 15:57
这个脚本可以帮你,使用方法:脚本保存为gt.sh,然后执行./gt.sh *.out,就可以把out文件中结果提取出来 ...

非常感谢,先用着,回头一定好好自己学!
作者
Author:
chemholic    时间: 2018-8-5 19:56
hxd_yi 发表于 2016-1-8 15:57
这个脚本可以帮你,使用方法:脚本保存为gt.sh,然后执行./gt.sh *.out,就可以把out文件中结果提取出来 ...

脚本非常好用,用*.out通配符可以一次提取多个文件!!效率大大提高了!!!

但是有个小bug,对于单原子的计算结果,由于不含振动频率,提取出的结果有问题提,不知道该如何改进下呢?
作者
Author:
abin    时间: 2018-8-6 12:55
habigale 发表于 2015-3-18 14:15
例如将当前目录下包括任意级子目录下的.gjf中的M062X替换为B3LYP,执行:sed -i "s/M062X/B3LYP/g" `grep M ...

用find结合-exec
作者
Author:
wfmf1994    时间: 2018-9-25 08:48
老师,您好,您那个批量运行的脚本生成文件只有out文件,如果还想要fchk文件应该加上什么?
作者
Author:
sobereva    时间: 2018-9-26 21:34
wfmf1994 发表于 2018-9-25 08:48
老师,您好,您那个批量运行的脚本生成文件只有out文件,如果还想要fchk文件应该加上什么?

运行文中第三个脚本,把所得chk批量转换,当然前提是每个gjf文件里都设了%chk
作者
Author:
wfmf1994    时间: 2018-9-28 18:42
sobereva 发表于 2018-9-26 21:34
运行文中第三个脚本,把所得chk批量转换,当然前提是每个gjf文件里都设了%chk

谢谢老师 我以为可以通过某个命令直接输出fchk.
作者
Author:
sobereva    时间: 2018-9-28 19:17
wfmf1994 发表于 2018-9-28 18:42
谢谢老师 我以为可以通过某个命令直接输出fchk.

formcheck关键词可以输出,但是是输出到scratch目录下,而且名字没法自己设
作者
Author:
wfmf1994    时间: 2018-10-17 10:48
老师,我们的服务器如果运行 g09<> .out 运行不了是不是说明安装有点问题?  
对于转换fchk的脚本我加上图2的那个路径成功了,但批量提交的加上图2的路径运行完会有inp文件,且out文件提示l1不可执行。
如果出现这种问题如何用脚本批量提交?
作者
Author:
highlight    时间: 2018-10-17 11:08
wfmf1994 发表于 2018-10-17 10:48
老师,我们的服务器如果运行 g09 .out 运行不了是不是说明安装有点问题?  
对于转换fchk的脚本我加上图2 ...

显然是你没有指定好环境变量,建议先学习一下 http://bbs.keinsci.com/thread-10814-1-1.html

然后在 /home/你的用户名/.bashrc 最后追加:
export g09root=/home/gaussian
export GAUSS_SCRDIR=/tmp
source $g09root/g09/bsd/g09.profile
作者
Author:
wfmf1994    时间: 2018-10-17 14:36
highlight 发表于 2018-10-17 11:08
显然是你没有指定好环境变量,建议先学习一下 http://bbs.keinsci.com/thread-10814-1-1.html

然后在 ...

原来如此,已经弄好了,谢谢
作者
Author:
egghead    时间: 2018-10-30 14:30
老师,看您显示几何优化结果的命令,并学习linux系统里grep命令,我试着写了两条命令,请您看看对不对。
1、找输出文件结果中能量值
grep zero-point C4H8.out -A3

2、看几何优化收敛过程中能量变化情况
grep -E “out of|SCF Done” C4H8.out


2中我试的结果是先显示E(RB3LYP) =。。。。后显示Step number  。。。 out of a maximum of  。。。,这样对吗?不是我看报告,能量看错地方了吧
作者
Author:
sobereva    时间: 2018-10-30 21:38
egghead 发表于 2018-10-30 14:30
老师,看您显示几何优化结果的命令,并学习linux系统里grep命令,我试着写了两条命令,请您看看对不对。
1 ...

2里没必要有out of,直接提取SCF done就完了(假设你用的是HF或普通泛函计算)
作者
Author:
egghead    时间: 2018-10-31 07:55
sobereva 发表于 2018-10-30 21:38
2里没必要有out of,直接提取SCF done就完了(假设你用的是HF或普通泛函计算)

谢谢老师

作者
Author:
17度的冰    时间: 2018-12-24 21:11
老师,在G16里运行批处理脚本,都需要更改哪些设置呢?好像不是将G09直接改为G16就可以的。
作者
Author:
sobereva    时间: 2018-12-25 01:00
17度的冰 发表于 2018-12-24 21:11
老师,在G16里运行批处理脚本,都需要更改哪些设置呢?好像不是将G09直接改为G16就可以的。

直接改就可以
作者
Author:
17度的冰    时间: 2018-12-25 16:18
sobereva 发表于 2018-12-25 01:00
直接改就可以

谢谢老师,也谢谢您在群里的回复,果然用dos2unix把脚本转换一下就能用了~
作者
Author:
Frank    时间: 2019-1-20 14:25
请问老师有没有替换Gaussian输入文件坐标信息的脚本?将输入文件中的坐标信息替换为另外一个xyz文件中的坐标信息。
作者
Author:
柒月小鱼    时间: 2019-2-13 21:55
hxd_yi 发表于 2016-1-8 15:53
这个脚本可以用以显示计算结果,包括最小的频率,homo,lomo,电子能量,热力学校正数值。提醒:执行方式为 ...

好物 学习了

作者
Author:
sobereva    时间: 2019-3-1 01:44
加入了第8个脚本,对于经常用counterpoise关键词的人有用
作者
Author:
neocc    时间: 2019-3-23 00:54
执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
琢磨了好半天才发现,这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息

推荐这个链接
bad interpreter:No such file or directory的原因 - 游学四方的博客 - CSDN博客  
https://blog.csdn.net/blackbattery/article/details/79395224
作者
Author:
sobereva    时间: 2019-3-23 03:36
neocc 发表于 2019-3-23 00:54
执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
琢磨了好半天才发现,这是不同 ...

一看有^M,有经验的人立刻就会知道是换行符问题导致的
ultraedit、dos2unix都可以转换
作者
Author:
neocc    时间: 2019-3-23 09:30
sobereva 发表于 2019-3-23 03:36
一看有^M,有经验的人立刻就会知道是换行符问题导致的
ultraedit、dos2unix都可以转换

谢谢sob大大的回复,我是linux小菜鸡,看到这个异常就抓耳挠腮,检索了论坛发现也没有这方面异常的解决方案,给您留言也是希望给跟我一样的菜鸡一些提示,能少走弯路

作者
Author:
Novice    时间: 2020-3-31 00:05
本帖最后由 Novice 于 2020-3-31 00:54 编辑
数据挖掘 发表于 2015-5-30 16:26
1 依次执行多个指令
并行  ls *gjf|xargs -I @ echo "nohup g09 @ &" >list;sh list
串行  ls *gjf|xargs ...

谢谢社长的分享,最近有个小困惑,就是我有好几千个小任务要去做xtb优化,我自己参考您这篇博文和 http://bbs.keinsci.com/thread-16125-1-1.html  做了个批量串行任务的脚本
  1. #!/bin/bash
  2. for i in *.xyz
  3.     do
  4.     mkdir ${i//.xyz/}                                   #创建优化临时文件夹
  5.     cp  ./${i}  ./${i//.xyz/}/                         #复制原文件到临时文件夹
  6.     cd ./${i//.xyz/}/                                  #切换工作目录到临时文件夹
  7.     xtb ${i} --opt > ${i//xyz/out}               #xtb优化任务
  8.     mv xtbopt.xyz ../xtbopt/${i}                  #优化结果改名并转移到结果文件夹
  9.     mv ${i//.xyz/out} ../xtbopt/                   #优化结果输出信息转移到结果文件夹
  10.     echo Your refined ${i} was prepared!
  11.     cd ..                                                    #切换工作回主目录
  12.     rm -rf ./${i//.xyz/}                                  #删除临时文件夹
  13.     echo
  14. done
复制代码


可是现在任务太多了,一个个串行运行下来需要太久了,我想用并行的方法去运行,虽然看到了14楼的方法,以及网上查到了一些方法和“GNU parallel" , 由于本人Linux菜鸟,看的很糊涂,都没有成功

麻烦社长或者哪位大神给一个可以并行方式完成以上操作的脚本。

注:1. 我的机器CPU有52核,所以希望xtb以单核方式运行,同时并行50个任务,一个任务结束后能自动提交下一个任务。
2. 由于这个小工作站主要是我自己在用,所以没有安装PBS,如果没有很容易解决的办法,我再考虑尝试安装PBS。
作者
Author:
snljty    时间: 2020-3-31 00:24
Novice 发表于 2020-3-31 00:05
谢谢社长的分享,最近有个小困惑,就是我有好几千个小任务要去做xtb优化,我自己参考您这篇博文和 http:/ ...

crest似乎能满足这个需求
作者
Author:
Novice    时间: 2020-3-31 00:30
本帖最后由 Novice 于 2020-3-31 00:40 编辑
snljty 发表于 2020-3-31 00:24
crest似乎能满足这个需求

能说具体点吗抓到一个夜猫子

-----------
你说的是 -mdopt <FILE> 这个选项吧?这个选项要求所有分子得再一个文件里

作者
Author:
zjxitcc    时间: 2020-3-31 00:32
Novice 发表于 2020-3-31 00:05
谢谢社长的分享,最近有个小困惑,就是我有好几千个小任务要去做xtb优化,我自己参考您这篇博文和 http:/ ...

最low的办法:你写个脚本,功能是把这个脚本复制50份(每份只跑1个任务,或串行跑多个任务),然后写个脚本交这50个脚本不就行了?
作者
Author:
Novice    时间: 2020-3-31 00:42
本帖最后由 Novice 于 2020-3-31 00:57 编辑
zjxitcc 发表于 2020-3-31 00:32
最low的办法:你写个脚本,功能是把这个脚本复制50份(每份只跑1个任务,或串行跑多个任务),然后写个脚 ...

说实话您说的这个操作我都无法实现(比如怎么让50个脚本不重复计算、如何同时提交50个脚本)我能想到的就是手动创建50个文件夹,然后将任务手动分配到各个文件夹,再手动提交50个脚本感觉还是不是特别友好,所以出来问问
作者
Author:
zjxitcc    时间: 2020-3-31 01:01
本帖最后由 zjxitcc 于 2020-3-31 01:06 编辑
Novice 发表于 2020-3-31 00:42
说实话您说的这个操作我都无法实现(比如怎么让50个脚本不重复计算、如何同时提交50个脚本)[/ba ...

举例:
run.sh内容:提交多个脚本。
  1. ./run1.sh &
  2. ./run2.sh &
  3. ...
复制代码

这里加了后台符号&,会一下子提交runN.sh(N为数字1-50)所有脚本。

runN.sh内容:提交一个任务,或串行提交多个任务,例如
  1. g09 1_1.gjf
  2. g09 1_2.gjf
  3. ...
复制代码

这里没加后台符号&,只能是一行一行运行。

你把文件名起的与数字有关就行了。总不至于问我./run1.sh, ./run2.sh是不是要手写50行吧


作者
Author:
Novice    时间: 2020-3-31 01:12
zjxitcc 发表于 2020-3-31 01:01
举例:
run.sh内容:提交多个脚本。

多谢指教遗憾的是我这些文件名字不是有序的,所以现在同时提交多个脚本倒是没问题了,可是创建runN.sh太难了
作者
Author:
snljty    时间: 2020-3-31 09:14
Novice 发表于 2020-3-31 00:30
能说具体点吗抓到一个夜猫子

-----------

http://bbs.keinsci.com/thread-16255-1-1.html
可以看下卢老师这个贴的最后一节。
把多个结构合并成一个xyz写脚本应该是很简单的,想办法生成一个索引文件,到时候就分得清哪个是哪个了
作者
Author:
liuyuje714    时间: 2020-3-31 09:30
Novice 发表于 2020-3-31 00:05
谢谢社长的分享,最近有个小困惑,就是我有好几千个小任务要去做xtb优化,我自己参考您这篇博文和 http:/ ...

这个不难。我有个思路,虽然我不做量化,但是可以实现你的想法,自己修改一下即可。查看博文https://liuyujie714.com/61.html 最后部分。任务太多,直接用&挂后台很危险。
作者
Author:
zhoutao2011    时间: 2020-4-4 12:34
sob老师,1 依次执行多个指令:是前一个gjf计算完毕后自动开始计算下一个gjf直到命令中所有的gjf文件都计算完是吗?也就是如果我有16核的话每个任务都按照16核计算?谢谢
作者
Author:
sobereva    时间: 2020-4-6 20:31
zhoutao2011 发表于 2020-4-4 12:34
sob老师,1 依次执行多个指令:是前一个gjf计算完毕后自动开始计算下一个gjf直到命令中所有的gjf文件都计算 ...


作者
Author:
quora    时间: 2020-6-20 17:17
提取单点能的脚本有吗
作者
Author:
sobereva    时间: 2020-6-21 02:37
quora 发表于 2020-6-20 17:17
提取单点能的脚本有吗

自己用grep提取就完了
作者
Author:
lyy2020    时间: 2020-7-13 20:24
长知识了,好文
作者
Author:
sunww    时间: 2020-12-5 19:21
这个真心实用  谢谢分享
作者
Author:
dengzf    时间: 2020-12-11 11:06
sob老师,有没有 可以把优化的结构文件.log或者.out里面的所有的坐标都保存下来来的脚本呢?

作者
Author:
sobereva    时间: 2020-12-13 04:30
dengzf 发表于 2020-12-11 11:06
sob老师,有没有 可以把优化的结构文件.log或者.out里面的所有的坐标都保存下来来的脚本呢?

学点awk的知识,以及linux下的grep等命令的使用,自然就懂了
作者
Author:
sobereva    时间: 2022-6-6 18:56
新加入一个脚本“10 显示当前目录下所有out文件最后一次SCF Done的能量”

作者
Author:
Prof.Huang    时间: 2025-7-13 22:11
各位大佬,使用第二个脚本一次性执行当前目录下所有Gaussian输入文件,编译器是Intel OneAPI 2025.2 ,执行后显示icc++not found, 把脚本中的icc和icc++改成icx,后,又显示 error: no input files Bad substitution,这是要改icc编译器么
作者
Author:
wal    时间: 2025-7-13 22:55
Prof.Huang 发表于 2025-7-13 22:11
各位大佬,使用第二个脚本一次性执行当前目录下所有Gaussian输入文件,编译器是Intel OneAPI 2025.2 ,执行 ...

这个跟编译器没啥关系吧。。那个icc纯粹是一个计数器
作者
Author:
sobereva    时间: 2025-7-14 02:46
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
作者
Author:
Uus/pMeC6H4-/キ    时间: 2025-7-14 10:28
像icc这样的字符串一看就容易和可执行程序/命令冲突,用在shell脚本里当变量名属实是自找麻烦。

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

考虑到bash的兼容性问题,像((var++))这种语法特性不要也罢。
作者
Author:
sobereva    时间: 2025-7-15 04:18
对于个人的单一微型脚本的编写,不需要太有洁癖




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