From 25d041379b795e90621a8ddc7d2698dbadf305a3 Mon Sep 17 00:00:00 2001 From: Kevin Gasperich Date: Tue, 28 Jan 2020 15:43:40 -0600 Subject: [PATCH] complex cleanup --- src/mo_one_e_ints/ao_to_mo.irp.f | 69 ------------------------ src/mo_one_e_ints/ao_to_mo_complex.irp.f | 68 +++++++++++++++++++++++ 2 files changed, 68 insertions(+), 69 deletions(-) create mode 100644 src/mo_one_e_ints/ao_to_mo_complex.irp.f diff --git a/src/mo_one_e_ints/ao_to_mo.irp.f b/src/mo_one_e_ints/ao_to_mo.irp.f index 5279608f..f388119b 100644 --- a/src/mo_one_e_ints/ao_to_mo.irp.f +++ b/src/mo_one_e_ints/ao_to_mo.irp.f @@ -50,61 +50,6 @@ subroutine mo_to_ao_no_overlap(A_mo,LDA_mo,A_ao,LDA_ao) deallocate(T) end -subroutine mo_to_ao_complex(A_mo,LDA_mo,A_ao,LDA_ao) - implicit none - BEGIN_DOC - ! Transform A from the MO basis to the AO basis - ! - ! (S.C).A_mo.(S.C)t - END_DOC - integer, intent(in) :: LDA_ao,LDA_mo - complex*16, intent(in) :: A_mo(LDA_mo,mo_num) - complex*16, intent(out) :: A_ao(LDA_ao,ao_num) - complex*16, allocatable :: T(:,:) - - allocate ( T(mo_num,ao_num) ) - - call zgemm('N','C', mo_num, ao_num, mo_num, & - (1.d0,0.d0), A_mo,size(A_mo,1), & - S_mo_coef_complex, size(S_mo_coef_complex,1), & - (0.d0,0.d0), T, size(T,1)) - - call zgemm('N','N', ao_num, ao_num, mo_num, & - (1.d0,0.d0), S_mo_coef_complex, size(S_mo_coef_complex,1), & - T, size(T,1), & - (0.d0,0.d0), A_ao, size(A_ao,1)) - - deallocate(T) -end - -subroutine mo_to_ao_no_overlap_complex(A_mo,LDA_mo,A_ao,LDA_ao) - implicit none - BEGIN_DOC - ! Transform A from the MO basis to the S^-1 AO basis - ! Useful for density matrix - END_DOC - integer, intent(in) :: LDA_ao,LDA_mo - complex*16, intent(in) :: A_mo(LDA_mo,mo_num) - complex*16, intent(out) :: A_ao(LDA_ao,ao_num) - complex*16, allocatable :: T(:,:) - - allocate ( T(mo_num,ao_num) ) - !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T - - call zgemm('N','C', mo_num, ao_num, mo_num, & - (1.d0,0.d0), A_mo,size(A_mo,1), & - mo_coef_complex, size(mo_coef_complex,1), & - (0.d0,0.d0), T, size(T,1)) - - call zgemm('N','N', ao_num, ao_num, mo_num, & - (1.d0,0.d0), mo_coef_complex,size(mo_coef_complex,1), & - T, size(T,1), & - (0.d0,0.d0), A_ao, size(A_ao,1)) - - deallocate(T) -end - - BEGIN_PROVIDER [ double precision, S_mo_coef, (ao_num, mo_num) ] implicit none BEGIN_DOC @@ -118,17 +63,3 @@ BEGIN_PROVIDER [ double precision, S_mo_coef, (ao_num, mo_num) ] END_PROVIDER -BEGIN_PROVIDER [ complex*16, S_mo_coef_complex, (ao_num, mo_num) ] - implicit none - BEGIN_DOC - ! Product S.C where S is the overlap matrix in the AO basis and C the mo_coef matrix. - END_DOC - - call zgemm('N','N',ao_num, mo_num, ao_num, (1.d0,0.d0), & - ao_overlap_complex, size(ao_overlap_complex,1), & - mo_coef_complex, size(mo_coef_complex,1), & - (0.d0,0.d0), & - S_mo_coef_complex, size(S_mo_coef_complex,1)) - -END_PROVIDER - diff --git a/src/mo_one_e_ints/ao_to_mo_complex.irp.f b/src/mo_one_e_ints/ao_to_mo_complex.irp.f new file mode 100644 index 00000000..2530caf0 --- /dev/null +++ b/src/mo_one_e_ints/ao_to_mo_complex.irp.f @@ -0,0 +1,68 @@ +subroutine mo_to_ao_complex(A_mo,LDA_mo,A_ao,LDA_ao) + implicit none + BEGIN_DOC + ! Transform A from the MO basis to the AO basis + ! + ! (S.C).A_mo.(S.C)t + END_DOC + integer, intent(in) :: LDA_ao,LDA_mo + complex*16, intent(in) :: A_mo(LDA_mo,mo_num) + complex*16, intent(out) :: A_ao(LDA_ao,ao_num) + complex*16, allocatable :: T(:,:) + + allocate ( T(mo_num,ao_num) ) + + call zgemm('N','C', mo_num, ao_num, mo_num, & + (1.d0,0.d0), A_mo,size(A_mo,1), & + S_mo_coef_complex, size(S_mo_coef_complex,1), & + (0.d0,0.d0), T, size(T,1)) + + call zgemm('N','N', ao_num, ao_num, mo_num, & + (1.d0,0.d0), S_mo_coef_complex, size(S_mo_coef_complex,1), & + T, size(T,1), & + (0.d0,0.d0), A_ao, size(A_ao,1)) + + deallocate(T) +end + +subroutine mo_to_ao_no_overlap_complex(A_mo,LDA_mo,A_ao,LDA_ao) + implicit none + BEGIN_DOC + ! Transform A from the MO basis to the S^-1 AO basis + ! Useful for density matrix + END_DOC + integer, intent(in) :: LDA_ao,LDA_mo + complex*16, intent(in) :: A_mo(LDA_mo,mo_num) + complex*16, intent(out) :: A_ao(LDA_ao,ao_num) + complex*16, allocatable :: T(:,:) + + allocate ( T(mo_num,ao_num) ) + !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T + + call zgemm('N','C', mo_num, ao_num, mo_num, & + (1.d0,0.d0), A_mo,size(A_mo,1), & + mo_coef_complex, size(mo_coef_complex,1), & + (0.d0,0.d0), T, size(T,1)) + + call zgemm('N','N', ao_num, ao_num, mo_num, & + (1.d0,0.d0), mo_coef_complex,size(mo_coef_complex,1), & + T, size(T,1), & + (0.d0,0.d0), A_ao, size(A_ao,1)) + + deallocate(T) +end + +BEGIN_PROVIDER [ complex*16, S_mo_coef_complex, (ao_num, mo_num) ] + implicit none + BEGIN_DOC + ! Product S.C where S is the overlap matrix in the AO basis and C the mo_coef matrix. + END_DOC + + call zgemm('N','N',ao_num, mo_num, ao_num, (1.d0,0.d0), & + ao_overlap_complex, size(ao_overlap_complex,1), & + mo_coef_complex, size(mo_coef_complex,1), & + (0.d0,0.d0), & + S_mo_coef_complex, size(S_mo_coef_complex,1)) + +END_PROVIDER +