计算化学程序的实现:一些问题

本文探讨计算化学程序在存储、矩阵元计算效率及对角化过程中的问题。存储问题涉及电子组态的庞大数量;矩阵元计算涉及到复杂的算法和优化,如使用64位整数减少循环次数;对角化过程中,大型哈密顿矩阵采用迭代方法如Davidson算法,同时讨论了现用现算与预存矩阵元的权衡。优化策略包括并行计算和内存管理利用Intel TBB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储问题

电子在轨道中的排布实际上就是一个排列组合问题,每种排布方式称为一个“组态”(configuration),排布时需要考虑电子是不可区分的而轨道是可区分的。事实上,“轨道”(orbital)这个概念在量子力学中并不是准确的,这与天文学中的“轨道”(orbit)不同。电子并不会在一个特定的圆周上运动,而是在从原子核表面到无穷远处的整个空间内都可能存在,只不过不同位置的分布概率有差异。所以为了精确描述电子的分布,应该使用无穷多个轨道,包含从原子核表面到空间无穷远处的整个空间。这种情况称为“基组极限”,显然实际上不可能做到。更多的轨道会使计算更加精确,但是也会使电子组态数目更大。假设我们有这样一个体系,该体系由 40 个轨道、20 个 alpha 电子和 20 个 beta 电子组成(这样总自旋为 0,因为 alpha 电子与 beta 电子的数目相等),因为总的组态空间等于 alpha 空间与 beta 空间的直积,若不考虑对称性等额外因素,则总的组态数目为

C2040C2040

这个数字大约等于 1.9E22。那么这些组态构成的哈密顿矩阵元的数目等于组态数目的平方,即 3.6E44 项。假设每一个矩阵元都用 64 位双精度浮点数来保存,那么此哈密顿矩阵需要 2.6E33 TB 的内存空间。即使考虑到哈密顿矩阵是实对称矩阵,保存时只保留上三角部分或下三角部分,那也无非是将占用空间减小一半。即使再使用点群对称性进一步简化,也不会改变这个矩阵不可能用目前世界上任何设备保存下来的事实,并且并不是任何体系都能使用点群对称性。实际上 40 个轨道只是很常见的体系的大小,并且这样大小的计算是不够精确的。实际计算中,我们可能会遇到几百个轨道的情况。这时候保存哈密顿矩阵显然不可能。一般的计算程序在处理这个问题的时候都采用所谓“direct”的方式,即需要用到某个矩阵元的时候才去计算此矩阵元的数值。这就引出了下一个问题:矩阵元的计算效率。

矩阵元的计算效率

从之前两篇文章(http://blog.youkuaiyun.com/luozhen07/article/details/78701311http://blog.youkuaiyun.com/luozhen07/article/details/78703872)的推导和代码中,我们可以看到行列式哈密顿矩阵元的计算主要涉及激发次数计算、激发模式(即电子产生和湮灭的位置)寻找、相位符号的计算以及单双电子积分的读取。参考文章 http://blog.youkuaiyun.com/luozhen07/article/details/78703872 中的 CI::H_ij(det_i,det_j,integrals,norb) 函数,这个函数大致的复杂度为 O(n^2),其中 n 为行列式中的电子数。对于多组态波函数的哈密顿矩阵元,还需要对左矢和右矢波函数中的所有行列式都做遍历,故函数 H_ij(set_i,set_j,integral

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值