利用VASP进行弹性模量的计算笔记
本文是基于 《基于能量-应变关系计算弹性常数—VASPKIT v1.00新功能》、《基于应力-应变关系计算弹性常数—VASPKIT v1.2.0新功能》,并在此基础上进行整理记录,在此对原分享者表示感谢。
1 准备优化彻底的POSCAR文件,注意通常采用标准的惯用原胞计算弹性常数,如果不确信POSCAR文件中是否是标准的惯用原胞,可以用vaspkit-603/604生成标准结构;
补充:在Materials Project中下载所需材料的CIF文件,利用VESTA导出为XX.VASP文件,重命名为POSCAR
2 结构优化(弛豫)
INCAR 获取 :vaspkit → 101 → LR
KPOINTS 获取 : vaspkit →102→ 2→ 0.03 (由于计算弹性常数对K-mesh要求很高,因此对于半导体(金属体)体系,生成K点的精度应不小于0.03(0.02) * 2π Å-1)
2.1 如果弛豫发现报错
![]()
最好重新走一遍结构优化,或者INCAR中加上【ISYM=0】 忽略对称性(但是增加计算量)
3 弹性模量计算文件准备
POSCAR : 使用结构优化后的新坐标, cp CONTCAR POSCAR
KPOINTS : vaspkit →102 →2 →0.03
INCAR : vaspkit →101 →DC , 可以除了PREC参数,也可以手动设置ENCUT=1.5*ENMAX
Global Parameters
ISTART = 0
LREAL = F
PREC = High (截断能设置默认值1.5-2倍)
LWAVE = F
LCHARG = F
ADDGRID= .TRUE.
Electronic Relaxation
ISMEAR = 0
SIGMA = 0.05
NELM = 40
NELMIN = 4
EDIFF = 1E-08
Ionic Relaxation
NELMIN = 6
NSW = 100
IBRION = 2
ISIF = 2 (切记选择2,如果选择3会把施加应变后原胞重新优化成平衡原胞)
EDIFFG = -1E-02
4 准备VPKIT.in文件,内容如下
1 ! 设置1将产生计算弹性常数的输入文件,2则计算弹性常数
3D ! 2D为二维体系,3D为三维体系
7 ! 7个应变
-0.015 -0.010 -0.005 0.000 0.005 0.010 0.015 ! 应变变化范围
运行vaspkit 200(或201) ,分别对应【用应力-应变法计算弹性常数】、【能量-应变法计算弹性常数】
根据POSCAR产生对应张量元文件夹和计算文件
5 准备批量提交vasp作业的脚本(txml.sh)
-
#这条代码运行后,会在每个张量元的应变计算后,把超算脚本vasp.job复制到下一文件夹,继续张量元的计算 #!/bin/bash root_path=`pwd` for cij in `ls -F | grep /$` do cd ${root_path}/$cij for s in strain_* do cd ${root_path}/$cij/$s echo `pwd` cp ../../vasp.job . ./vasp.job # 上面两行vasp.job 替换为 超算运算的脚本文件名 # Add here your vasp_submit_job_script 把这一行替换为提交运算的命令 done done上述脚本要授予权限,否则如下图
-

-
利用chmod命令:chmod 777 txml.sh
-
6 计算结束后,再次修改VPKIT.in文件中第一行为2(后处理),然后再次运行vaspkit并选择200/201,即可得到弹性模量矩阵