准备的还是vasp的必备文件:POSCAR POTCAR KPOINTS,剩下需要的INCAR、band文件下面代码可以生成:
#!/bin/bash
if [ ! -f band.conf ];then
cat >>band.conf <<EOF
ATOM_NAME = Ti Al B
DIM = 1 1 1
BAND = 0.0 0.0 0.0 0.5 -0.5 0.5 0.25 0.25 0.25 0.0 0.0 0.0 0.0 0.0 0.5
FORCE_SETS=READ
#ANIME= 0.0 0.0 0.0
EOF
fi
if [ $# -lt 2 ];thenD="3 3 1"
elif [ $# -eq 2 ];thenD="$1 $2 1"
elseD="$1 $2 $3"
fi
line=`sed -n "/DIM/=" band.conf`
sed -i "$line c DIM = $D" band.conf
phonopy -d --dim="$D" --tolerance=1e-2
if [ ! -f INCAR-phonon ];then
cat > INCAR-phonon <<EOF
SYSTEM = phonon
ISPIN = 1
PREC = Accurate
ISTART = 1
ICHARG = 0
ENCUT = 600
EDIFF = 1E-8
EDIFFG = -0.0001
NELM = 100
NSW = 0
IBRION = -1ISMEAR = 0
SIGMA = 0.01LWAVE = .TRUE.
LCHARG = .FALSELPLANE = .TRUE.
ADDGRID= .TRUE.
NPAR = 4
LSCALU = .FALSE.
NSIM = 4
EOF
fi
for i in {001..090}
doif [ -f "POSCAR-$i" ]thenif [ ! -d "$i" ]thenmkdir $ificp INCAR-phonon $i/INCARcp KPOINTS POTCAR $imv POSCAR-$i $i/POSCARcd $i#runvasp -q Highcd ..elsebreakfi
done
KPOINTS设置:
A
0
M
3 3 3
0 0 0
注意,用vasp跑的原子数大概五十左右,太多会慢。我这里是49个,所以扩胞就写成了1 1 1,结果是否合理可以根据实验结果对照。
生成的文件需要检查
在每个目录下检查是否有以下文件:
vasprun.xml
OSZICAR
for i in {001..047}; doif [ ! -f $i/vasprun.xml ] || [ ! -f $i/OSZICAR ]; thenecho "❌ $i 未完成"fi done
在窗口用上面的命令就可以快速检查。最后,后处理:
#!/bin/bash for i in {001..090};do if [ -d "$i" ];thenif [ ! -f $i/vasprun.xml ];thenecho "no $i/vasprun.xml"exitfiif [ ! -f $i/OSZICAR ];thenecho "no $i/OSZICAR"exitfib=`grep F= $i/OSZICAR`a=`grep : $i/OSZICAR|tail -1|awk '{print $2}'`echo $b $acp $i/vasprun.xml vasprun.xml-$i#rm -r $i elsebreak fi donephonopy -f vasprun.xml-* phonopy -p -s --band-points=1000 --tolerance=1e-2 --factor=521.471 band.conf phonopy-bandplot --gnuplot > phonon.out