使用pymatgen进行扩胞
本文最后更新于:3 个月前
Pymatgen (Python Materials Genomics) is a robust, open-source Python library for materials analysis.
使用pymatgen进行扩胞非常简单,具体操作如下:
-
先导入
pymatgen
库的Structure
类:1
from pymatgen import Structure
-
然后读入想要扩胞的晶体结构,CIF格式、POSCAR格式都可以,pymatgen可以自动识别:
1
structure = Structure.from_file('./CsPbI3_mp-1069538_primitive.cif')
可以用
print(structure)
打印看一下结构,结果如下:1
2
3
4
5
6
7
8
9
10
11
12Full Formula (Cs1 Pb1 I3)
Reduced Formula: CsPbI3
abc : 6.414145 6.414145 6.414145
angles: 90.000000 90.000000 90.000000
Sites (5)
# SP a b c
--- ---- --- --- ---
0 Cs 0.5 0.5 0.5
1 Pb 0 0 0
2 I 0 0 0.5
3 I 0 0.5 0
4 I 0.5 0 0 -
扩胞操作,例如扩成 的超胞:
1
structure.make_supercell(scaling_matrix=[2, 2, 2], to_unit_cell=False)
再用
print(structure)
打印看一下扩胞后的结构,结果如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47Full Formula (Cs8 Pb8 I24)
Reduced Formula: CsPbI3
abc : 12.828290 12.828290 12.828290
angles: 90.000000 90.000000 90.000000
Sites (40)
# SP a b c
--- ---- ----- ---- -----
0 Cs 0.25 0.25 0.25
1 Cs 0.25 0.25 0.75
2 Cs 0.25 0.75 0.25
3 Cs 0.25 0.75 0.75
4 Cs 0.75 0.25 0.25
5 Cs 0.75 0.25 0.75
6 Cs 0.75 0.75 0.25
7 Cs 0.75 0.75 0.75
8 Pb 0 0 0
9 Pb 0 0 0.5
10 Pb -0 0.5 -0
11 Pb -0 0.5 0.5
12 Pb 0.5 0 -0
13 Pb 0.5 0 0.5
14 Pb 0.5 0.5 -0
15 Pb 0.5 0.5 0.5
16 I 0 0 0.25
17 I 0 0 0.75
18 I -0 0.5 0.25
19 I -0 0.5 0.75
20 I 0.5 0 0.25
21 I 0.5 0 0.75
22 I 0.5 0.5 0.25
23 I 0.5 0.5 0.75
24 I -0 0.25 -0
25 I -0 0.25 0.5
26 I -0 0.75 -0
27 I -0 0.75 0.5
28 I 0.5 0.25 -0
29 I 0.5 0.25 0.5
30 I 0.5 0.75 -0
31 I 0.5 0.75 0.5
32 I 0.25 0 -0
33 I 0.25 0 0.5
34 I 0.25 0.5 -0
35 I 0.25 0.5 0.5
36 I 0.75 0 -0
37 I 0.75 0 0.5
38 I 0.75 0.5 -0
39 I 0.75 0.5 0.5可以看到已经扩胞成功了。
高级用法:这个方法中的
scaling_matrix
参数有三种输入方式:- 一个 矩阵。例如
scaling_matrix=[[2, 1, 0], [0, 3, 0], [0, 0, 1]]
,则会将晶胞扩成 的超胞。 - 一个3维向量。例如
scaling_matrix=[2, 1, 1]
,则会将晶胞扩成 的超胞,等价于scaling_matrix=[[2, 0, 0], [0, 1, 0], [0, 0, 1]]
。(我们的例子用的就是这个方法) - 也可以只输入一个数字。例如
scaling_matrix=2
,等价于scaling_matrix=[2, 2, 2]
。
- 一个 矩阵。例如
-
然后我们可以扩胞后的结构存为文件,这里我们存为POSCAR格式:
1
structure.to(fmt='POSCAR', filename='new_structure.vasp')
PS:如果要存为CIF格式,只要将
fmt='POSCAR'
改为fmt='cif'
,然后文件扩展名对应改一下,即可。
-
完整代码如下:
1
2
3
4
5from pymatgen import Structure
structure = Structure.from_file('./CsPbI3_mp-1069538_primitive.cif')
structure.make_supercell(scaling_matrix=[2, 2, 2], to_unit_cell=False)
structure.to(fmt='POSCAR', filename='new_structure.vasp')用VESTA查看结果,如下:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明来自G.J. Cheng’s Blog!