OpenMX能带打开仿真

在OpenMX当中,可以将晶胞的多条近似重叠的能带打开成原胞仿真结果。构建大一些的晶胞可以方便我们对体系进行赝原子轨道分解,还可以仿真缺陷和掺杂的情况。

先上一个石墨烯的原胞版的能带打开范例。在这个范例当中,由于使用的是原胞,所以仿真结果和晶胞一致,即使不设置参考晶格矢量。

文件名为Graphen_C_Primitive.dat

#
# File Name
#

System.CurrrentDirectory         ./
System.Name                     graphene_c_primitive
level.of.stdout                   1    # default=1 (1-3)
level.of.fileout                  1    # default=1 (1-3)

#
# Definition of Atomic Species
#

Species.Number       1
<Definition.of.Atomic.Species
  C    C6.0-s2p2d1    C_PBE13
Definition.of.Atomic.Species>


#
# Atoms
#

Atoms.Number 2   
Atoms.SpeciesAndCoordinates.Unit  Ang  # Ang|AU
<Atoms.SpeciesAndCoordinates
 1  C  0.000000000  0.710000000  0.000000000  2.0 2.0
 2  C  0.000000000  -0.71000000  0.000000000  2.0 2.0
Atoms.SpeciesAndCoordinates>

Atoms.UnitVectors.Unit             Ang   # Ang|AU
<Atoms.UnitVectors
1.22980000000000 2.13000000000000  0.00000000000000
1.22980000000000 -2.13000000000000  0.00000000000000
0.00000000000000 0.00000000000000 20.00000000000000
Atoms.UnitVectors>

#
# SCF or Electronic System
#

scf.XcType                GGA-PBE      # LDA|LSDA-CA|LSDA-PW|GGA-PBE
scf.SpinPolarization       off          # On|Off
scf.SpinOrbit.Coupling      off
scf.ElectronicTemperature  300.0       # default=300 (K)
scf.energycutoff          200.0        # default=150 (Ry)
scf.maxIter                300         # default=40
scf.EigenvalueSolver      Band         # Recursion|Cluster|Band
scf.Kgrid                10 10  1        # means n1 x n2 x n3
scf.Mixing.Type            rmm-diisk   # Simple|Rmm-Diis|Gr-Pulay
scf.Init.Mixing.Weight     0.07        # default=0.30 
scf.Min.Mixing.Weight      0.003       # default=0.001 
scf.Max.Mixing.Weight      0.15        # default=0.40 
scf.Mixing.History         39          # default=5
scf.Mixing.StartPulay      10          # default=6
scf.Mixing.EveryPulay       1
scf.criterion             1.0e-7       # default=1.0e-6 (Hartree) 
 
#
# MD or Geometry Optimization
#

MD.Type                   Nomd        # Nomd|Opt|DIIS|NVE|NVT_VS|NVT_NH

#
# Band dispersion 
#

Band.dispersion              on       # on|off, default=off

#
# Unfolding of bands
#
Band.Nkpath                   3 
<Band.kpath
   25  0.5 0.0 0.0       0.333 0.333 0.0   M  K
   25  0.333 0.333 0.0     0.0 0.0 0.0        K  G
   25  0.0 0.0 0.0       0.5 0.0 0.0        G  M
Band.kpath>

Unfolding.Electronic.Band      on     # on|off, default=off
Unfolding.LowerBound        -15.0     # default=-10 eV
Unfolding.UpperBound          15.0     # default= 10 eV

Unfolding.desired_totalnkpt    30     
Unfolding.Nkpoint               4

<Unfolding.kpoint
M 0.5 0.0 0.0
K 0.333 0.333 0.0
G 0.0 0.0 0.0
M 0.5 0.0 0.0
Unfolding.kpoint>

仿真结果文件有unfold_orbup,这里面第一列是k点,第二列是对应的能量,可以用gnuplot来画1:2出(打开版的)能带。可以验证这样算出的能带和普通方式算出的能带是一样的。

OpenMX3.8用户手册第50节插图,仿真SiC的能带打开。(a)红线是普通方式算的能带,绿色圆圈代表用能带打开的方式算的。(b)用2*2晶胞算的加上了赝原子轨道分解的内容,绿色代表s轨道+px+py轨道的对比分量,紫色代表pz对比分量。

接着说上面代码的结果,上面的代码是最简单的石墨烯的能带打开仿真。出现的文件中有一个.unfold_plotexample文件。文件名为Graphene_C_Primitive_Te.dat,部分内容如下:

