Files
blog-public/content/blog/vasp-phonon.md
2025-03-01 22:48:35 +08:00

56 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: '使用 VASP 计算声子'
date: 2025-02-26T10:46:07+08:00
draft: true
summary: some summary
---
通常来说,计算声子的原理是这样的:
1. 计算力矩阵。
“力矩阵”是一个实数矩阵,长宽都是三倍的原子数目(因为每个原子有三个方向可以活动)。
它的每一个元素都描述这样一个事情:一个原子移动一小段距离(简谐近似),另外一个原子会感受到多大的力?
或者也可以说,每个元素都是系统能量对原子位置的二阶导数。
显然它应该是一个对称矩阵。
2. 计算它的特征值和特征向量。
得到的特征值就是声子的频率(可能要乘以一个与质量有关的系数,记不清了),
特征向量就是这个声子模式中各个原子的振动幅度(同样要乘以一个与质量有关的系数)。
3. 好了,算完了。就这样。之后也可以再去计算声子态密度或者拉曼张量等,但这些都是后面的事情了。
首先,为什么是这个矩阵的特征值?我是这样理解的:
* 要精确描述系统的振动,最好是假定这个振动和系统本身都满足某种周期性,这样一个周期内原子个数是有限个,就可以用有限个量来描述这个振动。
使用声子的语言描述振动时就是这样做的,我们取的“周期”就是一个晶胞,原子排列满足这个周期性;
振动状态(原子在振动过程中的位移)不一定满足这个周期(想象一下相邻晶格振动方向相反的情况,这种情况我们也需要研究),
但经过“调整”后也满足这个周期(类似于 bloch 函数那样,乘上某一个波矢的平面波)。
* 在一个周期内的原子的运动状态组成的线性空间里,我们可以取不同的基来描述它。
力矩阵的特征向量就是满足条件的一组基,因此将原子的振动状态总是理解为力矩阵的特征向量的线性组合是可行的。
* 之所以使用这组特征向量(而不是别的某个矩阵的特征向量),是因为这组特征向量有这样一个特殊的性质:
在简谐近似的前提下考虑,其中任意一个向量所代表的振动状态是可以稳定存在的。
也就是说,如果系统现的振动状态对应其中的某个向量,那之后系统会一直是这个状态(一直对应于这个向量)。
而其它矩阵的特征向量(或者说,这一组特征向量的线性组合,只要不是恰好在同一个特征子空间里),都没有这个性质。
再换句话说,就是:这组特征向量描述的振动是比较“稳定”的(指对它的描述与时间无关),
只有需要考虑破坏了对称性或者非简谐效应的时候才会有变化(而这些东西的影响都相对来说比较小)。
一切看起来都十分美好:只要想办法算出来这个力矩阵,剩下的就都是一些数学处理了
(并且这个处理对计算机来说并不困难,随便一个家用计算机都可以在几秒或者几分钟内处理完成)。
唯一的问题就是如何计算这个力矩阵。
一个直观的方法是这样的:
把每个原子都向各个方向移动一小段距离,然后计算系统的能量或者各个原子的受力,然后就得到了矩阵的一行或者几行(如果考虑对称性的话)。
事实上也的确可以这样做,这就是所谓的“有限位移法”,
洋文叫“[finite differences](https://www.vasp.at/wiki/index.php/Phonons_from_finite_differences)”[^1]。
有一些小问题需要考虑,比如晶胞往往比较小、相邻晶胞中的同一个原子会相互影响,解决办法是在一个比较大的晶胞中计算;
比如施加的位移往往比较小(为了简谐近似),所以需要比较高精度的计算(不然这点受力就会被计算中的误差抹掉);
比如这个方法只能直接得到Γ点的声子,解决办法还是扩胞(得到几个点的声子,剩下的插值)。
总之都是一些可以解决的小问题。
然后就可以计算得到想要的性质,和实验或者文献比对一下,绝大多数都符合,简直完美。
然后就可以去研究剩下那一点点对不上的东西,然后就发现:不对劲。
准确来说,
[^1]: 写到这里我才意识到应该翻译成“有限差分”而不是“有限位移displacement但是我感觉我也在哪里看到过“有限位移”的说法也许是我记错了但反正就是那个意思就这样吧。