ASE的骚操作系列

对科研狗们来说,ASE不是Automotive Service Excellence的缩写,而是Atomic Simulation Environment。
是一款基于Python语言的工具软件,可以方便地处理DFT计算中结构搭建,准备输入文件准备,读取输出文件,既可以可视化,又可以用来转换文件格式。本文主要介绍ASE在DFT计算中的骚操作。这个”骚”字让我想起来小学的时候,同桌读了屈原的《离骚》,然后转过头来用这个字来笑话我,说我真骚。我被憋的满脸通红却不知如何反驳。骚就骚吧,骚前面加个可以千古流传,那么我相信,它后面加个操作也可以对大家日常的计算有所帮助。
首先声明:本教程具有自动过滤功能。每次过滤的时候,我都会提醒一下,以防你被滤纸卡住。但如果你读完教程却不能顺利进行操作,请不要找我,请分解自己让自己滤下去。

滤纸-1: ASE成功安装了没? (https://wiki.fysik.dtu.dk/ase/install.html)被卡住就不要继续喽!

今天我们讲的骚操作就是用ASE来进行格式转换。这也是本人日常用的最多的一个,最稳定也最方便的一个操作。既然是操作,那么就举个栗子吧:

例子1):将mol文件转化为xyz。

首先在Chemspider数据库中,下载一个乙烷3D构型的mol文件。

滤纸-2:Chemspider 是啥玩意,怎么下载mol文件? 之前教程有讲过,不会的找百度。被卡住就不要继续喽!

操作过程:

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
qli@bigbro:~/Downloads$ ls
6084.mol
qli@bigbro:~/Downloads$ head -n 13 6084.mol
6324
Marvin 12300703363D

8 7 0 0 0 0 999 V2000
0.7686 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7686 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.1430 1.0253 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.1430 -0.5127 0.8880 H 0 0 0 0 0 0 0 0 0 0 0 0
1.1430 -0.5127 -0.8880 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.1430 -1.0253 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.1430 0.5127 -0.8880 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.1430 0.5127 0.8880 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
qli@bigbro:~/Downloads$ ase gui 6084.mol -o C2H6.xyz
/home/qli/.local/lib/python3.8/site-packages/ase/gui/ag.py:85: UserWarning: You should be using "ase convert ..." instead!
warnings.warn('You should be using "ase convert ..." instead!')
(qrobot) qli@bigbro:~/Downloads$ cat C2H6.xyz
8
Properties=species:S:1:pos:R:3 pbc="F F F"
C 0.76860000 0.00000000 0.00000000
C -0.76860000 -0.00000000 0.00000000
H 1.14300000 1.02530000 0.00000000
H 1.14300000 -0.51270000 0.88800000
H 1.14300000 -0.51270000 -0.88800000
H -1.14300000 -1.02530000 0.00000000
H -1.14300000 0.51270000 -0.88800000
H -1.14300000 0.51270000 0.88800000
qli@bigbro:~/Downloads$ ase gui C2H6.xyz
qli@bigbro:~/Downloads$

我们成功用ase gui 将mol转化为了xyz文件。

1) 每次运行都会出现那行警示信息,让你用ase convert转化。命令如下:

ase convert -i mol -o xyz 6084.mol C2H6.xyz

这个命令比较长,输入起来烦人,远远不如ase gui 干脆利落。警告信息就用你那高度近视镜自行滤过吧。

2) -o 中的字母o是out的缩写,意思是输出。

3) ase gui 后面跟一个文件,可以直接可视化。

学会了ase gui的命令操作,下面我们需要进一步分解自己,以便透过更多的滤纸。

滤纸-3

DFT计算中有很多的文件格式,VASP有POSCAR(CONTCAR),Gaussian有gjf或者com,Material Studio导出来可以有cif啥的。这些格式之间转换着实让一些新手头疼。以至于经常在群里看到有人询问类似的问题。如果你没有用文本编辑器打开这些格式的文件,并认真分析下它们的数据结构,那么你被滤纸卡住了。请把自己变小一些再继续阅读。

分析一下上面的操作:ase gui 6084.mol -o C2H6.xyz

6084.mol 是我们读取的对象,C2H6.xyz 是输出的文件。回到大家常用的VASP计算上来,cif文件文件都不陌生,那么我们就转化一下它吧。

例子-2: 将CIF转化为XYZ,POSCAR

首先从Materials Project 下载一个干冰的cif文件。

滤纸-4:如果你不知道啥是MP。打开这个网址:https://materialsproject.org,注册,随便下载个cif文件。

操作过程:

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
47
48
49
50
51
52
53
54
55
qli@bigbro:~/Downloads$ ls
6084.mol C2H6.xyz CO2_mp-20066_conventional_standard.cif
qli@bigbro:~/Downloads$ head -n 5 CO2_mp-20066_conventional_standard.cif

# generated using pymatgen

