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的能带图如下:
没有+U时,\(TiO\)2 计算得到的带隙约为2.3eV;+U之后 \(TiO\)2 的带隙变大,约为3.0eV,与实验值3.0-3.2eV更加接近。