/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

  1. SUBROUTINE eomccsdtq_density1_5_4_7_1(d_a,k_a_offset,d_b,k_b_offse
  2. &t,d_c,k_c_offset)
  3. C $Id$
  4. C This is a Fortran77 program generated by Tensor Contraction Engine v.1.0
  5. C Copyright (c) Battelle & Pacific Northwest National Laboratory (2002)
  6. C i3 ( h2 h5 p3 p4 )_yx + = -1 * Sum ( h8 p7 ) * x ( p7 h8 )_x * y ( h2 h5 h8 p3 p4 p7 )_y
  7. IMPLICIT NONE
  8. #include "global.fh"
  9. #include "mafdecls.fh"
  10. #include "sym.fh"
  11. #include "errquit.fh"
  12. #include "tce.fh"
  13. INTEGER d_a
  14. INTEGER k_a_offset
  15. INTEGER d_b
  16. INTEGER k_b_offset
  17. INTEGER d_c
  18. INTEGER k_c_offset
  19. INTEGER NXTASK
  20. INTEGER next
  21. INTEGER nprocs
  22. INTEGER count
  23. INTEGER h2b
  24. INTEGER h5b
  25. INTEGER p3b
  26. INTEGER p4b
  27. INTEGER dimc
  28. INTEGER l_c_sort
  29. INTEGER k_c_sort
  30. INTEGER p7b
  31. INTEGER h8b
  32. INTEGER p7b_1
  33. INTEGER h8b_1
  34. INTEGER h2b_2
  35. INTEGER h5b_2
  36. INTEGER h8b_2
  37. INTEGER p3b_2
  38. INTEGER p4b_2
  39. INTEGER p7b_2
  40. INTEGER dim_common
  41. INTEGER dima_sort
  42. INTEGER dima
  43. INTEGER dimb_sort
  44. INTEGER dimb
  45. INTEGER l_a_sort
  46. INTEGER k_a_sort
  47. INTEGER l_a
  48. INTEGER k_a
  49. INTEGER l_b_sort
  50. INTEGER k_b_sort
  51. INTEGER l_b
  52. INTEGER k_b
  53. INTEGER l_c
  54. INTEGER k_c
  55. EXTERNAL NXTASK
  56. nprocs = GA_NNODES()
  57. count = 0
  58. next = NXTASK(nprocs,1)
  59. DO h2b = 1,noab
  60. DO h5b = h2b,noab
  61. DO p3b = noab+1,noab+nvab
  62. DO p4b = p3b,noab+nvab
  63. IF (next.eq.count) THEN
  64. IF ((.not.restricted).or.(int_mb(k_spin+h2b-1)+int_mb(k_spin+h5b-1
  65. &)+int_mb(k_spin+p3b-1)+int_mb(k_spin+p4b-1).ne.8)) THEN
  66. IF (int_mb(k_spin+h2b-1)+int_mb(k_spin+h5b-1) .eq. int_mb(k_spin+p
  67. &3b-1)+int_mb(k_spin+p4b-1)) THEN
  68. IF (ieor(int_mb(k_sym+h2b-1),ieor(int_mb(k_sym+h5b-1),ieor(int_mb(
  69. &k_sym+p3b-1),int_mb(k_sym+p4b-1)))) .eq. ieor(irrep_y,irrep_x)) TH
  70. &EN
  71. dimc = int_mb(k_range+h2b-1) * int_mb(k_range+h5b-1) * int_mb(k_ra
  72. &nge+p3b-1) * int_mb(k_range+p4b-1)
  73. IF (.not.MA_PUSH_GET(mt_dbl,dimc,'noname',l_c_sort,k_c_sort)) CALL
  74. & ERRQUIT('eomccsdtq_density1_5_4_7_1',0,MA_ERR)
  75. CALL DFILL(dimc,0.0d0,dbl_mb(k_c_sort),1)
  76. DO p7b = noab+1,noab+nvab
  77. DO h8b = 1,noab
  78. IF (int_mb(k_spin+p7b-1) .eq. int_mb(k_spin+h8b-1)) THEN
  79. IF (ieor(int_mb(k_sym+p7b-1),int_mb(k_sym+h8b-1)) .eq. irrep_x) TH
  80. &EN
  81. CALL TCE_RESTRICTED_2(p7b,h8b,p7b_1,h8b_1)
  82. CALL TCE_RESTRICTED_6(h2b,h5b,h8b,p3b,p4b,p7b,h2b_2,h5b_2,h8b_2,p3
  83. &b_2,p4b_2,p7b_2)
  84. dim_common = int_mb(k_range+p7b-1) * int_mb(k_range+h8b-1)
  85. dima_sort = 1
  86. dima = dim_common * dima_sort
  87. dimb_sort = int_mb(k_range+h2b-1) * int_mb(k_range+h5b-1) * int_mb
  88. &(k_range+p3b-1) * int_mb(k_range+p4b-1)
  89. dimb = dim_common * dimb_sort
  90. IF ((dima .gt. 0) .and. (dimb .gt. 0)) THEN
  91. IF (.not.MA_PUSH_GET(mt_dbl,dima,'noname',l_a_sort,k_a_sort)) CALL
  92. & ERRQUIT('eomccsdtq_density1_5_4_7_1',1,MA_ERR)
  93. IF (.not.MA_PUSH_GET(mt_dbl,dima,'noname',l_a,k_a)) CALL ERRQUIT('
  94. &eomccsdtq_density1_5_4_7_1',2,MA_ERR)
  95. CALL GET_HASH_BLOCK(d_a,dbl_mb(k_a),dima,int_mb(k_a_offset),(h8b_1
  96. & - 1 + noab * (p7b_1 - noab - 1)))
  97. CALL TCE_SORT_2(dbl_mb(k_a),dbl_mb(k_a_sort),int_mb(k_range+p7b-1)
  98. &,int_mb(k_range+h8b-1),2,1,1.0d0)
  99. IF (.not.MA_POP_STACK(l_a)) CALL ERRQUIT('eomccsdtq_density1_5_4_7
  100. &_1',3,MA_ERR)
  101. IF (.not.MA_PUSH_GET(mt_dbl,dimb,'noname',l_b_sort,k_b_sort)) CALL
  102. & ERRQUIT('eomccsdtq_density1_5_4_7_1',4,MA_ERR)
  103. IF (.not.MA_PUSH_GET(mt_dbl,dimb,'noname',l_b,k_b)) CALL ERRQUIT('
  104. &eomccsdtq_density1_5_4_7_1',5,MA_ERR)
  105. IF ((h8b .lt. h2b) .and. (p7b .lt. p3b)) THEN
  106. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
  107. & - noab - 1 + nvab * (p3b_2 - noab - 1 + nvab * (p7b_2 - noab - 1
  108. &+ nvab * (h5b_2 - 1 + noab * (h2b_2 - 1 + noab * (h8b_2 - 1)))))))
  109. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h8b-1)
  110. &,int_mb(k_range+h2b-1),int_mb(k_range+h5b-1),int_mb(k_range+p7b-1)
  111. &,int_mb(k_range+p3b-1),int_mb(k_range+p4b-1),6,5,3,2,1,4,1.0d0)
  112. END IF
  113. IF ((h8b .lt. h2b) .and. (p3b .le. p7b) .and. (p7b .lt. p4b)) THEN
  114. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
  115. & - noab - 1 + nvab * (p7b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
  116. &+ nvab * (h5b_2 - 1 + noab * (h2b_2 - 1 + noab * (h8b_2 - 1)))))))
  117. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h8b-1)
  118. &,int_mb(k_range+h2b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
  119. &,int_mb(k_range+p7b-1),int_mb(k_range+p4b-1),6,4,3,2,1,5,-1.0d0)
  120. END IF
  121. IF ((h8b .lt. h2b) .and. (p4b .le. p7b)) THEN
  122. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p7b_2
  123. & - noab - 1 + nvab * (p4b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
  124. &+ nvab * (h5b_2 - 1 + noab * (h2b_2 - 1 + noab * (h8b_2 - 1)))))))
  125. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h8b-1)
  126. &,int_mb(k_range+h2b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
  127. &,int_mb(k_range+p4b-1),int_mb(k_range+p7b-1),5,4,3,2,1,6,1.0d0)
  128. END IF
  129. IF ((h2b .le. h8b) .and. (h8b .lt. h5b) .and. (p7b .lt. p3b)) THEN
  130. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
  131. & - noab - 1 + nvab * (p3b_2 - noab - 1 + nvab * (p7b_2 - noab - 1
  132. &+ nvab * (h5b_2 - 1 + noab * (h8b_2 - 1 + noab * (h2b_2 - 1)))))))
  133. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
  134. &,int_mb(k_range+h8b-1),int_mb(k_range+h5b-1),int_mb(k_range+p7b-1)
  135. &,int_mb(k_range+p3b-1),int_mb(k_range+p4b-1),6,5,3,1,2,4,-1.0d0)
  136. END IF
  137. IF ((h2b .le. h8b) .and. (h8b .lt. h5b) .and. (p3b .le. p7b) .and.
  138. & (p7b .lt. p4b)) THEN
  139. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
  140. & - noab - 1 + nvab * (p7b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
  141. &+ nvab * (h5b_2 - 1 + noab * (h8b_2 - 1 + noab * (h2b_2 - 1)))))))
  142. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
  143. &,int_mb(k_range+h8b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
  144. &,int_mb(k_range+p7b-1),int_mb(k_range+p4b-1),6,4,3,1,2,5,1.0d0)
  145. END IF
  146. IF ((h2b .le. h8b) .and. (h8b .lt. h5b) .and. (p4b .le. p7b)) THEN
  147. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p7b_2
  148. & - noab - 1 + nvab * (p4b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
  149. &+ nvab * (h5b_2 - 1 + noab * (h8b_2 - 1 + noab * (h2b_2 - 1)))))))
  150. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
  151. &,int_mb(k_range+h8b-1),int_mb(k_range+h5b-1),int_mb(k_range+p3b-1)
  152. &,int_mb(k_range+p4b-1),int_mb(k_range+p7b-1),5,4,3,1,2,6,-1.0d0)
  153. END IF
  154. IF ((h5b .le. h8b) .and. (p7b .lt. p3b)) THEN
  155. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
  156. & - noab - 1 + nvab * (p3b_2 - noab - 1 + nvab * (p7b_2 - noab - 1
  157. &+ nvab * (h8b_2 - 1 + noab * (h5b_2 - 1 + noab * (h2b_2 - 1)))))))
  158. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
  159. &,int_mb(k_range+h5b-1),int_mb(k_range+h8b-1),int_mb(k_range+p7b-1)
  160. &,int_mb(k_range+p3b-1),int_mb(k_range+p4b-1),6,5,2,1,3,4,1.0d0)
  161. END IF
  162. IF ((h5b .le. h8b) .and. (p3b .le. p7b) .and. (p7b .lt. p4b)) THEN
  163. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p4b_2
  164. & - noab - 1 + nvab * (p7b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
  165. &+ nvab * (h8b_2 - 1 + noab * (h5b_2 - 1 + noab * (h2b_2 - 1)))))))
  166. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
  167. &,int_mb(k_range+h5b-1),int_mb(k_range+h8b-1),int_mb(k_range+p3b-1)
  168. &,int_mb(k_range+p7b-1),int_mb(k_range+p4b-1),6,4,2,1,3,5,-1.0d0)
  169. END IF
  170. IF ((h5b .le. h8b) .and. (p4b .le. p7b)) THEN
  171. CALL GET_HASH_BLOCK(d_b,dbl_mb(k_b),dimb,int_mb(k_b_offset),(p7b_2
  172. & - noab - 1 + nvab * (p4b_2 - noab - 1 + nvab * (p3b_2 - noab - 1
  173. &+ nvab * (h8b_2 - 1 + noab * (h5b_2 - 1 + noab * (h2b_2 - 1)))))))
  174. CALL TCE_SORT_6(dbl_mb(k_b),dbl_mb(k_b_sort),int_mb(k_range+h2b-1)
  175. &,int_mb(k_range+h5b-1),int_mb(k_range+h8b-1),int_mb(k_range+p3b-1)
  176. &,int_mb(k_range+p4b-1),int_mb(k_range+p7b-1),5,4,2,1,3,6,1.0d0)
  177. END IF
  178. IF (.not.MA_POP_STACK(l_b)) CALL ERRQUIT('eomccsdtq_density1_5_4_7
  179. &_1',6,MA_ERR)
  180. CALL DGEMM('T','N',dima_sort,dimb_sort,dim_common,1.0d0,dbl_mb(k_a
  181. &_sort),dim_common,dbl_mb(k_b_sort),dim_common,1.0d0,dbl_mb(k_c_sor
  182. &t),dima_sort)
  183. IF (.not.MA_POP_STACK(l_b_sort)) CALL ERRQUIT('eomccsdtq_density1_
  184. &5_4_7_1',7,MA_ERR)
  185. IF (.not.MA_POP_STACK(l_a_sort)) CALL ERRQUIT('eomccsdtq_density1_
  186. &5_4_7_1',8,MA_ERR)
  187. END IF
  188. END IF
  189. END IF
  190. END DO
  191. END DO
  192. IF (.not.MA_PUSH_GET(mt_dbl,dimc,'noname',l_c,k_c)) CALL ERRQUIT('
  193. &eomccsdtq_density1_5_4_7_1',9,MA_ERR)
  194. CALL TCE_SORT_4(dbl_mb(k_c_sort),dbl_mb(k_c),int_mb(k_range+p4b-1)
  195. &,int_mb(k_range+p3b-1),int_mb(k_range+h5b-1),int_mb(k_range+h2b-1)
  196. &,4,3,2,1,-1.0d0)
  197. CALL ADD_HASH_BLOCK(d_c,dbl_mb(k_c),dimc,int_mb(k_c_offset),(p4b -
  198. & noab - 1 + nvab * (p3b - noab - 1 + nvab * (h5b - 1 + noab * (h2b
  199. & - 1)))))
  200. IF (.not.MA_POP_STACK(l_c)) CALL ERRQUIT('eomccsdtq_density1_5_4_7
  201. &_1',10,MA_ERR)
  202. IF (.not.MA_POP_STACK(l_c_sort)) CALL ERRQUIT('eomccsdtq_density1_
  203. &5_4_7_1',11,MA_ERR)
  204. END IF
  205. END IF
  206. END IF
  207. next = NXTASK(nprocs,1)
  208. END IF
  209. count = count + 1
  210. END DO
  211. END DO
  212. END DO
  213. END DO
  214. next = NXTASK(-nprocs,1)
  215. call GA_SYNC()
  216. RETURN
  217. END