data_CO2
_symmetry_space_group_name_H-M 'P 1'
_cell_length_a 5.80269900
_cell_length_b 5.80269900
qli@bigbro:~/Downloads$ ase gui CO2_mp-20066_conventional_standard.cif -o CO2_mp-20066.xyz
/home/qli/.local/lib/python3.8/site-packages/ase/gui/ag.py:85: UserWarning: You should be using "ase convert ..." instead!
warnings.warn('You should be using "ase convert ..." instead!')
qli@bigbro:~/Downloads$ ls
6084.mol C2H6.xyz CO2_mp-20066_conventional_standard.cif CO2_mp-20066.xyz
qli@bigbro:~/Downloads$ cat CO2_mp-20066.xyz
12
Lattice="5.802699 0.0 0.0 0.0 5.802699 0.0 0.0 0.0 5.802699" Properties=species:S:1:pos:R:3 spacegroup="P 1" unit_cell=conventional pbc="T T T"
C 0.00000000 0.00000000 0.00000000
C 2.90134950 0.00000000 2.90134950
C 2.90134950 2.90134950 0.00000000
C 0.00000000 2.90134950 2.90134950
O 0.67853280 0.67853280 0.67853280
O 2.22281670 5.12416620 3.57988230
O 3.57988230 2.22281670 5.12416620
O 5.12416620 3.57988230 2.22281670
O 5.12416620 5.12416620 5.12416620
O 3.57988230 0.67853280 2.22281670
O 2.22281670 3.57988230 0.67853280
O 0.67853280 2.22281670 3.57988230
qli@bigbro:~/Downloads$ ase gui CO2_mp-20066_conventional_standard.cif -o POSCAR
/home/qli/.local/lib/python3.8/site-packages/ase/gui/ag.py:85: UserWarning: You should be using "ase convert ..." instead!
warnings.warn('You should be using "ase convert ..." instead!')
qli@bigbro:~/Downloads$ cat POSCAR
C O
1.0000000000000000
5.8026989999999996 0.0000000000000000 0.0000000000000000
0.0000000000000000 5.8026989999999996 0.0000000000000000
0.0000000000000000 0.0000000000000000 5.8026989999999996
4 8
Cartesian
0.0000000000000000 0.0000000000000000 0.0000000000000000
2.9013494999999998 0.0000000000000000 2.9013494999999998
2.9013494999999998 2.9013494999999998 0.0000000000000000
0.0000000000000000 2.9013494999999998 2.9013494999999998
0.6785328048660000 0.6785328048660000 0.6785328048660000
2.2228166951340000 5.1241661951339994 3.5798823048659996
3.5798823048659996 2.2228166951340000 5.1241661951339994
5.1241661951339994 3.5798823048659996 2.2228166951340000
5.1241661951339994 5.1241661951339994 5.1241661951339994
3.5798823048659996 0.6785328048660000 2.2228166951340000
2.2228166951340000 3.5798823048659996 0.6785328048660000
0.6785328048660000 2.2228166951340000 3.5798823048659996
qli@bigbro:~/Downloads$ ase gui POSCAR
qli@bigbro:~/Downloads$

OK,大功告成。可以拖到服务器提交任务了。值得注意的是,ASE输出的POSCAR总是把元素行放在第一行的位置,类似于VASP4的POSCAR格式,如果不爽的话,

1) 自行修改为VASP5/6的POSCAR格式。

2) 也可以修改ASE的源代码,

2.1) 找到ASE的安装目录,打开 ase/io 目录下的vasp5.py 文件;

2.2) 将vasp.pyvasp5 = False 全部改为vasp5 = True

2.3) 保存vasp.py 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
qli@bigbro:~/anaconda3/lib/python3.8/site-packages/ase/io$ pwd
/home/qli/anaconda3/lib/python3.8/site-packages/ase/io
qli@bigbro:~/anaconda3/lib/python3.8/site-packages/ase/io$ grep vasp5 vasp.py
vasp5 = True
vasp5 = True
if not vasp5:
symbol_count=None, long_format=True, vasp5=True,
if vasp5:
qli@bigbro:~/anaconda3/lib/python3.8/site-packages/ase/io$ cd ~/Downloads/
qli@bigbro:~/Downloads$ ls
6084.mol C2H6.xyz CO2_mp-20066_conventional_standard.cif CO2_mp-20066.xyz POSCAR
qli@bigbro:~/Downloads$ ase gui CO2_mp-20066_conventional_standard.cif -o POSCAR
/home/qli/.local/lib/python3.8/site-packages/ase/gui/ag.py:85: UserWarning: You should be using "ase convert ..." instead!
warnings.warn('You should be using "ase convert ..." instead!')
qli@bigbro:~/Downloads$ head -n 6 POSCAR
C O
1.0000000000000000
5.8026989999999996 0.0000000000000000 0.0000000000000000
0.0000000000000000 5.8026989999999996 0.0000000000000000
0.0000000000000000 0.0000000000000000 5.8026989999999996
C O

如果有其他的需求,可以继续研究ASE或者等后面的骚操作。再继续分解自己:怎么才能把其他格式的文件转化成我需要的格式呢?

上文中的例子已经给你足够的启发了。

妹妹你大胆地往前走
往前走 莫回呀头
通天的大路 九千九百
九千九百九呀
……