VASP文件参数和常用命令
文件参数
INCAR
INCAR主要是告诉VASP我们要算什么以及计算的细节
SYSTEM = H2O # 计算的体系,随意写
ISMEAR = 0 # K点数目<4 取0;K点数目>4 取-5;金属 取1,2
SIGMA = 0.01 # 对于分子或者原子,用0.01,默认0.2,取小会收敛变慢
ISPIN = 2 # 考虑$\alpha$和$\beta$电子,即磁性
MAGMOM = 2*2 1*2 # 磁矩
ISYM = 0 # 不考虑对称性
ALGO = Normal # 电子迭代算法 FAST Damped 或 ALL
EDIFF = 1E-4 # 电子步收敛判据
ENCUT = 300 # 截断能量
NELM = 60 # 电子步数
ISIF = 3 # 2晶胞形状不变化;3变化
IBRION = 2 # 离子步迭代算法conjugate gradient algorithm
POTIM = 0.1 # 离子步 步长
NSW = 10 # 离子步 步数
EDIFFG = 1E-3 # 离子步收敛判据——力判据
KPOINTS
K-POINTS # 随意写
0 # 自动生成K点
G # G Gamma点中心 | M Monkhorst-Pack 方法
1 1 1 # 在xyz三个方向上生成对应数目的K点
0 0 0 # 一般静态模拟0 0 0
脚本
#! /usr/bin/env bash
# To generate KPOINT file
# Written by Xingyu on 2019-11-8
# To use it: kpoints.sh 3 3 1
echo K-POINTS > KPOINTS
echo 0 >> KPOINTS
echo Gamma-Centered >> KPOINTS
echo $1 $2 $3 >> KPOINTS
echo 0 0 0 >> KPOINTS
常用命令
文件操作
复制文件
cp file1 file2 -r # 把文件夹file1复制为file2
修改文件
sed -i '$aENCUT = 400' INCAR #在INCAR最后一行添加ENCUT = 400
sed -i "s/400/500/g" 500/INCAR ; #把500文件夹中INCAR中的400改为500
查看文件
cat INCAR -n #查看INCAR文件显示行数
赝势
potcar H O # 合成赝势 cat POTCAR-O POTCAR-H > POTCAR
pos2pot # 按照POSCAR生成POTCAR potcar.sh $(sed -n 6p POSCAR)"
gt # 查看元素 grep TIT POTCAR
grep ENMAX POTCAR # 查看截断能量
离子步
gr # 查看离子步是否收敛 grep 'reached required accuracy' OUTCAR
能量
ge # 查看能量 grep 'without' OUTCAR
时间内存
tail OUTCAR # 所有信息
grep User OUTCAR # 时间信息
批量操作
以下所有操作
cp
都自定义为cp -r
ENCAR
for i in {1..8}; do cp 400 $((400+$i*50)); sed -i "s/400/$((400+$i*50))/g" $((400+$i*50))/INCAR ; done # 制作不同INCAR参数文件
for i in *0; do cd $i ; mpirun -np 2 vasp_std; cd $OLDPWD; done # 提交任务
for i in *0; do echo -e $i, $(grep User $i/OUTCAR | awk '{print $4}') , $(grep ' without' $i/OUTCAR | tail -n 1 | awk '{print $4}'); done > ENCUT.dat # 打印时间和能量的第四个信息,并转化为data.dat
EDIFF
for i in {2..6}; do cp 1 $i; sed -i "6s/-1/$((-$i))/g" $i/INCAR ; done # 制作不同INCAR参数文件
for i in *; do cd $i ; mpirun -np 2 vasp_std; cd $OLDPWD; done # 提交任务
for i in *; do echo -e $i, $(grep User $i/OUTCAR | awk '{print $4}') , $(grep ' without' $i/OUTCAR | tail -n 1 | awk '{print $4}'); done > EDIFF.dat # 打印时间和能量的第四个信息,并转化为data.dat
KPOINTS
for i in {2..6}; do cp 111 ${i}${i}${i}; sed -i "4s/1 1 1/$i $i $i/g" ${i}${i}${i}/KPOINTS ; done # 制作不同KPOINTS参数文件
for i in {4..6}; do sed -i "2s/0/-5/g" ${i}${i}${i}/INCAR ; done # 修改ISMEAR参数
for i in {1..6}; do cd ${i}${i}${i} ; mpirun -np 2 vasp_std; cd $OLDPWD; done # 提交任务
for i in {1..6}; do echo -e $i, $(grep User ${i}${i}${i}/OUTCAR | awk '{print $4}') , $(grep ' without' ${i}${i}${i}/OUTCAR | tail -n 1 | awk '{print $4}'); done > KPOINTS.dat # 打印时间和能量的第四个信息,并转化为data.dat
Lattice Parameter
for i in 0.95 0.96 0.97 0.98 0.99 1.01 1.02 1.03 1.04 1.05; do cp 1.00 $i ; sed -i "2s/1.0/$i/g" $i/POSCAR ; done # 制作不同POSCAR参数文件
for i in *; do cd $i ; mpirun -np 2 vasp_std; cd $OLDPWD; done # 提交任务 # 修改ISMEAR参数
for i in 0.95 0.96 0.97 0.98 0.99 1.00 1.01 1.02 1.03 1.04 1.05; do echo -e $i, $(grep User $i/OUTCAR | awk '{print $4}') , $(grep ' without' $i/OUTCAR | tail -n 1 | awk '{print $4}'); done > Lattice_Parameter.dat # 打印时间和能量的第四个信息,并转化为data.dat