Ex13 论合理结构的重要性(一)

前面我们学会了O$_2$分子的优化,分析了其电子构型,并且知道了理论结果和实验结果间存在的偏差。这一节我们依然研究O$_2$分子的结构优化,虽然模型简单,但熟练掌握其中的技巧,对今后的计算工作,意义重大。

测试Bad 结构

首先,我们将O$_2$的初始键长设置为:1.5 Å。其他文件与Ex11中的保持不变。

1
2
3
4
5
6
7
8
9
10
O
1.0
7.5 0.0 0.0
0.0 8.0 0.0
0.0 0.0 8.9
O
2
Cartesian
0.0 0.0 0.0
0.0 0.0 1.5

然后提交命令进行计算,等待结束后。查看结果,并对比前面Ex11练习的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13$ tail OSZICAR
DAV: 1 -0.985412177027E+01 -0.57432E-02 -0.12528E+00 144 0.457E+00 0.433E-01
DAV: 2 -0.985315825637E+01 0.96351E-03 -0.76431E-03 144 0.367E-01 0.166E-01
DAV: 3 -0.985344344928E+01 -0.28519E-03 -0.78039E-04 120 0.129E-01 0.707E-02
DAV: 4 -0.985368960614E+01 -0.24616E-03 -0.14892E-04 144 0.510E-02 0.268E-02
DAV: 5 -0.985378634076E+01 -0.96735E-04 -0.12727E-05 96 0.167E-02
8 F= -.98537863E+01 E0= -.98537863E+01 d E =-.142913E+01 mag= 2.0000
N E dE d eps ncg rms rms(c)
DAV: 1 -0.985528191871E+01 -0.15923E-02 -0.11782E-01 168 0.140E+00 0.130E-01
DAV: 2 -0.985521232023E+01 0.69598E-04 -0.82384E-04 120 0.126E-01
9 F= -.98552123E+01 E0= -.98552123E+01 d E =-.143055E+01 mag= 2.0000
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13$ tail ../ex11/opt/OSZICAR
DAV: 8 -0.985382407600E+01 -0.31391E-03 -0.20867E-05 120 0.151E-02 0.891E-03
DAV: 9 -0.985418412704E+01 -0.36005E-03 -0.33607E-05 120 0.162E-02 0.520E-03
DAV: 10 -0.985440719048E+01 -0.22306E-03 -0.20675E-05 120 0.115E-02 0.367E-03
DAV: 11 -0.985450935523E+01 -0.10216E-03 -0.85511E-06 120 0.750E-03 0.174E-03
DAV: 12 -0.985454505708E+01 -0.35702E-04 -0.14739E-06 120 0.339E-03
3 F= -.98545451E+01 E0= -.98545451E+01 d E =-.451963E-01 mag= 2.0000
N E dE d eps ncg rms rms(c)
DAV: 1 -0.985517058251E+01 -0.66123E-03 -0.43217E-02 96 0.851E-01 0.792E-02
DAV: 2 -0.985515527518E+01 0.15307E-04 -0.49070E-04 168 0.969E-02
4 F= -.98551553E+01 E0= -.98551553E+01 d E =-.458065E-01 mag= 2.0000

在本练习中,我们设置了键长为:1.5 $\AA$,距离稳定结构较大,用了9个离子步才收敛。在Ex11练习中,我们使用的是数据库中O$_2$的键长,只优化了4步就收敛了。由此可见,一个好的初始结构可以加快我们的计算。那么有多快呢? 我们看一下OUTCAR中的时间信息,对比看下一目了然。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13$ tail OUTCAR
User time (sec): 20.196
System time (sec): 7.877
Elapsed time (sec): 144.523

Maximum memory used (kb): 116704.
Average memory used (kb): 0.

Minor page faults: 72067
Major page faults: 0
Voluntary context switches: 3191
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13$ tail ../ex11/opt/OUTCAR
User time (sec): 8.387
System time (sec): 7.789
Elapsed time (sec): 17.433

Maximum memory used (kb): 114276.
Average memory used (kb): 0.

Minor page faults: 26287
Major page faults: 3
Voluntary context switches: 3202
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13$

判断计算是否结束以及结构是否收敛:上面大师兄用了2个命令:

1) tail OSZICAR

