计算化学公社

 找回密码 Forget password
 注册 Register
Views: 4470|回复 Reply: 10
打印 Print 上一主题 Last thread 下一主题 Next thread

[算法与编程] 求助,关于加速SCF计算

[复制链接 Copy URL]

30

帖子

0

威望

667

eV
积分
697

Level 4 (黑子)

目前我实现了通过direct-SCF计算单点能,并通过CDIIS+EDIIS来加速收敛。对于很小的分子如水,甲烷和氨气都可以得到和现有的程序效率相当(psi4,pyscf),但是随着体系增大和原子数目变多,速度会变得很慢,迭代的次数基本一样。以下列出我的程序和psi4计算正烷烃的结果,蓝线为我的结果,橙线为psi4的结果。可以看出我的结果基本为O(N^2)的标度,而psi4基本为线性,pyscf测试结果基本一样。

psi4等成熟的计算软件一般都采用了一些加速方法。比如direct SCF提出时库伦矩阵和交换矩阵是同时计算的,但现在方法其为分开计算的,J可以通过density fitting和FMM线性标度计算,而K矩阵也有计算方法。density fitting在测试过程中并不会使得计算时间有几倍的差距,所以我认为是FMM加速了计算,但是FMM实现十分复杂,我怕我理解错了。所以我想弄明白是哪种方法使得计算如此快,除了FMM还有其他方法吗,FMM是否十分重要。

202203262320547985..png (14.29 KB, 下载次数 Times of downloads: 53)

202203262320547985..png

1万

帖子

0

威望

9868

eV
积分
22108

Level 6 (一方通行)

2#
发表于 Post on 2022-3-26 23:40:37 | 只看该作者 Only view this author
FMM和传统方法的crossover没有这么早,大概在60个原子左右,对于一维体系可能早一些,但也不会在乙烷就crossover。所以我觉得psi4、pyscf的线性标度可能其实是常数时间overhead+O(N^2)标度的结果,不是真线性标度。
你做Schwarz prescreening了吗?另外积分库是调用的现成的库还是自己写的积分代码?分子增大以后高角动量积分,比如(dd|dd)占总积分的比例会增加,如果高角动量积分算得不够快,可能就会出现你看到的这种现象。
Zikuan Wang
山东大学光学高等研究中心 研究员
BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员
Google Scholar: https://scholar.google.com/citations?user=XW6C6eQAAAAJ
ORCID: https://orcid.org/0000-0002-4540-8734
主页:http://www.qitcs.qd.sdu.edu.cn/info/1133/1776.htm
GitHub:https://github.com/wzkchem5
本团队长期招收研究生,有意者可私信联系

4289

帖子

4

威望

9543

eV
积分
13912

Level 6 (一方通行)

MOKIT开发者

3#
发表于 Post on 2022-3-26 23:41:22 | 只看该作者 Only view this author
本帖最后由 zjxitcc 于 2022-3-26 23:42 编辑

施瓦兹不等式筛选积分、incremental Fock等技术考虑了没?这些程序里是否有开启?你的程序或其他程序用了点群对称性加速么?关了没?
自动做多参考态计算的程序MOKIT

30

帖子

0

威望

667

eV
积分
697

Level 4 (黑子)

4#
 楼主 Author| 发表于 Post on 2022-3-26 23:43:53 | 只看该作者 Only view this author
用了施瓦兹不等式,积分库用的是libcint,其他程序的对称性都关了。

30

帖子

0

威望

667

eV
积分
697

Level 4 (黑子)

5#
 楼主 Author| 发表于 Post on 2022-3-26 23:44:41 | 只看该作者 Only view this author
zjxitcc 发表于 2022-3-26 23:41
施瓦兹不等式筛选积分、incremental Fock等技术考虑了没?这些程序里是否有开启?你的程序或其他程序用了点 ...

麻烦问一下,什么是incremental Fock

30

帖子

0

威望

667

eV
积分
697

Level 4 (黑子)

6#
 楼主 Author| 发表于 Post on 2022-3-26 23:46:59 | 只看该作者 Only view this author
如果是用密度矩阵的差值更新Fock矩阵做了。

30

帖子

0

威望

667

eV
积分
697

Level 4 (黑子)

7#
 楼主 Author| 发表于 Post on 2022-3-27 00:05:11 | 只看该作者 Only view this author
我猜还可能是用了半direct方法,存储了部分的双电子积分,但我不知道这时是如何存的,如果用数组存储,在用的时候如何快速查找以及存储的标准是什么,各位大佬可以麻烦解答一下吗。

92

帖子

0

威望

2260

eV
积分
2352

Level 5 (御坂)

8#
发表于 Post on 2022-3-27 05:07:29 | 只看该作者 Only view this author
密度拟合你在测pyscf的时候没主动开,就是没开,scf也都是direct的。还是多从screening的技巧上去提速吧

370

帖子

7

威望

3497

eV
积分
4007

Level 6 (一方通行)

9#
发表于 Post on 2022-3-27 12:47:27 | 只看该作者 Only view this author
zha23 发表于 2022-3-26 23:44
麻烦问一下,什么是incremental Fock

如果不用incremental fock,那么每一次迭代都要完整地算一遍电子积分,完整地构建fock矩阵。incremental fock好像是用近似的办法,从前一步的fock矩阵推出后一步的fock矩阵,可以帮direct-scf省很多时间。如果用orca做direct-scf的话,能从输出文件中看到哪些步是incremental fock来的,哪些步是完整地构建fock矩阵来的。

928

帖子

1

威望

8262

eV
积分
9210

Level 6 (一方通行)

10#
发表于 Post on 2022-3-27 14:29:02 | 只看该作者 Only view this author
AO积分的8-fold对称性考虑了吗?既然你是用libcint做积分,这一块可以参考pyscf/lib/vhf/nr_direct.c

如8楼所说,pyscf默认不开密度拟合。不过体系过小的时候scf是incore的。

prescreening可以参考pyscf/lib/vhf/optimizer.c

据我所知pyscf应该没有FMM。

有没有检查决速步是哪一步?电子积分以外的步骤(如张量运算)不能太慢。

30

帖子

0

威望

667

eV
积分
697

Level 4 (黑子)

11#
 楼主 Author| 发表于 Post on 2022-3-27 20:39:31 | 只看该作者 Only view this author
多谢各位,问题找到了,是screening时我是每次计算积分前都要在差值密度矩阵中寻找一对shell的最大值,这样就要慢很多,我看了pyscf的代码他是提前将这一部分算好的,这样可以节省很多时间。

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-22 02:42 , Processed in 0.193281 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list