|
本帖最后由 liyuanhe211 于 2016-12-29 23:44 编辑
在Sob老师的文章《大体系弱相互作用计算的解决之道》(sobereva.com/214)中提到在ORCA中使用gCP可以实惠的减少小基组的BSSE问题,但ORCA在使用def2-SV(P)基组优化时,对应的GCP(DFT/SV(P)) 实现不正确:
下述几种写法均会在优化的不同阶段(能量、梯度、Hessian)出各种各样的错误(注意有时可以运行,但结果不对),其根本原因在于ORCA向子程序 otool_gcp 发送指令时未做合适的转义,使得命令行中存在“DFT/SV(P)”,此括号处理的不合适且不统一,造成干扰:
- GCP(DFT/SV(P))
- %method GCPMETHOD "DFT/SV(P)" end
- %method GCPMETHOD "'DFT/SV(P)'" end
- %method GCPMETHOD "DFT/SV\(P\)" end
- %method GCPMETHOD ""DFT/SV(P)"" end
复制代码
为解决此问题写了一个简单的C++脚本,绕过了这个 Bug。代码仅在 Linux 的 ORCA 3.0.3 版本上测试过,在 CentOS 6.2 上用 g++ 4.4.7 编译好的程序见附件。
使用方法如下:
1. 将压缩包内的两个文件(otool_gcp,otool_gcp_original)覆盖到含ORCA主程序的安装目录。
(otool_gcp 是本脚本,otool_gcp_original 是原ORCA程序的 otool_gcp 工具,脚本的原理实际上是接管了原来向 otool_gcp 发送指令的任务)
2. 输入文件中的GCPMETHOD部分用 “9” 替换 “(” ,用 “0” 替换 “)”。
如下即为H2O分子优化的相关输入文件,其中用SV9P0代替了SV(P)。
- %maxcore 3622
- %base "H2O"
- %scf
- Convergence VeryTight
- end
- %method
- DoGCP true
- GCPMETHOD "DFT/SV9P0"
- end
- ! Opt Freq RI BLYP D3BJ def2-SV(P) def2-SVP/J Grid5 FinalGrid6
- * xyz 0 1
- O -1.86695273 -0.40772532 0.00000000
- H -0.90695273 -0.40772532 0.00000000
- H -2.18740731 0.49721052 0.00000000
- *
复制代码
3. 正常运行该输入文件即可。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
从输出可见,运行结果(左侧)与用其他特殊方法(右侧)*运行的结果一致(有一定的数值噪音)
Energy
Gradient
得到的几何构型
Hessian:
*该特殊方法由钟成老师提供,也能绕过这个Bug,效果一样,但操作起来复杂些。步骤如下,共7步:
- 在输入中写入GCP(DFT/SV(P)),运行会如期出错
- 在临时文件中找到以".gcp.in.tmp"结尾的文件,假设为A.gcp.in.tmp
- 运行“otool_gcp A.gcp.in.tmp -level "DFT/SV(P)"”(此处otool_gcp为原版)
- 自输出中可找到4个参数:sigma 0.2424。。。beta 1.4078
- (以上4步获得的参数也可通过阅读Grimme的gCP程序源代码或阅读原文得到)
- 将这四个参数用 nano ~/.gcppar.$HOSTNAME 写入文件,文件中内容为 "sv(p) 0.2424 1.2371 0.6076 1.4078",不含引号
- 输入文件类似上文提到的写法,但 GCPMETHOD 后的方法留空,写为 %method DoGCP true GCPMETHOD "" end
- 运行此输入即可
复制代码
CentOS 6.2, ORCA 3.0.3 中测试过的可执行文件及源码
Windows VS2010 编译但未测试过的可执行文件:
|
评分 Rate
-
查看全部评分 View all ratings
|