计算化学公社

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

[算法与编程] Crawdad 双电子积分维数转换问题

[复制链接 Copy URL]

93

帖子

0

威望

415

eV
积分
508

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
#
我想把存为一维数组的双电子积分转成四维矩阵。(一维存储双电子积分:http://sirius.chem.vt.edu/~crawd ... 3/h2o_sto3g/eri.dat

根据下面链接里step #3提到的方法
http://sirius.chem.vt.edu/wiki/d ... rogramming:project3

我用下面的代码输出双电子积分的index,但是却与http://sirius.chem.vt.edu/~crawd ... 3/h2o_sto3g/eri.dat 差很多。请问哪里有问题?谢谢。

#include<iostream>
using namespace std;
int main() {

   int i,j,k,l,ij,kl,ijkl;
   for(i=0; i<7; i++){
     for(j=0; j<=i; j++){
       ij=i*(i+1)/2+j;
       for(k=0; k<7; k++){
          for(l=0; l<=k;l++){
             kl=k*(k+1)/2+l;
             if(ij>=kl)
             {
             ijkl=ij*(ij+1)/2+kl;
             cout<<ijkl<<" "<<i+1<<" "<<j+1<<" "<<k+1<<" "<<l+1;
             }
             cout<<endl;
     }
   }
  }
}

return 0;
}


310

帖子

3

威望

6410

eV
积分
6780

Level 6 (一方通行)

3#
发表于 Post on 2018-12-4 14:45:51 | 只看该作者 Only view this author
双电子积分实际上是一个shell一个shell算,然后每个shell包含不同的bas
欢迎使用量子化学软件Amesp

310

帖子

3

威望

6410

eV
积分
6780

Level 6 (一方通行)

2#
发表于 Post on 2018-12-4 14:44:18 | 只看该作者 Only view this author
    ii = 0
    do ipsh = 1,ShlPar
        ish = Pos_par(1,ipsh)
        jsh = Pos_par(2,ipsh)
        kbas(1) = PosShl(ish)
        kbas(2) = PosShl(jsh)
        mbas(1) = shl_num(ish)
        mbas(2) = shl_num(jsh)
      
        do jpsh = 1,ShlPar
            ksh = Pos_par(1,jpsh)
            lsh = Pos_par(2,jpsh)
            kbas(3) = PosShl(ksh)
            kbas(4) = PosShl(lsh)
            mbas(3) = shl_num(ksh)
            mbas(4) = shl_num(lsh)
               
            if(IJud1(ipsh) < IJud2(jpsh) ) cycle      
            if( TE(ipsh)*TE(jpsh) < intthre ) cycle

            do i = 1,mbas(1)
               i1 = kbas(1)+i-1
               do j = 1,mbas(2)
                  j1 = kbas(2)+j-1
                  do k = 1,mbas(3)
                     k1 = kbas(3)+k-1
                     do l = 1,mbas(4)
                        l1 = kbas(4)+l-1
                           
                        if( i1 < j1 ) cycle
                        if( k1 < l1 ) cycle
                        if( i1*(i1-1)+2*j1 < k1*(k1-1)+2*l1 ) cycle
                        ii = ii + 1
                        Temp1 = Two_Ele(ii)
                        
                        g_Mo(EI(i1,j1),EI(k1,l1)) = Temp1
                        g_Mo(EI(k1,l1),EI(i1,j1)) = Temp1

                     end do
                  end do
               end do
            end do
               
       end do
    end do
欢迎使用量子化学软件Amesp

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

GMT+8, 2026-2-24 11:40 , Processed in 0.154322 second(s), 21 queries , Gzip On.

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