计算化学公社

标题: 绕过 ORCA gCP(DFT/SV(P)) 校正Bug的方案 [打印本页]

作者
Author:
liyuanhe211    时间: 2016-12-29 23:27
标题: 绕过 ORCA gCP(DFT/SV(P)) 校正Bug的方案
本帖最后由 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)”,此括号处理的不合适且不统一,造成干扰:
  1. GCP(DFT/SV(P))
  2. %method GCPMETHOD "DFT/SV(P)" end
  3. %method GCPMETHOD "'DFT/SV(P)'" end
  4. %method GCPMETHOD "DFT/SV\(P\)" end
  5. %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)

  1. %maxcore 3622
  2. %base "H2O"
  3. %scf
  4.     Convergence VeryTight
  5. end
  6. %method
  7.     DoGCP true
  8.     GCPMETHOD "DFT/SV9P0"
  9. end
  10. !  Opt Freq RI BLYP D3BJ def2-SV(P) def2-SVP/J Grid5 FinalGrid6

  11. * xyz 0 1
  12. O                 -1.86695273   -0.40772532    0.00000000
  13. H                 -0.90695273   -0.40772532    0.00000000
  14. H                 -2.18740731    0.49721052    0.00000000
  15. *
复制代码


3. 正常运行该输入文件即可。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
从输出可见,运行结果(左侧)与用其他特殊方法(右侧)*运行的结果一致(有一定的数值噪音)
Energy
(, 下载次数 Times of downloads: 38)

Gradient
(, 下载次数 Times of downloads: 32)

得到的几何构型
(, 下载次数 Times of downloads: 39)


Hessian:
(, 下载次数 Times of downloads: 40)




*该特殊方法由钟成老师提供,也能绕过这个Bug,效果一样,但操作起来复杂些。步骤如下,共7步:
  1. 在输入中写入GCP(DFT/SV(P)),运行会如期出错
  2. 在临时文件中找到以".gcp.in.tmp"结尾的文件,假设为A.gcp.in.tmp
  3. 运行“otool_gcp A.gcp.in.tmp -level "DFT/SV(P)"”(此处otool_gcp为原版)
  4. 自输出中可找到4个参数:sigma 0.2424。。。beta 1.4078
  5.         (以上4步获得的参数也可通过阅读Grimme的gCP程序源代码或阅读原文得到)
  6. 将这四个参数用 nano ~/.gcppar.$HOSTNAME 写入文件,文件中内容为 "sv(p) 0.2424 1.2371 0.6076 1.4078",不含引号
  7. 输入文件类似上文提到的写法,但 GCPMETHOD 后的方法留空,写为 %method DoGCP true GCPMETHOD "" end
  8. 运行此输入即可
复制代码



CentOS 6.2, ORCA 3.0.3 中测试过的可执行文件及源码
(, 下载次数 Times of downloads: 5)

Windows VS2010 编译但未测试过的可执行文件:
(, 下载次数 Times of downloads: 7)






作者
Author:
ggdh    时间: 2016-12-29 23:32
我去 你这个办法更方便。厉害了,
作者
Author:
liyuanhe211    时间: 2016-12-29 23:58
ggdh 发表于 2016-12-29 23:32
我去 你这个办法更方便。厉害了,

噫,也是受了启发才想出来
作者
Author:
我本是个娃娃    时间: 2016-12-30 09:38
李大博士真棒!
作者
Author:
1130240115    时间: 2016-12-31 14:56
谢谢分享
作者
Author:
plus    时间: 2017-1-2 14:59
建议报告bug让他们改啊
作者
Author:
liyuanhe211    时间: 2017-1-2 17:57
plus 发表于 2017-1-2 14:59
建议报告bug让他们改啊

早就做了




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3