4.10. DFT+U计算

DFT+U计算是针对强关联体系进行的一种修正。DFT+U可以使具有强关联的体系的能隙、结构、磁性等性质的计算更加接近实验值。

4.10.1. \(TiO\)2 的DFT+U的scf计算输入文件

DFT+U可以在各种类型的计算任务中开启,一般情况下需要的输入文件与该类型的计算文件相同,但在能带和态密度计算中需要额外的输入文件。 这里以scf自洽计算+能带计算作为例子说明DFT+U计算的输入文件JSON文件的参数设置。

scf自洽计算时的JSON文件如下:

{
    "job": {
        "calculation_type": "scf",
        "plus_u": true
    },
    "job_io": {
        "prefix": "scf",
        "output_rho": true,
        "output_ns": true,
        "pp_dir": ".",
        "pp_files": [
            "Ti_ONCV_PBE_sr.upf",
            "O_ONCV_PBE_sr.upf"
        ]
    },
    "pw": {
        "ecutwfc": 30,
        "ecutrho": 120
    },
    "kpts": {
        "k_type": "automatic",
        "k_mesh": [
            3,
            3,
            3
        ]
    },
    "hubbard": {
        "u_projection_type": "atomic",
        "u": [
            5,
            0
        ]
    },
    "cell": {
        "lattice": [
            8.67384297,
            0,
            0,
            0,
            8.67384297,
            0,
            0,
            0,
            5.59358937
        ],
        "cell_units": "bohr"
    },
    "ions": {
        "element_names": [
            "Ti",
            "O"
        ],
        "element_nums": [
            2,
            4
        ],
        "positions": [
            [
                0,
                0,
                0
            ],
            [
                0.5,
                0.5,
                0.5
            ],
            [
                0.327,
                0.327,
                0
            ],
            [
                0.173,
                0.827,
                0.5
            ],
            [
                0.673,
                0.673,
                0
            ],
            [
                0.827,
                0.173,
                0.5
            ]
        ]
    }
}

JSON输入参数介绍:

JSON输入文件可以分为几个模块,这里分别是job/job_io/pw/kpts/hubbard/cell/ions, 这里只介绍一些与DFT+U计算需要额外设置的参数。 下面将依次进行介绍。

job模块: 用来设置和本次计算类型相关的参数。

  • plus_u :设置是否使用DFT+U,这里设为true,表示使用DFT+U方法。

job_io模块: 用来设置和本次计算的输入输出相关的参数。

  • output_ns:设置计算完成后是否要输出+U的占据数文件,这里设置为输出。如果后续要进行能带或态密度的计算,在scf时必须设置为输出;如果不进行后续计算,可以不输出。

hubbard模块: 用来设置和DFT+U相关的参数。

  • u_projection_type :设置+U的投影方式。这里atomic表示使用原子轨道(从赝势读取)来构建Hubbard投影。

  • u:设置每种元素+U的值,顺序与element_names中的元素名称一一对应。这里Ti设为5,O设为0.

4.10.2. scf计算结果分析

输出文件相对普通的scf计算会多出一个 scf_DATA/ns.hdf5 文件,这是+U的占据数文件。 在 scf_OUT 文件中的scf result模块可以看到计算结束后的体系能量中hubbard项的贡献和每个原子的hubbard占据数矩阵。

================================================================================
|                                  scf result                                  |
--------------------------------------------------------------------------------
Electron Step Finish
Total Energy: -179.17223602 Ha / -4875.52491341 eV
Fermi level:  10.75283077 eV

Energy by parts:
one_electron contribution   =     -65.02096537 Ha /   -1769.31060087 eV
hartree contribution        =      43.99771953 Ha /    1197.23893871 eV
xc contribution             =     -28.51238370 Ha /    -775.86148491 eV
ewald contribution          =    -130.02699089 Ha /   -3538.21466755 eV
hubbard contribution        =       0.39038442 Ha /      10.62290121 eV                 #hubbard项对能量的贡献
smearing contribution       =      -0.00000000 Ha /      -0.00000000 eV

Hubbard occupation matrix                                                               #hubbard占据数矩阵
Atom[1]: Ti
Spin=1
 0.253647 -0.000003 -0.054022 -0.053119 0.000002
 -0.000003 0.422258 -0.000000 -0.000002 0.132572
 -0.054022 -0.000000 0.371223 0.093566 0.000001
 -0.053119 -0.000002 0.093566 0.314984 0.000001
 0.000002 0.132572 0.000001 0.000001 0.422258
Atom[2]: Ti
Spin=1
 0.253683 0.000005 0.054025 -0.053109 0.000001
 0.000005 0.422284 0.000001 0.000002 -0.132566
 0.054025 0.000001 0.371248 -0.093570 0.000000
 -0.053109 0.000002 -0.093570 0.315008 0.000001
 0.000001 -0.132566 0.000000 0.000001 0.422284

