我有一个使用密度拟合近似的4索引矩阵(g),它是由两个3索引矩阵(B)建立的,如下所示:
可以使用dgemm
调用轻松地计算出此值。
但是,我需要这个数量:
。
目前,如何有效地完成这项工作(最好使用BLAS / LAPACK)使我的大脑陷于困境。 矩阵g是对称的,而k不是。只是为了清楚起见,愚蠢的慢速方式是这样的(代码是fortran,是无关紧要的):
do i = 1,nact
do j = 1,nact
ij = min(i,j) + intsum(max(i,j)-1)
do k = 1,nact
ik = i + (k-1)*nact
do l = 1,nact
kl = min(k,l) + intsum(max(k,l)-1)
jl = j + (l-1)*nact
k_ikjl(ik,jl) = ddot(xnbf,matB(1,ij),1,matB(1,kl),1)
end do !l
end do !k
end do !j
end do !i
我很确定我只是拥有一个可动用的atm,但是任何帮助都将不胜感激(intsum
将所有整数加起来直到参数为止,这是用于索引的,因为矩阵B在ij和i中是对称的。仅存储为三角形)。