【VASP】晶格常数与原子坐标优化

发布时间:2023年12月25日

晶格常数的优化

方法一:自动优化法

程序自动,VASP中INCAR中设置 ISIF = 3原子的位置和晶胞的常数都被优化好,一般这个方法比较简单粗暴,但是用的比较多,优化好的CONTAR拿出来进行下一步的计算。

这里ISIF=3, NSW一定不能设为0,不是单点计算

eg. 以Si的原胞为例:POSCAR

未优化前的晶格常数为3.84埃

Si

1.0 #下面的方法二就是改变这个缩放系数

3.8401000500 0.0000000000 0.0000000000

1.9200500250 3.3256241964 0.0000000000

1.9200500250 1.1085413988 3.1354285612

Si

2

Direct

0.000000000 0.000000000 0.000000000

0.250000000 0.250000000 0.250000000

优化好的结构CONTACR

在这里插入图片描述

方法二:保持晶格参数比例,对晶胞进行缩放,得到能量与缩放系数之间的关系图,取能量的最低点

  1. 保持晶格参数比例,对晶胞进行缩放,得到能量与缩放系数之间的关系图,取能量的最低点

  2. 就是改POSCAR的第二行,改变缩放系数,一般这里需要做多个单点计算,不同缩放系数对应一个单点计算,(所以这里建议搞个脚本提交作业)获取能量,作图,找到能量最低点进行计算

  3. 因为是单点计算,所以结构优化的一系列控制参数比如ISIF,IBRION都无所谓了,只要把NSW设为0进行计算 。

在这里插入图片描述

在这里插入图片描述

注意:

  • 这里自动优化法和晶格常数扫描法得到的结果都比较接近,故而都可以用
  • 自动优化ISIF=3, NSW一定不能设为0
  • 晶格常数扫描法,也就是多个单点计算的叠加,所以NSW=0,ISIF怎么设无所谓。
  • 对于一些无定型结构,如高熵合金采用随机方式生成的结构,如果使用自动优化法容易造成结构的变形,不提倡此种方法。

通用计算流程

结构优化

  • 拿到一个材料的结构肯定先要优化。你可以直接ISIF=3让原子坐标和晶格形状都动,但官方似乎不建议这么做。官方建议先固定原子坐标做晶格形状优化,然后再用优化好的结构做固定晶格下原子坐标的优化,注意连续计算时用前一步的CONTCAR做后一步的POSCAR.
  • 固定原子坐标优化晶格形状时特别是晶格参数时最好的做法就是控制其它参数不变去调整晶格缩放系数,做很多个不同系数下的SCF电子自洽,比较它们的能量,选最低的那个,缩放后的结构就是优化了晶格参数的结构。
  • 结构优化不用输出WAVECAR和CHGCAR,注意它们很占你的硬盘空间哦。

SCF电子自洽

一定要输出WAVECAR和CHGCAR,这样在你以后不论是计算电子态密度和能带结构,还是做杂化泛函和GW计算,就直接读取该步的结果继续算就行了,免得重复计算。

IBRION        =    优化算法                            #一般用2就好.  
ISIF          =    2或3                                #只优化原子坐标用2;既优化原子坐标又优化晶格形状用3.
NSW           =    默认0                               #最大离子步数.切记一定要自己设一个数如100,默认设置是不跑离子步不做结构优化的.
EDIFFG        =    通常设-0.05,-0.02或-0.01            #收敛条件.越严格就把值的绝对值设越小.负值表示用力做标准,最常用.也可以设为正值用能量做标准,不过该设多少就得自己琢磨了.

第一性原理分子动力学

BRION        =    0                                   #表示我要做动力学.
SMASS         =    -3或-2或-1或大于等于0的实数         #速度控制.正则系综NVT系统请设为一个大于等于0的实数.
ISIF          =    2                                   #只让原子动.
POTIM         =    每一步的时长                        #动力学一般跑到5ps也就是5000fs,如果你设此值为1那么你就要设NSW为5000.
NSW           =    步数                                #不解释了.
MDALGO        =    2                                   #动力学方案.有0,1,2,3,11,21,13七种选择.比如研究正则系综NVT系统可设为2,采用Nose-Hoover恒温器方案.同时不要忘了设起始和结束温度.
TEBEG         =    起始温度                            #热力学温度,单位K.
TEEND         =    结束温度                            #热力学温度,单位K.
  • INCAR文件的额外补充部分通常涉及到如下标签:

