linux使用gaussian提交命令,使用Gaussian时的几个实用脚本和命令

使用Gaussian时的几个实用脚本和命令

文/Sobereva @北京科音

First release: 2014-Nov-5  Last update: 2020-Jan-28

这里提供几个平时Gaussian计算时常用的简单小脚本和命令,对于实际研究很有用处,也希望读者能举一反三。

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的输出文件。脚本会提示正在运行哪个文件,运行完之后还会输出用时多少。

#!/bin/bash

icc=0

nfile=`ls ./*.gjf|wc -l`

for inf in *.gjf

do

((icc++))

echo Running ${inf} ... \($icc of $nfile\)

time g09 < ${inf} > ${inf//gjf/out}

echo ${inf} has finished

echo

done

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

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

把以下内容存到比如chk2fch.sh里,然后执行之即可。会依次调用formchk把当前目录下每个chk转换为同文件名的.fchk文件。

#!/bin/bash

for inf in *.chk

do

formchk ${inf}

done

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

此脚本会依次进入当前目录下的每个下一级目录,并把其中的.gjf都依次执行,产生的.out文件的文件名和所在位置都和输入文件相同。把以下内容存到比如folder_runall.sh里,然后执行它之即可。

#!/bin/bashshopt -s nullglob

for i in `ls -F |grep /`

do

cd $i

for inf in *.gjf

do

echo Running ${inf} ...

time g09 < ${inf} > ${inf//gjf/out}

echo ${inf} has finished

echo

done

cd ..

done

上面的脚本只能进入下一级的目录,而再下一级的目录(或者更深的目录)里的.gjf文件,以及当前目录下的.gjf文件都不会执行。如果想把这些.gjf也都执行,应当把以下内容存到比如allfolder_runall.sh里,然后执行它。为清楚起见,每次进入新的目录时屏幕上都会提示。

#!/bin/bashshopt -s nullglob

for i in `ls -R |grep :|tr : " "`

do

echo

cd $i

echo "****** Entered" $i folder;echo

for inf in *.gjf

do

echo Running ${inf} ...

time g09 < ${inf} > ${inf//gjf/out}

echo ${inf} has finished;echo

done

cd - > /dev/null

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校正能的结果。

for filename in `ls -v *.log`

do

echo $filename":"

Edimer=`grep "Counterpoise corrected energy =" $filename | awk -F = '{print $2}'`

EBSSE=`grep "BSSE energy =" $filename | awk -F = '{print $2}'`

Esum=`grep "sum of fragments =" $filename | awk -F = '{print $2}'`

echo "($Edimer-$EBSSE*0.5-$Esum)*627.51" |bc | awk '{printf "%6.2f", $0}'

echo " kcal/mol"

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/530(http://bbs.keinsci.com/thread-16161-1-1.html)

### 回答1: 我可以为您提供一个Gaussian批量提交任务脚本的示例:#!/bin/bash#Batch submission script for Gaussian#Specify the required memory and cpu time#PBS -l select=1:ncpus=12:mem=1gb#Specify the name of the job#PBS -N Gaussian_job#Submit the job to the queue#PBS -q gaussian_queue#Run the job from the current working directory#PBS -cwd#Write the output and error streams to separate files#PBS -e gaussian_job.err#PBS -o gaussian_job.out#Run the Gaussian calculations#g09 < input.com > output.log ### 回答2: Gaussian批量提交任务脚本是指在计算化学领域中,使用Gaussian软件进行计算,编写的能够自动批量提交多个任务的脚本。 首先,需要先了解Gaussian软件的基本使用和批量任务提交的原理。Gaussian是一种常用的计算化学软件,可以用于研究分子结构、电子能级和反应动力学等化学问题。批量任务提交是指将多个不同的分子或化学计算模型输入到Gaussian中执行,并自动输出结果。 编写Gaussian批量提交任务脚本的过程大致可以分为以下几个步骤: 1. 创建输入文件列表:将所有需要计算的分子结构或化学计算模型保存为输入文件,并将这些文件的路径和名称记录在一个文本文件中。 2. 打开脚本工具:打开一个支持脚本编写的文本编辑器,例如Notepad++、Sublime Text等。 3. 编写循环语句:使用脚本语言编写循环语句,例如Python、Shell Script等,以便依次读取输入文件列表中的每个文件。 4. 提交任务:在循环语句中,调用Gaussian软件,使用指定的输入文件作为参数,提交任务到计算服务器。可以使用"subg09"或"g16"等Gaussian的执行命令。 5. 等待任务完成:由于计算任务通常需要一定间才能完成,可以在脚本中增加等待语句,以便在任务完成后再进行下一步处理。 6. 处理结果文件:任务完成后,可以将输出文件进行处理和分析,提取感兴趣的结果数据。可以使用脚本语言中的文件操作和数据处理函数进行结果文件的读取和处理。 7. 循环下一个任务:完成当前任务的处理后,继续循环处理下一个任务,直到处理完所有的任务。 编写好的脚本可以根据需要进行多次运行,从而实现批量提交Gaussian计算任务的自动化操作,提高计算效率和减少重复工作。 ### 回答3: Gaussian 是一种流行的量子化学计算软件,批量提交任务是指同提交多个 Gaussian 任务的脚本。在 Gaussian 中,任务可以通过两种方式进行提交:交互式提交和批量提交。 批量提交任务脚本是为了简化任务提交的过程,提高任务的效率。下面是一个简单的 Gaussian 批量提交任务脚本示例: 1. 首先,创建一个文本文件,例如名为 `submit_script.txt`。 2. 在该文件中,按照以下格式编写 Gaussian 任务的相关信息: ``` %mem=10GB // 内存设置 %NProcShared=16 // 多核处理器设置 #P B3LYP/6-31G* // 计算方法和基组选择 任务1的输入信息 任务2的输入信息 任务3的输入信息 ... ``` 在每个任务的输入信息中,可以指定分子结构、计算类型、计算参数等。每个任务之间使用空行分隔。 3. 保存并关闭 `submit_script.txt` 文件。 4. 打开命令行界面,导航至该脚本所在的目录。 5. 输入以下命令来运行批量提交任务脚本: ``` g16 < submit_script.txt ``` 这将会依次执行每个任务,并将计算结果输出到相应的文件中。 通过批量提交任务脚本,我们可以一次性提交多个任务,而不需要手动逐个提交。这可以提高工作效率,特别是当需要进行大量 Gaussian 计算。同,还可以通过调整脚本中的计算参数,对多个任务进行统一的设置,保证计算的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值