/src/tce/eomccsdtq/eomccsdtq_density1_5_4_7_1.F
https://github.com/nwchemgit/nwchem · FORTRAN Legacy · 217 lines · 187 code · 0 blank · 30 comment · 0 complexity · 78c6bb05b56650b59b3d4e01ad0753f9 MD5 · raw file
- SUBROUTINE eomccsdtq_density1_5_4_7_1(d_a,k_a_offset,d_b,k_b_offse
- &t,d_c,k_c_offset)
- C $Id$
- C This is a Fortran77 program generated by Tensor Contraction Engine v.1.0
- C Copyright (c) Battelle & Pacific Northwest National Laboratory (2002)
- C i3 ( h2 h5 p3 p4 )_yx + = -1 * Sum ( h8 p7 ) * x ( p7 h8 )_x * y ( h2 h5 h8 p3 p4 p7 )_y
- IMPLICIT NONE
- #include "global.fh"
- #include "mafdecls.fh"
- #include "sym.fh"
- #include "errquit.fh"
- #include "tce.fh"
- INTEGER d_a
- INTEGER k_a_offset
- INTEGER d_b
- INTEGER k_b_offset
- INTEGER d_c
- INTEGER k_c_offset
- INTEGER NXTASK
- INTEGER next
- INTEGER nprocs
- INTEGER count
- INTEGER h2b
- INTEGER h5b
- INTEGER p3b
- INTEGER p4b
- INTEGER dimc
- INTEGER l_c_sort
- INTEGER k_c_sort
- INTEGER p7b
- INTEGER h8b
- INTEGER p7b_1
- INTEGER h8b_1
- INTEGER h2b_2
- INTEGER h5b_2
- INTEGER h8b_2
- INTEGER p3b_2
- INTEGER p4b_2
- INTEGER p7b_2
- INTEGER dim_common
- INTEGER dima_sort
- INTEGER dima
- INTEGER dimb_sort
- INTEGER dimb
- INTEGER l_a_sort
- INTEGER k_a_sort
- INTEGER l_a
- INTEGER k_a
- INTEGER l_b_sort
- INTEGER k_b_sort
- INTEGER l_b
- INTEGER k_b
- INTEGER l_c
- INTEGER k_c
- EXTERNAL NXTASK
- nprocs = GA_NNODES()
- count = 0
- next = NXTASK(nprocs,1)
- DO h2b = 1,noab
- DO h5b = h2b,noab
- DO p3b = noab+1,noab+nvab
- DO p4b = p3b,noab+nvab
- IF (next.eq.count) THEN
- IF ((.not.restricted).or.(int_mb(k_spin+h2b-1)+int_mb(k_spin+h5b-1
- &)+int_mb(k_spin+p3b-1)+int_mb(k_spin+p4b-1).ne.8)) THEN
- IF (int_mb(k_spin+h2b-1)+int_mb(k_spin+h5b-1) .eq. int_mb(k_spin+p
- &3b-1)+int_mb(k_spin+p4b-1)) THEN
- IF (ieor(int_mb(k_sym+h2b-1),ieor(int_mb(k_sym+h5b-1),ieor(int_mb(
- &k_sym+p3b-1),int_mb(k_sym+p4b-1)))) .eq. ieor(irrep_y,irrep_x)) TH
- &EN
- dimc = int_mb(k_range+h2b-1) * int_mb(k_range+h5b-1) * int_mb(k_ra
- &nge+p3b-1) * int_mb(k_range+p4b-1)
- IF (.not.MA_PUSH_GET(mt_dbl,dimc,'noname',l_c_sort,k_c_sort)) CALL
- & ERRQUIT('eomccsdtq_density1_5_4_7_1',0,MA_ERR)
- CALL DFILL(dimc,0.0d0,dbl_mb(k_c_sort),1)
- DO p7b = noab+1,noab+nvab
- DO h8b = 1,noab
- IF (int_mb(k_spin+p7b-1) .eq. int_mb(k_spin+h8b-1)) THEN
- IF (ieor(int_mb(k_sym+p7b-1),int_mb(k_sym+h8b-1)) .eq. irrep_x) TH
- &EN
- CALL TCE_RESTRICTED_2(p7b,h8b,p7b_1,h8b_1)
- CALL TCE_RESTRICTED_6(h2b,h5b,h8b,p3b,p4b,p7b,h2b_2,h5b_2,h8b_2,p3
- &b_2,p4b_2,p7b_2)
- dim_common = int_mb(k_range+p7b-1) * int_mb(k_range+h8b-1)
- dima_sort = 1
- dima = dim_common * dima_sort
- dimb_sort = int_mb(k_range+h2b-1) * int_mb(k_range+h5b-1) * int_mb
- &(k_range+p3b-1) * int_mb(k_range+p4b-1)
- dimb = dim_common * dimb_sort
- IF ((dima .gt. 0) .and. (dimb .gt. 0)) THEN
- IF (.not.MA_PUSH_GET(mt_dbl,dima,'noname',l_a_sort,k_a_sort)) CALL
- & ERRQUIT('eomccsdtq_density1_5_4_7_1',1,MA_ERR)
- IF (.not.MA_PUSH_GET(mt_dbl,dima,'noname',l_a,k_a)) CALL ERRQUIT('
- &eomccsdtq_density1_5_4_7_1',2,MA_ERR)
- CALL GET_HASH_BLOCK(d_a,dbl_mb(k_a),dima,int_mb(k_a_offset),(h8b_1
- & - 1 + noab * (p7b_1 - noab - 1)))
- CALL TCE_SORT_2(dbl_mb(k_a),dbl_mb(k_a_sort),int_mb(k_range+p7b-1)
- &,int_mb(k_range+h8b-1),2,1,1.0d0)
- IF (.not.MA_POP_STACK(l_a)) CALL ERRQUIT('eomccsdtq_density1_5_4_7
- &_1',3,MA_ERR)
- IF (.not.MA_PUSH_GET(mt_dbl,dimb,'noname',l_b_sort,k_b_sort)) CALL
- & ERRQUIT('eomccsdtq_density1_5_4_7_1',4,MA_ERR)
- IF (.not.MA_PUSH_GET(mt_dbl,dimb,'noname',l_b,k_b)) CALL ERRQUIT('
- &eomccsdtq_density1_5_4_7_1',5,MA_ERR)
- IF ((h8b .lt. h2b) .and. (p7b .lt. p3b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
- & - noab - 1 + nvab * (p3b_2 - noab - 1 + nvab * (p7b_2 - noab - 1
- &+ nvab * (h5b_2 - 1 + noab * (h2b_2 - 1 + noab * (h8b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h8b-1)
- &,int_mb(k_range+h2b-1),int_mb(k_range+h5b-1),int_mb(k_range+p7b-1)
- &,int_mb(k_range+p3b-1),int_mb(k_range+p4b-1),6,5,3,2,1,4,1.0d0)
- END IF
- IF ((h8b .lt. h2b) .and. (p3b .le. p7b) .and. (p7b .lt. p4b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
- & - noab - 1 + nvab * (p7b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
- &+ nvab * (h5b_2 - 1 + noab * (h2b_2 - 1 + noab * (h8b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h8b-1)
- &,int_mb(k_range+h2b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
- &,int_mb(k_range+p7b-1),int_mb(k_range+p4b-1),6,4,3,2,1,5,-1.0d0)
- END IF
- IF ((h8b .lt. h2b) .and. (p4b .le. p7b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p7b_2
- & - noab - 1 + nvab * (p4b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
- &+ nvab * (h5b_2 - 1 + noab * (h2b_2 - 1 + noab * (h8b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h8b-1)
- &,int_mb(k_range+h2b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
- &,int_mb(k_range+p4b-1),int_mb(k_range+p7b-1),5,4,3,2,1,6,1.0d0)
- END IF
- IF ((h2b .le. h8b) .and. (h8b .lt. h5b) .and. (p7b .lt. p3b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
- & - noab - 1 + nvab * (p3b_2 - noab - 1 + nvab * (p7b_2 - noab - 1
- &+ nvab * (h5b_2 - 1 + noab * (h8b_2 - 1 + noab * (h2b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
- &,int_mb(k_range+h8b-1),int_mb(k_range+h5b-1),int_mb(k_range+p7b-1)
- &,int_mb(k_range+p3b-1),int_mb(k_range+p4b-1),6,5,3,1,2,4,-1.0d0)
- END IF
- IF ((h2b .le. h8b) .and. (h8b .lt. h5b) .and. (p3b .le. p7b) .and.
- & (p7b .lt. p4b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
- & - noab - 1 + nvab * (p7b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
- &+ nvab * (h5b_2 - 1 + noab * (h8b_2 - 1 + noab * (h2b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
- &,int_mb(k_range+h8b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
- &,int_mb(k_range+p7b-1),int_mb(k_range+p4b-1),6,4,3,1,2,5,1.0d0)
- END IF
- IF ((h2b .le. h8b) .and. (h8b .lt. h5b) .and. (p4b .le. p7b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p7b_2
- & - noab - 1 + nvab * (p4b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
- &+ nvab * (h5b_2 - 1 + noab * (h8b_2 - 1 + noab * (h2b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
- &,int_mb(k_range+h8b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
- &,int_mb(k_range+p4b-1),int_mb(k_range+p7b-1),5,4,3,1,2,6,-1.0d0)
- END IF
- IF ((h5b .le. h8b) .and. (p7b .lt. p3b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
- & - noab - 1 + nvab * (p3b_2 - noab - 1 + nvab * (p7b_2 - noab - 1
- &+ nvab * (h8b_2 - 1 + noab * (h5b_2 - 1 + noab * (h2b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h8b-1),int_mb(k_range+p7b-1)
- &,int_mb(k_range+p3b-1),int_mb(k_range+p4b-1),6,5,2,1,3,4,1.0d0)
- END IF
- IF ((h5b .le. h8b) .and. (p3b .le. p7b) .and. (p7b .lt. p4b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
- & - noab - 1 + nvab * (p7b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
- &+ nvab * (h8b_2 - 1 + noab * (h5b_2 - 1 + noab * (h2b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h8b-1),int_mb(k_range+p3b-1)
- &,int_mb(k_range+p7b-1),int_mb(k_range+p4b-1),6,4,2,1,3,5,-1.0d0)
- END IF
- IF ((h5b .le. h8b) .and. (p4b .le. p7b)) THEN
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p7b_2
- & - noab - 1 + nvab * (p4b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
- &+ nvab * (h8b_2 - 1 + noab * (h5b_2 - 1 + noab * (h2b_2 - 1)))))))
- CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h8b-1),int_mb(k_range+p3b-1)
- &,int_mb(k_range+p4b-1),int_mb(k_range+p7b-1),5,4,2,1,3,6,1.0d0)
- END IF
- IF (.not.MA_POP_STACK(l_b)) CALL ERRQUIT('eomccsdtq_density1_5_4_7
- &_1',6,MA_ERR)
- CALL DGEMM('T','N',dima_sort,dimb_sort,dim_common,1.0d0,dbl_mb(k_a
- &_sort),dim_common,dbl_mb(k_b_sort),dim_common,1.0d0,dbl_mb(k_c_sor
- &t),dima_sort)
- IF (.not.MA_POP_STACK(l_b_sort)) CALL ERRQUIT('eomccsdtq_density1_
- &5_4_7_1',7,MA_ERR)
- IF (.not.MA_POP_STACK(l_a_sort)) CALL ERRQUIT('eomccsdtq_density1_
- &5_4_7_1',8,MA_ERR)
- END IF
- END IF
- END IF
- END DO
- END DO
- IF (.not.MA_PUSH_GET(mt_dbl,dimc,'noname',l_c,k_c)) CALL ERRQUIT('
- &eomccsdtq_density1_5_4_7_1',9,MA_ERR)
- CALL TCE_SORT_4(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p4b-1)
- &,int_mb(k_range+p3b-1),int_mb(k_range+h5b-1),int_mb(k_range+h2b-1)
- &,4,3,2,1,-1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p4b -
- & noab - 1 + nvab * (p3b - noab - 1 + nvab * (h5b - 1 + noab * (h2b
- & - 1)))))
- IF (.not.MA_POP_STACK(l_c)) CALL ERRQUIT('eomccsdtq_density1_5_4_7
- &_1',10,MA_ERR)
- IF (.not.MA_POP_STACK(l_c_sort)) CALL ERRQUIT('eomccsdtq_density1_
- &5_4_7_1',11,MA_ERR)
- END IF
- END IF
- END IF
- next = NXTASK(nprocs,1)
- END IF
- count = count + 1
- END DO
- END DO
- END DO
- END DO
- next = NXTASK(-nprocs,1)
- call GA_SYNC()
- RETURN
- END