4.2. 结构优化¶
结构优化计算,对结构的原子位置和/或晶格常数进行调整,得到在势能面上稳定的结构。 结构优化的收敛标准是最大原子受力、能量变化和晶格应力(如果对晶格也进行优化)以及原子位移小于设定值。结构优化完的结构应该处于势能面上的极小值点上。
4.2.1. Si的结构优化计算输入文件¶
结构优化计算的输入文件包含一个JSON文件和元素对应的赝势文件。赝势文件可参考 赝势文件 。
JSON文件如下:
{
"job": {
"calculation_type": "vc_relax",
"calc_force": true,
"calc_stress": true
},
"job_io": {
"prefix": "relax",
"pp_dir": ".",
"pp_files": [
"Si_ONCV_PBE_sr.upf"
]
},
"pw": {
"ecutwfc": 20,
"ecutrho": 80
},
"kpts": {
"k_type": "automatic",
"k_mesh": [
4,
4,
4
]
},
"electron_step": {
"elec_e_conv": 5e-7,
"elec_max_steps": 100
},
"ion_step": {
"ion_e_conv": 0.00002,
"ion_f_conv": 0.05,
"ion_alg": "bfgs",
"ion_max_steps": 100
},
"constraints": {},
"cell": {
"lattice": [
6.3612315,
0,
3.67266035,
2.10949923,
5.96656808,
3.65376264,
0,
0,
7.30752373
],
"cell_units": "bohr"
},
"ions": {
"element_names": [
"Si"
],
"element_nums": [
2
],
"positions": [
[
0,
0,
0
],
[
0.74,
0.76,
0.75
]
]
}
}
JSON输入参数介绍:
JSON输入文件可以分为几个模块,这里分别是job/job_io/pw/kpts/electron_step/ion_step/constraints/cell/ions,下面将依次进行介绍。
job模块: 用来设置和本次计算类型相关的参数。
calculation_type
:设置计算类型,本次计算为vc_relax变晶格结构优化计算。固定晶格结构优化时应当设为relax。calc_force
:设置是否要计算原子受力,对于结构优化计算需要设置为true。calc_stress
:设置是否要计算晶格应力,对于变晶格结构优化计算需要设置为true。
job_io模块: 用来设置和本次计算的输入输出相关的参数。
prefix
:设置计算输出文件的前缀,这里设置为relax。pp_dir
:设置赝势文件的目录,这里设置为当前目录(和JSON文件同一个目录)。pp_files
:设置赝势文件的名称,这里是Si的赝势,名称为Si_ONCV_PBE_sr.upf。
pw模块: 用来设置和本次计算的平面波相关的参数。
ecutwfc
:设置波函数截断能,这里设置为20,单位为Hartree。ecutrho
:设置电荷密度截断能,这里设置为80,单位为Hartree。
kpts模块: 用来设置和本次计算的k点相关的参数。
k_type
:设置k点的设置方法,这里设置为automatic,表示使用Monkhorst-Pack方法自动生成均匀的k点。k_mesh
:设置3个方向上的k点网格的数目。
electron_step模块: 用来设置和电子步收敛相关的参数。
elec_e_conv
:设置自洽循环时电子步的收敛标准,这里设置为5e-7,单位为Hartree,。elec_max_steps
:设置自洽循环时的最大电子步数,这里设置为100。
ion_step模块: 用来设置结构优化的收敛标准、算法、步数等相关参数。
ion_e_conv
:设置结构优化时的离子步的能量收敛标准,单位为eV/atom。这里设置为0.00002。ion_f_conv
:设置结构优化时的离子步的力的收敛标准,单位为eV/Å,这里设置为0.05。ion_alg
:设置结构优化时的算法,这里设置为bfgs。ion_max_steps
:设置结构优化时的最大离子步数,这里设置为100。
cell模块: 用来设置晶胞参数。
lattice
:设置晶格矢量矩阵,共9个数,每三个数代表一个晶轴矢量。cell_units
:设置输入的晶格矢量矩阵的单位,这里设置为bohr,表示晶格常数以bohr为单位。
constraints模块: 用来设置变晶格结构优化时的晶格约束条件。这里没有做设置,不对晶格做约束。
ions模块: 用来设置原子相关的参数。
element_names
:设置原子的元素名称,这里为Si。element_nums
:设置每种元素的原子个数,这里为2。positions
:设置原子位置,这里输入两个Si原子的分数坐标。
4.2.2. 执行计算¶
准备好JSON文件和赝势文件之后,按照 Hylanemos运行 中的方法执行计算。
4.2.3. 计算结果分析¶
根据上述的输入文件,计算完成之后将会得到 relax_OUT
、 relax_OUT.json
、 relax_PROGRESS.yaml
、
relax_DATA/parallel_info.json
、 relax_DATA/CURRENTPOS
、 relax_DATA/STEPPOS
这6个文件:
relax_OUT
:Hylanemos计算过程中输出的日志文件。relax_OUT.json
:Hylanemos计算结束之后输出的一个文件,是对整个计算的结果的一个汇总。relax_PROGRESS.yaml
:Hylanemos计算过程中输出一个和计算进度相关的文件。relax_DATA/parallel_info.json
:Hylanemos计算过程中输出的并行相关的文件。relax_DATA/CURRENTPOS
:Hylanemos计算过程中输出的一个当前离子步的结构文件。relax_DATA/STEPPOS
:Hylanemos计算过程中输出的一个从第一个离子步到当前离子步的结构文件。
计算完成后,可在relax_OUT文件的最后查看结构优化是否收敛和优化后的结构。
Structure optimization convergence informmation: #收敛情况
Term | Converged | Value | Tolerance | Units
Energy | yes | 0.00001255 | 0.00004000 | eV
Force | yes | 0.00725231 | 0.05000000 | eV/A
Total energy of 5 iteration:
total energy = -7.87615880 Ha / -214.32119896 eV #优化后的体系能量
Lattice (A): #优化后的晶格常数
3.35594895 0.00471147 1.94477578
1.11429114 3.16911062 1.94000600
-0.00589705 0.00226578 3.87968805
Lattice (bohr):
6.34182440 0.00890340 3.67509359
2.10570508 5.98875113 3.66608001
-0.01114382 0.00428171 7.33154787
Lattice constants(A and degree):
3.87873283 3.87924350 3.87969320
59.99081100 59.99473671 59.98224567
Atom positions (fractional coordinates): #优化后的原子位置
Si -0.00495400 0.00492648 0.00001321
Si 0.74495400 0.75507352 0.74998679
External pressure(kbar) #优化后的晶格压力
0.00000000 0.00000000 0.00000000
0.00000000 0.00000000 0.00000000
0.00000000 0.00000000 0.00000000
Volume of cell: 278.49035276 #优化后的晶胞体积
使用Matter Craft可直接查看优化后的结构CURRENTPOS和优化过程的动画。具体的操作方法可参考 Matter Craft用户手册。