[专
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
]calypso批量提交lsf任务脚本
calypso批量提交lsf任务脚本
集群环境:lsf,vasp,calypso
使用说明:需要在脚本中设置四个变量StrTotal:样本数目 GenTotal:计算多少代 ChkTimeInterval:检测优化任务是否执行完成的时间间隔(以分钟为单位,任务所需时间比较长时,设置大一些比如60)
如有问题或建议,请联系:xiejq@bcc.ac.cn qq:820478367 北京市计算中心
下面是脚本代码:
#!/bin/bash
################################################
# any question or suggestion , please contact to
# email: xiejq@bcc.ac.cn
# qq: 820478367
#################################################
rm job_log
./calypso.x
StrTotal=3
GenTotal=3
LsfName=cluster.lsf
##measure in minutes
ChkTimeInterval=1
i=1
j=1
StrTotal=$((StrTotal+1))
GenTotal=$((GenTotal+1))
ChkTimeInterval=$((ChkTimeInterval*60))
PrecisionFlag=0
while [ $i -lt $StrTotal ] do
mkdir $i
cp vasp KPOINTS POTCAR $i
cp $LsfName $i"/"$LsfName$i
i=$((i+1))
done
while [ $j -lt $GenTotal ] do
####################sub jobs##############################
if [ $PrecisionFlag -eq 0 ]
then
echo "Generation "$j" INCAR_1 computation begin" >>
job_log
else
echo "Generation "$j" INCAR_2 computation begin" >>
job_log
fi
i=1
while [ $i -lt $StrTotal ]
do
if [ $PrecisionFlag -eq 0 ]
then
cp INCAR_1 $i"/INCAR"
cp "POSCAR_"$i $i"/POSCAR"
else
cp INCAR_2 $i"/INCAR"
fi
cd $i
bsub $LsfName$i 2>&1 |sed -n '3,1p' | sed 's/>.*//g'
| sed 's/^.*/g' >> ../job_log
cd ..
i=$((i+1))
done
if [ $PrecisionFlag -eq 0 ]
then
echo "Generation "$j" INCAR_1 computing......" >> job_log
else
echo "Generation "$j" INCAR_2 computing......" >> job_log
fi
#######check status of jobs every once in a while########
AllDoneFlag=0
while [ $AllDoneFlag -lt 1 ]
do
sleep $ChkTimeInterval
if [ $PrecisionFlag -eq 0 ]
then
LineNum=`sed -n /"Generation "$j" INCAR_1
computation begin"/= job_log`
else
LineNum=`sed -n /"Generation "$j" INCAR_2
computation begin"/= job_log`
fi
LineTotal=$((LineNum+StrTotal))
LineNum=$((LineNum+1))
#echo $LineTotal $LineNum >> job_log
AllDoneFlag=1
while [ $LineNum -lt $LineTotal ]
do
num=`sed -n ''$LineNum',1p' job_log`
AllDoneFlag=`bjobs $num|awk '{if($1=='$num') print
$0}'|awk '{if($3=="RUN"||$3=="PEND") print 0} {if($3=="DONE")
print 1} {if($3=="EXIT") print 2}'`
#echo $LineNum >> job_log
#echo $AllDoneFlag $num >>job_log
if [ $AllDoneFlag -eq 0 ]
then
break
elif [ $AllDoneFlag -eq 2 ]
then
sed '$d' job_log
if [ $PrecisionFlag -eq 0 ]
then
echo "error in Generation "$j" INCAR_1
computation" >> job_log
else
echo "error in Generation "$j" INCAR_2
computation" >> job_log
fi
exit 1
fi
LineNum=$((LineNum+1))
done
done
sed '$d' job_log
if [ $PrecisionFlag -eq 0 ]
then
echo "Generation "$j" INCAR_1 computation
done successfully" >> job_log
PrecisionFlag=1
else
echo "Generation "$j" INCAR_2 computation
done successfully" >> job_log
PrecisionFlag=0
i=1
while [ $i -lt $StrTotal ]
do
cd $i
cp OUTCAR "../OUTCAR_"$i
cp CONTCAR "../CONTCAR_"$i
cd ../
i=$((i+1))
done
./calypso.x
j=$((j+1))
fi
done