set yrange [-15.000000:15.000000]
set ylabel 'Energy (eV)'
set xtics('M' 0.000000,'K' 0.450166,'G' 1.350474,'M' 2.130950)
set xrange [0:2.130950]
set arrow nohead from 0,0 to 2.130950,0
set arrow nohead from 0.450166,-15.000000 to 0.450166,15.000000
set arrow nohead from 1.350474,-15.000000 to 1.350474,15.000000
set style circle radius 0
plot 'graphene_c_primitive.unfold_totup' using 1:2:($3)*0.05 notitle with circles lc rgb 'red'

只要仿真没错,都会有这个文件。

可以用gnuplot 的load命令直接load这个文件

就可以画出图

貌似为了仿真倒带性质,OpenMX用户手册在SiC的例子里添加了一个Te空原子。我们也在石墨烯的仿真文件中照猫画虎,添加一个Te空原子,修改后的部分文件内容和仿真结果如下:

Species.Number       2
<Definition.of.Atomic.Species
  C    C6.0-s2p2d1    C_PBE13
  Te  Te11.0-s2p2d2f1  E
Definition.of.Atomic.Species>


#
# Atoms
#

Atoms.Number 3 
Atoms.SpeciesAndCoordinates.Unit  Ang  # Ang|AU
<Atoms.SpeciesAndCoordinates
 1  C  0.000000000  0.710000000  0.000000000  2.0 2.0
 2  C  0.000000000  -0.71000000  0.000000000  2.0 2.0
 3  Te 1.229800000   0.00000000  0.000000000  0   0
Atoms.SpeciesAndCoordinates>

Atoms.UnitVectors.Unit             Ang   # Ang|AU
<Atoms.UnitVectors
1.22980000000000 2.13000000000000  0.00000000000000
1.22980000000000 -2.13000000000000  0.00000000000000
0.00000000000000 0.00000000000000 20.00000000000000
Atoms.UnitVectors>

将晶胞扩充为原胞

我们继续将晶胞扩充为原胞,诸多细节不再列举。代码如下:

#
# File Name
#

System.CurrrentDirectory         ./
System.Name                     graphene_c_nsp_p
level.of.stdout                   1    # default=1 (1-3)
level.of.fileout                  1    # default=1 (1-3)

#
# Definition of Atomic Species
#

Species.Number       1
<Definition.of.Atomic.Species
  C    C7.0-s2p2d1    C_PBE13
Definition.of.Atomic.Species>


#
# Atoms
#

Atoms.Number 8   
Atoms.SpeciesAndCoordinates.Unit  Ang  # Ang|AU
<Atoms.SpeciesAndCoordinates
 1  C  0.000000000  0.710000000  0.000000000  2.0 2.0
 2  C  0.000000000  -0.71000000  0.000000000  2.0 2.0
 3  C  1.2298        2.8400      0.00000      2.0 2.0
 4  C  1.2298       1.4200       0.00000000   2.0 2.0
 5  C  1.2298       -1.4200      0.00000000    2.0 2.0
 6  C  1.2298       -2.8400      0.000000000  2.0 2.0
 7  C  2.4596      0.7100       0.00000000   2.0 2.0
 8  C  2.4596      -0.7100      0.000000000  2.0 2.0
Atoms.SpeciesAndCoordinates>

Atoms.UnitVectors.Unit             Ang   # Ang|AU
<Atoms.UnitVectors
2.45960000000000	4.26000000000000	0
2.45960000000000	-4.26000000000000	0
0	                 0	               40
Atoms.UnitVectors>

#
# SCF or Electronic System
#

scf.XcType                GGA-PBE      # LDA|LSDA-CA|LSDA-PW|GGA-PBE
scf.SpinPolarization       off          # On|Off
scf.ElectronicTemperature  300.0       # default=300 (K)
scf.energycutoff          200.0        # default=150 (Ry)
scf.maxIter                300         # default=40
scf.EigenvalueSolver      Band         # Recursion|Cluster|Band
scf.Kgrid                5 5  1        # means n1 x n2 x n3
scf.Mixing.Type            rmm-diisk   # Simple|Rmm-Diis|Gr-Pulay
scf.Init.Mixing.Weight     0.07        # default=0.30 
scf.Min.Mixing.Weight      0.003       # default=0.001 
scf.Max.Mixing.Weight      0.15        # default=0.40 
scf.Mixing.History         39          # default=5
scf.Mixing.StartPulay      10          # default=6
scf.Mixing.EveryPulay       1
scf.criterion             1.0e-7       # default=1.0e-6 (Hartree) 
 
