|
本帖最后由 raillgun 于 2014-12-30 15:04 编辑
原创内容,转帖须注明出处,虽然也没什么好转的~~
注:14.12.26 22:05更新:
发现脚本有个错误,代码和附件部分已更新,之前如果有下过的请务必使用新版本,实在抱歉,抱歉!
初玩高斯,参考sob大大的帖子,实现如下功能:
1、批量执行计算任务,并且可以按顺序执行任务,比如可以实现先计算1.gjf,4.gjf,5.gjf,再计算2.gjf,3.gjf的功能
2、显示当前任务进度及完成时间
3、一个任务计算完后判断是否计算成功,分别将成功的和失败的任务输出到pass/和fail/文件夹内(含该任务的gjf、log、chk文件),并且将成功的和失败的任务名分别写入PASSED和FAILED文件内
4、对于计算成功的文件生成可视化.fchk文件及homo和lumo的.cube文件
5、在计算过程中可以添加当计算完当前所有任务后需要执行的计算任务,如此的话就可以实现机器的24小时不间断工作了
使用说明如下:
0、先声明一下,gjf输入文件里面的chk文件目录务必写成相对目录,即%chk=*.chk
1、将如下所给代码写到一个脚本文件里,如run.sh
2、在run.sh文件同级目录下建一个task文件夹
3、在task文件夹下面根据自己所需建立几个存放任务的文件夹,建议命名为0、1、2、3。。。
4、将计算任务文件(即*.gjf)按需放到task文件夹下面的数字目录下,比如需要计算1.gjf-5.gjf,但是根据任务急缓需要先算1.gjf,4.gjf,5.gjf,再算2.gjf,3.gjf,就把1、4、5放到0文件夹内,2、3放到1文件夹内,以此类推
5、执行sh run.sh或是nohup sh run.sh &(推荐此命令,此命令兼具忽略用户登出信号和将执行结果输出为一个文件的功能)
6、脚本执行后,会在脚本同级目录生成PASSED和FAILED文件,里面分别包含了计算成功的和失败的任务名,同时如上面所说,将计算成功的和失败的任务的全部文件分别放到fail/和pass/文件夹内,方便查看
7、在nohup.out文件内(若执行命令为nohup sh run.sh &)包含了当前执行计算到哪一步,任务是否成功和失败等信息
8、在计算过程中如果想增加计算任务则将需要增加的gjf文件放到还没算到的那个文件夹里,如在nohup.out文件内看到现在算到了1文件夹里面的东西,那么就将新任务放到2文件夹里,如此种种
9、没了,就这些了
代码如下:
- #!/bin/bash
- #This script can do the Gaussian Project automaticly.
- #To use this,here are some tips:
- #trees shows below
- # ./run.sh
- # ./nohup.out
- # ./FAILED
- # ./PASSED
- # ./task/??/*.gjf
- # ./pass/
- # ./fail/
- #
- mkdir pass
- mkdir fail
- cd task
- echo "~~HERE WE GO~~"
- echo "~~GOOD LUCK~~"
- judge () {
- grep -q "Normal termination" $log
- if [ $? -eq 1 ]
- then
- mv ${gjf%.*}.* ../../fail/
- echo "${gjf%.*} FAILED" >> ../../FAILED
- echo -e "!!!${gjf%.*} FAILED!!!\n"
- else
- formchk $chk
- cubegen 0 mo=lumo ${chk%.*}.fchk ${chk%.*}_lumo.cube 100 h
- cubegen 0 mo=homo ${chk%.*}.fchk ${chk%.*}_homo.cube 100 h
- mv ${gjf%.*}* ../../pass/
- echo "${gjf%.*} calculation finished">> ../../PASSED
- echo "${gjf%.*} calculation finished"
- fi
- }
- for order in `ls -F | grep /`
- do
- cd $order
- ls | grep -q .gjf
- if [ $? -eq 0 ]
- then
- echo "@@STEP $order BEGIN!@@"
- for gjf in *.gjf
- do
- log="${gjf%.*}.log"
- chk="${gjf%.*}.chk"
- echo "${gjf%.*} calculation start"
- time g09 $gjf
- wait
- judge
- done
- echo -e "@@STEP $order END@@\n"
- cd ..
- else
- echo -e "***STEP $order No Input File!!***\n"
- cd ..
- fi
- done
- echo "~~ALL DONE! HAVE FUN~~"
复制代码
现在应该没什么bug了,懒人版附件如下,解压即用,如有什么问题欢迎一起讨论~~
以上
run.tgz
(850 Bytes, 下载次数 Times of downloads: 137)
|
评分 Rate
-
查看全部评分 View all ratings
|