自旋极化设置

ISPIN           =    2                                   #设成2开启自旋极化.
MAGMOM          =    原子磁矩设置,格式:原子数*磁矩       #没有关于原子磁矩的先验知识就默认.
AMIX            =    0.2                                 #下列此项都是控制电荷密度线性混合的参数,在做自旋极化计算时要合理设置,找见对的值才能助你找到你想要的磁性状态.如果不知道设什么好,这里的设置就是官网的推荐值,先试试看.
BMIX            =    0.0001
AMIX_MAG        =    0.8
BMIX_MAG        =    0.0001

DFT+U

LDAU          =    .TRUE.                              #考虑DFT+U.
LDAUTYPE       =    2                                   #加U方法.2好像最常用.
LDAUL         =    加U轨道设置,按POSCAR中的元素顺序设  #对应关系[-1 1 2 3]-[无 p d f].根据你的体系设置.
LDAUU         =    U值                                 #根据你的体系设置.按POSCAR中的元素顺序设.
LDAUJ         =    J值                                 #同理如上.
LMAXMIX       =    4或6                                #考虑d电子时设4;考虑f电子时设6.

杂化泛函

LHFCALC       =    .TRUE.                              #开启杂化泛函计算.
AEXX          =    默认0.25                            #交换部分参数.默认就好.
HFSCREEN      =    0.2                                 #用HSE06.
ALGO          =    注意此项与SCF电子自洽重复           #算法.带隙大用All,带隙小用Damped.把SCF电子自洽部分的此项删掉.
PRECFOCK      =    Normal或Accurate                    #Normal就行.你会知道杂化泛函计算速度非常慢.

Pymatgen画电子态密度和能带结构的python脚本

最后贴个用Pymatgen画电子态密度和能带结构的python脚本,以防忘记。

### 分波投影电子态密度 ###
import matplotlib.pyplot as plt
from pymatgen.electronic_structure.core import Spin
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.io.vasp.outputs import Vasprun
dosrun = Vasprun("vasprun.xml", parse_dos=True)
dos = dosrun.complete_dos
dosplot = DosPlotter(sigma=0.1)
dosplot.add_dos("Total DOS", dos)
dosplot.add_dos_dict(dos.get_element_dos())                       # 默认画元素投影,将括号内容改为dos.get_spd_dos()就是轨道投影。
plt.rcParams['xtick.direction']='in'
plt.rcParams['ytick.direction']='in'
plt = dosplot.get_plot(xlim=(-3,3),ylim=(0,80))
plt.yticks([])
plt.savefig('epdos.png')

在这里插入图片描述

### 能带结构+分波投影电子态密度 ###
import matplotlib.pyplot as plt
from pymatgen.electronic_structure.core import Spin
from pymatgen.electronic_structure.plotter import BSDOSPlotter, BSPlotter, DosPlotter
from pymatgen.io.vasp.outputs import BSVasprun, Vasprun
run       = BSVasprun("vasprun.xml", parse_projected_eigen=True)
dosrun    = Vasprun("../dos/vasprun.xml", parse_dos=True)
dos       = dosrun.complete_dos
bs        = run.get_band_structure("KPOINTS", efermi=dos.efermi)
bsdosplot = BSDOSPlotter(bs_projection="elements", dos_projection="orbitals", vb_energy_range=3, cb_energy_range=3, fixed_cb_energy=3, fig_size=(9,6))
plt.rcParams['xtick.direction']='in'
plt.rcParams['ytick.direction']='in'
bsdosplot.get_plot(bs=bs, dos=dos)
plt.savefig('bdos.png')

在这里插入图片描述

https://zhuanlan.zhihu.com/p/571694885

https://www.bilibili.com/read/cv12953631/

文章来源:https://blog.csdn.net/weixin_43848614/article/details/134483677
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。