XYG3型泛函在ORCA中的使用

2022-03-31 21:01:54 浏览数 (1)

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

代码语言:javascript复制
*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需求的进阶用户可以自行修改上述三个步骤中的关键词。例如

  1. 在步骤scf中启用UKS对称破缺初猜、检查波函数稳定性、添加帮助收敛的关键词。注意不需要在nscf中添加这些关键词。
  2. 在步骤scf和nscf中修改DFT格点。
  3. 在步骤pt2中修改MP2相关的选项,如删去nofrozencore,添加tightPNO。

该脚本可能还有不少bug(多半是ORCA的bug),欢迎在github的issue区发起讨论。

下期预告:使用PySCF dh做XYG3优化任务和二阶梯度性质计算。

0 人点赞