XYG3型泛函在ORCA中的使用
本篇文章中我们讨论XYG3型泛函在ORCA中的使用方法。关于XYG3型泛函的介绍可见上期链接。
实际上,在以往版本的ORCA中,就可以通过多步任务来进行XYG3单点计算,其逻辑和上期链接中的高斯多步任务是类似的。不过,ORCA5大大完善了Compound Scripts功能,可使这一过程更加自动化,所以本文介绍的方法都是基于ORCA 5.0.2的Compound Scripts功能。
本文所需的脚本可在
https://github.com/hebrewsnabla/CompoundScripts
下载。依次点击Code, Download ZIP可下载整个压缩包,xdh.cmp脚本在其中XYG3TypeDoubleHybrids/文件夹下。
基本用法
首先我们需要编辑一个ORCA输入文件(例如test.inp
),先写好坐标、并行进程数、内存等,然后不需要写!
开头的关键词,直接通过%compound
部分指定XYG3计算,基组等设置都作为参数传给Compound脚本xdh.cmp
。
*xyz 0 1
N 0.0 0.0 0.108827
H 0.0 0.947455 -0.253931
H 0.820520 -0.473727 -0.253931
H -0.820520 -0.473727 -0.253931
*
%pal nprocs 4 end
%maxcore 1000
%compound "xdh.cmp"
with
xc = "xyg3";
basis = "def2-svp";
auxbas = "def2-svp/c";
end
必须写的三个参数是泛函xc
,基组basis
,RI-MP2辅助基组auxbas
。目前脚本"xdh.cmp"只支持泛函xyg3,"xdh_scs.cmp"只支持泛函xygjos。目前该脚本强制在XYG3的PT2步骤开启RI-MP2,故必须指定辅助基组(AutoAux也是可以的),但不支持SCF步骤的RI,因为这通常不是决速步骤。一个可选参数是dlpno = "true";
,可以将RI-MP2切换成DLPNO-MP2。
将脚本"xdh.cmp"与输入文件放在同一目录,按正常方式运行ORCA即可。在输出文件末尾可以看到
代码语言:javascript复制-----------------------------------------------------------------------------------------
COMPOUND BLOCK
SUMMARY OF VARIABLES
-----------------------------------------------------------------------------------------
Variable Name Value Evaluation String
------------- ----- ---------------
XC | xyg3 | xyg3
BASIS | def2-svp | def2-svp
AUXBAS | def2-svp/c | def2-svp/c
DLPNO | false | false
ACM[0] | 0.80330000 | 0.8033
ACM[1] | 0.21070000 | 0.2107
ACM[2] | 0.67890000 | 0.6789
SCALLDAC | 0.67890000 | 0.6789
PT2_COEFF | 0.32110000 | 0.3211
ENSCF | -56.37431512 |
EPT2 | -0.26373254 |
EDH | -56.45899964 | (ENSCF EPT2*PT2_COEFF)
****ORCA TERMINATED NORMALLY****
其中EDH就是我们想要的单点能。
进阶用法
下面简单讲解"xdh.cmp"脚本的结构。该脚本的核心部分如下(不包括变量初始化部分)
代码语言:javascript复制if (xc = "xyg3") then
pt2_coeff = 0.3211;
acm[0] = 0.8033;
acm[1] = 0.2107;
acm[2] = 0.6789;
scalldac = 0.6789;
endif
New_Step
! b3lyp_g &{basis} noautostart
Step_End
Alias scf
Read_Geom scf
Read_Mos scf
New_Step
! b3lyp_g &{basis} nopop
%scf
maxiter 1
ignoreconv true
end
%method
Functional b3lyp_g
ACM = &{acm[0]}, &{acm[1]},&{acm[2]}
ScalLDAC = &{scalldac}
end
Step_End
Alias nscf
Read_Geom scf
Read_Mos scf
New_Step
! RI-MP2 &{basis} &{auxbas}
! noiter nopop nofrozencore
%mp2
dlpno &{dlpno}
end
Step_End
Alias pt2
read Enscf = SCF_ENERGY[nscf];
read Ept2 = MP2_CORR_ENERGY[pt2];
Edh = (Enscf Ept2*pt2_coeff);
ORCA允许在脚本中定义若干个步骤(以New_Step开始,Step_End结束),并使用Alias命名。XYG3计算分为三个步骤:B3LYP自洽(scf
),某个自定义泛函的非自洽计算(nscf
),利用DFT轨道的PT2(pt2
)。后两个步骤会读入第一步的轨道。最后读出后两步的能量,汇总成双杂化泛函能量。
直接在ORCA输入文件中写的大部分关键词对于Compound Scripts是无效的,只能通过参数传给Compound Scripts。由于在双杂化泛函计算中,可以指定的附加关键词成百上千,所以我们暂未支持较多的脚本参数。有DIY需求的进阶用户可以自行修改上述三个步骤中的关键词。例如
- 在步骤scf中启用UKS对称破缺初猜、检查波函数稳定性、添加帮助收敛的关键词。注意不需要在nscf中添加这些关键词。
- 在步骤scf和nscf中修改DFT格点。
- 在步骤pt2中修改MP2相关的选项,如删去nofrozencore,添加tightPNO。
该脚本可能还有不少bug(多半是ORCA的bug),欢迎在github的issue区发起讨论。
下期预告:使用PySCF dh做XYG3优化任务和二阶梯度性质计算。