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_OUTrelax_OUT.jsonrelax_PROGRESS.yamlrelax_DATA/parallel_info.jsonrelax_DATA/CURRENTPOSrelax_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用户手册