用awk和gnuplot可视化VASP计算材料的能带结构(以Pt金属为例)

  • strict warning: Non-static method view::load() should not be called statically in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/views.module on line 906.
  • strict warning: Declaration of views_handler_argument::init() should be compatible with views_handler::init(&$view, $options) in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/handlers/views_handler_argument.inc on line 744.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/plugins/views_plugin_row.inc on line 134.
  • strict warning: Declaration of views_plugin_row::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/plugins/views_plugin_row.inc on line 134.
软件名称: 
Gnuplot
软件名称: 
VASP

VASP是固体物理程序中非常稳定,性能优秀的软件之一,被广泛的用于固体性质的计算。在这里,我们以Pt金属为例,介绍如何用VASP计算并且可视化VASP的能带计算结果。进行能带计算首先要进行正常的自洽的计算。主要目的是得到能带计算所需要的基态的电荷密度文件。所以必须保证LCHARG=.TRUE.。可以用如下的INCAR文件和KPOINTS文件。

INCAR

Pt-bulk

PREC  = High

NSW    = 50        number of steps for

IBRION =2         conjugate-gradient

ISMEAR =  1

SIGMA = 0.2

LCHARG = .TRUE.


KPOINTS

kpoints

0

Monkhorst

12     12  12

0     0     0

 

进行完自恰计算后,用以下的INCAR文件进行能带结构的计算。关键是要保持自洽的电荷密度不变,即ICHARG=11。

Pt-bulk

PREC  = High

 NWRITE = 1

 Ionic Relaxation

 NSW    = 0        number of steps for IOM

 IBRION = -1         conjugate-gradient algorithm

  DOS related values:

 ISMEAR =  0

 ICHARG = 11

 

KPOINTS文件如下,我们选取了5个高对称方向,每个方向上21个K点来构建能带图。

kpoints

21      ! 21 intersections

Line-mode

cart

  0  0  0   ! gamma

  1  0  0   ! X

 

  1  0  0   ! X

  1  0.5  0   ! W

 

  1 0.5  0 ! W

  0.5  0.5  0.5   ! L

 

  0.5  0.5  0.5   ! L

  0  0  0   ! gamma

 

  0  0  0   ! gamma

  1  1  0   !  K

 

得到的OUTCAR文件里就包含了各个指定K点所对应的能级,也就是我们常说的能带结构。

E-fermi :   7.4279     XC(G=0): -13.2605     alpha+bet :-12.7584

   add alpha+bet to get absolut eigen values

 

 k-point   1 :       0.0000    0.0000    0.0000

  band No.  band energies     occupation 

      1      -2.4770      2.00000

      2       3.7825      2.00000

      3       3.7825      2.00000

      4       3.7825      2.00000

      5       5.7731      2.00000

      6       5.7731      2.00000

      7      22.8395      0.00000

      8      27.5743      0.00000

      9      27.5744      0.00000

 

 k-point   2 :       0.0000    0.0250    0.0250

  band No.  band energies     occupation 

      1      -2.4444      2.00000

      2       3.7614      2.00000

      3       3.7990      2.00000

      4       3.7990      2.00000

      5       5.7500      2.00000

      6       5.7816      2.00000

      7      22.8879      0.00000

      8      27.4306      0.00000

      9      27.5713      0.00000

…....

中间省略部分

…….

k-point 105 :       0.5000    0.5000    1.0000

  band No.  band energies     occupation 

      1       0.6467      2.00000

      2       1.1067      2.00000 

      3       7.3042      1.61813

      4       7.8021      0.00814

      5       7.8021      0.00814

      6       9.2022      0.00000

      7      15.7878      0.00000

      8      18.8190      0.00000

      9      18.8190      0.00000

可见,OUTCAR文件里包含了我们在KPOINTS中指定的105个K点。

将VASP的OUTCAR里的能带信息可视化通常是个比较头疼的事,如果要将这些信息粘贴到Origin之类的软件里进行可视化,需要大量的数据格式处理。这里我们教大家用awk文本处理程序和gnuplot画图程序简单快捷地画VASP的能带结构图。我们在这里将不详细介绍awk或者gnuplot的语法和功能,而仅仅给出一个用它们画VASP能带图的解决方案。

首先我们将OUTCAR里的从k-point 105到k-point 105的部分存成另外一个文件,不妨称之为Band.raw。

