计算化学公社

标题: 编写构造片段组合波函数程序时,遇到的与Gaussian读取fchk相关的问题 [打印本页]

作者
Author:
Accelerator    时间: 2022-12-4 13:46
标题: 编写构造片段组合波函数程序时,遇到的与Gaussian读取fchk相关的问题
本帖最后由 Accelerator 于 2022-12-4 14:02 编辑

最近为了解决Gaussian自带的生成片段组合波函数的一些功能上的不足,正在编写一个基于各个片段的fchk构造片段组合波函数的程序。其中片段组合波函数是根据http://sobereva.com/82中提到的方法构造的,即依次读取各片段fchk中Alpha MO coefficients和Beta MO coefficients,构造分块矩阵并用0补足,然后转成新的轨道系数矩阵。结果发现了如下现象:
1. 对于UKS计算,发现在fchk中写入Alpha MO coefficients和Beta MO coefficients后,guess=read时并不足以让Gaussian读出正确的波函数。以附件的frag1.fchk为例,这是经过尝试发现的能让Gaussian正确读取的最简形式。其中ILSW的部分是必不可少的:
  1. Num ILSW                                   I              100
  2. ILSW                                       I   N=         100
  3.            1           0           0           0           2           1
  4.            0           0           0           0        4639          -1
  5.            4           0           0           0           0           0
  6.            0           0           1           0           0           0
  7.            1           1           0           0           0           0
  8.            0           0      100000           0          -1           0
  9.            0           0           0           0           0           0
  10.            0           0           0           1           0           0
  11.            0 -2000000000           1           0           0           0
  12.            0           0         121          52           0           0
  13.            0           0          58           0           0           0
  14.            0           0           0           0           0           1
  15.            0           0           0           0           0           0
  16.            0           0           0           0           0           0
  17.            0           0           0           0           0           0
  18.            0           0           0           0           0           0
  19.            0           0           0           0
复制代码
这个fchk中所记录的波函数是已经收敛的,如果被正确读取,应当识别为<S**2>= 1.1808 S= 0.6962,然后在1圈之后就收敛。但如果没有ILSW部分,则会识别为<S**2>= 0.75,并且迭代到一个不稳定的波函数。
2. 由上可以推断,Gaussian在guess=read时,会进行许多变换(可以容易想象的肯定会进行分子结构和轨道的投影,但既然fchk中的已经是完全相同水平下收敛的轨道,还投影什么?所以肯定有其他机制),并且会导致波函数发生很大变化。如果写guess=copychk而不是guess=read,那么即使没有ILSW部分,也能正确识别,立刻读取到一个已经收敛到的波函数。
但是:上述fchk中记录的轨道是已经收敛好的,那么guess=copychk可以成功。而对于一个从片段构造出来的轨道,例如附件mixed.fchk,就不奏效了。例如附件中的mixed.fchk,如果写guess=read,则可以读取(但会像上述一样读取到一个不稳定的波函数),而写guess=copychk会立刻报错:
  1. Operation on file out of range.
  2. FileIO: IOper= 2 IFilNo(1)=  -528 Len=        4278 IPos=           0 Q=   23237896873400


  3. dumping /fiocom/, unit = 1 NFiles =    56 SizExt =    524288 WInBlk =       512
  4.                    defal = F LstWrd =      659456 FType=2 FMxFil=10000
复制代码
其中提到out of range,但根据我的愚见,系数矩阵的维度是正确的,似乎不应该存在程序想读取某些东西但没有读到的情况。

所以这就带来了几个问题:
1. fchk中的ILSW部分是什么含义?Gaussian手册中似乎对此完全没有解释。
2. guess=read的机制究竟是什么?为何会导致读取到错误的波函数?
3. guess=copychk时报错的成因是什么?

不知是否有人对此有了解,感谢大家。
(, 下载次数 Times of downloads: 0) (, 下载次数 Times of downloads: 0) (, 下载次数 Times of downloads: 0) (, 下载次数 Times of downloads: 0)
作者
Author:
Accelerator    时间: 2022-12-4 14:15
最新进展:在发帖之后想到,虽然不知道ILSW是什么东西, 但如果随便写点什么,会怎么样?于是就在fchk中写上:
  1. Num ILSW                                   I              1
  2. ILSW                                       I   N=         1
  3.            1
复制代码

嘿,您猜怎么着,成了!guess=read可以正确读取了。
但这其中的原理仍然不明,不知大家是否有线索。
作者
Author:
sobereva    时间: 2022-12-4 15:05

作者
Author:
hebrewsnabla    时间: 2022-12-4 17:00
本帖最后由 hebrewsnabla 于 2022-12-4 17:05 编辑

MOKIT源码里面也有 https://gitlab.com/jxzou/mokit/-/blob/master/src/read_fch.f90

另外,在开源程序里面做这个比费劲研究闭源程序舒服多了。






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