ASE转换文件到POSCAR格式

被批评公众号长草了,简单介绍一下ASE转换文件的小技巧,顺便锄下草。顺利学会下面操作的前提:

1) 已经在自己电脑上安装好了ASE。

2) 电脑里面有POSCARtoolkit.py脚本。见(https://www.bigbrosci.com/2018/11/11/ex73/)

终端操作

下面是终端里面转换格式的懒人命令:

1
ase gui  file_from  -o POSCAR 

1 ase gui 是我们转化文件格式的命令。

2 file_from 是你想要转换的文件,可以为cif, xyz, xsd等。ASE支持很多格式文件的读取和输出,具体的大家可以参考下面网址:

a) https://wiki.fysik.dtu.dk/ase/ase/io/io.html#module-ase.io

b)https://wiki.fysik.dtu.dk/ase/_modules/ase/io/formats.html

3 -o 代表输出文件,这里我们写的是POSCAR,也可以写成CONTCAR。

如果:

1)想转换成xyz文件,改成 -o XXX.xyz;

2)想转换成cif文件,改成 -o XXX.cif;

总之,

想转什么文件就写什么文件;

想转啥格式的就写啥后缀。

如果失败的话,可能不支持,那就接着用自己的老方法吧。

个人使用经验:

本人的计算模型经常在xyzPOSCAR两个格式之间切换。下面分析下ASE转换的优点和缺点。

1)从POSCAR到xyz文件(优点):

在xyz文件的第二行中,ASE会写入一些体系的周期性的信息,这一点非常棒。方便从xyz再转换回POSCAR或者CONTCAR。

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
qli@bigbro:~/Desktop/test$ ls
CONTCAR
qli@bigbro:~/Desktop/test$ cat CONTCAR
Au\(1\1\1)
1.00000000000000
20.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 21.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 22.0000000000000000
C H
2 4
Selective dynamics
Direct
0.1615221012872249 0.4048804874587976 0.3815091574487524 T T T
0.1387568880386591 0.3452706062587786 0.3846145011058063 T T T
0.2143704422309978 0.4168857617494277 0.3865629189119751 T T T
0.1712711104214057 0.3044252978921785 0.3929860718019034 T T T
0.1271257560199507 0.4443139925926637 0.3733323288922066 T T T
0.0855583096767520 0.3352469534052885 0.3790158532393584 T T T

qli@bigbro:~/Desktop/test$ ls
CONTCAR
qli@bigbro:~/Desktop/test$ ase gui CONTCAR -o c2h4.xyz
/home/qli/anaconda2/lib/python2.7/site-packages/ase/gui/ag.py:86: UserWarning: You should be using "ase convert ..." instead!
warnings.warn('You should be using "ase convert ..." instead!')
qli@bigbro:~/Desktop/test$ cat c2h4.xyz
6
Lattice="20.0 0.0 0.0 0.0 21.0 0.0 0.0 0.0 22.0" Properties=species:S:1:pos:R:3 pbc="T T T"
C 3.23044203 8.50249024 8.39320146
C 2.77513776 7.25068273 8.46151902
H 4.28740884 8.75460100 8.50438422
H 3.42542221 6.39293126 8.64569358
H 2.54251512 9.33059384 8.21331124
H 1.71116619 7.04018602 8.33834877

Lattice=XXX 这一行可以帮助你从xyz转回POSCAR。另外,转换的时候,会出现一个warning信息,装看不见就行了。

2)从xyz到POSCAR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
qli@bigbro:~/Desktop/test$ ase gui c2h4.xyz -o POSCAR
/home/qli/anaconda2/lib/python2.7/site-packages/ase/gui/ag.py:86: UserWarning: You should be using "ase convert ..." instead!
warnings.warn('You should be using "ase convert ..." instead!')
qli@bigbro:~/Desktop/test$ cat POSCAR -n
1 C H
2 1.0000000000000000
3 20.0000000000000000 0.0000000000000000 0.0000000000000000
4 0.0000000000000000 21.0000000000000000 0.0000000000000000
5 0.0000000000000000 0.0000000000000000 22.0000000000000000
6 2 4
7 Cartesian
8 3.2304420299999999 8.5024902400000002 8.3932014600000002
9 2.7751377599999998 7.2506827300000003 8.4615190200000008
10 4.2874088400000003 8.7546009999999992 8.5043842200000004
11 3.4254222099999998 6.3929312600000001 8.6456935799999997
12 2.5425151200000000 9.3305938400000006 8.2133112399999995
13 1.7111661899999999 7.0401860200000002 8.3383487699999996

从xyz转化成POSCAR的时候,ASE的优点:

1)按照Cartesian格式输出。

2)元素行在第一行。

缺点:

1)输出文件还是老式的VASP格式(vasp 4.6)。第6行前面少了元素哪一行。

解决办法:ASE把这一行写到第一行了。我们直接在vim里面,把第一行复制到第6行前面就OK。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 1  C  H
2 1.0000000000000000
3 20.0000000000000000 0.0000000000000000 0.0000000000000000
4 0.0000000000000000 21.0000000000000000 0.0000000000000000
5 0.0000000000000000 0.0000000000000000 22.0000000000000000
6 C H
7 2 4
8 Cartesian
9 3.2304420299999999 8.5024902400000002 8.3932014600000002
10 2.7751377599999998 7.2506827300000003 8.4615190200000008
11 4.2874088400000003 8.7546009999999992 8.5043842200000004
12 3.4254222099999998 6.3929312600000001 8.6456935799999997
13 2.5425151200000000 9.3305938400000006 8.2133112399999995
14 1.7111661899999999 7.0401860200000002 8.3383487699999996

缺点2)少了固定元素的哪一行,以及固定坐标的’T’ 和 ‘F’ 。

解决办法:通过前面介绍的POSCARtoolkit.py脚本来解决,运行下面的命令,输入固定的层数即可。具体用法见(https://www.bigbrosci.com/2018/11/11/ex73/)

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
qli@bigbro:~/Desktop/test$ ls
c2h4.xyz CONTCAR POSCAR
qli@bigbro:~/Desktop/test$ POSCARtoolkit.py -i POSCAR -f
x
x
x
-----------------------------------------------------------
Cartesian Coordinates found, only for fixing atoms!
Then type how many layers to be fixed, from bottom to top.
-----------------------------------------------------------

Found 1 layers, choose how many layers to be fixed------> 0

-----------------------------------------------------------
POSCAR with Cartesian Coordiations is named as POSCAR_C
x
x
x
qli@bigbro:~/Desktop/test$ ls
c2h4.xyz CONTCAR POSCAR POSCAR_C
qli@bigbro:~/Desktop/test$ cat POSCAR_C
C H
1.0000000000000000
20.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 21.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 22.0000000000000000
C H
2 4
Selective
Cartesian
+3.2304420300 +8.5024902400 +8.3932014600 T T T
+2.7751377600 +7.2506827300 +8.4615190200 T T T
+4.2874088400 +8.7546010000 +8.5043842200 T T T
x
x
x

小结:

个人还是比较喜欢用ASE来进行文件格式的转换,方便实用。方法千万种,能找到适合自己的就行。此外,尝试新的方法的时候,一定要认真研究分析下输出的文件(脚本、程序或多或少都会有些bug),保证对于自己的体系不出错后再继续使用,安全第一。此外,如果你有自己独特的、简单粗暴的、傻瓜式的、不通过鼠标敲敲点点的转换方法,也欢迎分享。