ExtractBand.awk

#!/usr/bin/awk –f

/k-point/ {

    printf "%d ",$2

    getline

    for ( i=1; i<=9; i++ ) {

        getline

        printf "%8.3f ", $2

    }

    printf "\n"

}

然后我们运行如下的awk script。./ExtractBand.awk Band.raw > band.dat

这个awk script的功能是将OUTCAR里的输出信息进行格式化,以便于gnuplot画图

OUTCAR里的原始格式

……

k-point  98 :       0.3250    0.3250    0.6500

  band No.  band energies     occupation

      1       1.8846      2.00000

      2       2.8157      2.00000

      3       3.7368      2.00000

      4       5.4560      2.00000

      5       6.6622      2.00000

      6      11.3258      0.00000

      7      16.2724      0.00000

      8      16.7466      0.00000

      9      24.2900      0.00000

 

 k-point  99 :       0.3500    0.3500    0.7000

  band No.  band energies     occupation

      1       1.6640      2.00000

      2       2.5342      2.00000

      3       4.1600      2.00000

      4       5.7507      2.00000

      5       6.9403      1.99944

      6      12.1407      0.00000

      7      15.0639      0.00000

      8      16.8554      0.00000

      9      23.0580      0.00000

……

经过ExtractBand.awk处理后的band.dat的格式

……

98    1.885    2.816    3.737    5.456    6.662   11.326   16.272   16.747   24.290

99    1.664    2.534    4.160    5.751    6.940   12.141   15.064   16.855   23.058

……

 

然后我们运行以下的gnuplot脚本文件,来得到能带图。运行plotBand.sh,就得到band.eps,如图所示。

plotBand.sh

#!/bin/bash

x1=21

x2=41

x3=61

x4=81

x5=101

ymin=-10

ymax=20

ylabel=-10.6

ef_v=7.3089   #pls use E-fermi in the self consistent calculation

gnuplot << EOF

  set term post landscape enhanced color dashed defaultplex "Helvetica" 14

  set output 'band.ps'

  set key outside

  set title "Pt Band Structure (VASP)"

  set ylabel "Energy (eV)"

  set noxtics

  set xrange [0:$x5]

  set yrange [$ymin : $ymax]

  set label "{/Symbol G}" at 0, $ylabel

  set label "{/Symbol D}" at 0.5*$x1, $ylabel

  set label "X" at $x1, $ylabel

  set label "Z" at 0.5*($x1+$x2), $ylabel

  set label "W" at $x2, $ylabel

  set label "Q" at 0.5*($x2+$x3), $ylabel

  set label "L" at $x3, $ylabel

  set label "{/Symbol L}" at 0.5*($x3+$x4), $ylabel

  set label "{/Symbol G}" at $x4, $ylabel

  set label "{/Symbol S}" at $x4+0.4*($x5-$x4), $ylabel

  set label "{/Symbol K}" at $x4+($x5-$x4)/2**0.5, $ylabel

  set label "X" at $x5, $ylabel

  set label "E_f" at -5.0, 0

  set arrow from 0, 0 to $x5, 0 nohead

  set arrow from $x1, $ymin to $x1, $ymax  nohead

  set arrow from $x2, $ymin to $x2, $ymax  nohead

  set arrow from $x3, $ymin to $x3, $ymax  nohead

  set arrow from $x4, $ymin to $x4, $ymax  nohead

  set arrow from $x4+1+($x5-$x4)/2**0.5,$ymin to $x4+1+($x5-$x4)/2**0.5, $ymax  nohead

  plot \

  "band.dat" u 1:(\$2-$ef_v) w lines lt 1 t "", "band.dat" u 1:(\$3-$ef_v) w lines lt 1  t "",\

  "band.dat" u 1:(\$4-$ef_v) w lines lt 1 t "", "band.dat" u 1:(\$5-$ef_v) w lines lt 1  t "",\

  "band.dat" u 1:(\$6-$ef_v) w lines lt 1 t "", "band.dat" u 1:(\$7-$ef_v) w lines lt 1  t "",\

  "band.dat" u 1:(\$8-$ef_v) w lines lt 1 t "", "band.dat" u 1:(\$9-$ef_v) w lines lt 1  t ""

EOF

最终得到的Pt的能带图如下

BandstructureBandstructure