#
# MD or Geometry Optimization
#

MD.Type                   Nomd        # Nomd|Opt|DIIS|NVE|NVT_VS|NVT_NH

#
# Band dispersion 
#

Band.dispersion              on       # on|off, default=off

Band.Nkpath                   3 
<Band.kpath
   25  0.5 0.0 0.0       0.333 0.333 0.0   M  K
   25  0.333 0.333 0.0     0.0 0.0 0.0        K  G
   25  0.0 0.0 0.0       0.5 0.0 0.0        G  M
Band.kpath>

#
# Unfolding of bands
#

Unfolding.Electronic.Band      on     # on|off, default=off
Unfolding.LowerBound        -10.0     # default=-10 eV
Unfolding.UpperBound          6.0     # default= 10 eV

Unfolding.desired_totalnkpt    30     
Unfolding.Nkpoint               4

<Unfolding.kpoint
M 0.5 0.0 0.0
K 0.333 0.333 0.0
G 0.0 0.0 0.0
M 0.5 0.0 0.0
Unfolding.kpoint>

<Unfolding.ReferenceVectors
1.22980000000000 2.13000000000000  0.00000000000000
1.22980000000000 -2.13000000000000  0.00000000000000
0.00000000000000 0.00000000000000 20.00000000000000
Unfolding.ReferenceVectors>


<Unfolding.Map
  1 1
  2 2
  3 1
  4 2
  5 1
  6 2
  7 1
  8 2
Unfolding.Map>

用上面介绍的gnuplot方法画出结果:

plot 'graphene_c_nsp_p.unfold_totup' using 1:2:($3)*0.05 notitle with circles lc rgb 'red'

带隙还在,可以接受。再进一步,填入空隙,结果如下。可以发现,圆圈多了很多。代码放在附录里面。Graphene_C_NSP_P_Te.dat

上面的是总的totup文件的数据。要获得赝原子轨道分解的数据需要将unfold_plotexample文件的代码写成如下这样:

set yrange [-15.000000:15.000000]
set ylabel 'Energy (eV)'
set xtics('M' 0.000000,'K' 0.450166,'G' 1.350474,'M' 2.130950)
set xrange [0:2.130950]
set arrow nohead from 0,0 to 2.130950,0
set arrow nohead from 0.450166,-15.000000 to 0.450166,15.000000
set arrow nohead from 1.350474,-15.000000 to 1.350474,15.000000
set style circle radius 0
plot 'graphene_c_nsp_p_te.unfold_orbup' using 1:2:(($3+$4+$5+$6)*0.5) notitle with circles lc rgb 'green','graphene_c_nsp_p_te.unfold_orbup' using 1:2:($7*0.5) notitle with circles lc rgb 'red'

得到的图形如下:

仿真掺杂

在石墨烯表面掺入一个磷原子,能带的移动可以用上面的理论与方法直观地看到了。对应的仿真文件为名为Graphene_C_NSP_V.dat。该文件也放在附录当中。

而画出它这个图的plotexample文件为:

set yrange [-15.000000:15.000000]
set ylabel 'Energy (eV)'
set xtics('M' 0.000000,'K' 0.450166,'G' 1.350474,'M' 2.130950)
set xrange [0:2.130950]
set arrow nohead from 0,0 to 2.130950,0
set arrow nohead from 0.450166,-15.000000 to 0.450166,15.000000
set arrow nohead from 1.350474,-15.000000 to 1.350474,15.000000
set style circle radius 0
plot 'graphene_c_nsp_v.unfold_orbup' using 1:2:($4+$5+$6)*0.2 notitle with circles lc rgb 'red','graphene_c_nsp_v.unfold_orbup' using 1:2:($7)*0.2 notitle with circles lc rgb 'green','graphene_c_nsp_v.unfold_totup' using 1:2:($3)*0.05 notitle with circles lc rgb 'black'

使用Band.kpath和Band.Nkpath命令来控制产生能带数据。如果不要能带,这个就可以不写。产生的.Band文件要用gnuband13处理。

Band.Nkpath                3
<Band.kpath                
   25  0.5 0.0 0.0       0.333 0.333 0.0   M  K
   25  0.333 0.333 0.0     0.0 0.0 0.0        K  G
   25  0.0 0.0 0.0       0.5 0.0 0.0        G  M
Band.kpath>

处理之后,把BANDDAT1的数据和unfold_orbup文件画在一个图中

