计算化学公社

标题: 双电子积分unique quartet筛选方法有误? [打印本页]

作者
Author:
Freeman    时间: 2023-6-18 13:37
标题: 双电子积分unique quartet筛选方法有误?
双电子积分因为有八重对换对称性(ab|cd)=(ab|dc)=......,不需要全部算完,只要算n*(n+1)*(n*(n+1)/2+1)/4≈n^4/8个unique quartets即可。筛选这些unique quartets一般使用这种算法:
  1. for A=1,nshells # 遍历所有unique shell quartets
  2. for B=1,A
  3.   for C=1,A
  4.    for D=1,(A==C?B:C) # 三目运算符,指当A=C时,D最大取值为B,否则为C
  5.     compute all unique quartets in (AB|CD) # 计算(AB|CD)里的所有unique basis function quartets
  6.    end for
  7.   end for
  8. end for
  9. end for
复制代码
我发现这样的算法可能有问题,因为有的basis function quartets本身是unique的,但是却隐藏在非unique的shell quartets里面,于是被以上算法遗漏。
举个例子来说,假如我的基组里有一个S壳层(壳层编号0,内含基函数编号0)和一个P壳层(壳层编号1,内含基函数编号1、2、3),如果按照上述算法筛选unique basis function quartets,就会遗漏四个。这四个是(20|11)、(30|11)、(30|21)、(30|22),满足b<=a, c<=a, d<=(a==c?b:c)的unique basis function条件,但是它们所属的(10|11)却不满足B<=A, C<=A, D<=(A==C?B:C)的unique shell条件。另外,按照第一段的公式计算可得unique basis function总数为55,但上述算法只能筛出51个,正好缺了这四个unique basis function quartet。
细思极恐之处在于,我在很多文献、书籍、代码里都看到了上述算法,说明这个有遗漏unique quartet嫌疑的算法可能正广泛应用于各个计算化学软件。难道这些软件的结果都有问题吗?

几个使用可疑算法之处:
1. Dupuis, M. and King, H.F. (1977), Molecular symmetry and closed-shell SCF calculations. I. Int. J. Quantum Chem., 11: 613-625. https://doi.org/10.1002/qua.560110408  公式62的L的上限为min(B,C)而非上述可疑算法的(A==C?B:C),但筛出的个数也不对。
2. 《Parallel Computing in Quantum Chemistry》Figure 7.1
3. Libint2的示例libint/tests/hartree-fock/hartree-fock.cc的compute_2body_fock函数

附上我写的计算unique quartet个数的脚本,能给出(1)公式n*(n+1)*(n*(n+1)/2+1)/4算出的、(2)上述可疑算法数出来的和(3)我自己想到的大概正确的算法数出来的个数。
(, 下载次数 Times of downloads: 4)



作者
Author:
wzkchem5    时间: 2023-6-18 13:55
我觉得不至于说大家的代码实现都是错的,因为如果真的遗漏了你说的这些积分,会导致破坏旋转对称性,只要算一个高对称性的分子发现对称性破缺了就发现了。但是个别文献公式/伪代码写错了的可能性还是有的




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