From 1bfa6cc870b4fd2e727c312fde60bde55e860c55 Mon Sep 17 00:00:00 2001 From: Robert Harrison Date: Tue, 30 May 2000 06:36:56 +0000 Subject: [PATCH] performance measurement for the triples plus attempts at optimizing one routine on a pentium --- src/develop/uccsdtest.F | 453 +++++++++++++++++++++++++++++++++++----- 1 file changed, 401 insertions(+), 52 deletions(-) diff --git a/src/develop/uccsdtest.F b/src/develop/uccsdtest.F index b939c43434..f67440be91 100644 --- a/src/develop/uccsdtest.F +++ b/src/develop/uccsdtest.F @@ -1,6 +1,6 @@ logical function uccsdtest(rtdb) * -* $Id: uccsdtest.F,v 1.19 2000-05-26 00:05:56 d3h449 Exp $ +* $Id: uccsdtest.F,v 1.20 2000-05-30 06:36:56 d3g681 Exp $ * implicit none #include "global.fh" @@ -37,7 +37,7 @@ c integer l_x, l_df, l_delta, k_x, k_df, k_delta, nvar integer iter, i logical converged, t2_rd_test, t2_mp2 - double precision xxx + double precision xxx, shift c double precision energyaaa, energybbb, energyaab, energybba double precision uccsdtest_triples_pure, uccsdtest_triples_mixed @@ -45,7 +45,7 @@ c double precision uccsdtest_triples_mixed_blocked logical int_normalize external int_normalize -c +c c load the geometry/basis set and get info c if (.not. geom_create(geom, 'geometry')) @@ -140,6 +140,18 @@ c call output(dbl_mb(k_aeval),1,nmo,1,1,nmo,1,1) write(6,*) ' Beta eigenvalues ' call output(dbl_mb(k_beval),1,nmo,1,1,nmo,1,1) +c + if (.not. rtdb_get(rtdb, 'uccsdtest:shift', mt_dbl, 1, shift))then +c +c Shift is added to the denominators in the preconditioner +c ... default is to make the smallest denominator 0.3 +c + shift = 2d0 * min( + $ dbl_mb(k_aeval+nalpha)-dbl_mb(k_aeval+nalpha-1), + $ dbl_mb(k_beval+nbeta)-dbl_mb(k_beval+nbeta-1)) + shift = 0.3d0 - shift + end if + write(6,*) ' Preconditioner denominator shift ', shift c$$$ write(6,*) ' Alpha MOs' c$$$ call output(dbl_mb(k_amos),1,nbf,1,nmo,nbf,nmo,1) c$$$ write(6,*) ' Beta MOs' @@ -281,12 +293,12 @@ c Space for the new solver c nvar = noa*noa*nva*nva + nob*nob*nvb*nvb + noa*nob*nva*nvb + $ noa*nva + nob*nvb - if (.not. ma_push_get(mt_dbl, nvar*30, 'x', l_x, k_x)) - $ call errquit(' ma x ', 0) - if (.not. ma_push_get(mt_dbl, nvar*30, 'x', l_df, k_df)) - $ call errquit(' ma x ', 0) + if (.not. ma_push_get(mt_dbl, nvar*10, 'x', l_x, k_x)) + $ call errquit(' ma x4 ', 0) + if (.not. ma_push_get(mt_dbl, nvar*10, 'x', l_df, k_df)) + $ call errquit(' ma x5 ', 0) if (.not. ma_push_get(mt_dbl, nvar, 'x', l_delta, k_delta)) - $ call errquit(' ma x ', 0) + $ call errquit(' ma x6 ', 0) c c if t1 and t2 on disk jump and read c @@ -302,7 +314,7 @@ c$$$ call dfill((noa*nva)*(nob*nvb),0.0d0,dbl_mb(k_t2ab),1) c$$$ call dfill((noa*nva), 0.0d0, dbl_mb(k_t1a), 1) c$$$ call dfill((nob*nvb), 0.0d0, dbl_mb(k_t1b), 1) c - do iter = 1, 30 ! NOTE DIMENSIONS OF X/DF + do iter = 1, 10 ! NOTE DIMENSIONS OF X/DF c c Transform the MO coefficients with the particle and hole matrices c @@ -466,7 +478,7 @@ c $ dbl_mb(k_r2aa),dbl_mb(k_r2bb),dbl_mb(k_r2ab), $ dbl_mb(k_aeval), dbl_mb(k_beval), converged, $ dbl_mb(k_x), dbl_mb(k_df), dbl_mb(k_delta), - $ nvar, iter) + $ nvar, iter, shift) c c$$$ call jan_debug_print('T1a',dbl_mb(k_t1a), nva, noa, 1, 1) c$$$ call jan_debug_print('T1b',dbl_mb(k_t1b), nvb, nob, 1, 1) @@ -1182,7 +1194,7 @@ c $ t2aa,t2bb,t2ab, $ r1a, r1b, $ r2aa,r2bb,r2ab, ea, eb, converged, - $ x, df, delta, nvar, iter) + $ x, df, delta, nvar, iter, shift) implicit none integer nmo, noa, nob, nva, nvb double precision fa(nmo,nmo), fb(nmo,nmo) @@ -1202,6 +1214,7 @@ c double precision ea(nmo), eb(nmo) integer nvar, iter ! #variables, iteration number double precision x(nvar,*), df(nvar,*), delta(nvar) + double precision shift logical converged c c t1 = t1 + R(e,m)/(em-ee) @@ -1223,14 +1236,14 @@ c do m = 1, noa do e = 1, nva x(ind,iter) = t1a(e,m) - df(ind,iter) = -r1a(e,m) / (ea(m) - ea(e+noa)) + df(ind,iter) = -r1a(e,m) / (ea(m) - ea(e+noa) - shift*0.5d0) ind = ind + 1 end do end do do m = 1, nob do e = 1, nvb x(ind,iter) = t1b(e,m) - df(ind,iter) = -r1b(e,m) / (eb(m) - eb(e+nob)) + df(ind,iter) = -r1b(e,m) / (eb(m) - eb(e+nob) - shift*0.5d0) ind = ind + 1 end do end do @@ -1243,7 +1256,7 @@ c do e = 1, nva x(ind,iter) = t2aa(e,f,m,n) df(ind,iter) = -r2aa(e,f,m,n) / - $ (ea(m)+ea(n)-ea(noa+e)-ea(noa+f)) + $ (ea(m)+ea(n)-ea(noa+e)-ea(noa+f) - shift) ind = ind + 1 end do end do @@ -1258,7 +1271,7 @@ c do e = 1, nvb x(ind,iter) = t2bb(e,f,m,n) df(ind,iter) = -r2bb(e,f,m,n) / - $ (eb(m)+eb(n)-eb(nob+e)-eb(nob+f)) + $ (eb(m)+eb(n)-eb(nob+e)-eb(nob+f) - shift) ind = ind + 1 end do end do @@ -1273,7 +1286,7 @@ c do e = 1, nva x(ind,iter) = t2ab(e,f,m,n) df(ind,iter) = -r2ab(e,f,m,n) / - $ (ea(m)+eb(n)-ea(noa+e)-eb(nob+f)) + $ (ea(m)+eb(n)-ea(noa+e)-eb(nob+f) - shift) ind = ind + 1 end do end do @@ -3007,6 +3020,7 @@ c & int_acik(5000) c double precision int_buf(5000), t_buf(5000), w(100000) + double precision tmpr(20*20*20*20) c call output(evalsa,1,nmo,1,1,nmo,1,1) call output(evalsb,1,nmo,1,1,nmo,1,1) @@ -3148,7 +3162,7 @@ c & c_blk_lo, c_blk_hi, e_blk_lo, e_blk_hi, & i_blk_lo, i_blk_hi, j_blk_lo, j_blk_hi, & k_blk_lo, k_blk_hi, - & spin, spinck) + & spin, spinck, tmpr) c call uccsdt_get_t3x(b_blk, k_blk, j_blk, & spin, spinck, spin, t_buf) @@ -4434,6 +4448,10 @@ c double precision t2_ecji(elo:ehi,clo:chi,jlo:jhi,ilo:ihi) double precision int_ekab(elo:ehi,klo:khi,alo:ahi,blo:bhi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4455,12 +4473,15 @@ c & int_ekab(e,k,a,b) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(1, flopcount) +c end subroutine w_t2_ecjk_int_eiab & (w, t2_ecjk, int_eiab, @@ -4478,6 +4499,10 @@ c double precision t2_ecjk(elo:ehi,clo:chi,jlo:jhi,klo:khi) double precision int_eiab(elo:ehi,ilo:ihi,alo:ahi,blo:bhi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4501,12 +4526,15 @@ c & int_eiab(e,i,a,b) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(2,flopcount) +c end subroutine w_t2_ecik_int_ejab & (w, t2_ecik, int_ejab, @@ -4524,6 +4552,10 @@ c double precision t2_ecik(elo:ehi,clo:chi,ilo:ihi,klo:khi) double precision int_ejab(elo:ehi,jlo:jhi,alo:ahi,blo:bhi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4545,12 +4577,15 @@ c & int_ejab(e,j,a,b) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(3, flopcount) +c end subroutine w_t2_eaji_int_ekbc & (w, t2_eaji, int_ekbc, @@ -4568,6 +4603,10 @@ c double precision t2_eaji(elo:ehi,alo:ahi,jlo:jhi,ilo:ihi) double precision int_ekbc(elo:ehi,klo:khi,blo:bhi,clo:chi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4589,12 +4628,15 @@ c & int_ekbc(e,k,b,c) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(4, flopcount) +c end subroutine w_t2_ebji_int_ekac & (w, t2_ebji, int_ekac, @@ -4612,6 +4654,10 @@ c double precision t2_ebji(elo:ehi,blo:bhi,jlo:jhi,ilo:ihi) double precision int_ekac(elo:ehi,klo:khi,alo:ahi,clo:chi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4633,18 +4679,21 @@ c & int_ekac(e,k,a,c) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(5, flopcount) +c end subroutine w_t2_eakj_int_eicb & (w, t2_eakj, int_eicb, & alo, ahi, blo, bhi, clo, chi, elo, ehi, & ilo, ihi, jlo, jhi, klo, khi, - & spin, spinck) + & spin, spinck, r) c implicit none integer alo, ahi, blo, bhi, clo, chi, @@ -4655,34 +4704,250 @@ c & clo:chi,blo:bhi,alo:ahi) double precision t2_eakj(elo:ehi,alo:ahi,klo:khi,jlo:jhi) double precision int_eicb(elo:ehi,ilo:ihi,clo:chi,blo:bhi) - integer i, j, k, a, b, c, e, cend, kend + double precision r(ilo:ihi,alo:ahi,clo:chi,klo:khi) + integer i, j, k, a, b, c, e, cend, kend, abegin, ibegin, cend4 + integer ihi4 + double precision sum, sum0, sum1, sum2, sum3 + double precision flopcount c - do a = alo, ahi - do b = blo, min(bhi,a-1) + flopcount = 0d0 + call uccsdt_flops_enter() +c +c Near original code with re-ordered loops +c +c jbkcaie = 124 Mflop +c bacjkie = slower +c + do j = jlo, jhi + kend = khi + if (spin.eq.spinck) kend = min(khi,j-1) + ibegin = max(j+1,ilo) + do b = blo, bhi cend = chi if (spin.eq.spinck)cend = min(chi,b-1) - do c = clo, cend - do i = ilo, ihi - do j = jlo, min(jhi,i-1) - kend = khi - if (spin.eq.spinck)kend = min(khi,j-1) - do k = klo, kend + abegin = max(b+1,alo) + do k = klo, kend + do c = clo, cend + do a = abegin, ahi + do i = ibegin, ihi + sum = 0d0 do e = elo, ehi -c -c write(6,*)' a,b,c,i,j,k,e: ', -c & a,b,c,i,j,k,e -c - w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - & - t2_eakj(e,a,k,j)* - & int_eicb(e,i,c,b) + sum = sum + t2_eakj(e,a,k,j)* + $ int_eicb(e,i,c,b) end do + w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - sum end do end do end do end do + flopcount = flopcount + 2d0*dble(kend-klo+1)* + $ dble(ahi-abegin+1)*dble(cend-clo+1)* + $ dble(ihi-ibegin+1)*dble(ehi-elo+1) end do end do - return +c +c Near original code with re-ordered loops and buffer for sum +c +c$$$ do j = jlo, jhi +c$$$ kend = khi +c$$$ if (spin.eq.spinck) kend = min(khi,j-1) +c$$$ ibegin = max(j+1,ilo) +c$$$ do b = blo, bhi +c$$$ cend = chi +c$$$ if (spin.eq.spinck)cend = min(chi,b-1) +c$$$ abegin = max(b+1,alo) +c$$$ do k = klo, kend +c$$$ do c = clo, cend +c$$$ do a = abegin, ahi +c$$$ do i = ibegin, ihi +c$$$ sum = 0d0 +c$$$ do e = elo, ehi +c$$$ sum = sum + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c,b) +c$$$ end do +c$$$ r(i,a,c,k) = sum +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ do a = abegin, ahi +c$$$ do c = clo, cend +c$$$ do k = klo, kend +c$$$ do i = ibegin, ihi +c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - r(i,a,c,k) +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ flopcount = flopcount + 2d0*dble(kend-klo+1)* +c$$$ $ dble(ahi-abegin+1)*dble(cend-clo+1)* +c$$$ $ dble(ihi-ibegin+1)*dble(ehi-elo+1) +c$$$ end do +c$$$ end do +c +c 4-way unrolled code using i and buffer for sum +c +c$$$ do j = jlo, jhi +c$$$ kend = khi +c$$$ if (spin.eq.spinck) kend = min(khi,j-1) +c$$$ ibegin = max(j+1,ilo) +c$$$ ihi4 = ibegin + ((ihi-ibegin+1)/4)*4 - 1 +c$$$ do b = blo, bhi +c$$$ cend = chi +c$$$ if (spin.eq.spinck)cend = min(chi,b-1) +c$$$ abegin = max(b+1,alo) +c$$$ do k = klo, kend +c$$$ do c = clo, cend +c$$$ do a = abegin, ahi +c$$$ do i = ibegin, ihi4, 4 +c$$$ sum0 = 0d0 +c$$$ sum1 = 0d0 +c$$$ sum2 = 0d0 +c$$$ sum3 = 0d0 +c$$$ do e = elo, ehi +c$$$ sum0 = sum0 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i ,c,b) +c$$$ sum1 = sum1 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i+1,c,b) +c$$$ sum2 = sum2 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i+2,c,b) +c$$$ sum3 = sum3 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i+3,c,b) +c$$$ end do +c$$$ r(i ,a,c,k) = sum0 +c$$$ r(i+1,a,c,k) = sum1 +c$$$ r(i+2,a,c,k) = sum2 +c$$$ r(i+3,a,c,k) = sum3 +c$$$c$$$ w(k,j,i ,c,b,a) = w(k,j,i ,c,b,a) - sum0 +c$$$c$$$ w(k,j,i+1,c,b,a) = w(k,j,i+1,c,b,a) - sum1 +c$$$c$$$ w(k,j,i+2,c,b,a) = w(k,j,i+2,c,b,a) - sum2 +c$$$c$$$ w(k,j,i+3,c,b,a) = w(k,j,i+3,c,b,a) - sum3 +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ if (ihi4 .lt. ihi) then +c$$$ do i = ihi4+1, ihi +c$$$ do k = klo, kend +c$$$ do c = clo, cend +c$$$ do a = abegin, ahi +c$$$ sum = 0d0 +c$$$ do e = elo, ehi +c$$$ sum = sum + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c,b) +c$$$ end do +c$$$ r(i,a,c,k) = sum +c$$$c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - sum +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end if +c$$$ do a = abegin, ahi +c$$$ do c = clo, cend +c$$$ do k = klo, kend +c$$$ do i = ibegin, ihi +c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - r(i,a,c,k) +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ flopcount = flopcount + 2d0*dble(kend-klo+1)* +c$$$ $ dble(ahi-abegin+1)*dble(cend-clo+1)* +c$$$ $ dble(ihi-ibegin+1)*dble(ehi-elo+1) +c$$$ end do +c$$$ end do +c +c 4-way unrolled code using C +c +c$$$ do j = jlo, jhi +c$$$ kend = khi +c$$$ if (spin.eq.spinck) kend = min(khi,j-1) +c$$$ ibegin = max(j+1,ilo) +c$$$ do b = blo, bhi +c$$$ cend = chi +c$$$ if (spin.eq.spinck)cend = min(chi,b-1) +c$$$ abegin = max(b+1,alo) +c$$$ cend4 = clo + ((cend-clo+1)/4)*4 - 1 +c$$$ do k = klo, kend +c$$$ do c = clo, cend4, 4 +c$$$ do a = abegin, ahi +c$$$ do i = ibegin, ihi +c$$$ sum0 = 0d0 +c$$$ sum1 = 0d0 +c$$$ sum2 = 0d0 +c$$$ sum3 = 0d0 +c$$$ do e = elo, ehi +c$$$ sum0 = sum0 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c ,b) +c$$$ sum1 = sum1 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c+1,b) +c$$$ sum2 = sum2 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c+2,b) +c$$$ sum3 = sum3 + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c+3,b) +c$$$ end do +c$$$ w(k,j,i,c ,b,a) = w(k,j,i,c ,b,a) - sum0 +c$$$ w(k,j,i,c+1,b,a) = w(k,j,i,c+1,b,a) - sum1 +c$$$ w(k,j,i,c+2,b,a) = w(k,j,i,c+2,b,a) - sum2 +c$$$ w(k,j,i,c+3,b,a) = w(k,j,i,c+3,b,a) - sum3 +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ if (cend .gt. cend4) then +c$$$ do k = klo, kend +c$$$ do c = cend4+1, cend +c$$$ do a = abegin, ahi +c$$$ do i = ibegin, ihi +c$$$ sum = 0d0 +c$$$ do e = elo, ehi +c$$$ sum = sum + t2_eakj(e,a,k,j)* +c$$$ $ int_eicb(e,i,c,b) +c$$$ end do +c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) - sum +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end if +c$$$ flopcount = flopcount + 2d0*dble(kend-klo+1)* +c$$$ $ dble(ahi-abegin+1)*dble(cend-clo+1)* +c$$$ $ dble(ihi-ibegin+1)*dble(ehi-elo+1) +c$$$ end do +c$$$ end do +c +c Original code +c +c$$$ do a = alo, ahi +c$$$ do b = blo, min(bhi,a-1) +c$$$ cend = chi +c$$$ if (spin.eq.spinck)cend = min(chi,b-1) +c$$$ do c = clo, cend +c$$$ do i = ilo, ihi +c$$$ do j = jlo, min(jhi,i-1) +c$$$ kend = khi +c$$$ if (spin.eq.spinck)kend = min(khi,j-1) +c$$$ do k = klo, kend +c$$$ do e = elo, ehi +c$$$c +c$$$c write(6,*)' a,b,c,i,j,k,e: ', +c$$$c & a,b,c,i,j,k,e +c$$$c +c$$$ w(k,j,i,c,b,a) = w(k,j,i,c,b,a) +c$$$ & - t2_eakj(e,a,k,j)* +c$$$ & int_eicb(e,i,c,b) +c$$$ end do +c$$$ end do +c$$$ flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c$$$ end do +c + call uccsdt_flops_exit(6, flopcount) +c end subroutine w_t2_ebkj_int_eica & (w, t2_ebkj, int_eica, @@ -4700,6 +4965,10 @@ c double precision t2_ebkj(elo:ehi,blo:bhi,klo:khi,jlo:jhi) double precision int_eica(elo:ehi,ilo:ihi,clo:chi,alo:ahi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4721,12 +4990,15 @@ c & int_eica(e,i,c,a) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(7, flopcount) +c end subroutine w_t2_eaki_int_ejcb & (w, t2_eaki, int_ejcb, @@ -4744,6 +5016,10 @@ c double precision t2_eaki(elo:ehi,alo:ahi,klo:khi,ilo:ihi) double precision int_ejcb(elo:ehi,jlo:jhi,clo:chi,blo:bhi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4765,12 +5041,15 @@ c & int_ejcb(e,j,c,b) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(8, flopcount) +c end subroutine w_t2_ebki_int_ejca & (w, t2_ebki, int_ejca, @@ -4788,6 +5067,10 @@ c double precision t2_ebki(elo:ehi,blo:bhi,klo:khi,ilo:ihi) double precision int_ejca(elo:ehi,jlo:jhi,clo:chi,alo:ahi) integer i, j, k, a, b, c, e, cend, kend + double precision flopcount +c + flopcount = 0d0 + call uccsdt_flops_enter() c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4809,12 +5092,15 @@ c & int_ejca(e,j,c,a) end do end do + flopcount = flopcount + 2*(ehi-elo+1)*(kend-klo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(9, flopcount) +c end subroutine w_t2_mkab_int_mcji & (w, t2_mkab, int_mcji, @@ -4832,6 +5118,10 @@ c double precision t2_mkab(mlo:mhi,klo:khi,alo:ahi,blo:bhi) double precision int_mcji(mlo:mhi,clo:chi,jlo:jhi,ilo:ihi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4853,12 +5143,15 @@ c & int_mcji(m,c,j,i) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(10,flopcnt) +c end subroutine w_t2_miab_int_mcjk & (w, t2_miab, int_mcjk, @@ -4876,6 +5169,10 @@ c double precision t2_miab(mlo:mhi,ilo:ihi,alo:ahi,blo:bhi) double precision int_mcjk(mlo:mhi,clo:chi,jlo:jhi,klo:khi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4897,12 +5194,15 @@ c & int_mcjk(m,c,j,k) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(11,flopcnt) +c end subroutine w_t2_mjab_int_mcik & (w, t2_mjab, int_mcik, @@ -4920,6 +5220,10 @@ c double precision t2_mjab(mlo:mhi,jlo:jhi,alo:ahi,blo:bhi) double precision int_mcik(mlo:mhi,clo:chi,ilo:ihi,klo:khi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4941,12 +5245,15 @@ c & int_mcik(m,c,i,k) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(12,flopcnt) +c end subroutine w_t2_mkbc_int_maji & (w, t2_mkbc, int_maji, @@ -4964,6 +5271,10 @@ c double precision t2_mkbc(mlo:mhi,klo:khi,blo:bhi,clo:chi) double precision int_maji(mlo:mhi,alo:ahi,jlo:jhi,ilo:ihi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -4985,12 +5296,15 @@ c & int_maji(m,a,j,i) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(13,flopcnt) +c end subroutine w_t2_mkac_int_mbji & (w, t2_mkac, int_mbji, @@ -5008,6 +5322,10 @@ c double precision t2_mkac(mlo:mhi,klo:khi,alo:ahi,clo:chi) double precision int_mbji(mlo:mhi,blo:bhi,jlo:jhi,ilo:ihi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -5029,12 +5347,15 @@ c & int_mbji(m,b,j,i) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(14,flopcnt) +c end subroutine w_t2_micb_int_makj & (w, t2_micb, int_makj, @@ -5052,6 +5373,10 @@ c double precision t2_micb(mlo:mhi,ilo:ihi,clo:chi,blo:bhi) double precision int_makj(mlo:mhi,alo:ahi,klo:khi,jlo:jhi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -5073,12 +5398,15 @@ c & int_makj(m,a,k,j) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(15,flopcnt) +c end subroutine w_t2_mica_int_mbkj & (w, t2_mica, int_mbkj, @@ -5096,6 +5424,10 @@ c double precision t2_mica(mlo:mhi,ilo:ihi,clo:chi,alo:ahi) double precision int_mbkj(mlo:mhi,blo:bhi,klo:khi,jlo:jhi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -5117,12 +5449,15 @@ c & int_mbkj(m,b,k,j) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(16,flopcnt) +c end subroutine w_t2_mjcb_int_maki & (w, t2_mjcb, int_maki, @@ -5140,6 +5475,10 @@ c double precision t2_mjcb(mlo:mhi,jlo:jhi,clo:chi,blo:bhi) double precision int_maki(mlo:mhi,alo:ahi,klo:khi,ilo:ihi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -5161,12 +5500,15 @@ c & int_maki(m,a,k,i) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(17,flopcnt) +c end subroutine w_t2_mjca_int_mbki & (w, t2_mjca, int_mbki, @@ -5184,6 +5526,10 @@ c double precision t2_mjca(mlo:mhi,jlo:jhi,clo:chi,alo:ahi) double precision int_mbki(mlo:mhi,blo:bhi,klo:khi,ilo:ihi) integer i, j, k, m, a, b, c, cend, kend + double precision flopcnt +c + call uccsdt_flops_enter() + flopcnt = 0d0 c do a = alo, ahi do b = blo, min(bhi,a-1) @@ -5205,12 +5551,15 @@ c & int_mbki(m,b,k,i) end do end do + flopcnt = flopcnt + (kend-klo+1)*(mhi-mlo+1) end do end do end do end do end do - return +c + call uccsdt_flops_exit(18,flopcnt) +c end subroutine w_t1a_int_abij & (v, t1a, int_abij,