mirror of
https://gitlab.com/scemama/qp_plugins_scemama.git
synced 2024-11-07 14:43:41 +01:00
Dgemmized CC
This commit is contained in:
parent
e39a069fd5
commit
444ea0206b
@ -8,8 +8,8 @@ BEGIN_PROVIDER [ double precision, cWoooo, (spin_occ_num,spin_occ_num,spin_occ_n
|
||||
|
||||
cWoooo(:,:,:,:) = OOOO(:,:,:,:)
|
||||
|
||||
do e=1,spin_vir_num
|
||||
do j=1,spin_occ_num
|
||||
do j=1,spin_occ_num
|
||||
do e=1,spin_vir_num
|
||||
do i=1,spin_occ_num
|
||||
do n=1,spin_occ_num
|
||||
do m=1,spin_occ_num
|
||||
@ -22,21 +22,13 @@ BEGIN_PROVIDER [ double precision, cWoooo, (spin_occ_num,spin_occ_num,spin_occ_n
|
||||
end do
|
||||
end do
|
||||
|
||||
double precision :: x
|
||||
do f=1,spin_vir_num
|
||||
do e=1,spin_vir_num
|
||||
do j=1,spin_occ_num
|
||||
do i=1,spin_occ_num
|
||||
x = 0.25d0*tau_cc(i,j,e,f)
|
||||
do n=1,spin_occ_num
|
||||
do m=1,spin_occ_num
|
||||
cWoooo(m,n,i,j) = cWoooo(m,n,i,j) + x*OOVV(m,n,e,f)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
call dgemm('N','T', &
|
||||
spin_occ_num*spin_occ_num, spin_occ_num*spin_occ_num, &
|
||||
spin_vir_num*spin_vir_num, &
|
||||
0.25d0, OOVV, spin_occ_num*spin_occ_num, &
|
||||
tau_cc, spin_occ_num*spin_occ_num, &
|
||||
1.d0, cWoooo, spin_occ_num*spin_occ_num)
|
||||
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
@ -104,36 +96,46 @@ BEGIN_PROVIDER [ double precision, cWvvvv, (spin_vir_num,spin_vir_num,spin_vir_n
|
||||
integer :: a,b,e,f
|
||||
double precision :: x
|
||||
|
||||
cWvvvv(:,:,:,:) = VVVV(:,:,:,:)
|
||||
double precision, allocatable :: mat_A(:,:), mat_C(:,:)
|
||||
|
||||
! OMP PRIVATE(mat_A,mat_C,a,b,m,e,f) &
|
||||
! OMP SHARED(spin_vir_num, spin_occ_num, t1_cc, cWvvvv, OVVV, VVVV)
|
||||
|
||||
allocate (mat_A(spin_vir_num, spin_occ_num), mat_C(spin_vir_num,spin_vir_num))
|
||||
|
||||
! OMP DO
|
||||
do f=1,spin_vir_num
|
||||
do e=1,spin_vir_num
|
||||
do m=1,spin_occ_num
|
||||
do a=1,spin_vir_num
|
||||
mat_A(a,m) = OVVV(m,a,f,e)
|
||||
enddo
|
||||
enddo
|
||||
call dgemm('N','N', &
|
||||
spin_vir_num, spin_vir_num, spin_occ_num, &
|
||||
1.d0, mat_A, size(mat_A,1), &
|
||||
t1_cc, size(t1_cc,1), &
|
||||
0.d0, mat_C, size(mat_C,1) )
|
||||
do b=1,spin_vir_num
|
||||
do a=1,spin_vir_num
|
||||
do m=1,spin_occ_num
|
||||
cWvvvv(a,b,e,f) = cWvvvv(a,b,e,f) - t1_cc(m,b)*VOVV(a,m,e,f) + t1_cc(m,a)*VOVV(b,m,e,f)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
cWvvvv(a,b,e,f) = VVVV(a,b,e,f) - mat_C(a,b) + mat_C(b,a)
|
||||
enddo
|
||||
enddo
|
||||
end do
|
||||
end do
|
||||
! OMP END DO
|
||||
|
||||
do f=1,spin_vir_num
|
||||
do e=1,spin_vir_num
|
||||
do b=1,spin_vir_num
|
||||
do a=1,spin_vir_num
|
||||
x = 0.d0
|
||||
do n=1,spin_occ_num
|
||||
do m=1,spin_occ_num
|
||||
x = x + tau_cc(m,n,a,b)*OOVV(m,n,e,f)
|
||||
end do
|
||||
end do
|
||||
cWvvvv(a,b,e,f) = cWvvvv(a,b,e,f) + 0.25d0*x
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
deallocate (mat_A, mat_C)
|
||||
! OMP END PARALLEL
|
||||
|
||||
call dgemm('T','N', &
|
||||
spin_vir_num*spin_vir_num, spin_vir_num*spin_vir_num, &
|
||||
spin_occ_num*spin_occ_num, &
|
||||
0.25d0, tau_cc, spin_occ_num*spin_occ_num, &
|
||||
OOVV, spin_occ_num*spin_occ_num, &
|
||||
1.d0, cWvvvv, spin_vir_num*spin_vir_num)
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
|
||||
|
||||
|
@ -142,31 +142,6 @@ BEGIN_PROVIDER [ double precision, r2_cc, (spin_occ_num,spin_occ_num,spin_vir_nu
|
||||
deallocate(tmp,tmp2)
|
||||
|
||||
allocate( mat_A(spin_vir_num,spin_occ_num), mat_C(spin_occ_num,spin_occ_num) )
|
||||
!
|
||||
! do b=1,spin_vir_num
|
||||
! do a=1,spin_vir_num
|
||||
!
|
||||
! do j=1,spin_occ_num
|
||||
! do e=1,spin_vir_num
|
||||
! mat_A(e,j) = VVVO(a,b,e,j)
|
||||
! enddo
|
||||
! enddo
|
||||
!
|
||||
! call dgemm('N', 'N', &
|
||||
! spin_occ_num, spin_occ_num, spin_vir_num, &
|
||||
! 1.0d0, t1_cc, spin_occ_num, &
|
||||
! mat_A, size(mat_A,1), &
|
||||
! 0.d0, mat_C, spin_occ_num)
|
||||
!
|
||||
! do j=1,spin_occ_num
|
||||
! do i=1,spin_occ_num
|
||||
! r2_cc(i,j,a,b) = r2_cc(i,j,a,b) + mat_C(i,j) - mat_C(j,i)
|
||||
! enddo
|
||||
! endd
|
||||
!
|
||||
! enddo
|
||||
! enddo
|
||||
|
||||
|
||||
do b=1,spin_vir_num
|
||||
do a=1,spin_vir_num
|
||||
@ -190,20 +165,31 @@ BEGIN_PROVIDER [ double precision, r2_cc, (spin_occ_num,spin_occ_num,spin_vir_nu
|
||||
end do
|
||||
end do
|
||||
|
||||
deallocate( mat_A, mat_C )
|
||||
|
||||
allocate(tmp (spin_occ_num,spin_occ_num,spin_vir_num,spin_vir_num) )
|
||||
|
||||
call dgemm('N','N', &
|
||||
spin_occ_num*spin_occ_num*spin_vir_num, &
|
||||
spin_vir_num, spin_occ_num, &
|
||||
1.d0, OOVO, spin_occ_num*spin_occ_num*spin_vir_num, &
|
||||
t1_cc, spin_occ_num, &
|
||||
0.d0, tmp, spin_occ_num*spin_occ_num*spin_vir_num)
|
||||
|
||||
|
||||
do b=1,spin_vir_num
|
||||
do a=1,spin_vir_num
|
||||
do j=1,spin_occ_num
|
||||
do i=1,spin_occ_num
|
||||
do m=1,spin_occ_num
|
||||
r2_cc(i,j,a,b) = r2_cc(i,j,a,b) - t1_cc(m,a)*OVOO(m,b,i,j)
|
||||
r2_cc(i,j,a,b) = r2_cc(i,j,a,b) + t1_cc(m,b)*OVOO(m,a,i,j)
|
||||
end do
|
||||
r2_cc(i,j,a,b) = r2_cc(i,j,a,b) + tmp(i,j,b,a)
|
||||
r2_cc(i,j,b,a) = r2_cc(i,j,b,a) - tmp(i,j,b,a)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
deallocate(tmp)
|
||||
|
||||
|
||||
! Final expression of the t2 residue
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user