GAMESS里面CI和CC部分都会用到变换后的单双电子积分,所以直接找CI部分,定位到之前用的最多的ORMAS里面(源程序为ormas1.src),在1400行左右:

C
C     -- OBTAIN 1 AND 2 E- TRANSFORMED INTEGRALS OVER ACTIVE ORBITALS --
C     CALLING ARGUMENT -CLABEL- GOVERNS WHETHER TRANSFORMED INTEGRALS
C     ON FILE -IJKT- INCLUDE THE CORE ORBITALS OR NOT.  IT IS ASSUMED
C     THAT NO CORE INTEGRALS ARE IN -IJKT-, SO THIS VARIABLE TELLS IF
C     THE ACTIVE ORBITALS START FROM 1,2,3... OR NCORSV+1,NCORSV+2,...
C
      NCORE = 0
      IF(CLABEL) NCORE=NCORSV
      CALL RDCI12(DDITRF,IJKT,X(LSINT1),X(LSINT2),NCORE,M1,M2,M4,X(LIA),
     *            X(LXX),X(LIXX),NINTMX)
 
      write(*,*)"yjma: come back, e .... "
      write(*,*)"yjma: IJKT ",IJKT
      write(*,*)"yjma: LSINT1,LSINT2 ",LSINT1," ",LSINT2
      write(*,*)"yjma: NINTMX ",NINTMX
      write(*,*)"yjma: NCORE, M1, M2, M4 ",NCORE," ",M1," ",M2," ",M4
 
      ij=0
      do i=1,M1
        do j=1,i       !  Here must be OK (orign: do j=i,M1)
          write(*,*)"INT1",X(LSINT1+ij),j,i
          ij=ij+1
        end do
      end do
 
      ij=0
      ijkl=0
      do i=1,M1
        do j=1,i
          ij=ij+1
          kl=0
          do k=1,M1
            do l=1,k
              kl=kl+1
              if(ij.ge.kl)then
                write(*,*)"INT2",X(LSINT2+ijkl),i,j,k,l
                ijkl=ijkl+1
              end if
            end do
          end do
        end do
      end do
 
      write(*,*)"yjma: ==================================="
 
 
C
C        ----- COMPUTE FULL CLASS CI WAVEFUNCTION -----
C

实际上这里是直接输出到输出文件里面,如果想要输出到文件的话让GAMESS写到文件里就可以了。此处只是输出,算是在trans.src里面算得,蛮复杂的,不用管。 这里虽然算得时候是可以按照对称性计算,但是这里读出或者存的时候还是全部的读出。 怎样简化到类似于高对称性下面FCIDUMP的格式,貌似本人还要翻一下群论才行或者看看Nwchem里面行不行吧。

双电子积分中 (i,j|k,l) (i,j|l,k) (j,i|k,l) (j,i|l,k) (k,l|i,j) (k,l|j,i) (l,k|i,j) (l,k|j,i) 均相等 http://blog.sina.com.cn/s/blog_6594d5d30100p0lg.html

*FCUDUMP格式**

      open(unit=7760,file='/home/yjma/FCIDUMP_GAMESS/FCIDUMP')
      ij=0
      ijkl=0
      do i=1,M1
        do j=1,i
          ij=ij+1
          kl=0
          do k=1,M1
            do l=1,k
              kl=kl+1
              if(ij.ge.kl)then
                if(abs(X(LSINT2+ijkl)).gt.1.0e-15)then
                  write(7760,7761)X(LSINT2+ijkl),i,j,k,l
                else
                  write(7760,7762)0.0000000000000001,i,j,k,l
                end if
                ijkl=ijkl+1
              end if
            end do
          end do
        end do
      end do
7761  format(G21.12,I4,I4,I4,I4)
 
      open(unit=7760,file='/home/yjma/FCIDUMP_GAMESS/FCIDUMP')
      ij=0
      do i=1,M1
        do j=1,i
          if(abs(X(LSINT1+ij)).gt.1.0e-15)then
            write(7760,7762)X(LSINT1+ij),i,j,0,0
          else
            write(7760,7762)0.0000000000000001,i,j,0,0
          end if
          ij=ij+1
        end do
      end do
7762  format(G21.12,I4,I4,I4,I4)

(J_Sagat)

  • int_gamess.txt
  • Last modified: 2019/09/24 00:23
  • (external edit)