结构优化#
结构优化 (Geometry Optimization) 是在势能面上搜索稳定点(能量极小点或过渡态鞍点)的过程。REST 程序通过迭代地计算分子受力(能量梯度)并据此调整原子坐标,逐步逼近目标构型,直至满足预设的收敛标准。
REST 支持两种结构优化引擎:
geomeTRIC(缺省,推荐):基于 Python 的 geomeTRIC 优化库,通过 PyO3 接口与 REST 集成。支持多种内坐标系统、过渡态搜索、IRC 路径计算、约束优化(固定原子)和频率分析。
L-BFGS:基于 Rust 的 L-BFGS 算法,仅使用数值梯度,不支持约束优化和过渡态搜索,适用于简单的测试场景。
基本设置#
通过 [ctrl] 区块中的关键词设置结构优化任务:
job_type:设为"opt"以启动结构优化。等价设置有"geometry optimization"、"relax"、"geom_opt"等。opt_engine:优化引擎选择。缺省为"geometric_pyo3"(geomeTRIC 引擎),也可设为"lbfgs"。numerical_force:是否使用数值力(有限差分)代替解析梯度。对于不具备解析梯度的后自洽场方法(如 XYG3、RPA 等),需设为true。缺省为false。
一个基本的结构优化输入示例如下:
[ctrl]
job_type = "opt"
xc = "x3lyp"
empirical_dispersion = "d3bj"
basis_path = "cc-pVDZ"
auxbas_path = "def2-universal-jkfit"
charge = 0.0
spin = 1.0
spin_polarization = false
[geom]
name = "CO"
unit = "angstrom"
position = """
C 0.00000000000 0.0000000000 0.0000000000
O 1.20000000000 0.0000000000 0.0000000000
"""
对于使用双杂化泛函等没有解析梯度的方法,需要开启数值力:
[ctrl]
xc = "xyg3"
job_type = "opt"
numerical_force = true
basis_path = "cc-pVDZ"
auxbas_path = "def2-universal-jkfit"
固定原子(约束优化)#
在结构优化中,用户可以固定部分原子的坐标,仅优化其余原子的位置。这在表面吸附、QM/MM 等计算场景中非常实用。
固定原子通过在 [geom] 区块的 position 中添加标记实现,格式为:
<元素> <固定标记> <x> <y> <z>
其中,固定标记为 0 表示该原子固定(不参与优化),1 表示该原子自由(参与优化)。如果不提供固定标记(即标准的四列格式),则所有原子默认为自由原子。
备注
固定原子功能仅在 geomeTRIC 引擎 (opt_engine = "geometric_pyo3") 下可用。L-BFGS 引擎不支持约束优化。
geomeTRIC 优化器参数#
geomeTRIC 引擎的参数通过输入卡中的 [ctrl.geometric_pyo3] 子区块声明。对于大多数计算,使用缺省参数即可,无需额外设置此区块。
收敛标准#
关键词 |
类型 |
缺省值 |
单位 |
说明 |
|---|---|---|---|---|
|
i32 |
300 |
— |
最大优化步数 |
|
f64 |
1.0e-6 |
Hartree |
相邻两步能量变化的收敛阈值 |
|
f64 |
3.0e-4 |
Hartree/Bohr |
梯度 RMS 的收敛阈值 |
|
f64 |
4.5e-4 |
Hartree/Bohr |
最大梯度分量的收敛阈值 |
|
f64 |
1.2e-3 |
Angstrom |
位移 RMS 的收敛阈值 |
|
f64 |
1.8e-3 |
Angstrom |
最大位移分量的收敛阈值 |
坐标系统#
coordsys:内坐标系统选择,缺省为"tric"。可选值包括"cart"(笛卡尔坐标)、"prim"(基元内坐标)、"dlc"(去局域内坐标)、"hdlc"(混合去局域内坐标)、"tric"(Translation-Rotation Internal Coordinates,缺省)以及"tric-p"。对于大多数体系,缺省的"tric"是最优选择。
Hessian 与 Trust Radius 参数#
以下参数用于控制优化算法的 Hessian 更新策略和步长管理,通常在处理 QM/MM 体系、含噪声梯度的体系或各向异性强的体系时需要调整。
关键词 |
类型 |
缺省值 |
说明 |
|---|---|---|---|
|
String |
|
Hessian 矩阵的计算策略(见下方说明) |
|
bool |
|
当 Hessian 特征值低于 |
|
f64 |
0.1 |
初始 trust radius (Angstrom) |
|
f64 |
0.3 |
最大 trust radius (Angstrom) |
|
f64 |
1.0e-4 |
最小 trust radius (Angstrom) |
|
f64 |
1.0e-5 |
Hessian 重置的特征值阈值,仅当 |
|
i32 |
1 |
投影掉梯度中净力/净力矩分量:0=不投影,1=自动(缺省),2=强制投影 |
|
bool |
|
是否用最大位移分量(而非 RMS)判断 trust radius |
hessian 关键词的可选值:
值 |
说明 |
|---|---|
|
不做 Hessian 计算(缺省,稳态搜索) |
|
仅对初始结构计算 Hessian(缺省,过渡态搜索) |
|
仅对优化后的结构计算 Hessian |
|
初始和优化后的结构各计算一次 Hessian |
|
不做结构优化,仅计算初始结构的 Hessian |
|
每步都计算 Hessian(计算量大,慎用) |
过渡态搜索与 IRC#
关键词 |
类型 |
缺省值 |
说明 |
|---|---|---|---|
|
bool |
|
设为 |
|
bool |
|
设为 |
|
String |
|
IRC 计算方向: |
开启过渡态搜索时,程序会自动将 hessian 的缺省值调整为 "first",以在初始结构上计算 Hessian 矩阵,确保优化器能正确识别鞍点方向。
[ctrl]
job_type = "opt"
xc = "b3lyp"
basis_path = "def2-TZVP"
auxbas_path = "def2-universal-jkfit"
[ctrl.geometric_pyo3]
transition = true
hessian = "first+last"
frequency = true
thermo = [398.0, 1.5]
[geom]
name = "ts_example"
unit = "angstrom"
position = '''
...
'''
频率分析与热化学#
关键词 |
类型 |
缺省值 |
说明 |
|---|---|---|---|
|
bool |
|
当 Hessian 矩阵可用时,是否进行频率计算和热化学分析 |
|
[f64; 2] |
|
热力学分析的状态参数:[温度 (K), 压强 (bar)] |
输出控制#
关键词 |
类型 |
缺省值 |
说明 |
|---|---|---|---|
|
String |
|
geomeTRIC 生成文件的前缀名 |
|
i32 |
0 |
输出详细程度:0=简洁,1=正常,2=详细,3=底层函数输出 |
L-BFGS 优化器#
L-BFGS 引擎是 REST 内置的轻量级优化器,基于 Rust 的 liblbfgs 库实现。该引擎不支持约束优化(固定原子)和过渡态搜索。对于需要这些功能的场景,请使用缺省的 geomeTRIC 引擎。
相关关键词:
nforce_displacement:数值力计算的有限差分位移步长,单位 Bohr,缺省值为0.0013。