Ex01 VASP基本输入文件的准备(壹)
基本的输入文件,指的是VASP计算必不可少的输入文件,对新手来说先记住这四个文件的名字:INCAR,KPOINTS,POSCAR,POTCAR。具体是干嘛用的?不懂的话不要紧,后面我们会结合例子,慢慢介绍这几个文件的准备工作。
基本概念
准备输入文件, 脑子里要有下面几个概念:
Rubbish in,Rubbish out! 程序只负责算,对错由你决定!错误主要有3类:
- 模型错误:也就是建模这一块出错了,主要对应的是POSCAR;
- 计算参数:INCAR,KPOINTS,POTCAR
- 提交任务的脚本或者命令出错。
遇到不懂的参数: (思考 + 看官网)! (思考 + 看官网)! (思考 + 看官网)!
- 重要的话说三遍,尽量不要去看网上那些乱七八糟的教程。如果英语不好,那么这是一个锻炼你阅读能力的好机会。通过查阅官网解决问题,可以保证你的血统纯正,进而提高你的杀伤力。
- 所有的输入文件都只是文本而已。这句话的意思是:所有的输入文件都可以通过文本编辑器打开,比如:
- Linux下面可以用Vim
- Windows下用Notepad++
- 杜绝使用Windows自带的文本编辑器:记事本,写字板。
- 所有的输入文本没有尾缀,Windows用户可能习惯了带各种各样尾缀的文件,但是vasp里面的输入文件,没有尾缀且都是文本。 比如你使用Notepad++这个文本编辑器写了一个输入文件,直接并保存成 INCAR就可以了。如果不小心保存成了 INCAR.txt,那么直接将尾缀.txt删除即可。
- 再次强调:对于Windows用户,本书中指的文本编辑器是:Notepad++。免费的软件,大家自己下载并安装。 请不要用写字板,记事本等编辑VASP的输入文件。如果你不听话,还是喜欢用它们,那么:
- 出错,自己负责,有时候你会死的很惨,折腾很久可能都找不到哪里出错了;
- 出错,自己检查有没有在提交任务前运行:dos2linux 这个命令转换下格式
- 一步一步按照本书的练习进行操作,有问题,先记下来,如果后面没有得到解答,去《序言》找联系方式咨询大师兄。
VASP输入和输出文件
有了上面的概念,我们就可以准备输入文件了。下面是官网列出VASP的输入和输出文件,in 代表输入,out代表输出。先声明一下:大家不要被下面这么多文件吓傻了,脑子里有个印象就行,很多文件可能穷奇你一生的计算都用不到,而且你以后会花很多时间在删这些乱七八糟的文件上面。对于新手的话,大家先简单过目一下即可。可以理解为,从未开过车的你,一下子钻到车里,首先要做的就是熟悉车内部的环境,具体什么功能、怎么回事,后面慢慢摸索。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21INCAR in **
STOPCAR in
stout out
POTCAR in **
KPOINTS in **
IBZKPT out
POSCAR in **
CONTCAR out
CHGCAR in/out
CHG out
WAVECAR in/out
TMPCAR in/out
EIGENVAL out
DOSCAR out
PROCAR out
OSZICAR out
PCDAT out
XDATCAR out
LOCPOT out
ELFCAR out
PROOUT out对于VASP计算来说,前面这一大堆中的 INCAR , KPOINTS, POSCAR 和POTCAR 是必不可少的输入文件,必须有!
- INCAR 告诉VASP算什么,怎么算。
- KPOINTS 包含计算的K点信息(K点是什么,这个问题很抽象,脑子里先记住,计算的时候必须有这个东西)。
- POSCAR是计算模型结构的文字描述,也就是各个原子在xyz方向的坐标信息。
- POTCAR对应的是计算过程中每个原子的平面波基组,描述体系中对应的原子核和电子的相关信息。
- 提交任务的脚本或者命令,需要你自己准备,没有在列表里面。
注意
最新版的VASP中可以在INCAR中设置KPOINTS。但在涉及到计算能带的特殊K点时候,INCAR中就不可以直接设置了。所以,在本书中,KPOINTS是认为必须有的。请不要再纠结这个问题,也不要专门找我争论这个问题。如果你认为可以没有,那就是可以没有。至少本书中,我们会介绍KPOINTS文件的准备工作。
这一节,我们主要通过VASP官网中O原子的计算实例,来学习INCAR的文件准备工作。记住前面我们说的话,INCAR是纯文本。Windows用户,不要用记事本或者写字板打开。推荐使用Notepad++。
简单说明
INCAR主要是告诉VASP我们要算什么以及计算的细节,INCAR准备的原则是:越简单越好,不知道的,不理解的就不往里面放。 下面是给新手们的一些建议:
INCAR 中有很多参数,改变参数来控制计算细节,从而得到我们期望的结果。所以,记住:Rubbish in, Rubbish out。自己算什么,心里要有数。
网上很多人发INCAR的教程,列了一堆参数进去,甚至长达两页,有些连默认值也放在里面了,恨不得把所有参数全部放进去。不过,请记住:那些令人眼花缭乱的只是唬人装逼用的,在实际计算中会严重拖你的后腿,占了那么多行,修改起来也费劲。
熟知各个参数的数值意义,以及在不同计算任务中的设置至关重要。
有人会说,那么多参数,怎么能记得过来? 放心,完全可以的。
一方面,对于特定的体系,所需要的参数不同。如果你的课题比较稳定,那么你应该不会接触太多的参数。比如你专注于体系的能带结构,那么算过渡态的参数你就不会需要。
另一方面,这些计算参数又不是一天两天能记住的,是一个长期积累的过程。随着时间的增长和个人经验的增加,自然而然地就记住了。
INCAR 的输入工作
打开编辑器,把下面几行挨个输入进去: (#以及后面的就不要输入了)
1 | SYSTEM = O atom # 氧元素符号,不是零! |
INCAR的注意事项:
- #后面写的是汉语,是给大家展示用的。 大家在写INCAR的时候,最好不要把汉语写进去,有可能会出错!
#号后面的内容对计算不会造成影响,主要作为注释用,解释这个参数干嘛用的,可以不用输入;
每个参数后面跟着等号 = ,
等号(=)前后可以有空格,也可以没有。
ISMEAR=0
和ISMEAR = 0
是一样的,写INCAR的时候,不要使用 tab,用空格替换tab;
官网有些旧的文件可能用的不是 # 号,而是 !, ! 可能会出错。最好的办法就是记住参数是干嘛用的,# 和 ! 都不写。
INCAR的详解
SYSTEM
SYSTEM 后面是该计算的说明。你的这个任务算的是什么,目的是什么,体系是什么?等等,这些都可以随便写在里面,随便的意思就是可以任意写。
- SYSTEM = O atom 和 SYSTEM = I LOVE BigBro 和 SYSTEM = VASP, 除了多出几个字符外,对计算没有什么影响。
- 情诗,骂人的话也可以写在 = 后面。但不建议大家在这一行里写一堆乱七八糟的东西,另外还是得避免把中文写在这里;
- 当然,这一行有或者没有,对计算结果不会有任何影响,看着不爽也可以直接删除。
ISMEAR
ISMEAR这一项,目前需要记住的是:
- 1)不同的值对应的是不同的展宽方法;
- 2)对于分子,原子的计算用0。
下面是VASP官网的一些解释,新手暂时看不懂不要紧,把需要记住的这两条死死记住就可以了。
- 对于半导体和绝缘体体系,ISMEAR的值取绝对不能大于0, 一般用0;
- 对所有体系,如果想获取更加精确能量的时候用-5,但这时候如果K点数目小于3,程序则会罢工;
- K 点少,半导体或者绝缘体,那么只能用 ISMEAR = 0;
- 在DOS能带计算中,使用ISMEAR= -5 用于获取精确的信息。
- 对于金属来说,ISMEAR的取值一般为>=0 的数值(0,1,2);
- 保守地说,ISMEAR = 0 (Gaussian Smearing) 可以满足大部分的体系(金属,导体,半导体,分子);
- 如果不知道怎么取ISMEAR,直接用0是一个很保险的做法。也可以测试不同的值对计算的影响,但是新手的话,即使测试完了,也不知道根据什么去判断对结果的影响。
SIGMA:
SIGMA的取值和ISMEAR息息相关,也就是和ISMEAR这个参数同时出现,设定。下面是一些基本的介绍:
如果用了ISMEAR = -5; SIGMA的值可以忽略,也可以不管。(对于所有体系都适用);
对于金属: ISMEAR = 1 或者0,非金属: ISMEAR= 0 的时候,一般取 SIGMA = 0.10 即可,默认值是0.20。不放心的话,用0.05。
对于气体分子,原子体系(也就是你把分子或者原子放到一个box里面):死死记住下面组合就可以了, ISMEAR = 0; SIGMA = 0.01。
不过很多人都不放心,为了保险想测试一番。标准是: SIGMA的取值要保证OUTCAR 中的 entropy T*S 这一项,平均到每个原子上,要小于 1-2 meV。检查的时候可以用这个命令:
1 | grep 'entropy T' OUTCAR |
注意1:这里有两个单引号,不要输入的时候漏掉。
用这个命令,得出的能量除以体系中原子的数目(也就是平均到每个原子上),然后再和 0.001 eV 比较。如果小于,SIGMA取值OK,如果大于,再换个小点的数值进行测试。
注意2:这里的说的entropy,是因为ISMEAR展宽这个计算方法引入的,跟我们物理化学书里面的entropy完全是两码事。后面我们会介绍如何通过频率分析计算物理化学里面的Entropy。千万别把这个数值当成频率所对应的entropy。
INCAR的保存
输入完上面的几行,我们就可以保存INCAR文件了。这里需要注意的是:INCAR后面没有尾缀,所以:INCAR.txt是错误的。为避免这个问题:
Notepad++ 保存的时候,文件名为: INCAR,保存类型选择 Alltypes (.)。
用Vim的筒子们直接将前面的内容保存成INCAR即可。
将INCAR.txt 通过
mv
命令重命名为INCAR。1
mv INCAR.txt INCAR -f
前面说了很多,对新手,可能会犯晕。不过不用担心,只要记住关键三点,我们就圆满完成本节的任务:
INCAR是纯文本没有尾缀;
算原子或者分子时:ISMEAR = 0, SIGMA = 0.01
Windows用户请使用Notepad++作为文本编辑器,不要使用自带的记事本或者写字板,如果使用了,计算前务必要通过
dos2unix
转换一下格式:1
dos2unix INCAR
上一节,我们学习了INCAR的简单准备工作。这一节,我们学习另外一个输入文件的写法:KPOINTS
简单说明
KPOINTS文件在计算中的作用,一方面决定了计算的精度,同时也影响计算所需要的时间。精度高,时间长,精度低,时间短。所以:合理设置KPOINTS文件,可以保证我们使用最少的时间,来获取准确可靠的结果。
KPOINTS的输入和保存
打开编辑器,把下面几行输入进去:
1 | K-POINTS # 第一行随便写都行,但不能没有 |
详解:
该KPOINTS 文件里面,共有5行,#号以及后面的不用输入;
同INCAR的注释一样,不要在每一行后面使用 ! 来进行注释,要使用 #,且最好不要写中文。
第一行:可以随便写内容,但不能没有;
第二行:数字0,不是字母O,0 在这里表示的是自动生成K点。你可能注意到了,0前面有个空格,不过没关系,对计算不影响,可以删掉,也可以再加一个空格,后面的同样如此。 但是避免用tab输入,VASP有时候不识别tab键输入的空白部分,导致计算出错;
第三行:VASP只认第一个字母,大小写均可。在这里Gamma和gamma,Gorge,gorge效果是一样的,当然这一行也可以直接写字母G或者g。
- G表示的是以gamma点为中心生成网格。
- 另外一种是原始的Monkhorst-Pack 网格,两者的区别是 M 或者 m 在 G的基础上在三个方向上平移了1/(2N)个单位。
- G,也叫 gamma centered Monkhorst-Pack Grid;所以,gamma centered 只是MP网格的一种特殊情况。
第四行,在xyz三个方向上生成对应数目的K点,本例是111;
- 对于原子或者分子的计算,K点取一个gamma点就够了(1 1 1),也就是这个KPOINTS文件可以用于绝大多数的原子或者分子计算,不用再修改;
- 但如果你要用ISMEAR = -5 来计算能量,那么就需要把 1 1 1 改成 2 2 2或者3 3 3。
第五行,一般都写成 0 0 0 ,不用动即可;
按照前面INCAR的方式保存文件,名字为KPOINTS。
KPOINTS的建议
K点在VASP计算中非常重要,大师兄给的一个建议是:
一直用gamma centered,也就是第三行保持G不变。因为M平移之后,网格的对称性和晶胞的对称性会出现不匹配的情况,从而导致计算出错,尤其是对于六角晶系hexagonal的结构,必须用gamma centered!这一点,vasp官网说的很明确;其他的建议后续慢慢展开讨论。
如非六角晶系的计算,如果已经设置的M算起来了,继续用M算就行,没必要改成G再重新算一遍;
- 前面看不懂,没事。记住这一点,本节就圆满完成任务:气体分子,原子计算的时候,使用gamma点即可。
这一节,我们学习VASP计算中模型的文件:POSCAR
简单说明
POSCAR 里面包含了你要进行计算的模型结构信息。也就是你要研究的对象。POSCAR有自己固定的格式,每一行都有特定的含义,认真掌握这些,对于搭建模型非常有帮助。对于本节的例子:O原子的计算中,我们要把O原子放到一个格子里面,格子大小为:8 $\times$ 8 $\times$ 8 $\AA{^3}$。那么POSCAR应该这样写。
POSCAR的输入
1 | O atom in a box |
详解:
第一行:同样随便写,但不能不写;
第二行:Scale factor,称为缩放系数,这里是1.0;
第三到五行:是组成格子的三条边的坐标信息;从原点出发,在xyz轴上分别取8$\AA$。这个很容易理解;
第六行:体系中的元素,这里我们算的是氧原子,所以写:O,即氧的元素符号。需要注意的有以下几点:
- vasp4.xx版本里面没有这一行,不过现在几乎没人用4.X的版本了;
- O的符号和数字0容易混淆,一定要注意;
- 第一个元素符号要顶格写,前面不要有空格,有可能会出错;
- 如果计算文件夹里面,已经有与结构相一致的POTCAR,那么POSCAR里面即使删了这一行有不会影响计算,VASP会读取POTCAR中的元素信息,但输出文件CONTCAR中会把该行自动加上。(新手跳过)
第七行:与第六行中元素相对应的原子数目,这里我们只有1个氧原子,所以写成1;
第八行:体系中原子的坐标系,可以为笛卡尔坐标,也可以为分数坐标系。注意的有以下几点:
- 这一行同KPOINTS的第三行一样,即只认第一个字母;
- C或者c代表笛卡尔坐标, D或者d代表分数坐标系;
- VASP输出文件CONTCAR里面采用的是分数坐标系。
第九行:体系中原子的坐标信息。这里我们把O原子放到了原点(0.0 0.0 0.0)的位置,大家也可以随便放一个位置,比如:(4.0 5.0 6.0),(1.1 2.5 6.5)都是可以的。由于周期性的存在,不管你怎么放,相邻两个格子之间氧原子的距离都是一样的。
- 写完之后,和INCAR,KPOINTS文件一样,直接保存成POSCAR即可。
两点说明
第二行中的Scale factor还可以写成其他的数字,例如:写成2.0,则后面的格子以及原子坐标相关的数值都要除以2。一般来说,写成1.0即可,这样比较直观,清晰;
笛卡尔和分数坐标系的区别是从原子的坐标行开始的(这个例子里面是第8行),即坐标前面的都保持完全一致。 也就是说,如果想从笛卡尔转换成分数坐标,我们只需将Cartesian改成Direct,然后修改后面的原子坐标,而Cartesian行前面的部分保持不变。
本节重点:
- 学会写O原子在格子里面这个模型的POSCAR;
- 知道每一行所代表的含义。
这一节,我们学习VASP计算中的赝势文件:POTCAR
简单说明
如果组里安装了VASP,则在某个目录下,一定会有对应的一套对应的赝势文件,本书默认大家已经知道去哪里找,不讨论从哪里下载POTCAR(小窍门:一般各个VASP相关的QQ群中,都会有打包的POTCAR文件)。在该目录下, 一般来说,会有LDA,PBE,和PW91这三个文件夹,主流的计算一般都是用PBE。当你进入PBE的文件夹后,就会找到各个元素所对应的POTCAR文件了。
POTCAR中各项的含义
POTCAR中有很多信息,对于大部分的参数,本人也是只认识字母,不知具体含义,所以只能介绍一下在实际计算中会用到的一些参数。我们用Fe的POTCAR中前面的几行作为一个例子,简单介绍一下。
1 | PAW_PBE Fe 06Sep2000 |
依个人的学习经验,VRHFIN, LEXCH,TITEL,ZVAL,ENMAX是用到最多的几个参数。
- VRHFIN 用来看元素的价电子排布,如果你元素周期表倒背如流,可以忽略这个参数;
- LEXCH 表示这个POTCAR对应的是GGA-PBE泛函;如果INCAR中不设定泛函,则默认通过这个参数来设定。
- TITEL 就不用说了,指的是哪个元素,以及POTCAR发布的时间;
- ZVAL 指的是实际上POTCAR中价电子的数目,尤其是做Bader电荷分析的时候,极其重要。
- ENMAX 代表默认的截断能。与INCAR中的ENCUT这个参数相关。
当然,如果你进入文件夹,使用ls命令后,会发现:即使对于同一个元素来说,也可能会有很多不同的情况。比如:
- 与GW 计算的对应的POTCAR,则标注为:Fe_GW 这样。(GW计算本人没接触过,这里就没有办法继续下去了);
- 根据价电子的处理方式,分成了诸如:Fe,Fe_pv,Fe_sv的这样的情况。v是valence的缩写。pv代表把内层的p电子作为价电子来处理。sv代表则是把更内层的s电子也作为价电子来处理。具体到自己体系中的元素,可以结合元素周期表,以及ZVAL关键词所对应的价电子数目,来进行推断。
- 此时,我们就需要学习一个非常有用的Linux命令了: grep。 下面是我们使用grep命令,来获取所有与Fe相关POTCAR的价电子信息。
1 | $ ls Fe* |
- 还有把内层d轨道考虑到价电子层里面去的,比如:Ge_d。
- 某些元素,还有一些以 _h, _s 结尾的,应该是 hard和soft的缩写。带h的POTCAR中截断能比普通的要高出很多。带s的截断能要小很多。这里我们就可以通过grep 结合 ENMAX来查看一下:
1 | $ grep ENMAX Ge*/POTCAR |
POTCAR的选择
既然对于同一个元素,存在那么多的POTCAR类型,计算的时候我们改怎么选择呢?这里大师兄只能给的建议是:如果没有特别的需求,直接采用VASP官网推荐的即可。参考链接:
我们在计算的时候,根据体系中的元素,将这些元素的POTCAR结合起来,组成一个新的POTCAR,这个结合的步骤,我们需要用到Linux的另一个命令:cat。比如VASP官网的例子,体系中含有Al, C,H三种元素。
1 | cat ~/pot/Al/POTCAR ~/pot/C/POTCAR ~/pot/H/POTCAR >POTCAR |
通过这一行命令就可以把Al,C,H各自的POTCAR结合在一起。OUTCAR中的元素顺序一定要和POSCAR保持一致,否则计算会出错,为了避免计算出错,还有一些高级的方法,这个在后面会慢慢讲解。
本节讲的是O原子的计算,官网推荐的氧原子POTCAR,默认的截断能是400,价层有6个原子。直接把O这个文件夹中的POTCAR直接复制到INCAR所在的目录即可。
POTCAR检查常用的Linux命令:
查看POTCAR中的元素:
1 | grep TIT POTCAR |
查看POTCAR的截断能:
1 | grep ENMAX POTCAR |
查看POTCAR中元素的价电子数目:
1 | grep ZVAL POTCAR |
举一反三,只要找到了关键词,我们就可以通过grep命令来进行查看。
总结:
这一节,我们简单介绍了一下POTCAR中的内容,选取规则,以及通过grep命令和关键词进行查看。如果你能独立完成下面的几点,就圆满完成了本节的学习:
- VRHFIN, LEXCH,TITEL,ZVAL,ENMAX 这几个参数的大体意思;
- 初步了解:Fe_sv,Fe_pv, Ge_d, Ge_gw,C_s, C_h 这些标记的含义;
- 查看VASP官网,了解VASP推荐的POTCAR;
- 使用grep来获取POTCAR中有价值的信息。
通过本节(Ex01)的学习,大家初步了解VASP四个主要输入文件的是怎么制作的,一些简单参数的含义,以及每个文件所对应的格式和细节。本节我们分成了很多小节,每节内容都很多,但对新手来说,信息量可能有些大。但不需要一次性全部掌握,因为在后面的学习中,我们会逐渐深入。自己在课题进行的过程中,也会加深自己的理解。但书中要求掌握的部分,必须要牢牢记住。
本书的名字为:The Hard Way。意思是,学习VASP并不是一蹴而就的,需要一个长时间的积累过程。所以,新手切勿急躁,很多内容看不懂不要紧,务必要静下心来浏览一遍,自己跟着说明亲自去实践,切不可复制粘贴。 本节所讲解的东西,都务必去VASP官网找对应的说明,认真阅读,反复思考。养成潜心学习官网教程的良好习惯,从而远离网络上那些错误的信息。尤其是对于新手来说,很多都不懂的时候,没有自己的主见,别人一说就被牵着鼻子走了。
相关的参考资料:
- Vim使用练习:自己搜资料学习,百度里面很多,学会怎么输入,保存。
KPOINTS1: http://cms.mpi.univie.ac.at/vasp/guide/node55.html
KPOINTS2: https://cms.mpi.univie.ac.at/vasp/vasp/Automatic_k_mesh_generation.html
- POSCAR1: http://cms.mpi.univie.ac.at/vasp/guide/node59.html
- POSCAR2: https://cms.mpi.univie.ac.at/vasp/vasp/POSCAR_file.html
- POTCAR1: http://cms.mpi.univie.ac.at/vasp/guide/node54.html
- POTCAR2: https://cms.mpi.univie.ac.at/vasp/vasp/Recommended_PAW_potentials_DFT_calculations_using_vasp_5_2.html
- ISMEAR1: http://cms.mpi.univie.ac.at/vasp/guide/node124.html
- ISMEAR2: http://cms.mpi.univie.ac.at/vasp/vasp/Number_k_points_method_smearing.html