Ex2.2 INCAR的准备
这一节,我们主要通过VASP官网中O原子的计算实例,来学习INCAR的文件准备工作。记住前面我们说的话,INCAR是纯文本。Windows用户,不要用记事本或者写字板打开。推荐使用Notepad++。进行本节练习的时候,也要参考一下VASP官网的链接: 1) https://www.vasp.at/tutorials/latest/molecules/part1/
2) https://www.vasp.at/wiki/index.php/O_atom
还有一个非常关键的就是Linux 中常用的一些命令
,因为在后面的几个章节中,除了使用文本编辑器之外,还有一些Linux的命令操作,也就是在Terminal
中敲的命令。如果不熟悉,可以先跳到Ex2.8
这一章节练习下,再学习本节的内容。
简单说明
- INCAR主要是告诉VASP要算什么以及计算的细节参数。
- INCAR准备的原则是:越简单越好,不知道的,不理解的就不往里面放。
-
下面是给新手们的一些建议:
-
INCAR 中有很多参数,改变参数来控制计算细节,从而得到我们期望的结果。所以,记住:Rubbish in, Rubbish out。自己算什么,有什么需要注意的事项,心里要有数。
- 网上很多人发INCAR的教程,列了一堆参数进去,甚至长达两页,有些连默认值也放在里面了,恨不得把所有参数全部放进去。不过,请记住:那些令人眼花缭乱的只是唬人装逼用的,在实际计算中一旦你熟悉了自己的体系,花里胡哨的描述都是垃圾,你根本不会去看。
- 熟知各个参数的数值意义,以及在不同计算任务中的设置至关重要。
- 有人会说,那么多参数,怎么能记得过来? 放心,完全可以的。
- 一方面,对于特定的体系,所需要的参数不同。如果你的课题比较稳定,那么你应该不会接触太多的参数。比如你专注于体系的能带结构,那么算过渡态的参数你就不会需要。
- 另一方面,这些计算参数又不是一天两天能记住的,是一个长期积累的过程。随着时间的增长和个人经验的增加,更重要的是长时间地浏览官网内容,以及与其他人讨论,自然而然地就记住了。
INCAR的创建
INCAR的创建,说白了就是新建一个i)空白的和ii)不带尾缀的文本。Windows就不介绍了。Linux下可以
- 使用
touch
这个命令创建一个空白文件,然后再使用vim
打开输入参数。
touch INCAR
vim INCAR
- 还可以直接使用
vim
直接创建并打开输入界面,写好后保存成INCAR
。
vim INCAR
- 所以在进行下面地学习前,你要掌握一个文本编辑器,Linux的
touch
这个命令,以及初步学习vim
的用法(自行百度)。
INCAR 的输入工作
打开编辑器,把下面几行挨个输入进去: (#以及后面的是我为了解释用的,练习的时候就不要输入了)
SYSTEM = O atom # 1 氧元素符号,不是零!
ISMEAR = 0 # 2 0是数字0,不是氧元素符号,对于分子或者原子,ISMEAR用0.
SIGMA = 0.01 # 3 对于分子或者原子,用0.01
INCAR的注意事项:
- #后面写的是汉语,是给大家展示用的。 大家在写INCAR的时候,最好不要把汉语写进去,有可能会出错!
- #号后面的内容对计算不会造成影响,主要作为注释用,解释这个参数干嘛用的,可以不用输入;
- SYSTEM, ISMEAR, SIGMA就是INCAR中的参数,每个参数后面跟着等号 = 以及它们的取值(不一定是数字);
- 等号(=)前后可以有空格,也可以没有。
ISMEAR=0
和ISMEAR = 0
, 以及ISMEAR =0
是一样的,但是大师兄强烈建议:在写INCAR的时候=
前后各空一个格,一方面比较美观,另一方面我们把这种格式从一开始就定死,后面修改就很方便。 - 写INCAR的时候,不要使用tab,用空格替换tab;
- 官网有些旧的文件可能用的不是 # 号,而是 !, ! 可能会出错。最好的办法就是记住参数是干嘛用的,# 和 !都不写。
- O 和 0 不要弄混了。很多人把数字0误写成字母O,或者反过来,导致计算出错。
INCAR参数的详解
SYSTEM
SYSTEM 后面是该计算的说明。你的这个任务算的是什么,目的是什么,体系是什么?等等,这些都可以随便写在里面,随便的意思就是可以写任何你想要写的内容。
- SYSTEM = O atom 和 SYSTEM = I LOVE BigBro 和 SYSTEM = VASP, 除了多出几个字符外,对计算没有什么影响。
- 情诗,骂人的话也可以写在 = 后面。但不建议大家在这一行里写一堆乱七八糟的东西,另外还是得避免把中文写在这里;
- 当然,这一行有或者没有,对计算结果不会有任何影响,看着不爽也可以直接删除。
- 比如我的INCAR都是通过脚本生成的,一般都写:
System = Generated By Q-robot
。
ISMEAR
ISMEAR这一项,目前需要记住的是:
- 1)不同的值适用于不同的体系:导体,半导体,绝缘体;
- 2)对于分子,原子的计算,ISMEAR = 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是一个很保险的做法。也可以测试不同的值对计算的影响,但是新手的话,即使测试完了,也不知道根据什么去判断对结果的影响。
- 总之,在确定ISMEAR之前,首先要确定研究体系是绝缘体?半导体?导体?还是分子?只有确定了这一点之后,才不会犯迷糊。
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。检查的时候可以用这个命令:
grep 'entropy T' OUTCAR
注意1:这里有两个单引号,不要输入的时候漏掉。
用这个命令,得出的能量除以体系中原子的数目(也就是平均到每个原子上),然后再和 0.001 eV 比较。如果小于,SIGMA取值OK,如果大于,再换个小点的数值进行测试。
注意2:这里的说的entropy,是因为ISMEAR展宽这个计算方法引入的,跟我们物理化学书里面的通过振动频率计算的entropy完全是两码事。后面我们会介绍如何通过频率分析计算物理化学里面的Entropy。千万别把这个数值当成频率所对应的entropy。
注意3: 结合上一点强调下:vasp没有内置热力学相关的计算模块,我们需要计算频率来获得。
INCAR的保存
输入完上面的几行,我们就可以保存INCAR文件了。这里需要注意的是:INCAR后面没有尾缀,所以:INCAR.txt是错误的。为避免这个问题:
- Notepad++ 保存的时候,文件名为: INCAR,保存类型选择 Alltypes (.)。
- 用Vim的筒子们直接将前面的内容保存成INCAR即可。
- 如果不小心命名为
INCAR.txt
,不用担心, 通过mv
命令重命名为INCAR即可。
mv INCAR.txt INCAR -f
所以,现在你又掌握了另一个Linux的命令:mv
。 自己去百度继续搜索这个命令的使用方法。
前面说了很多,对新手来说可能有点晕。不过不用担心,只要记住关键四点,我们就圆满完成本节的任务:
- INCAR是纯文本没有尾缀;
- Windows用户请使用Notepad++作为文本编辑器,不要使用自带的记事本或者写字板,如果使用了,计算前务必要通过
dos2unix
转换一下格式:
dos2unix INCAR
-
算原子或者分子体系的时候:ISMEAR = 0; SIGMA = 0.01; ISMEAR 跟计算体系息息相关。
-
本节介绍了几个Linux的命令:
touch
,mv
,dos2unix
,以及vim
。例子很简单,主要是要熟悉这个流程,尤其是VIM的使用。其他的命令,可以自己google或者百度一下具体的功能,然后多练习几遍。INCAR的原则就是自己弄明白参数的含义,越简单越好,不要画蛇添足,乱七八糟的一股脑儿全往里面写。
另外一点很重要:本节的INCAR仅作为练习,不是正确计算O原子能量的INCAR。后面我们会介绍怎么正确计算O原子的能量。