/src/tce/ccsdtq_lambda/ccsdtq_lambda3_2.F
https://github.com/nwchemgit/nwchem · FORTRAN Legacy · 218 lines · 185 code · 0 blank · 33 comment · 0 complexity · 3cbfe74fb7be44eff98f57afd062ae87 MD5 · raw file
- SUBROUTINE ccsdtq_lambda3_2(d_a,k_a_offset,d_b,k_b_offset,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 i0 ( h4 h5 h6 p1 p2 p3 )_yf + = 1 * P( 9 ) * y ( h4 h5 p1 p2 )_y * i1 ( h6 p3 )_f
- 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 h4b
- INTEGER h5b
- INTEGER h6b
- INTEGER p1b
- INTEGER p2b
- INTEGER p3b
- INTEGER dimc
- INTEGER l_c_sort
- INTEGER k_c_sort
- INTEGER h4b_1
- INTEGER h5b_1
- INTEGER p1b_1
- INTEGER p2b_1
- INTEGER h6b_2
- INTEGER p3b_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 h4b = 1,noab
- DO h5b = h4b,noab
- DO h6b = 1,noab
- DO p1b = noab+1,noab+nvab
- DO p2b = p1b,noab+nvab
- DO p3b = noab+1,noab+nvab
- IF (next.eq.count) THEN
- IF ((.not.restricted).or.(int_mb(k_spin+h4b-1)+int_mb(k_spin+h5b-1
- &)+int_mb(k_spin+h6b-1)+int_mb(k_spin+p1b-1)+int_mb(k_spin+p2b-1)+i
- &nt_mb(k_spin+p3b-1).ne.12)) THEN
- IF (int_mb(k_spin+h4b-1)+int_mb(k_spin+h5b-1)+int_mb(k_spin+h6b-1)
- & .eq. int_mb(k_spin+p1b-1)+int_mb(k_spin+p2b-1)+int_mb(k_spin+p3b-
- &1)) THEN
- IF (ieor(int_mb(k_sym+h4b-1),ieor(int_mb(k_sym+h5b-1),ieor(int_mb(
- &k_sym+h6b-1),ieor(int_mb(k_sym+p1b-1),ieor(int_mb(k_sym+p2b-1),int
- &_mb(k_sym+p3b-1)))))) .eq. ieor(irrep_y,irrep_f)) THEN
- dimc = int_mb(k_range+h4b-1) * int_mb(k_range+h5b-1) * int_mb(k_ra
- &nge+h6b-1) * int_mb(k_range+p1b-1) * int_mb(k_range+p2b-1) * int_m
- &b(k_range+p3b-1)
- IF (.not.MA_PUSH_GET(mt_dbl,dimc,'noname',l_c_sort,k_c_sort)) CALL
- & ERRQUIT('ccsdtq_lambda3_2',0,MA_ERR)
- CALL DFILL(dimc,0.0d0,dbl_mb(k_c_sort),1)
- IF (int_mb(k_spin+h4b-1)+int_mb(k_spin+h5b-1) .eq. int_mb(k_spin+p
- &1b-1)+int_mb(k_spin+p2b-1)) THEN
- IF (ieor(int_mb(k_sym+h4b-1),ieor(int_mb(k_sym+h5b-1),ieor(int_mb(
- &k_sym+p1b-1),int_mb(k_sym+p2b-1)))) .eq. irrep_y) THEN
- CALL TCE_RESTRICTED_4(h4b,h5b,p1b,p2b,h4b_1,h5b_1,p1b_1,p2b_1)
- CALL TCE_RESTRICTED_2(h6b,p3b,h6b_2,p3b_2)
- dim_common = 1
- dima_sort = int_mb(k_range+h4b-1) * int_mb(k_range+h5b-1) * int_mb
- &(k_range+p1b-1) * int_mb(k_range+p2b-1)
- dima = dim_common * dima_sort
- dimb_sort = int_mb(k_range+h6b-1) * int_mb(k_range+p3b-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('ccsdtq_lambda3_2',1,MA_ERR)
- IF (.not.MA_PUSH_GET(mt_dbl,dima,'noname',l_a,k_a)) CALL ERRQUIT('
- &ccsdtq_lambda3_2',2,MA_ERR)
- CALL GET_HASH_BLOCK(d_a,dbl_mb(k_a),dima,int_mb(k_a_offset),(p2b_1
- & - noab - 1 + nvab * (p1b_1 - noab - 1 + nvab * (h5b_1 - 1 + noab
- &* (h4b_1 - 1)))))
- CALL TCE_SORT_4(dbl_mb(k_a),dbl_mb(k_a_sort),int_mb(k_range+h4b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+p1b-1),int_mb(k_range+p2b-1)
- &,4,3,2,1,1.0d0)
- IF (.not.MA_POP_STACK(l_a)) CALL ERRQUIT('ccsdtq_lambda3_2',3,MA_E
- &RR)
- IF (.not.MA_PUSH_GET(mt_dbl,dimb,'noname',l_b_sort,k_b_sort)) CALL
- & ERRQUIT('ccsdtq_lambda3_2',4,MA_ERR)
- IF (.not.MA_PUSH_GET(mt_dbl,dimb,'noname',l_b,k_b)) CALL ERRQUIT('
- &ccsdtq_lambda3_2',5,MA_ERR)
- CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p3b_2
- & - noab - 1 + nvab * (h6b_2 - 1)))
- CALL TCE_SORT_2(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h6b-1)
- &,int_mb(k_range+p3b-1),2,1,1.0d0)
- IF (.not.MA_POP_STACK(l_b)) CALL ERRQUIT('ccsdtq_lambda3_2',6,MA_E
- &RR)
- 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('ccsdtq_lambda3_2',7
- &,MA_ERR)
- IF (.not.MA_POP_STACK(l_a_sort)) CALL ERRQUIT('ccsdtq_lambda3_2',8
- &,MA_ERR)
- END IF
- END IF
- END IF
- IF (.not.MA_PUSH_GET(mt_dbl,dimc,'noname',l_c,k_c)) CALL ERRQUIT('
- &ccsdtq_lambda3_2',9,MA_ERR)
- IF ((h5b .le. h6b) .and. (p2b .le. p3b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),6,5,2,4,3,1,1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p3b -
- & noab - 1 + nvab * (p2b - noab - 1 + nvab * (p1b - noab - 1 + nvab
- & * (h6b - 1 + noab * (h5b - 1 + noab * (h4b - 1)))))))
- END IF
- IF ((h5b .le. h6b) .and. (p3b .le. p1b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),6,5,2,1,4,3,1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p2b -
- & noab - 1 + nvab * (p1b - noab - 1 + nvab * (p3b - noab - 1 + nvab
- & * (h6b - 1 + noab * (h5b - 1 + noab * (h4b - 1)))))))
- END IF
- IF ((h5b .le. h6b) .and. (p1b .le. p3b) .and. (p3b .le. p2b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),6,5,2,4,1,3,-1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p2b -
- & noab - 1 + nvab * (p3b - noab - 1 + nvab * (p1b - noab - 1 + nvab
- & * (h6b - 1 + noab * (h5b - 1 + noab * (h4b - 1)))))))
- END IF
- IF ((h6b .le. h4b) .and. (p2b .le. p3b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),2,6,5,4,3,1,1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p3b -
- & noab - 1 + nvab * (p2b - noab - 1 + nvab * (p1b - noab - 1 + nvab
- & * (h5b - 1 + noab * (h4b - 1 + noab * (h6b - 1)))))))
- END IF
- IF ((h6b .le. h4b) .and. (p3b .le. p1b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),2,6,5,1,4,3,1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p2b -
- & noab - 1 + nvab * (p1b - noab - 1 + nvab * (p3b - noab - 1 + nvab
- & * (h5b - 1 + noab * (h4b - 1 + noab * (h6b - 1)))))))
- END IF
- IF ((h6b .le. h4b) .and. (p1b .le. p3b) .and. (p3b .le. p2b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),2,6,5,4,1,3,-1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p2b -
- & noab - 1 + nvab * (p3b - noab - 1 + nvab * (p1b - noab - 1 + nvab
- & * (h5b - 1 + noab * (h4b - 1 + noab * (h6b - 1)))))))
- END IF
- IF ((h4b .le. h6b) .and. (h6b .le. h5b) .and. (p2b .le. p3b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),6,2,5,4,3,1,-1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p3b -
- & noab - 1 + nvab * (p2b - noab - 1 + nvab * (p1b - noab - 1 + nvab
- & * (h5b - 1 + noab * (h6b - 1 + noab * (h4b - 1)))))))
- END IF
- IF ((h4b .le. h6b) .and. (h6b .le. h5b) .and. (p3b .le. p1b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),6,2,5,1,4,3,-1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p2b -
- & noab - 1 + nvab * (p1b - noab - 1 + nvab * (p3b - noab - 1 + nvab
- & * (h5b - 1 + noab * (h6b - 1 + noab * (h4b - 1)))))))
- END IF
- IF ((h4b .le. h6b) .and. (h6b .le. h5b) .and. (p1b .le. p3b) .and.
- & (p3b .le. p2b)) THEN
- CALL TCE_SORT_6(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p3b-1)
- &,int_mb(k_range+h6b-1),int_mb(k_range+p2b-1),int_mb(k_range+p1b-1)
- &,int_mb(k_range+h5b-1),int_mb(k_range+h4b-1),6,2,5,4,1,3,1.0d0)
- CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p2b -
- & noab - 1 + nvab * (p3b - noab - 1 + nvab * (p1b - noab - 1 + nvab
- & * (h5b - 1 + noab * (h6b - 1 + noab * (h4b - 1)))))))
- END IF
- IF (.not.MA_POP_STACK(l_c)) CALL ERRQUIT('ccsdtq_lambda3_2',10,MA_
- &ERR)
- IF (.not.MA_POP_STACK(l_c_sort)) CALL ERRQUIT('ccsdtq_lambda3_2',1
- &1,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
- END DO
- END DO
- next = NXTASK(-nprocs,1)
- call GA_SYNC()
- RETURN
- END