自动拉伸脚本更新2.0

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、之前的拉伸脚本可以看这里

发表评论