9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-11-18 19:32:20 +01:00

finished complex slater rules

This commit is contained in:
Kevin Gasperich 2020-02-24 15:02:05 -06:00
parent a2b662d795
commit ed5a9fa404

View File

@ -2781,11 +2781,6 @@ subroutine i_H_j_single_spin_complex(key_i,key_j,Nint,spin,hij)
end end
subroutine i_H_j_double_spin_complex(key_i,key_j,Nint,hij) subroutine i_H_j_double_spin_complex(key_i,key_j,Nint,hij)
!todo: modify/implement for complex
if (is_complex) then
print*,irp_here,' not implemented for complex'
stop -1
endif
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -2794,32 +2789,27 @@ subroutine i_H_j_double_spin_complex(key_i,key_j,Nint,hij)
END_DOC END_DOC
integer, intent(in) :: Nint integer, intent(in) :: Nint
integer(bit_kind), intent(in) :: key_i(Nint), key_j(Nint) integer(bit_kind), intent(in) :: key_i(Nint), key_j(Nint)
double precision, intent(out) :: hij complex*16, intent(out) :: hij
integer :: exc(0:2,2) integer :: exc(0:2,2)
double precision :: phase double precision :: phase
double precision, external :: get_two_e_integral complex*16, external :: get_two_e_integral_complex
PROVIDE big_array_exchange_integrals mo_two_e_integrals_in_map PROVIDE big_array_exchange_integrals_complex mo_two_e_integrals_in_map
call get_double_excitation_spin(key_i,key_j,exc,phase,Nint) call get_double_excitation_spin(key_i,key_j,exc,phase,Nint)
hij = phase*(get_two_e_integral( & hij = phase*(get_two_e_integral_complex( &
exc(1,1), & exc(1,1), &
exc(2,1), & exc(2,1), &
exc(1,2), & exc(1,2), &
exc(2,2), mo_integrals_map) - & exc(2,2), mo_integrals_map,mo_integrals_map_2) - &
get_two_e_integral( & get_two_e_integral_complex( &
exc(1,1), & exc(1,1), &
exc(2,1), & exc(2,1), &
exc(2,2), & exc(2,2), &
exc(1,2), mo_integrals_map) ) exc(1,2), mo_integrals_map,mo_integrals_map_2) )
end end
subroutine i_H_j_double_alpha_beta_complex(key_i,key_j,Nint,hij) subroutine i_H_j_double_alpha_beta_complex(key_i,key_j,Nint,hij)
!todo: modify/implement for complex
if (is_complex) then
print*,irp_here,' not implemented for complex'
stop -1
endif
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -2828,26 +2818,26 @@ subroutine i_H_j_double_alpha_beta_complex(key_i,key_j,Nint,hij)
END_DOC END_DOC
integer, intent(in) :: Nint integer, intent(in) :: Nint
integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2) integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2)
double precision, intent(out) :: hij complex*16, intent(out) :: hij
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
double precision :: phase, phase2 double precision :: phase, phase2
double precision, external :: get_two_e_integral complex*16, external :: get_two_e_integral_complex
PROVIDE big_array_exchange_integrals mo_two_e_integrals_in_map PROVIDE big_array_exchange_integrals_complex mo_two_e_integrals_in_map
call get_single_excitation_spin(key_i(1,1),key_j(1,1),exc(0,1,1),phase,Nint) call get_single_excitation_spin(key_i(1,1),key_j(1,1),exc(0,1,1),phase,Nint)
call get_single_excitation_spin(key_i(1,2),key_j(1,2),exc(0,1,2),phase2,Nint) call get_single_excitation_spin(key_i(1,2),key_j(1,2),exc(0,1,2),phase2,Nint)
phase = phase*phase2 phase = phase*phase2
if (exc(1,1,1) == exc(1,2,2)) then if (exc(1,1,1) == exc(1,2,2)) then
hij = phase * big_array_exchange_integrals(exc(1,1,1),exc(1,1,2),exc(1,2,1)) hij = phase * big_array_exchange_integrals_complex(exc(1,1,1),exc(1,1,2),exc(1,2,1))
else if (exc(1,2,1) == exc(1,1,2)) then else if (exc(1,2,1) == exc(1,1,2)) then
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2)) hij = phase * big_array_exchange_integrals_complex(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else else
hij = phase*get_two_e_integral( & hij = phase*get_two_e_integral_complex( &
exc(1,1,1), & exc(1,1,1), &
exc(1,1,2), & exc(1,1,2), &
exc(1,2,1), & exc(1,2,1), &
exc(1,2,2) ,mo_integrals_map) exc(1,2,2) ,mo_integrals_map,mo_integrals_map_2)
endif endif
end end