左下角显示了结构优化进行了多少步,这里是9步!注意,我们的INCAR 里面设置的NSW = 10。如果优化的步数小于我们设置的,说明结构已经收敛到了我们所期望的标准。

2) tail OUTCAR

会显示:VASP结束后计算的内存,时间等信息,如果你看到与上图中类似的信息,说明计算结束了。

优化的小思考

思考1:

上面的计算中,我们在INCAR中设置的NSW =10,实际计算用了9步,说明计算刚刚收敛了。但是:如果结构优化的步数等于NSW设置的步数,说明了什么,是什么原因?又该怎么办?

出现这种情况,说明可能还没有达到我们的收敛标准,可能是以下几个原因造成的:

1) NSW设置的偏小; 如果我们在本节例子中设置了NSW=8;

2) 初始结构不合理,计算需要更多的离子驰豫过程;

3) 设置的收敛标准太严格, 比如:-0.01 或者 -0.001;

4) 结构很复杂,每一离子步中的电子步骤收敛很困难。

除此之外,还有一种可能,即刚刚进行到NSW设置的步数时,计算恰好收敛了。比如本例中,我们设置了NSW = 9。但这种可能几率很低,但如果你计算的足够多,还是有机会碰到的。(碰到这种情况时,一定不要慌张,要立马出门去买彩票,中了奖后要记得和大师兄平分!)

思考2:

怎么判断上述这种特殊情况呢?

首先,我们要知道计算收敛结束后VASP所输出的内容,也要知道未收敛时VASP结束后输出的内容。目前,现在我们知道进行了9步的时候,该计算正常结束。那我们就可以设置NSW为一个较小的值(比如 NSW=5),然后查看下未收敛时候的结果,并进行对比分析!

结构收敛OUTCAR (NSW=10):

结构未收敛OUTCAR (NSW=2):

通过对比,我们可以发现,结构收敛的结果里面多了这一行: 

1
reached required accuracy - stopping structural energy minimisation

因此我们在今后的计算中,可以通过这一行来判断计算是否收敛结束。怎么判断呢?前面我们讲到了通过分析OUTCAR并结合grep命令来提取信息的方法,这里我们稍微复习一遍。下图中大师兄尝试了几个grep命令:

看下输出结果:

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
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ grep accuracy   OUTCAR
reached required accuracy - stopping structural energy minimisation
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ grep stopping OUTCAR
EDIFF = 0.1E-03 stopping-criterion for ELM
EDIFFG = 0.1E-02 stopping-criterion for IOM
reached required accuracy - stopping structural energy minimisation
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ grep structural OUTCAR
Analysis of structural, dynamic, and magnetic symmetry:
reached required accuracy - stopping structural energy minimisation
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ grep 'reached required accuracy' OUTCAR
reached required accuracy - stopping structural energy minimisation
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ grep 'reached required accuracy - stopping structural energy minimisation' OUTCAR
reached required accuracy - stopping structural energy minimisation
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ grep reached OUTCAR
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
------------------------ aborting loop because EDIFF is reached ----------------------------------------
reached required accuracy - stopping structural energy minimisation

从图中可以看出来,选择不同的grep 参数,会得到不同的输出结果。一般来说,grep后面的内容越详细,得到的输出结果也就会越匹配。我们提取信息的首要原则是:精确匹配并提取最有价值的信息

其中:grep ‘reached required accuracy’ OUTCAR 是大师兄常用的一个命令。

(要提取的内容通过单引号扩起来了。)

~/.bashrc

那么你会问道:“大师兄,你是不是傻X啊,这么长的命令,光输入就费老大劲了,不嫌麻烦么?”

哈哈,大师兄不仅傻,更喜欢偷懒。每次检查的时候这样子输入肯定麻烦。但在linux下面,有个小窍门,可以极大极大极大地提高你的工作效率,那就是~/.bashrc 文件中的 alias:(注意前面的点 . )

.bashrc 文件怎么用呢?它在哪里? 怎么打开?

答:在home目录下,

1) 终端(terminal)里面直接输入 cd 这个命令,会自动返回到home 目录下面:

然后运行命令:vi .bashrc

2) 当然,如果你不想跳转回去,也可以这样:vi ~/.bashrc 波浪号代表home

它怎么用?

http://www.linuxidc.com/Linux/2015-02/113310.htm (参考网址)

1)打开 .bashrc 文件:(大师兄的bashrc文件为例:)

