1、因为在vasp计算中可能会出现让 cp CONTCAR to POSCAR 然后重新计算的这种可能性,所以重新修改了一下脚本
#!/bin/bash
# date:2021-8-10
#自动模拟拉伸
rm error.lashen
for ((a=19;a<=35;a++));
do
echo $a
#cd $a; qsub vasp.pbs;cd ..
sleep 10
qstat > qstat.log
#grep R qstat.log > qstat_R.log
while (grep vasp-lashen qstat.log)
do
sleep 10m
qstat > qstat.log
# grep R qstat.log > qstat_R.log
done
#检查与提交任务
#a=23
if ( grep "reached required accuracy" $a/runvasp.log ); then #检测计算成功没
echo ok
b=$(echo $a+1| bc)
mkdir $b
cd $a ; cp * ../$b
cd ../$b ; cp CONTCAR POSCAR
./changep-ele.sh;
cd ..
cd $b; qsub vasp.pbs; cd ..
elif (grep "CONTCAR" $a/runvasp.log);then #如果要重新算就从新算
echo "Recalculation for $a" >> error.lashen
cp $a/CONTCAR $a/POSCAR
cd $a; qsub vasp.pbs; cd ..
a=$(echo $a-1| bc) #减小a因为for循环增加了
else # 如果出现其他情况 就直接停止拉伸
echo "some error for $a" >> error.lashen
a=70
fi
#cd $b; qsub vasp.pbs; cd ..
done
2、还有原子移动脚本
#!/bin/bash
# 移动指定编号原子脚本,自动拉伸脚本专用版
# 重庆理工大学材料学院张宏林
cp POSCAR POSCAR_old
s=49 #需要移动原子的起始编号
e=75 #需要移动原子的结束编号
l=0.003187759 #移动原子的步长,与POSCAR的坐标格式一致
#如果有多个编号区段,可以复制本脚本重命名,修改原子编号,然后在 拉伸脚本中多运行几次。
#read -p "输入起始移动原子编号:" s
#read -p "输入末尾移动原子编号:" e
#echo "输入移动距离"
#read -p "input a val:" l
#echo $l
awk '{print $3}' POSCAR > sj.txt #打印第三列
tail -n +10 sj.txt > sj1.txt #从第10行开始 输出 c轴坐标
sed -n ''$s','$e'p' sj1.txt > sj2.txt # 输指定的原子由开始指定的原子移动
#awk -v val=$c ' $1>val {print $1}' sj1.txt > sj2.txt #筛选需要移动的坐标
cat sj2.txt | sort | uniq > sj3.txt #去掉重复坐标
#echo 23
for y in $(cat sj3.txt)
do
#echo 24
k=$(echo $y | tr -d $'\r') #输出字符串由回车 bc计算会报错 需删掉回车
d=$(echo $k+$l| bc) #加号和减号根据自己的需要移动的原子位置而定
echo $l
echo $k
echo $d
sed -i "s/$k/$d/g" `grep $k -rl POSCAR`
done
echo ok
3、之前的拉伸脚本可以看这里