第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 知识体系总览

下面这张图,是我自己画的知识框架。你可以把它当成一个导航图,随时回来看看。

晶体对称性与弹性常数知识体系 弹性常数张量 Cijkl Neumann原则 晶体对称操作 独立分量个数 三斜 (21) 单斜 (13) 正交 (9) 四方 (6/7) 六方 (5) 立方 (3) 第一性原理计算 应变-应力方法 力学性质预测 核心概念 对称性原理 晶系分类 计算方法 最终应用

1.6 实战中的注意事项

最后,分享几个我在项目中踩过的坑:

  • 不要盲目相信数据库里的晶系标注。 我曾经从某个数据库下载了一个结构,标注是立方晶系。结果一算,C11 和 C22 差了5%。后来仔细一看,晶格常数 a、b、c 差了0.1 Å。嗯,数据库也有不准的时候。
  • 对称性分析一定要做。 用VASP的话,IBRION = -1 跑一次静态计算,看看 OUTCAR 里的 symmetry 部分。它会告诉你空间群和对称操作数。这个信息比你自己猜的准多了。
  • 独立弹性常数个数不是死的。 比如四方晶系,有些空间群有 C16,有些没有。你最好用程序自动生成应变矩阵,而不是手动写。

我的建议: 写一个脚本,输入空间群,自动输出独立弹性常数列表。我自己的脚本是用Python写的,调用了spglib库。这样每次拿到新结构,跑一下脚本就知道该算哪些分量了。省心。

好了,这一章就到这里。记住一句话:对称性决定一切。下一章我们会讲具体的计算方法——应变-应力方法,到时候会用到今天学的这些知识。


公众号:蓝海资料掘金营,微信deep3321