2) 将前面我们用到的命令写进 .bashrc 文件:

注意的部分:

A) alias 和 gr 之间有空格;

B) gr 是大师兄随便想的,你也可以用自己想的其他字母;

C) gr之间没有空格;

D) gr后面紧跟着等号 = , 中间没有空格;

E) 等号 = 后面紧跟着双引号,且等号= 和双引号之间没有空格;

F) 双引号之间,把我们的命令放进去,一定要确保命令在引号里面;

G)等号 = 后面可以用单引号,也可以用双引号,因为我们的命令中已经有单引号了,这里我们用的双引号,下面两者效果是一样的;

1
2
alias gr="grep 'reached required accuracy' OUTCAR"
alias gr='grep "reached required accuracy" OUTCAR'

注意:上图中两者任选一个即可,不要都放进去,否则会乱套。保存后退出。

3) source 一下 .bashrc 文件。下图中的几个命令效果是一样的!

在这里点 .source 命令的效果一样。

4 运行命令:(敲一下gr,回车即可)

1
2
3
4
5
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ ls
CHG CHGCAR CONTCAR DOSCAR EIGENVAL IBZKPT INCAR job_sub KPOINTS OSZICAR OUTCAR PCDAT POSCAR POTCAR REPORT slurm-1023075.out vasprun.xml WAVECAR XDATCAR
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ gr
reached required accuracy - stopping structural energy minimisation

当你看到这个信息的时候,说明优化任务就已经算完了。 在这里gr 命令就是前面 .bashrc 文件中alias 后面的那个命令。如果还不明白,看下面的例子。大师兄把.bashrc 文件中的 gr 替换成了bigbro , source 了一下后,运行 bigbro命令,得到了和前面一样的结果。

1
alias bigbro='grep "reached required accuracy" OUTCAR'
1
2
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW/ex13/nsw10$ bigbro
reached required accuracy - stopping structural energy minimisation

5 )注意:

避免你自己定义的命令名字和linux下面自带的命令重复。

1
alias  cd="grep 'reached required accuracy' OUTCAR"

但是可以这样设置:

1
alias  cd="cd && ls "

比如:在linux系统下,使用cp命令复制文件夹的时候,需要用到 cp -r A B 。有时候会忘记加 -r而出错,我们可以这样设置,alias cp='cp -r '来避免出错。

1
2
3
4
5
6
7
8
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW$ cp ex13 ex14
cp: omitting directory `ex13'
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW$ cp ex13 ex14 -r
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW$ vi ~/.bashrc
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW$ . ~/.bashrc
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW$ cp ex13 ex15
iciq-lq@ln3:/THFS/home/iciq-lq/LVASPTHW$

如果你极其地讨厌一个人,可以在他的服务器下面这样设置!!! 建议大家报复的时候可以采用这样温柔点的设置,这样,他每敲一次命令就会被你骂一次。(史上最狠报复,只适用于对付那些深深伤害了你的人!)大家只可以感受下这把刀的威力,切不可自作孽!

1
2
3
alias cd='cd  ~'
alias cp='echo "You are a XXX" '
alias ls='echo "You are a XXX" '

扩展练习:

1 分别设置O$_2$的初始键长为1.5和 0.9 Å,运行任务;

2 查看收敛情况;

3 查看结构信息和能量信息;

4 如果有不合理的地方,自己尝试解决。

总结:

本节讲解了

1) 查看任务计算完成的日常做法,

2) 一个在日常计算中极为重要的处理问题的方法,以及简化日常命令的方式。

通过设置.bashrc文件中的alias 命令,我们便可以自己随心所欲地将计算中的长命令、复杂的命令转化为简单的命令,从而极大地提高了我们的工作效率,尤其是适用于那些:使用频繁的但又很复杂的命令。

3) 一个思想:如果我们已知一个结果,那么便可以通过调控不同的参数,然后再与已知结果进行对比,从而分析不同参数在计算中的作用。

这一个思想贯穿了本书的写作过程,对于大家加深对VASP的理解以及练习意义非凡。熟练运用这一种方法,你的洞察力和判断力会得到极大地提升。希望大家能认真思考下本节中提出的处理问题的思想,以及熟练运行alias简化自己的命令。

4) 为了锻炼大家的判断力,请做下题:以最快的速度找到图中的小猫: