从产生结构到GAP优化到VASP优化的一些问题

问题及解决办法

Posted by David on September 24, 2020

20200924记录

童师兄让我用calypso产生300个B52的结构,用GAP先优化一下,选出能量最低的前十个,随后用VASP进行优化,这个过程看起来很简单,但也遇到了不少的小问题,所幸最后大部分都被我自己解决啦~~~

calypso的应用

由于童师兄手速超快,根本看不清楚进的哪一个目录,改了什么参数,怎么弄的,就稀里糊涂开始自己弄。

开始的时候我以为calypso.x这个文件里面管理者一大堆的参数,应该是去里面修改产生结构的数量,结果一顿操作也没用,打开总是乱码,最后在手册中找到了答案……

原来calypso有一个类似于vasp一样的控制输入的文件,里面也有一些参数,这个文件的名字叫做input.dat,里面的参数之后再介绍,这里只说一个PopSize,他就是控制产生多少个结构的参数。

也就是说目前工作的目标文件夹中至少存在两个文件:calypso.x和input.dat

随后在命令行输入 ./calypso.x即可运行

GAP的应用

这里面其实是吧vasp的输入文件中的potcar替换成了高斯势的文件,其他文件不变,就可以了,同样的,运行的话需要一个类似于calypso.x的文件,这里的叫做run_opt.py,当我们在工作文件夹中将INCAR,POSCAR,gap_parameters准备好后,就可以开始运行啦

由于我们有三百个文件,因此必须编写一个脚本来让电脑自己运行,不然会累死。

那么我们只需要把重复性的工作写入脚本中,脚本就会自动运行。

由于优化的时间被结构的数量拉慢了,因此我才用了两个终端同时运行的方法,也就需要两个脚本。

脚本内容如下:

1 #!/bin/bash
1 cd /home/wangzy/B_cluster0720/s300 2 for i in $(seq 95 100) 3 do 4 cp POSCAR_$i /home/wangzy/B_cluster0720/relax1 5 cd /home/wangzy/B_cluster0720/relax1 6 mv POSCAR_$i POSCAR 7 python /home/wangzy/B_cluster0720/run_opt.py 8 mkdir B$i 9 mv /home/wangzy/B_cluster0720/relax1/CONTCAR /home/wangzy/ B_cluster0720/relax1/ 10 mv /home/wangzy/B_cluster0720/relax1/OUTCAR /home/wangzy/B_cluster0720/relax1/B 11 cd /home/wangzy/B_cluster0720/s300 12 echo $i has already done. 13 done 14 cd /home/wangzy/B_cluster0720/relax1

原本已经优化了100个结构但是忽然发现,我仅仅保存了优化后的坐标CONTCAR却忘记保存了查看能量的文件OUTCAR,所以又不得不重新跑一边,加了上面的第10行,最后总算弄好了。

接下来就是吧这300个结构的能量提取出来然后排序,提取的命令为

grep without */B* > list

将结果存放在list中,随后开始对其排序,在vim中用了sort命令发现不好使,通过bing搜索发现相对某一列进行排序只需要把前面列的内容通过正则表达式选中然后用两个斜杠画上就行了

sort /[a-zA-Z0-9=:\/ ]*\s/  

这是倒序,正序只需要在sort后面加上感叹号

sort! /[a-zA-Z0-9=:\/ ]*\s/

然而排序之后还不够,我们只需要前10个,因此要把后面的都删掉,这个很简单,包括后面只把前面的序号提取出来也可以操作(这里需要注意的是 !!!! 应该提前想好自己的序号是最大的数是多少位的,这样就可以把前面的单位数和双位数都设置成相同的位数以方便后续操作!!!!!)

在提取好前十个数字后,习惯性的要把杂乱的数字排序,同样的用到了sort

:sort n

这里的n表示按数字排序

此时我们发现不能像python一样直接提取文件中的数据(其实也可以,只要直接用python就行了,但是有点忘记了,还费时间想,不如就直接用Linux了),此时需要xargs

cat list_10 | xargs > list_ready


cat list_10 | xargs

将输出的数据直接复制就好了

由于需要将10个任务依次提交,因此同样需要一个脚本

1 #!/bin/bash 1 for i in 16 62 64 82 97 144 185 220 283 294 2 do 3 cd ~/B_cluster0720/vasp/B$i 4 #mkdir B$i 5 #cp INCAR POTCAR KPOINTS B$i/ 6 #cd ~/B_cluster0720/relax1/B$i 7 #mv CONTCAR POSCAR 8 #cp POSCAR ~/B_cluster0720/vasp/B$i 9 mpirun -np 12 /public/apps/vasp_std > vasp.log 2>&1 10 done

算到第八个的时候发现每个OSZAICAR的离子步都只有3步,查看了INCAR才发现都只有3步,因此重新调整了INCAR参数,同样用脚本统一修改:

1 #!/bin/bash
1 pwd 2 for i in 16 62 64 82 97 144 185 220 283 294 3 do 4 cd ~/B_cluster0720/vasp/B$i 5 sed -i ‘8s/3/200/g’ INCAR 6 done

由于前八个已经算了3步了,因此需要续算,用脚本把之前算的保存下来:

1 #!/bin/bash 1 mv POSCAR POSCAR-$1 2 mv OUTCAR OUTCAR-$1 3 mv OSZICAR OSZICAR-$1 4 mv vasprun.xml vasprun.xml-$1 5 mv CONTCAR POSCAR

脚本运行的时候需要在后面加上数字代表第几次续算

sh continue.sh 1

该脚本只能在计算目录里面使用,有点小麻烦,因此可以在命令行直接写命令将这个sh直接复制到这10个文件夹里面:

for i in xxx; do cp continue.sh B$i; done

之后就可以运算了~

这次用的节点是wangzy@202.198.62.71, 端口是12306

等待中~~~