第1章:晶体对称性与弹性常数
做第一性原理计算的人,十有八九都要跟弹性常数打交道。我记得刚入行那会儿,导师扔给我一个正交晶系的结构,让我算弹性常数。我二话不说,直接跑了6个应变,算了21个独立分量——结果被导师骂了一顿。他说:“你算这么多干嘛?正交晶系只有9个独立弹性常数。”
嗯,从那以后,我养成了一个习惯:拿到一个晶体结构,第一件事就是查它的空间群,确定晶系,然后才动手算弹性常数。说白了,晶体对称性决定了弹性常数的独立个数。你如果不搞清楚这个,算出来的结果要么是冗余的,要么是错的。
1.1 弹性常数张量简介
弹性常数,专业点说叫弹性刚度张量,用 Cijkl 表示。它是一个四阶张量,理论上应该有 3×3×3×3 = 81 个分量。但别慌,实际没那么多。
为什么?因为应力张量和应变张量都是对称的。应力 σij = σji,应变 εkl = εkl。再加上热力学稳定性条件,Cijkl = Cjikl = Cijlk = Cklij。这一通对称性下来,81个分量就缩减到了21个独立分量。
这21个,是所有晶系里最多的。也就是三斜晶系的情况。但实际工程中,我们很少碰到三斜晶系。大多数材料都是立方、六方、四方、正交这些高对称性晶系。对称性越高,独立弹性常数越少。
核心要点:晶体对称性越高,独立弹性常数越少。这是Neumann原则的直接体现。
1.2 Neumann原则
Neumann原则,说白了就是一句话:晶体的物理性质,必须至少具有晶体本身所具有的对称性。
我个人的理解方式是这样的:你想想看,如果一个晶体在某个对称操作下不变,那它的弹性常数张量在这个对称操作下也必须不变。否则,物理性质就跟晶体结构对不上了,这显然不合理。
举个例子。立方晶系有4个三次旋转轴(沿体对角线方向),还有3个四次旋转轴(沿晶轴方向)。这些对称操作施加到弹性常数张量上,就会强制某些分量相等,某些分量为零。最终,21个独立分量就缩减到了3个:C11、C12、C44。
我的小技巧: 在实际计算中,我一般不会手动推导对称性约束。直接用材料数据库(比如Materials Project)查空间群,然后对照下表确定独立弹性常数个数。省时省力,还不容易出错。
1.3 不同晶系的独立弹性常数
下面这张表,是我做项目时经常翻的。建议你收藏一下,或者打印出来贴在工位上。
| 晶系 | 独立弹性常数个数 | 独立分量 | 常见材料举例 |
|---|---|---|---|
| 三斜 | 21 | C11, C12, C13, C14, C15, C16, C22, C23, C24, C25, C26, C33, C34, C35, C36, C44, C45, C46, C55, C56, C66 | — |
| 单斜 | 13 | C11, C12, C13, C15, C22, C23, C25, C33, C35, C44, C46, C55, C66 | — |
| 正交 | 9 | C11, C12, C13, C22, C23, C33, C44, C55, C66 | MgSiO3 钙钛矿 |
| 四方 | 6 或 7 | C11, C12, C13, C33, C44, C66 (以及 C16 对于某些四方晶系) | TiO2 金红石 |
| 六方 | 5 | C11, C12, C13, C33, C44 | Mg, Ti, ZnO |
| 立方 | 3 | C11, C12, C44 | Si, Al, NaCl |
注意: 四方晶系有6个还是7个独立分量,取决于具体的空间群。比如P4/mmm(四方晶系)有6个,而P4(四方晶系)有7个(多一个C16)。我建议你算之前,先用VASP或Quantum ESPRESSO的对称性分析功能确认一下。
1.4 对称性如何约束弹性常数?
我们来拆解一下立方晶系的情况。为什么只有3个?
立方晶系有3个四次旋转轴,分别沿x、y、z方向。假设你绕z轴旋转90度,x变成y,y变成-x。那么弹性常数张量里的C11(对应xx方向)就必须等于C22(对应yy方向)。同理,C12 = C21,C13 = C23,等等。
再结合其他对称操作,最终你会发现:
- C11 = C22 = C33
- C12 = C13 = C23
- C44 = C55 = C66
- 其他所有分量都为零
所以,立方晶系只需要算3个值。我在项目中遇到过有人把立方晶系当三斜晶系算,跑了21个应变,浪费了至少一周的计算资源。嗯,这种事其实挺常见的。
1.5 知识体系总览
下面这张图,是我自己画的知识框架。你可以把它当成一个导航图,随时回来看看。
1.6 实战中的注意事项
最后,分享几个我在项目中踩过的坑:
- 不要盲目相信数据库里的晶系标注。 我曾经从某个数据库下载了一个结构,标注是立方晶系。结果一算,C11 和 C22 差了5%。后来仔细一看,晶格常数 a、b、c 差了0.1 Å。嗯,数据库也有不准的时候。
- 对称性分析一定要做。 用VASP的话,IBRION = -1 跑一次静态计算,看看 OUTCAR 里的 symmetry 部分。它会告诉你空间群和对称操作数。这个信息比你自己猜的准多了。
- 独立弹性常数个数不是死的。 比如四方晶系,有些空间群有 C16,有些没有。你最好用程序自动生成应变矩阵,而不是手动写。
我的建议: 写一个脚本,输入空间群,自动输出独立弹性常数列表。我自己的脚本是用Python写的,调用了spglib库。这样每次拿到新结构,跑一下脚本就知道该算哪些分量了。省心。
好了,这一章就到这里。记住一句话:对称性决定一切。下一章我们会讲具体的计算方法——应变-应力方法,到时候会用到今天学的这些知识。
公众号:蓝海资料掘金营,微信deep3321