BAND.dat 长这样:
#K-Path Energy-Level
# NKPTS & NBANDS: 240 96
# Band-Index 1
0.00000 -12.501256
0.01166 -12.500967
.
.
.
2.51673 -12.501256
# Band-Index 2
2.51673 -12.500515
2.50327 -12.500128
.
.
.
2.51673 -12.501256
....
安装 Anaconda (一个集成了 Python 绝大多数库的工具)
只有 有带隙 的材料才能用这个脚本计算有效质量,最好是 绝缘体 和 半导体 ,金属的价带和导带是有重叠的是没法用下面的脚本计算有效质量。
R n = n 1 a 1 + n 2 a 2 + n 3 a 3 \boldsymbol{R_n} = n_1 \boldsymbol{a_1} + n2 \boldsymbol{a_2} + n3 \boldsymbol{a_3} Rn=n1a1+n2a2+n3a3
下面例子的单位是 埃(1E-10 米)
网上最流行的二维 InSe 教程的 POSCAR
SYSTEM = InSe
1.00000000000000
4.0927800000000003 0.0000000000000000 0.0000000000000000
-2.0463909999999998 3.5444536547999999 0.0000000000000000
0.0000000000000000 0.0000000000000000 20.0000000000000000
Se In
2 2
Direct
-0.0000000000000000 0.0000000000000000 0.6346282943308172
0.0000000000000000 -0.0000000000000000 0.3653717056691828
0.6666666870000029 0.3333333429999996 0.5704161898487420
0.6666666870000029 0.3333333429999996 0.4295838101512581
a 1 = ( 4.09278 , 0 , 0 ) \boldsymbol{a_1} = (4.09278, 0, 0) a1=(4.09278,0,0)
a 2 = ( − 2.0463 , 3.5444536 , 0 ) \boldsymbol{a_2} = (-2.0463, 3.5444536, 0) a2=(−2.0463,3.5444536,0)
a 3 = ( 0 , 0 , 20 ) \boldsymbol{a_3} = (0, 0, 20) a3=(0,0,20)
∣ a 2 ∣ = ( − 2.0463 ) 2 + ( 3.5444536 ) 2 = 4.0927824 | \boldsymbol{a_2} | = \sqrt{(-2.0463)^2 + (3.5444536)^2} = 4.0927824 ∣a2∣=(−2.0463)2+(3.5444536)2=4.0927824
单位是 埃,编辑器打不出来。
三维情况下:
G h = h 1 b 1 + h 2 b 2 + h 3 b 3 \boldsymbol{G_h} = h_1 \boldsymbol{b_1} + h_2 \boldsymbol{b_2} + h_3 \boldsymbol{b_3} Gh=h1b1+h2b2+h3b3
其中:
b 1 = 2 π ( a 2 × a 3 ) a 1 ⋅ ( a 2 × a 3 ) , \boldsymbol{b_1} = 2 \pi \frac{\boldsymbol{(a_2 \times a_3)}}{\boldsymbol{a_1 \cdot (a_2 \times a_3)}}, b1=2πa1⋅(a2×a3)(a2×a3),
b 2 = 2 π ( a 3 × a 1 ) a 1 ⋅ ( a 2 × a 3 ) , \boldsymbol{b_2} = 2 \pi \frac{\boldsymbol{(a_3 \times a_1)}}{\boldsymbol{a_1 \cdot (a_2 \times a_3)}}, b2=2πa1⋅(a2×a3)(a3×a1),
b 3 = 2 π ( a 1 × a 2 ) a 1 ⋅ ( a 2 × a 3 ) , \boldsymbol{b_3} = 2 \pi \frac{\boldsymbol{(a_1 \times a_2)}}{\boldsymbol{a_1 \cdot (a_2 \times a_3)}}, b3=2πa1⋅(a2×a3)(a1×a2),
或者(有的书是没有乘以 2 π 的,比如 原版 的黄昆的书):
b 1 = ( a 2 × a 3 ) a 1 ⋅ ( a 2 × a 3 ) , \boldsymbol{b_1} = \frac{\boldsymbol{(a_2 \times a_3)}}{\boldsymbol{a_1 \cdot (a_2 \times a_3)}}, b1=a1⋅(a2×a3)(a2×a3),
b 2 = ( a 3 × a 1 ) a 1 ⋅ ( a 2 × a 3 ) , \boldsymbol{b_2} = \frac{\boldsymbol{(a_3 \times a_1)}}{\boldsymbol{a_1 \cdot (a_2 \times a_3)}}, b2=a1⋅(a2×a3)(a3×a1),
b 3 = ( a 1 × a 2 ) a 1 ⋅ ( a 2 × a 3 ) , \boldsymbol{b_3} = \frac{\boldsymbol{(a_1 \times a_2)}}{\boldsymbol{a_1 \cdot (a_2 \times a_3)}}, b3=a1⋅(a2×a3)(a1×a2),
In [10]: import numpy as np
In [11]: a1 = np.array([4.09278, 0, 0])
...: a2 = np.array([-2.04639, 3.54445365, 0])
...: a3 = np.array([0, 0, 20])
...:
...: # 求分母,也就是体积
...: V = np.dot(a1, np.cross(a2, a3))
...: print(V)
290.13338019294
In [16]: a1 = np.array([4.09278, 0, 0])
...: a2 = np.array([-2.04639, 3.54445365, 0])
...: a3 = np.array([0, 0, 20])
...:
...: # 求分母,也就是体积
...: V = np.dot(a1, np.cross(a2, a3))
...:
...: b1 = 2 * np.pi * np.cross(a2, a3) / V
...: b2 = 2 * np.pi * np.cross(a3, a1) / V
...: # 二维情况不考虑 b3
...: # b3 = 2 * np.pi * np.cross(a1, a2) / V
...:
...: # 打印倒格矢向量形式
...: print(b1)
...: print(b2)
...: # print(b3)
...:
...: # 打印倒格矢向量的模(长度)
...: print(np.linalg.norm(b1))
...: print(np.linalg.norm(b2))
...: # print(np.linalg.norm(b3)
[ 1.53518765 0.88634045 -0. ]
[0. 1.77268091 0. ]
1.772681730317445
1.772680905893518
可以看到这个例子的倒格矢 b 1 , b 2 \boldsymbol{b_1}, \boldsymbol{b_2} b1,b2 的长度都是 1.77268 (1/angstrom)。
1 m ∗ = 1 ℏ 2 ∂ 2 E k ∂ k 2 \frac {1}{m^*} = \frac{1}{\hbar^2} \frac {\partial^2{{E_k}}} {\partial \boldsymbol{k}^2} m∗1=ℏ21∂k2∂2Ek
解释:
在能带的极值处对 倒格矢坐标 求二阶导,然后代进公式计算,便可求得有效质量
其中:
如果计算的是电子有效质量,则取得能带是最低的导带,在极小值处附近取点做二阶拟合,或者求二阶导。
如果计算的是空穴有效质量,则取得能带是最高的价带,在极大值处附近取点做二阶拟合,或者求二阶导。
比如在 InSe 的例子中:(红圈的是求电子有效质量,最低的导带极小值附近;绿框的是求空穴有效质量,最高的价带极大值附近),那么计算的时候就是通过找到这几处地方求其二阶拟合(或二阶导数)。
单位(根据能带图):
ℏ : 1.0545 × 1 0 − 34 J ⋅ s {\hbar} : 1.0545 \times 10^{-34} J \cdot s ℏ:1.0545×10−34J⋅s
E k : e V E_k: eV Ek:eV
k : 1 / a n g s t r o m \boldsymbol{k}: 1/ angstrom k:1/angstrom
1 m ∗ : e V a n g s t r o m 2 ( J 2 ⋅ s 2 ) \frac{1}{m^*} : \frac{eVangstrom^2}{(J^2 \cdot s^2)} m∗1:(J2⋅s2)eVangstrom2
现在问题是为什么 E_k 对 k 的二阶导的单位不是分子分母都是平方,而是只有分母平方,而分子没有平方。
在这里举个加速度的例子:
a = d 2 x d t 2 a = \frac{d^2x}{dt^2} a=dt2d2x
和加速度的单位一样的道理:
a 的 加 速 度 不 为 m 2 s − 2 , 而 是 m s − 2 a 的加速度不为 m^2 s^{-2},而是 m s^{-2} a的加速度不为m2s−2,而是ms−2
所以, 有效质量的单位是:
m ∗ : J 2 ⋅ s 2 ( e V a n g s t r o m 2 ) − 1 m^* : J^2 \cdot s^2 (eVangstrom^2)^{-1} m∗:J2⋅s2(eVangstrom2)−1
这个单位比较难看,并且化简不方便。但是也可以化简:
J : k g ⋅ m 2 s − 2 J:kg\cdot m^2 s^{-2} J:kg⋅m2s−2
e V : 1.6 × 1 0 − 19 J eV: 1.6 \times 10^{-19}J eV:1.6×10−19J
m ∗ : J 2 ⋅ s 2 ( e V a n g s t r o m 2 ) − 1 = J ⋅ ( k g ⋅ m 2 s − 2 ) s 2 1.6 × 1 0 − 19 J ⋅ ( 1 0 − 10 m ) 2 = ( ∗ ∗ ) k g m^* : J^2 \cdot s^2 (eVangstrom^2)^{-1} =\frac{ J \cdot(kg\cdot m^2 s^{-2}) s^2 }{1.6 \times 10^{-19}J \cdot (10^{-10}m)^2} = (**) kg m∗:J2⋅s2(eVangstrom2)−1=1.6×10−19J⋅(10−10m)2J⋅(kg⋅m2s−2)s2=(∗∗)kg
最后得到的是质量单位 kg,但数值很复杂。
https://en.wikipedia.org/wiki/Hartree_atomic_units
R e d u c e d P l a n c k c o n s t a n t : ℏ = 1 h a r t r e e = 1.0545 × 1 0 − 34 J ⋅ s Reduced Planck constant: \hbar = 1 hartree = 1.0545 \times 10^{-34} J \cdot s ReducedPlanckconstant:ℏ=1hartree=1.0545×10−34J⋅s
E l e m e n t a r y c h a r g e : e = 1 h a r t r e e = 1.6 × 1 0 − 19 C Elementary charge: {\displaystyle e=1} hartree = 1.6 \times 10^{-19} C Elementarycharge:e=1hartree=1.6×10−19C
B o h r r a d i u s : a 0 = 1 h a r t r e e = 5.29 × 1 0 − 11 m Bohr radius: {\displaystyle a_{0}=1} hartree = 5.29 \times 10^{-11} m Bohrradius:a0=1hartree=5.29×10−11m
E l e c t r o n m a s s : m e = 1 h a r t r e e = 9.1 × 1 0 − 31 k g Electron mass: {\displaystyle m_{\text{e}}=1} hartree = 9.1 \times 10^{-31} kg Electronmass:me=1hartree=9.1×10−31kg
E n e r g y : E h = 1 h a r t r e e = 27.21 e V Energy: E_h = 1 hartree = 27.21 eV Energy:Eh=1hartree=27.21eV
化简后(Hartree atomic units):
1 m ∗ = ∂ 2 E k ∂ k 2 \frac {1}{m^*} = \frac {\partial^2{{E_k}}} {\partial \boldsymbol{k}^2} m∗1=∂k2∂2Ek
这时候,E_k 的单位是 Hartree,k 的单位也是 Hartree,h_bar 是 1 省略不写。所以最后得出的有效质
量单位是 Hartree,即单位为元电荷(这也是论文经常看见的): 1 H a r t r e e = 1 m e ( m 0 ) = 9.1 × 1 0 − 31 k g 1 Hartree = 1m_e(m_0) = 9.1 \times 10^{-31} kg 1Hartree=1me(m0)=9.1×10−31kg
1 m ∗ = ∂ 2 E k ∂ k 2 \frac {1}{m^*} = \frac {\partial^2{{E_k}}} {\partial \boldsymbol{k}^2} m∗1=∂k2∂2Ek
单位是:
1 H a r t r e e = 1 m e ( m 0 ) = 9.1 × 1 0 − 31 k g 1 Hartree = 1m_e(m_0) = 9.1 \times 10^{-31} kg 1Hartree=1me(m0)=9.1×10−31kg
https://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTExOA==&mid=2247484762&idx=1&sn=fff244bc64af036f52ccecb1bec28eef&chksm=eadec3ebdda94afd846972e5ae363107eacec316c8db7c3b328305451ea66d5870bcc597a516&token=1986072339&lang=zh_CN#rd
或者
https://zhuanlan.zhihu.com/p/62573921 点击转 “有效质量详细教程”
数据格式(每一条带 240 个 K 点,一共 96 条带,能量单位是 eV,x 轴即 K-path 的单位是 1/A):
#K-Path Energy-Level
# NKPTS & NBANDS: 240 96
# Band-Index 1
0.00000 -12.501256
0.01166 -12.500967
.
.
.
2.51673 -12.501256
# Band-Index 2
2.51673 -12.500515
2.50327 -12.500128
.
.
.
2.51673 -12.501256
....
x 轴(K-PATH)的数值是如何来的!
先看 KPOINTS
K-Path Generated by VASPKIT.
80
Line-Mode
Reciprocal
0.0000000000 0.0000000000 0.0000000000 G
0.5000000000 0.0000000000 0.0000000000 M
0.5000000000 0.0000000000 0.0000000000 M
0.3333333333 0.3333333333 0.0000000000 K
0.3333333333 0.3333333333 0.0000000000 K
0.0000000000 0.0000000000 0.0000000000 G
三段高对称点的路径,每一段路径 80 个 K 点,一共 240 个 K 点,所以看 BAND.dat 第 80 个 K 点的 K-PATH 的数值就是高对称点 M (0.5, 0, 0)。
从 3.2.2 的计算得出 b1 = 1.772681730317445 1/A
b1 / 2 = 0.8863408651587225 1/A
显然和 高对称点 M (0.5, 0, 0) 的值一样,所以可以判断出,vaspkit 导出的 K-path 的数据是采用 3.2.2 中有 × 2 π 的形式
使用: Python 脚本通过 vaspkit 生成的能带数据文本 BAND.dat 计算有效质量
脚本链接: 脚本网页下载