24小时热门版块排行榜    

CyRhmU.jpeg
查看: 892  |  回复: 2

railgun233

新虫 (初入文坛)

[交流] 写了个自动化脚本,各位可以参考用用已有2人参与

原创内容,首发地址:http://ccc.keinsci.com/forum.php ... =520&extra=
转帖须注明出处,虽然也没什么好转的~~

初玩高斯,参考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~~"

吐槽一下,木虫的代码插入和discuz比起来弱爆了啊

这个应该没什么bug,另外提供一个懒人版的在文章尾,解完压就能用,就先扯这么多,有什么问题再反馈吧~

以上
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : run.bz
  • 2014-12-26 22:20:04, 1.16 K

» 收录本帖的淘帖专辑推荐

经验

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

戴世杰

木虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
这个脚本还是有问题的,比如如果断电重算,计算过的文件还会再算一遍,比较费时!!

[ 发自小木虫客户端 ]
2楼2014-12-27 14:40:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qchem

铁杆木虫 (著名写手)



小木虫: 金币+0.5, 给个红包,谢谢回帖
如果一个作业里有多步,还是会有问题?

另外我觉得nohup可能还是会断,我现在是用setsid

[ 发自小木虫客户端 ]
3楼2014-12-28 06:28:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 railgun233 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见