plot "graphene_c_nsp_v.BANDDAT1" using ($1*2):2 w l lc rgb 'green','graphene_c_nsp_v.unfold_orbup' using 1:2:($4+$5+$6)*0.2 notitle with circles lc rgb 'red','graphene_c_nsp_v.unfold_orbup' using 1:2:($7)*0.2 notitle with circles lc rgb 'blue'

附注

Graphene_C_NSP_P_Te.dat

#
# File Name
#

System.CurrrentDirectory         ./
System.Name                     graphene_c_nsp_p_te
level.of.stdout                   1    # default=1 (1-3)
level.of.fileout                  1    # default=1 (1-3)

#
# Definition of Atomic Species
#

Species.Number       2
<Definition.of.Atomic.Species
  C    C7.0-s2p2d1    C_PBE13
  Te Te11.0-s2p2d2f1  E
Definition.of.Atomic.Species>


#
# Atoms
#

Atoms.Number 12    
Atoms.SpeciesAndCoordinates.Unit  Ang  # Ang|AU
<Atoms.SpeciesAndCoordinates
 1  C  0.000000000  0.710000000  0.000000000  2.0 2.0
 2  C  0.000000000  -0.71000000  0.000000000  2.0 2.0
 3  Te 1.2298000000   0.00000000  0.000000000   0   0
 4  C  1.2298        2.8400      0.00000      2.0 2.0
 5  C  1.2298       1.4200       0.00000000   2.0 2.0
 6  Te  2.4596       2.1300       0.0          0   0
 7  C  1.2298       -1.4200      0.00000000    2.0 2.0
 8  C  1.2298       -2.8400      0.000000000  2.0 2.0
 9  Te  2.4596       -2.1300         0         0   0
 10  C  2.4596      0.7100       0.00000000   2.0 2.0
 11  C  2.4596      -0.7100      0.000000000  2.0 2.0
 12  Te 3.6894         0         0              0   0
Atoms.SpeciesAndCoordinates>

Atoms.UnitVectors.Unit             Ang   # Ang|AU
<Atoms.UnitVectors
2.45960000000000	4.26000000000000	0
2.45960000000000	-4.26000000000000	0
0	                 0	               40
Atoms.UnitVectors>

#
# SCF or Electronic System
#

scf.XcType                GGA-PBE      # LDA|LSDA-CA|LSDA-PW|GGA-PBE
scf.SpinPolarization       off          # On|Off
scf.ElectronicTemperature  300.0       # default=300 (K)
scf.energycutoff          200.0        # default=150 (Ry)
scf.maxIter                300         # default=40
scf.EigenvalueSolver      Band         # Recursion|Cluster|Band
scf.Kgrid                10 10  1        # means n1 x n2 x n3
scf.Mixing.Type            rmm-diisk   # Simple|Rmm-Diis|Gr-Pulay
scf.Init.Mixing.Weight     0.07        # default=0.30 
scf.Min.Mixing.Weight      0.003       # default=0.001 
scf.Max.Mixing.Weight      0.15        # default=0.40 
scf.Mixing.History         39          # default=5
scf.Mixing.StartPulay      10          # default=6
scf.Mixing.EveryPulay       1
scf.criterion             1.0e-7       # default=1.0e-6 (Hartree) 
 
#
# MD or Geometry Optimization
#

MD.Type                   Nomd        # Nomd|Opt|DIIS|NVE|NVT_VS|NVT_NH

#
# Band dispersion 
#

Band.dispersion              on       # on|off, default=off

Band.Nkpath                   3 
<Band.kpath
   25  0.5 0.0 0.0       0.333 0.333 0.0   M  K
   25  0.333 0.333 0.0     0.0 0.0 0.0        K  G
   25  0.0 0.0 0.0       0.5 0.0 0.0        G  M
Band.kpath>

#
# Unfolding of bands
#

Unfolding.Electronic.Band      on     # on|off, default=off
Unfolding.LowerBound        -15.0     # default=-10 eV
Unfolding.UpperBound         15.0     # default= 10 eV

Unfolding.desired_totalnkpt    30     
Unfolding.Nkpoint               4

<Unfolding.kpoint
M 0.5 0.0 0.0
K 0.333 0.333 0.0
G 0.0 0.0 0.0
M 0.5 0.0 0.0
Unfolding.kpoint>

<Unfolding.ReferenceVectors
1.22980000000000 2.13000000000000  0.00000000000000
1.22980000000000 -2.13000000000000  0.00000000000000
0.00000000000000 0.00000000000000 20.00000000000000
Unfolding.ReferenceVectors>


