3.3 结构优化(relax)#
什么是结构优化(relaxation)?
一句话概括就是:寻找当前结构对应势能面所在位置附近的局域最小值。结构优化的目的是为了在给定限制(压强、是否固定晶格等条件)下得到合适的晶格常数和原子位置。
什么是势能面?
当一个体系的元素以及原子个数确定时,想象一个由原子坐标(对于复杂体系还有磁矩等参数)和体系能量构成的高维空间,体系能量完全取决于原子坐标。所以不同的原子坐标(以及磁矩等)就会对应不一样的能量,如果遍历全部的坐标可能,就得到了能量-坐标的一个高维曲面,即势能面(PES,Potential Energy Surface),下图:

如果原子的坐标不够好,使得该结构落在势能面的坡上(而非谷底),那么该结构必然会有自发向低能谷底的趋势(通常情况下自然总是喜欢能量低的,因为稳定)。对应在物理上就是该结构的原子间的受力没有平衡掉,原子为了让体系趋向低能的势能面谷底,就会在力的作用下略微移动;或者该结构的晶格过大(过小),体系在当前压强下要么收缩要么膨胀,直到它落在势能面谷底(局域最小值)。
原则上,我们可以对一个落在势能面坡上的结构手动修改每一个原子的位置或是手动对晶格放缩,不断重复直到它落到势能面的局域最小值(此时原子间受力为零或者微弱不计,体系能量达到极小值)。但是没有必要,VASP有成熟的结构优化算法,由参数IBRION控制(请自行查阅):
https://www.vasp.at/wiki/index.php/IBRION
结构优化算法流程:

这其实是QE的结构优化流程,懒得重新画,就直接拿来用了.VASP的区别就在于右侧的算法用的不是BFGS,而是前面IBRION提到的那些。实际上就是“离子步”和scf嵌套在一起的for循环:每移动一次离子,做一次scf计算得到每个原子的受力和体系的能量(这一过程称为离子步)。再借助算法得到下一个离子位置,进入下一次scf计算,直到达到收敛阈值。