计算化学公社

标题: HF的双电子积分如何存储 [打印本页]

作者
Author:
Freeman    时间: 2021-8-7 00:47
标题: HF的双电子积分如何存储
请问现在主流的计算化学软件的HF所用的原子轨道间的双电子积分是怎么存储的?
最近在研究libint自带的HF的示例文件(libint2.x.0/tests/hartree-fock/hartree-fock.cc 第195行),发现它似乎并不存储双电子积分,而是每一轮迭代时都重新计算一遍。这样就很浪费计算资源。但是另一方面,双电子积分的个数相当于基组大小^4/8,可能需要很大的空间才能存储。不知道主流计算化学软件是怎么处理这个矛盾的。


作者
Author:
wzkchem5    时间: 2021-8-7 00:55
一般来说,一个程序只有对于小分子才把双电子积分存储到硬盘(称为conventional mode;当内存放得下的时候,也可以放在内存里),对于足够大的分子会每次迭代都把积分算一遍(称为direct mode)。因为近年来CPU计算速度比I/O速度增长得快(尤其考虑并行计算更是如此),所以有的时候即使硬盘能存得下所有积分,程序也选择direct mode。
libint也可以只算一次然后存下来,只是那个示例文件演示的是direct mode而已
作者
Author:
wangxubo    时间: 2021-8-7 02:06
正因为你说的可能需要很大空间才能储存,所以一般不储存,一般做integral direct的hartree fock。储存下来也有可能因为要硬盘读写,所以甚至导致算起来更慢(以前的时候)。
作者
Author:
hebrewsnabla    时间: 2021-8-7 10:14
并不会浪费计算资源,因为算电子积分(direct)比硬盘读写电子积分快。当然最快的方式还是算一遍全放内存里(incore),但是内存通常比硬盘小得多,只有比较小的分子才能这样。
作者
Author:
sobereva    时间: 2021-8-8 01:18
传统认为conventional积分全存硬盘里的方式不如direct,因为不仅很占硬盘,而且硬盘的I/O速度会拖垮计算速度。但如今PCI-E 4.0的SSD已经能到7000 MB/s了,说不定日后conventional方式会重新被重视起来。
也有semidirect,把贵的积分(高角动量积分)存内存或硬盘里,而低角动量的积分每次用到时现算,ORCA支持。不过由于此时不支持并行,所以也没什么用。
把积分都存内存的incore方式也不一定比direct快,一方面incore时没法结合密度矩阵做积分屏蔽,另一方面Gaussian里用incore时并行效率极低,实际中往往还不如direct快,当内存大而体系小的时候还得刻意写scf=noincore关掉

作者
Author:
喵星大佬    时间: 2021-8-8 04:52
sobereva 发表于 2021-8-8 01:18
传统认为conventional积分全存硬盘里的方式不如direct,因为不仅很占硬盘,而且硬盘的I/O速度会拖垮计算速 ...

incore是都存在内存不是硬盘啊
作者
Author:
sobereva    时间: 2021-8-9 18:30
喵星大佬 发表于 2021-8-8 04:52
incore是都存在内存不是硬盘啊

笔误




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