|
本帖最后由 snljty 于 2023-9-12 13:05 编辑
更新:加入了一个新功能,可以提供一个dimer的NBO的.47文件,只要里面包含Fock矩阵,程序可以从里面读取Fock矩阵,就不用折腾了。对于Gaussian用户,读取上一次dimer单点的chk文件后,写Guess=Read Population=NBORead,结尾空一行写$NBO ARCHIVE FILE= MYDIMER $END,重跑一遍,就会在工作目录下生成MYDIMER.47文件,然后执行本程序的时候加上-d47选项和这个文件的名字即可。这样就不需要提供下文的Fock矩阵了。
更新:刚才改了几个typo,并加入了一个新功能。当数值误差原因导致系数矩阵不可逆的时候,可以用-dF选项提供一个含有完整的dimer的Fock矩阵的文件,将直接从里面读取Fock矩阵。这个文件第一行应该是注释,后面应该是紧跟一个下三角矩阵记录的dimer的Fock矩阵。对于Gaussian用户,可以在计算一次dimer的单点后,读取上一次单点计算的chk文件,关键词加上Guess=Read IOp(5/33=3),然后找输出文件最后一次出现Fock matrix (alpha)或者Fock matrix (beta)的地方,就是Fock矩阵,带着这行标题拷贝出来到新文件即可。
顺便可以猜一下,这个程序为什么要用Fortran写。
写在最前面:
此程序在若干个体系测试过,但是未进行更广泛的测试。另外在某些基函数有接近线性依赖,但是还没有被量化软件判断为线性依赖的情况下,可能由于Multiwfn输出的数据精度有限,读取导致的一些数值误差问题,出现系数矩阵不满秩进而不可逆的情况。
正文:
论坛中已经有很多计算电荷转移积分的程序了,比如http://bbs.keinsci.com/thread-11369-1-1.html以及http://bbs.keinsci.com/thread-14311-1-1.html。这些程序基本都是基于Gaussian的。考虑到Multiwfn极为丰富的波函数读取与操作功能,这里(2个月前写好的,因为测试较少没有发上来)写了一个利用卢老师的Multiwfn程序(http://sobereva.com/multiwfn/)读取轨道信息,然后读取Multiwfn的输出文件并使用格点能修正法计算分子间电荷转移积分的程序。程序地址在https://github.com/snljty/charge_transfer_integral。这个程序是用Fortran写的,Fortran 95的语法。
输入文件是dimer以及两个monomer各自包含GTO和MO信息的文件,诸如Gaussian的fch,ORCA的molden等文件。使用方法可以交互输入,也可以用命令行参数比如./Calc_coupling.x -d dimer.fch -m1 monomer1.fch -m2 monomer2.fch。注意monome1r的坐标应该是dimer坐标的前面部分,monomer2的坐标应该是dimer坐标的后半部分,两者坐标要和其在dimer中的坐标完全相同,而且顺序不可改变。另外注意Gaussian要加上NoSymmetry关键词。如果可能有基函数线性依赖关系,量化软件去掉这些成分后会导致系数矩阵为非方阵,不存在逆矩阵从而无法用这个方法计算。即使量化程序用某些关键词指定不去除线性依赖的基函数成分,后面对系数矩阵求逆也会报错。
bin目录里.exe拓展名的是Windows下的可执行文件,.x是WSL下编译的Linux版可执行文件。
使用前请务必确认Multiwfn已经正确安装且配置好,已经将Multiwfn可执行文件所在目录加入环境变量PATH,使得命令行输入Multiwfn即可启动Multiwfn,并且尽量用较新版本Multiwfn。如果要自行编译,还需要链接包含LAPACK和BLAS内函数的数学库。因为这个程序通常没什么计算量,图省事我直接链接LAPACK编译的。
这里放一下README.md文件和Windows下的可执行文件,还有几个测试文件。其余内容包括源代码在上面的github地址。
欢迎测试和反馈。
calc_coupling.exe
(589 KB, 下载次数 Times of downloads: 370)
README.md
(6.12 KB, 下载次数 Times of downloads: 242)
tests.zip
(308.59 KB, 下载次数 Times of downloads: 242)
|
评分 Rate
-
查看全部评分 View all ratings
|