mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-24 05:13:48 +01:00
cleaning up 2e ints; added placeholders for missing periodic functions
This commit is contained in:
parent
a64be70911
commit
df2295206f
@ -424,7 +424,9 @@ subroutine get_ao_two_e_integrals_non_zero_periodic(j,k,l,sze,out_val,out_val_in
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
!subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,out_val,out_val_index,non_zero_int)
|
subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,out_val,out_val_index,non_zero_int)
|
||||||
|
print*,'not implemented for periodic',irp_here
|
||||||
|
stop -1
|
||||||
! use map_module
|
! use map_module
|
||||||
! implicit none
|
! implicit none
|
||||||
! BEGIN_DOC
|
! BEGIN_DOC
|
||||||
@ -469,11 +471,13 @@ end
|
|||||||
! out_val(non_zero_int) = tmp
|
! out_val(non_zero_int) = tmp
|
||||||
! enddo
|
! enddo
|
||||||
! enddo
|
! enddo
|
||||||
!
|
|
||||||
!end
|
end
|
||||||
|
|
||||||
|
|
||||||
!subroutine get_ao_two_e_integrals_non_zero_jl_from_list_periodic(j,l,thresh,list,n_list,sze_max,out_val,out_val_index,non_zero_int)
|
subroutine get_ao_two_e_integrals_non_zero_jl_from_list_periodic(j,l,thresh,list,n_list,sze_max,out_val,out_val_index,non_zero_int)
|
||||||
|
print*,'not implemented for periodic',irp_here
|
||||||
|
stop -1
|
||||||
! use map_module
|
! use map_module
|
||||||
! implicit none
|
! implicit none
|
||||||
! BEGIN_DOC
|
! BEGIN_DOC
|
||||||
@ -520,8 +524,8 @@ end
|
|||||||
! out_val_index(2,non_zero_int) = k
|
! out_val_index(2,non_zero_int) = k
|
||||||
! out_val(non_zero_int) = tmp
|
! out_val(non_zero_int) = tmp
|
||||||
! enddo
|
! enddo
|
||||||
!
|
|
||||||
!end
|
end
|
||||||
|
|
||||||
subroutine insert_into_ao_integrals_map_2(n_integrals,buffer_i, buffer_values)
|
subroutine insert_into_ao_integrals_map_2(n_integrals,buffer_i, buffer_values)
|
||||||
use map_module
|
use map_module
|
||||||
|
@ -851,313 +851,3 @@ subroutine add_integrals_to_map_no_exit_34_complex(mask_ijkl)
|
|||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
! BEGIN_PROVIDER [ double precision, mo_two_e_integral_jj_from_ao, (mo_num,mo_num) ]
|
|
||||||
!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange_from_ao, (mo_num,mo_num) ]
|
|
||||||
!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti_from_ao, (mo_num,mo_num) ]
|
|
||||||
! implicit none
|
|
||||||
! BEGIN_DOC
|
|
||||||
! ! mo_two_e_integral_jj_from_ao(i,j) = J_ij
|
|
||||||
! ! mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij
|
|
||||||
! ! mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij
|
|
||||||
! END_DOC
|
|
||||||
!
|
|
||||||
! integer :: i,j,p,q,r,s
|
|
||||||
! double precision :: c
|
|
||||||
! real(integral_kind) :: integral
|
|
||||||
! integer :: n, pp
|
|
||||||
! real(integral_kind), allocatable :: int_value(:)
|
|
||||||
! integer, allocatable :: int_idx(:)
|
|
||||||
!
|
|
||||||
! double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
|
|
||||||
!
|
|
||||||
! if (.not.do_direct_integrals) then
|
|
||||||
! PROVIDE ao_two_e_integrals_in_map mo_coef
|
|
||||||
! endif
|
|
||||||
!
|
|
||||||
! mo_two_e_integral_jj_from_ao = 0.d0
|
|
||||||
! mo_two_e_integrals_jj_exchange_from_ao = 0.d0
|
|
||||||
!
|
|
||||||
! !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr
|
|
||||||
!
|
|
||||||
!
|
|
||||||
! !$OMP PARALLEL DEFAULT(NONE) &
|
|
||||||
! !$OMP PRIVATE (i,j,p,q,r,s,integral,c,n,pp,int_value,int_idx, &
|
|
||||||
! !$OMP iqrs, iqsr,iqri,iqis) &
|
|
||||||
! !$OMP SHARED(mo_num,mo_coef_transp,ao_num, &
|
|
||||||
! !$OMP ao_integrals_threshold,do_direct_integrals) &
|
|
||||||
! !$OMP REDUCTION(+:mo_two_e_integral_jj_from_ao,mo_two_e_integrals_jj_exchange_from_ao)
|
|
||||||
!
|
|
||||||
! allocate( int_value(ao_num), int_idx(ao_num), &
|
|
||||||
! iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num), &
|
|
||||||
! iqsr(mo_num,ao_num) )
|
|
||||||
!
|
|
||||||
! !$OMP DO SCHEDULE (guided)
|
|
||||||
! do s=1,ao_num
|
|
||||||
! do q=1,ao_num
|
|
||||||
!
|
|
||||||
! do j=1,ao_num
|
|
||||||
! do i=1,mo_num
|
|
||||||
! iqrs(i,j) = 0.d0
|
|
||||||
! iqsr(i,j) = 0.d0
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
! if (do_direct_integrals) then
|
|
||||||
! double precision :: ao_two_e_integral
|
|
||||||
! do r=1,ao_num
|
|
||||||
! call compute_ao_two_e_integrals(q,r,s,ao_num,int_value)
|
|
||||||
! do p=1,ao_num
|
|
||||||
! integral = int_value(p)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i=1,mo_num
|
|
||||||
! iqrs(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! call compute_ao_two_e_integrals(q,s,r,ao_num,int_value)
|
|
||||||
! do p=1,ao_num
|
|
||||||
! integral = int_value(p)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i=1,mo_num
|
|
||||||
! iqsr(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
! else
|
|
||||||
!
|
|
||||||
! do r=1,ao_num
|
|
||||||
! call get_ao_two_e_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n)
|
|
||||||
! do pp=1,n
|
|
||||||
! p = int_idx(pp)
|
|
||||||
! integral = int_value(pp)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i=1,mo_num
|
|
||||||
! iqrs(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! call get_ao_two_e_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n)
|
|
||||||
! do pp=1,n
|
|
||||||
! p = int_idx(pp)
|
|
||||||
! integral = int_value(pp)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i=1,mo_num
|
|
||||||
! iqsr(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! iqis = 0.d0
|
|
||||||
! iqri = 0.d0
|
|
||||||
! do r=1,ao_num
|
|
||||||
! do i=1,mo_num
|
|
||||||
! iqis(i) += mo_coef_transp(i,r) * iqrs(i,r)
|
|
||||||
! iqri(i) += mo_coef_transp(i,r) * iqsr(i,r)
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! do i=1,mo_num
|
|
||||||
! do j=1,mo_num
|
|
||||||
! c = mo_coef_transp(j,q)*mo_coef_transp(j,s)
|
|
||||||
! mo_two_e_integral_jj_from_ao(j,i) += c * iqis(i)
|
|
||||||
! mo_two_e_integrals_jj_exchange_from_ao(j,i) += c * iqri(i)
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! !$OMP END DO NOWAIT
|
|
||||||
! deallocate(iqrs,iqsr,int_value,int_idx)
|
|
||||||
! !$OMP END PARALLEL
|
|
||||||
!
|
|
||||||
! mo_two_e_integrals_jj_anti_from_ao = mo_two_e_integral_jj_from_ao - mo_two_e_integrals_jj_exchange_from_ao
|
|
||||||
!
|
|
||||||
!
|
|
||||||
!END_PROVIDER
|
|
||||||
!
|
|
||||||
! BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_from_ao, (mo_num,mo_num) ]
|
|
||||||
!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_exchange_from_ao, (mo_num,mo_num) ]
|
|
||||||
!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_anti_from_ao, (mo_num,mo_num) ]
|
|
||||||
! implicit none
|
|
||||||
! BEGIN_DOC
|
|
||||||
! ! mo_two_e_integrals_vv_from_ao(i,j) = J_ij
|
|
||||||
! ! mo_two_e_integrals_vv_exchange_from_ao(i,j) = J_ij
|
|
||||||
! ! mo_two_e_integrals_vv_anti_from_ao(i,j) = J_ij - K_ij
|
|
||||||
! ! but only for the virtual orbitals
|
|
||||||
! END_DOC
|
|
||||||
!
|
|
||||||
! integer :: i,j,p,q,r,s
|
|
||||||
! integer :: i0,j0
|
|
||||||
! double precision :: c
|
|
||||||
! real(integral_kind) :: integral
|
|
||||||
! integer :: n, pp
|
|
||||||
! real(integral_kind), allocatable :: int_value(:)
|
|
||||||
! integer, allocatable :: int_idx(:)
|
|
||||||
!
|
|
||||||
! double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
|
|
||||||
!
|
|
||||||
! if (.not.do_direct_integrals) then
|
|
||||||
! PROVIDE ao_two_e_integrals_in_map mo_coef
|
|
||||||
! endif
|
|
||||||
!
|
|
||||||
! mo_two_e_integrals_vv_from_ao = 0.d0
|
|
||||||
! mo_two_e_integrals_vv_exchange_from_ao = 0.d0
|
|
||||||
!
|
|
||||||
! !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr
|
|
||||||
!
|
|
||||||
!
|
|
||||||
! !$OMP PARALLEL DEFAULT(NONE) &
|
|
||||||
! !$OMP PRIVATE (i0,j0,i,j,p,q,r,s,integral,c,n,pp,int_value,int_idx, &
|
|
||||||
! !$OMP iqrs, iqsr,iqri,iqis) &
|
|
||||||
! !$OMP SHARED(n_virt_orb,mo_num,list_virt,mo_coef_transp,ao_num, &
|
|
||||||
! !$OMP ao_integrals_threshold,do_direct_integrals) &
|
|
||||||
! !$OMP REDUCTION(+:mo_two_e_integrals_vv_from_ao,mo_two_e_integrals_vv_exchange_from_ao)
|
|
||||||
!
|
|
||||||
! allocate( int_value(ao_num), int_idx(ao_num), &
|
|
||||||
! iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num),&
|
|
||||||
! iqsr(mo_num,ao_num) )
|
|
||||||
!
|
|
||||||
! !$OMP DO SCHEDULE (guided)
|
|
||||||
! do s=1,ao_num
|
|
||||||
! do q=1,ao_num
|
|
||||||
!
|
|
||||||
! do j=1,ao_num
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i = list_virt(i0)
|
|
||||||
! iqrs(i,j) = 0.d0
|
|
||||||
! iqsr(i,j) = 0.d0
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
! if (do_direct_integrals) then
|
|
||||||
! double precision :: ao_two_e_integral
|
|
||||||
! do r=1,ao_num
|
|
||||||
! call compute_ao_two_e_integrals(q,r,s,ao_num,int_value)
|
|
||||||
! do p=1,ao_num
|
|
||||||
! integral = int_value(p)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i = list_virt(i0)
|
|
||||||
! iqrs(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! call compute_ao_two_e_integrals(q,s,r,ao_num,int_value)
|
|
||||||
! do p=1,ao_num
|
|
||||||
! integral = int_value(p)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i =list_virt(i0)
|
|
||||||
! iqsr(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
! else
|
|
||||||
!
|
|
||||||
! do r=1,ao_num
|
|
||||||
! call get_ao_two_e_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n)
|
|
||||||
! do pp=1,n
|
|
||||||
! p = int_idx(pp)
|
|
||||||
! integral = int_value(pp)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i =list_virt(i0)
|
|
||||||
! iqrs(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! call get_ao_two_e_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n)
|
|
||||||
! do pp=1,n
|
|
||||||
! p = int_idx(pp)
|
|
||||||
! integral = int_value(pp)
|
|
||||||
! if (abs(integral) > ao_integrals_threshold) then
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i = list_virt(i0)
|
|
||||||
! iqsr(i,r) += mo_coef_transp(i,p) * integral
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! endif
|
|
||||||
! iqis = 0.d0
|
|
||||||
! iqri = 0.d0
|
|
||||||
! do r=1,ao_num
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i = list_virt(i0)
|
|
||||||
! iqis(i) += mo_coef_transp(i,r) * iqrs(i,r)
|
|
||||||
! iqri(i) += mo_coef_transp(i,r) * iqsr(i,r)
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! do i0=1,n_virt_orb
|
|
||||||
! i= list_virt(i0)
|
|
||||||
! do j0=1,n_virt_orb
|
|
||||||
! j = list_virt(j0)
|
|
||||||
! c = mo_coef_transp(j,q)*mo_coef_transp(j,s)
|
|
||||||
! mo_two_e_integrals_vv_from_ao(j,i) += c * iqis(i)
|
|
||||||
! mo_two_e_integrals_vv_exchange_from_ao(j,i) += c * iqri(i)
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! !$OMP END DO NOWAIT
|
|
||||||
! deallocate(iqrs,iqsr,int_value,int_idx)
|
|
||||||
! !$OMP END PARALLEL
|
|
||||||
!
|
|
||||||
! mo_two_e_integrals_vv_anti_from_ao = mo_two_e_integrals_vv_from_ao - mo_two_e_integrals_vv_exchange_from_ao
|
|
||||||
! ! print*, '**********'
|
|
||||||
! ! do i0 =1, n_virt_orb
|
|
||||||
! ! i = list_virt(i0)
|
|
||||||
! ! print*, mo_two_e_integrals_vv_from_ao(i,i)
|
|
||||||
! ! enddo
|
|
||||||
! ! print*, '**********'
|
|
||||||
!
|
|
||||||
!
|
|
||||||
!END_PROVIDER
|
|
||||||
!
|
|
||||||
!
|
|
||||||
! BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj, (mo_num,mo_num) ]
|
|
||||||
!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange, (mo_num,mo_num) ]
|
|
||||||
!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti, (mo_num,mo_num) ]
|
|
||||||
! implicit none
|
|
||||||
! BEGIN_DOC
|
|
||||||
! ! mo_two_e_integrals_jj(i,j) = J_ij
|
|
||||||
! ! mo_two_e_integrals_jj_exchange(i,j) = K_ij
|
|
||||||
! ! mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij
|
|
||||||
! END_DOC
|
|
||||||
!
|
|
||||||
! integer :: i,j
|
|
||||||
! double precision :: get_two_e_integral
|
|
||||||
!
|
|
||||||
! PROVIDE mo_two_e_integrals_in_map
|
|
||||||
! mo_two_e_integrals_jj = 0.d0
|
|
||||||
! mo_two_e_integrals_jj_exchange = 0.d0
|
|
||||||
!
|
|
||||||
! do j=1,mo_num
|
|
||||||
! do i=1,mo_num
|
|
||||||
! mo_two_e_integrals_jj(i,j) = get_two_e_integral(i,j,i,j,mo_integrals_map)
|
|
||||||
! mo_two_e_integrals_jj_exchange(i,j) = get_two_e_integral(i,j,j,i,mo_integrals_map)
|
|
||||||
! mo_two_e_integrals_jj_anti(i,j) = mo_two_e_integrals_jj(i,j) - mo_two_e_integrals_jj_exchange(i,j)
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!
|
|
||||||
!END_PROVIDER
|
|
||||||
!
|
|
||||||
!
|
|
||||||
!subroutine clear_mo_map
|
|
||||||
! implicit none
|
|
||||||
! BEGIN_DOC
|
|
||||||
! ! Frees the memory of the MO map
|
|
||||||
! END_DOC
|
|
||||||
! call map_deinit(mo_integrals_map)
|
|
||||||
! FREE mo_integrals_map mo_two_e_integrals_jj mo_two_e_integrals_jj_anti
|
|
||||||
! FREE mo_two_e_integrals_jj_exchange mo_two_e_integrals_in_map
|
|
||||||
!end
|
|
||||||
!
|
|
||||||
|
@ -30,29 +30,47 @@ MO 2e ints:
|
|||||||
mapping:
|
mapping:
|
||||||
changed so that all real ints (Jij, Kij, Jii) are in map2
|
changed so that all real ints (Jij, Kij, Jii) are in map2
|
||||||
<ij|ij>, <ij|ji>, <ii|ii>
|
<ij|ij>, <ij|ji>, <ii|ii>
|
||||||
|
some places in code assume that map1 ints can be real
|
||||||
|
(can remove once we are sure we like this mapping)
|
||||||
|
|
||||||
|
translational symmetry:
|
||||||
|
kconserv array gives quartets <ij|kl> which are symmetry-allowed
|
||||||
|
k_i + k_j = k_k + k_l
|
||||||
|
I + J = K + L
|
||||||
|
kconserv(I,J,K)=L
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
symmetry
|
symmetry
|
||||||
add provider for kconserv
|
|
||||||
restructure arrays?
|
restructure arrays?
|
||||||
mo coef and mo 1e ints already separate from real part of code (easy to add extra dimension)
|
mo coef and mo 1e ints already separate from real part of code (easy to add extra dimension)
|
||||||
ao 1e ints could also be handled in same way as mo 1e ints
|
ao 1e ints could also be handled in same way as mo 1e ints
|
||||||
|
|
||||||
ao_ints
|
ao_one_e_ints
|
||||||
ao_overlap_abs for complex
|
ao_overlap_abs for complex? <abs(i)|abs(j)> vs abs(<i|j>)
|
||||||
ao_integrals_n_e_per_atom_complex?
|
ao_integrals_n_e_per_atom_complex (should be simple, but currently we only use dummy nuclei)
|
||||||
not implemented for periodic:
|
|
||||||
|
ao_two_e_ints (todo)
|
||||||
|
get_ao_two_e_integrals_non_zero_periodic
|
||||||
|
get_ao_two_e_integrals_non_zero_jl_periodic
|
||||||
|
get_ao_two_e_integrals_non_zero_jl_from_list_periodic
|
||||||
|
|
||||||
|
mo_two_e_ints (todo)
|
||||||
|
get_mo_two_e_integrals_ij_periodic
|
||||||
|
add_integrals_to_map_complex
|
||||||
|
add_integrals_to_map_three_indices_complex
|
||||||
|
add_integrals_to_map_no_exit_34_complex
|
||||||
|
|
||||||
|
|
||||||
|
later:
|
||||||
|
calculation of pbc integrals in QP
|
||||||
ao_two_e_integral
|
ao_two_e_integral
|
||||||
ao_two_e_integral_schwartz_accel
|
ao_two_e_integral_schwartz_accel
|
||||||
compute_ao_two_e_integrals
|
compute_ao_two_e_integrals
|
||||||
[ double precision, ao_two_e_integral_schwartz,(ao_num,ao_num) ]
|
[ double precision, ao_two_e_integral_schwartz,(ao_num,ao_num) ]
|
||||||
compute_ao_integrals_jl
|
compute_ao_integrals_jl
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
mo_two_e_ints
|
|
||||||
incomplete
|
|
||||||
|
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
number of unique 4-tuples with 8-fold symmetry is a8(n)=n*(n+1)*(n^2+n+2)/8
|
number of unique 4-tuples with 8-fold symmetry is a8(n)=n*(n+1)*(n^2+n+2)/8
|
||||||
|
Loading…
Reference in New Issue
Block a user