4.10.3. \(TiO\)2 的DFT+U的能带计算输入文件

相对普通的能带和态密度计算,DFT+U的能带和态密度计算时还需要+U占据数文件作为输入文件,这个文件是上面的scf计算中输出的 ns.hdf5

能带计算时的JSON文件如下:

{
    "job": {
        "calculation_type": "band",
        "plus_u": true
    },
    "job_io": {
        "rho_init": "file",
        "rho_init_file": "scf_DATA/rho.hdf5",
        "uns_init" : "file",
        "uns_init_file" : "scf_DATA/ns.hdf5"
        "prefix": "band",
        "pp_dir": ".",
        "pp_files": [
            "Ti_ONCV_PBE_sr.upf",
            "O_ONCV_PBE_sr.upf"
        ]
    },
    "kpts": {
        "k_type": "path",
        "k_data": [
            [
                0,
                0,
                0,
                20
            ],
            [
                0,
                0.5,
                0,
                20
            ],
            [
                0.5,
                0.5,
                0,
                20
            ],
            [
                0,
                0,
                0,
                20
            ],
            [
                0,
                0,
                0.5,
                20
            ],
            [
                0,
                0.5,
                0.5,
                20
            ],
            [
                0.5,
                0.5,
                0.5,
                20
            ],
            [
                0,
                0,
                0.5,
                20
            ],
            [
                0,
                0.5,
                0,
                20
            ],
            [
                0,
                0.5,
                0.5,
                20
            ],
            [
                0.5,
                0.5,
                0,
                20
            ],
            [
                0.5,
                0.5,
                0.5,
                20
            ]
        ]
    },
    "pw": {
        "ecutwfc": 35,
        "ecutrho": 140
    },
    "hubbard": {
        "u_projection_type": "atomic",
        "u": [
            5,
            0
        ]
    },
    "band": {
        "n_empty_bands": 8
    },
    "cell": {
        "lattice": [
            5.59358937,
            0,
            0,
            0,
            8.67384297,
            0,
            0,
            0,
            8.67384297
        ],
        "cell_units": "bohr"
    },
    "ions": {
        "element_names": [
            "Ti",
            "O"
        ],
        "element_nums": [
            2,
            4
        ],
        "positions": [
            [
                0,
                0,
                0
            ],
            [
                0.5,
                0.5,
                0.5
            ],
            [
                0,
                0.327,
                0.327
            ],
            [
                0.5,
                0.173,
                0.827
            ],
            [
                0,
                0.673,
                0.673
            ],
            [
                0.5,
                0.827,
                0.173
            ]
        ]
    }
}

JSON输入参数介绍:

JSON输入文件可以分为几个模块,这里分别是job/job_io/pw/kpts/hubbard/band/cell/ions, 这里只介绍一些与DFT+U计算需要额外设置的参数。其他参数和普通的能带计算类似,也需要保持和scf计算时尽量一致。 下面将依次进行介绍。

job模块: 用来设置和本次计算类型相关的参数。

  • plus_u :设置是否使用DFT+U,这里设为true,表示使用DFT+U方法。

job_io模块: 用来设置和本次计算的输入输出相关的参数。

  • uns_init :设置+U原子轨道占据数初始化方法。在能带、态密度等计算中,需要读取scf计算输出的轨道占据数矩阵。这里设为”file”,表示从文件读取。

  • uns_init_file :设置+U原子轨道占据数初始化文件。在能带、态密度等计算中,需要读取scf计算输出的轨道占据数矩阵。这里设为”scf_DATA/ns.hdf5”,表示读取scf_DATA文件夹中的ns.hdf5文件。

hubbard模块: 用来设置和DFT+U相关的参数。

  • u_projection_type :设置+U的投影方式。这里atomic表示使用原子轨道(从赝势读取)来构建Hubbard投影。

  • u:设置每种元素+U的值,顺序与element_names中的元素名称一一对应。这里保持和scf时一致,将Ti设为5,O设为0,单位为eV。

  • u_fread_uns:设置读取轨道占据数的方式。是一个长度为2的数组,其中的第一项是读取文件的路径,这里是scf_DATA/ns.hdf5;第二项设为”file”,表示从文件读取。

4.10.4. 能带计算结果分析

DFT+U的能带计算的结果文件和普通的能带计算的结果文件基本相同。 这里给出+U和没有+U的能带图如下:

../_images/TiO2能带both.png

没有+U时,\(TiO\)2 计算得到的带隙约为2.3eV;+U之后 \(TiO\)2 的带隙变大,约为3.0eV,与实验值3.0-3.2eV更加接近。