<Unfolding.Map
  1 1
  2 2
  3 3
  4 1
  5 2
  6 3
  7 1
  8 2
  9 3
  10 1
  11 2
  12 3
Unfolding.Map>

Graphene_C_NSP_V.dat

#
# File Name
#

System.CurrrentDirectory         ./
System.Name                     graphene_c_nsp_v
level.of.stdout                   1    # default=1 (1-3)
level.of.fileout                  1    # default=1 (1-3)

#
# Definition of Atomic Species
#

Species.Number       2
<Definition.of.Atomic.Species
  C    C7.0-s2p2d1    C_PBE13
 P      P8.0-s2p2d1   P_CA13
Definition.of.Atomic.Species>


#
# Atoms
#

Atoms.Number 9
Atoms.SpeciesAndCoordinates.Unit  Ang  # Ang|AU
<Atoms.SpeciesAndCoordinates
 1  C  0.000000000  0.710000000  0.000000000  2.0 2.0
 2  C  0.000000000  -0.71000000  0.000000000  2.0 2.0
 3  C  1.2298        2.8400      0.00000      2.0 2.0
 4  C  1.2298       1.4200       0.00000000   2.0 2.0
 5  C  1.2298       -1.4200      0.00000000    2.0 2.0
 6  C  1.2298       -2.8400      0.000000000  2.0 2.0
 7  C  2.4596      0.7100       0.00000000   2.0 2.0
 8  C  2.4596      -0.7100      0.000000000  2.0 2.0
 9  P  1.229800000  0.00000000  1.520000000  2.5 2.5
Atoms.SpeciesAndCoordinates>

Atoms.UnitVectors.Unit             Ang   # Ang|AU
<Atoms.UnitVectors
2.45960000000000	4.26000000000000	0
2.45960000000000	-4.26000000000000	0
0	                 0	               40
Atoms.UnitVectors>

#
# SCF or Electronic System
#

scf.XcType                GGA-PBE      # LDA|LSDA-CA|LSDA-PW|GGA-PBE
scf.SpinPolarization       off          # On|Off
scf.ElectronicTemperature  300.0       # default=300 (K)
scf.energycutoff          200.0        # default=150 (Ry)
scf.maxIter                300         # default=40
scf.EigenvalueSolver      Band         # Recursion|Cluster|Band
scf.Kgrid                5 5  1        # means n1 x n2 x n3
scf.Mixing.Type            rmm-diisk   # Simple|Rmm-Diis|Gr-Pulay
scf.Init.Mixing.Weight     0.07        # default=0.30 
scf.Min.Mixing.Weight      0.003       # default=0.001 
scf.Max.Mixing.Weight      0.15        # default=0.40 
scf.Mixing.History         39          # default=5
scf.Mixing.StartPulay      10          # default=6
scf.Mixing.EveryPulay       1
scf.criterion             1.0e-7       # default=1.0e-6 (Hartree) 
 
#
# MD or Geometry Optimization
#

MD.Type                   Nomd        # Nomd|Opt|DIIS|NVE|NVT_VS|NVT_NH

#
# Band dispersion 
#

Band.dispersion              on      # on|off, default=off
Band.Nkpath                3
<Band.kpath                
   25  0.5 0.0 0.0       0.333 0.333 0.0   M  K
   25  0.333 0.333 0.0     0.0 0.0 0.0        K  G
   25  0.0 0.0 0.0       0.5 0.0 0.0        G  M
Band.kpath>

#
# Unfolding of bands
#

Unfolding.Electronic.Band      on     # on|off, default=off
Unfolding.LowerBound        -15.0     # default=-10 eV
Unfolding.UpperBound         15.0     # default= 10 eV

Unfolding.desired_totalnkpt    30     
Unfolding.Nkpoint               4

<Unfolding.kpoint
M 0.5 0.0 0.0
K 0.333 0.333 0.0
G 0.0 0.0 0.0
M 0.5 0.0 0.0
Unfolding.kpoint>

<Unfolding.ReferenceVectors
1.22980000000000 2.13000000000000  0.00000000000000
1.22980000000000 -2.13000000000000  0.00000000000000
0.00000000000000 0.00000000000000 20.00000000000000
Unfolding.ReferenceVectors>


<Unfolding.Map
  1 1
  2 2
  3 1
  4 2
  5 1
  6 2
  7 1
  8 2
  9 3
Unfolding.Map>

发表评论