mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-09-12 02:38:31 +02:00
rename periodic -> complex
This commit is contained in:
parent
3ca3dc3061
commit
4374145954
30
REPLACE
30
REPLACE
@ -839,3 +839,33 @@ qp_name nucl_elec_ref_bitmask_energy -r ref_bitmask_n_e_energy
|
||||
qp_name ref_bitmask_e_n_energy -r ref_bitmask_n_e_energy
|
||||
qp_name read_ao_integrals_e_n -r read_ao_integrals_n_e
|
||||
qp_name write_ao_integrals_e_n -r write_ao_integrals_n_e
|
||||
qp_name is_periodic -r is_complex
|
||||
qp_name two_e_integrals_index_periodic -r two_e_integrals_index_complex
|
||||
qp_name get_ao_two_e_integral_periodic -r get_ao_two_e_integral_complex
|
||||
qp_name import_ao_integrals_periodic -r import_ao_integrals_complex
|
||||
qp_name ao_two_e_integral_periodic_map_idx_sign -r ao_two_e_integral_complex_map_idx_sign
|
||||
qp_name ao_ints_periodic_1 -r ao_ints_complex_1
|
||||
qp_name ao_ints_periodic_2 -r ao_ints_complex_2
|
||||
qp_name import_mo_coef_periodic -r import_mo_coef_complex
|
||||
qp_name is_periodic -r is_complex
|
||||
qp_name get_ao_two_e_integral_periodic_simple -r get_ao_two_e_integral_complex_simple
|
||||
qp_name ao_integrals_cache_periodic -r ao_integrals_cache_complex
|
||||
qp_name get_two_e_integral_periodic -r get_two_e_integral_complex
|
||||
qp_name get_ao_two_e_integrals_non_zero_periodic -r get_ao_two_e_integrals_non_zero_complex
|
||||
qp_name get_mo_two_e_integrals_exch_ii_periodic -r get_mo_two_e_integrals_exch_ii_complex
|
||||
qp_name mo_ints_periodic_2 -r mo_ints_complex_2
|
||||
qp_name mo_ints_periodic_1 -r mo_ints_complex_1
|
||||
qp_name get_mo_two_e_integrals_i1j1_periodic -r get_mo_two_e_integrals_i1j1_complex
|
||||
qp_name get_mo_two_e_integrals_exch_ijji_periodic -r get_mo_two_e_integrals_exch_ijji_complex
|
||||
qp_name get_mo_two_e_integrals_periodic -r get_mo_two_e_integrals_complex
|
||||
qp_name mo_integrals_cache_periodic -r mo_integrals_cache_complex
|
||||
qp_name get_two_e_integral_periodic_simple -r get_two_e_integral_complex_simple
|
||||
qp_name big_array_coulomb_integrals_periodic -r big_array_coulomb_integrals_complex
|
||||
qp_name big_array_exchange_integrals_periodic -r big_array_exchange_integrals_complex
|
||||
qp_name get_ao_two_e_integrals_periodic -r get_ao_two_e_integrals_complex
|
||||
qp_name get_ao_two_e_integrals_non_zero_jl_periodic -r get_ao_two_e_integrals_non_zero_jl_complex
|
||||
qp_name get_ao_two_e_integrals_non_zero_jl_from_list_periodic -r get_ao_two_e_integrals_non_zero_jl_from_list_complex
|
||||
qp_name mo_two_e_integral_periodic -r mo_two_e_integral_complex
|
||||
qp_name get_mo_two_e_integrals_ij_periodic -r get_mo_two_e_integrals_ij_complex
|
||||
qp_name get_mo_two_e_integrals_coulomb_ii_periodic -r get_mo_two_e_integrals_coulomb_ii_complex
|
||||
qp_name get_mo_two_e_integrals_coulomb_ijij_periodic -r get_mo_two_e_integrals_coulomb_ijij_complex
|
||||
|
@ -118,7 +118,7 @@ BEGIN_PROVIDER [ double precision, ao_overlap_abs,(ao_num,ao_num) ]
|
||||
double precision :: A_center(3), B_center(3)
|
||||
integer :: power_A(3), power_B(3)
|
||||
double precision :: lower_exp_val, dx
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
do j=1,ao_num
|
||||
do i= 1,ao_num
|
||||
ao_overlap_abs(i,j)= cdabs(ao_overlap_complex(i,j))
|
||||
|
@ -12,7 +12,7 @@ BEGIN_PROVIDER [ type(map_type), ao_integrals_map ]
|
||||
integer(key_kind) :: key_max
|
||||
integer(map_size_kind) :: sze
|
||||
call two_e_integrals_index(ao_num,ao_num,ao_num,ao_num,key_max)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
sze = key_max*2
|
||||
call map_init(ao_integrals_map,sze)
|
||||
call map_init(ao_integrals_map_2,sze)
|
||||
@ -263,7 +263,7 @@ subroutine get_ao_two_e_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_z
|
||||
integer :: i
|
||||
integer(key_kind) :: hash
|
||||
double precision :: thresh,tmp
|
||||
if(is_periodic) then
|
||||
if(is_complex) then
|
||||
print*,'not implemented for periodic:',irp_here
|
||||
stop -1
|
||||
endif
|
||||
@ -311,7 +311,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl(j,l,thresh,sze_max,sze,out_val,out
|
||||
integer(key_kind) :: hash
|
||||
double precision :: tmp
|
||||
|
||||
if(is_periodic) then
|
||||
if(is_complex) then
|
||||
print*,'not implemented for periodic:',irp_here
|
||||
stop -1
|
||||
endif
|
||||
@ -361,7 +361,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl_from_list(j,l,thresh,list,n_list,s
|
||||
integer(key_kind) :: hash
|
||||
double precision :: tmp
|
||||
|
||||
if(is_periodic) then
|
||||
if(is_complex) then
|
||||
print*,'not implemented for periodic:',irp_here
|
||||
stop -1
|
||||
endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
use map_module
|
||||
|
||||
|
||||
subroutine two_e_integrals_index_periodic(i,j,k,l,i1,p,q)
|
||||
subroutine two_e_integrals_index_complex(i,j,k,l,i1,p,q)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -138,7 +138,7 @@ subroutine two_e_integrals_index_reverse_complex_2(i,j,k,l,i1)
|
||||
end
|
||||
|
||||
|
||||
BEGIN_PROVIDER [ complex*16, ao_integrals_cache_periodic, (0:64*64*64*64) ]
|
||||
BEGIN_PROVIDER [ complex*16, ao_integrals_cache_complex, (0:64*64*64*64) ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Cache of AO integrals for fast access
|
||||
@ -151,7 +151,7 @@ BEGIN_PROVIDER [ complex*16, ao_integrals_cache_periodic, (0:64*64*64*64) ]
|
||||
complex(integral_kind) :: integral
|
||||
integer(key_kind) :: p,q,r,s,ik,jl
|
||||
logical :: ilek, jlel, iklejl
|
||||
complex*16 :: get_ao_two_e_integral_periodic_simple
|
||||
complex*16 :: get_ao_two_e_integral_complex_simple
|
||||
|
||||
|
||||
!$OMP PARALLEL DO PRIVATE (ilek,jlel,p,q,r,s, ik,jl,iklejl, &
|
||||
@ -161,14 +161,14 @@ BEGIN_PROVIDER [ complex*16, ao_integrals_cache_periodic, (0:64*64*64*64) ]
|
||||
do j=ao_integrals_cache_min,ao_integrals_cache_max
|
||||
do i=ao_integrals_cache_min,ao_integrals_cache_max
|
||||
!DIR$ FORCEINLINE
|
||||
integral = get_ao_two_e_integral_periodic_simple(i,j,k,l,&
|
||||
integral = get_ao_two_e_integral_complex_simple(i,j,k,l,&
|
||||
ao_integrals_map,ao_integrals_map_2)
|
||||
|
||||
ii = l-ao_integrals_cache_min
|
||||
ii = ior( shiftl(ii,6), k-ao_integrals_cache_min)
|
||||
ii = ior( shiftl(ii,6), j-ao_integrals_cache_min)
|
||||
ii = ior( shiftl(ii,6), i-ao_integrals_cache_min)
|
||||
ao_integrals_cache_periodic(ii) = integral
|
||||
ao_integrals_cache_complex(ii) = integral
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
@ -177,7 +177,7 @@ BEGIN_PROVIDER [ complex*16, ao_integrals_cache_periodic, (0:64*64*64*64) ]
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
subroutine ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
subroutine ao_two_e_integral_complex_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -209,7 +209,7 @@ subroutine ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
double precision, intent(out) :: sign
|
||||
integer(key_kind) :: p,q,r,s,ik,jl,ij,kl
|
||||
!DIR$ FORCEINLINE
|
||||
call two_e_integrals_index_periodic(i,j,k,l,idx,ik,jl)
|
||||
call two_e_integrals_index_complex(i,j,k,l,idx,ik,jl)
|
||||
p = min(i,j)
|
||||
r = max(i,j)
|
||||
ij = p+shiftr(r*r-r,1)
|
||||
@ -267,7 +267,7 @@ subroutine ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
endif
|
||||
end
|
||||
|
||||
complex*16 function get_ao_two_e_integral_periodic_simple(i,j,k,l,map,map2) result(result)
|
||||
complex*16 function get_ao_two_e_integral_complex_simple(i,j,k,l,map,map2) result(result)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -285,7 +285,7 @@ complex*16 function get_ao_two_e_integral_periodic_simple(i,j,k,l,map,map2) resu
|
||||
double precision :: sign
|
||||
! a.le.c, b.le.d, tri(a,c).le.tri(b,d)
|
||||
PROVIDE ao_two_e_integrals_in_map
|
||||
call ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
call ao_two_e_integral_complex_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
if (use_map1) then
|
||||
call map_get(map,idx,tmp_re)
|
||||
call map_get(map,idx+1,tmp_im)
|
||||
@ -304,7 +304,7 @@ complex*16 function get_ao_two_e_integral_periodic_simple(i,j,k,l,map,map2) resu
|
||||
end
|
||||
|
||||
|
||||
complex*16 function get_ao_two_e_integral_periodic(i,j,k,l,map,map2) result(result)
|
||||
complex*16 function get_ao_two_e_integral_complex(i,j,k,l,map,map2) result(result)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -317,11 +317,11 @@ complex*16 function get_ao_two_e_integral_periodic(i,j,k,l,map,map2) result(resu
|
||||
type(map_type), intent(inout) :: map,map2
|
||||
integer :: ii
|
||||
complex(integral_kind) :: tmp
|
||||
complex(integral_kind) :: get_ao_two_e_integral_periodic_simple
|
||||
complex(integral_kind) :: get_ao_two_e_integral_complex_simple
|
||||
integer(key_kind) :: p,q,r,s,ik,jl
|
||||
logical :: ilek, jlel, iklejl
|
||||
! a.le.c, b.le.d, tri(a,c).le.tri(b,d)
|
||||
PROVIDE ao_two_e_integrals_in_map ao_integrals_cache_periodic ao_integrals_cache_min
|
||||
PROVIDE ao_two_e_integrals_in_map ao_integrals_cache_complex ao_integrals_cache_min
|
||||
!DIR$ FORCEINLINE
|
||||
! if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
|
||||
! tmp = (0.d0,0.d0)
|
||||
@ -334,20 +334,20 @@ complex*16 function get_ao_two_e_integral_periodic(i,j,k,l,map,map2) result(resu
|
||||
ii = ior(ii, j-ao_integrals_cache_min)
|
||||
ii = ior(ii, i-ao_integrals_cache_min)
|
||||
if (iand(ii, -64) /= 0) then
|
||||
tmp = get_ao_two_e_integral_periodic_simple(i,j,k,l,map,map2)
|
||||
tmp = get_ao_two_e_integral_complex_simple(i,j,k,l,map,map2)
|
||||
else
|
||||
ii = l-ao_integrals_cache_min
|
||||
ii = ior( shiftl(ii,6), k-ao_integrals_cache_min)
|
||||
ii = ior( shiftl(ii,6), j-ao_integrals_cache_min)
|
||||
ii = ior( shiftl(ii,6), i-ao_integrals_cache_min)
|
||||
tmp = ao_integrals_cache_periodic(ii)
|
||||
tmp = ao_integrals_cache_complex(ii)
|
||||
endif
|
||||
result = tmp
|
||||
endif
|
||||
end
|
||||
|
||||
|
||||
subroutine get_ao_two_e_integrals_periodic(j,k,l,sze,out_val)
|
||||
subroutine get_ao_two_e_integrals_complex(j,k,l,sze,out_val)
|
||||
use map_module
|
||||
BEGIN_DOC
|
||||
! Gets multiple AO bi-electronic integral from the AO map .
|
||||
@ -369,14 +369,14 @@ subroutine get_ao_two_e_integrals_periodic(j,k,l,sze,out_val)
|
||||
return
|
||||
endif
|
||||
|
||||
complex*16 :: get_ao_two_e_integral_periodic
|
||||
complex*16 :: get_ao_two_e_integral_complex
|
||||
do i=1,sze
|
||||
out_val(i) = get_ao_two_e_integral_periodic(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
out_val(i) = get_ao_two_e_integral_complex(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
subroutine get_ao_two_e_integrals_non_zero_periodic(j,k,l,sze,out_val,out_val_index,non_zero_int)
|
||||
subroutine get_ao_two_e_integrals_non_zero_complex(j,k,l,sze,out_val,out_val_index,non_zero_int)
|
||||
print*,'not implemented for periodic',irp_here
|
||||
stop -1
|
||||
! use map_module
|
||||
@ -392,7 +392,7 @@ subroutine get_ao_two_e_integrals_non_zero_periodic(j,k,l,sze,out_val,out_val_in
|
||||
! integer :: i
|
||||
! integer(key_kind) :: hash
|
||||
! double precision :: thresh,tmp
|
||||
! if(is_periodic) then
|
||||
! if(is_complex) then
|
||||
! print*,'not implemented for periodic:',irp_here
|
||||
! stop -1
|
||||
! endif
|
||||
@ -424,7 +424,7 @@ subroutine get_ao_two_e_integrals_non_zero_periodic(j,k,l,sze,out_val,out_val_in
|
||||
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_complex(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
|
||||
@ -442,7 +442,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,ou
|
||||
! integer(key_kind) :: hash
|
||||
! double precision :: tmp
|
||||
!
|
||||
! if(is_periodic) then
|
||||
! if(is_complex) then
|
||||
! print*,'not implemented for periodic:',irp_here
|
||||
! stop -1
|
||||
! endif
|
||||
@ -475,7 +475,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,ou
|
||||
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_complex(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
|
||||
@ -494,7 +494,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl_from_list_periodic(j,l,thresh,list
|
||||
! integer(key_kind) :: hash
|
||||
! double precision :: tmp
|
||||
!
|
||||
! if(is_periodic) then
|
||||
! if(is_complex) then
|
||||
! print*,'not implemented for periodic:',irp_here
|
||||
! stop -1
|
||||
! endif
|
||||
|
@ -351,11 +351,11 @@ BEGIN_PROVIDER [ logical, ao_two_e_integrals_in_map ]
|
||||
|
||||
double precision :: map_mb
|
||||
PROVIDE read_ao_two_e_integrals io_ao_two_e_integrals
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
if (read_ao_two_e_integrals) then
|
||||
print*,'Reading the AO integrals (periodic)'
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_periodic_1',ao_integrals_map)
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_periodic_2',ao_integrals_map_2)
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_complex_1',ao_integrals_map)
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_complex_2',ao_integrals_map_2)
|
||||
print*, 'AO integrals provided (periodic)'
|
||||
ao_two_e_integrals_in_map = .True.
|
||||
return
|
||||
|
@ -22,7 +22,7 @@ subroutine initialize_mo_coef_begin_iteration
|
||||
!
|
||||
! Initialize :c:data:`mo_coef_begin_iteration` to the current :c:data:`mo_coef`
|
||||
END_DOC
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
mo_coef_begin_iteration_complex = mo_coef_complex
|
||||
else
|
||||
mo_coef_begin_iteration = mo_coef
|
||||
@ -40,7 +40,7 @@ subroutine reorder_core_orb
|
||||
integer, allocatable :: index_core_orb(:),iorder(:)
|
||||
double precision, allocatable :: accu(:)
|
||||
integer :: i1,i2
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
complex*16, allocatable :: accu_c(:)
|
||||
allocate(accu(mo_num),accu_c(mo_num),index_core_orb(n_core_orb),iorder(mo_num))
|
||||
do i = 1, n_core_orb
|
||||
|
@ -22,7 +22,7 @@ END_PROVIDER
|
||||
HF_energy = nuclear_repulsion
|
||||
HF_two_electron_energy = 0.d0
|
||||
HF_one_electron_energy = 0.d0
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
complex*16 :: hf_1e_tmp, hf_2e_tmp
|
||||
hf_1e_tmp = (0.d0,0.d0)
|
||||
hf_2e_tmp = (0.d0,0.d0)
|
||||
|
@ -48,7 +48,7 @@ subroutine create_guess
|
||||
call ezfio_has_mo_basis_mo_coef(exists)
|
||||
if (.not.exists) then
|
||||
if (mo_guess_type == "HCore") then
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
mo_coef_complex = ao_ortho_lowdin_coef_complex
|
||||
TOUCH mo_coef_complex
|
||||
mo_label = 'Guess'
|
||||
@ -68,7 +68,7 @@ subroutine create_guess
|
||||
SOFT_TOUCH mo_coef mo_label
|
||||
endif
|
||||
else if (mo_guess_type == "Huckel") then
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
call huckel_guess_complex
|
||||
else
|
||||
call huckel_guess
|
||||
@ -92,7 +92,7 @@ subroutine run
|
||||
integer :: i_it, i, j, k
|
||||
|
||||
mo_label = "Orthonormalized"
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
call roothaan_hall_scf_complex
|
||||
else
|
||||
call roothaan_hall_scf
|
||||
|
@ -252,7 +252,7 @@ subroutine mix_mo_jk(j,k)
|
||||
dsqrt_2 = 1.d0/dsqrt(2.d0)
|
||||
i_plus = min(j,k)
|
||||
i_minus = max(j,k)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
complex*16 :: array_tmp_c(ao_num,2)
|
||||
array_tmp_c = (0.d0,0.d0)
|
||||
do i = 1, ao_num
|
||||
|
@ -10,7 +10,7 @@ subroutine save_mos
|
||||
call ezfio_set_mo_basis_mo_num(mo_num)
|
||||
call ezfio_set_mo_basis_mo_label(mo_label)
|
||||
call ezfio_set_mo_basis_ao_md5(ao_md5)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
allocate ( buffer(ao_num,mo_num),buffer_im(ao_num,mo_num))
|
||||
buffer = 0.d0
|
||||
buffer_im = 0.d0
|
||||
@ -49,7 +49,7 @@ subroutine save_mos_no_occ
|
||||
!call ezfio_set_mo_basis_mo_num(mo_num)
|
||||
!call ezfio_set_mo_basis_mo_label(mo_label)
|
||||
!call ezfio_set_mo_basis_ao_md5(ao_md5)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
allocate ( buffer(ao_num,mo_num),buffer_im(ao_num,mo_num))
|
||||
buffer = 0.d0
|
||||
buffer_im = 0.d0
|
||||
@ -86,7 +86,7 @@ subroutine save_mos_truncated(n)
|
||||
call ezfio_set_mo_basis_mo_num(n)
|
||||
call ezfio_set_mo_basis_mo_label(mo_label)
|
||||
call ezfio_set_mo_basis_ao_md5(ao_md5)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
allocate ( buffer(ao_num,n),buffer_im(ao_num,n))
|
||||
buffer = 0.d0
|
||||
buffer_im = 0.d0
|
||||
|
@ -5,7 +5,7 @@ subroutine hcore_guess
|
||||
implicit none
|
||||
character*(64) :: label
|
||||
label = "Guess"
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
call mo_as_eigvectors_of_mo_matrix_complex(mo_one_e_integrals_complex, &
|
||||
size(mo_one_e_integrals_complex,1), &
|
||||
size(mo_one_e_integrals_complex,2),label,1,.false.)
|
||||
|
@ -1,7 +1,7 @@
|
||||
subroutine orthonormalize_mos
|
||||
implicit none
|
||||
integer :: m,p,s
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
m = size(mo_coef_complex,1)
|
||||
p = size(mo_overlap_complex,1)
|
||||
call ortho_lowdin_complex(mo_overlap_complex,p,mo_num,mo_coef_complex,m,ao_num)
|
||||
|
@ -5,7 +5,7 @@ BEGIN_PROVIDER [double precision, core_energy]
|
||||
END_DOC
|
||||
integer :: i,j,k,l
|
||||
core_energy = 0.d0
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
do i = 1, n_core_orb
|
||||
j = list_core(i)
|
||||
core_energy += 2.d0 * dble(mo_one_e_integrals_complex(j,j)) + mo_two_e_integrals_jj(j,j)
|
||||
@ -51,7 +51,7 @@ END_PROVIDER
|
||||
BEGIN_PROVIDER [complex*16, core_fock_operator_complex, (mo_num,mo_num)]
|
||||
implicit none
|
||||
integer :: i,j,k,l,m,n
|
||||
complex*16 :: get_two_e_integral_periodic
|
||||
complex*16 :: get_two_e_integral_complex
|
||||
BEGIN_DOC
|
||||
! this is the contribution to the Fock operator from the core electrons
|
||||
END_DOC
|
||||
@ -63,8 +63,8 @@ BEGIN_PROVIDER [complex*16, core_fock_operator_complex, (mo_num,mo_num)]
|
||||
do m = 1, n_core_orb
|
||||
n = list_core(m)
|
||||
core_fock_operator_complex(j,l) += 2.d0 * &
|
||||
get_two_e_integral_periodic(j,n,l,n,mo_integrals_map,mo_integrals_map_2) - &
|
||||
get_two_e_integral_periodic(j,n,n,l,mo_integrals_map,mo_integrals_map_2)
|
||||
get_two_e_integral_complex(j,n,l,n,mo_integrals_map,mo_integrals_map_2) - &
|
||||
get_two_e_integral_complex(j,n,n,l,mo_integrals_map,mo_integrals_map_2)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
@ -79,7 +79,7 @@ subroutine four_idx_novvvv_complex
|
||||
integer :: i,j,k,l,n_integrals1,n_integrals2
|
||||
logical :: use_map1
|
||||
complex*16, allocatable :: f(:,:,:), f2(:,:,:), d(:,:), T(:,:,:,:), T2(:,:,:,:)
|
||||
complex*16, external :: get_ao_two_e_integral_periodic
|
||||
complex*16, external :: get_ao_two_e_integral_complex
|
||||
integer(key_kind), allocatable :: idx1(:),idx2(:)
|
||||
complex(integral_kind), allocatable :: values1(:),values2(:)
|
||||
double precision :: sign_tmp
|
||||
@ -107,8 +107,8 @@ subroutine four_idx_novvvv_complex
|
||||
do r=1,ao_num
|
||||
do q=1,ao_num
|
||||
do p=1,r
|
||||
f (p,q,r) = get_ao_two_e_integral_periodic(p,q,r,s,ao_integrals_map,ao_integrals_map_2)
|
||||
f (r,q,p) = get_ao_two_e_integral_periodic(r,q,p,s,ao_integrals_map,ao_integrals_map_2)
|
||||
f (p,q,r) = get_ao_two_e_integral_complex(p,q,r,s,ao_integrals_map,ao_integrals_map_2)
|
||||
f (r,q,p) = get_ao_two_e_integral_complex(r,q,p,s,ao_integrals_map,ao_integrals_map_2)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
@ -146,7 +146,7 @@ subroutine four_idx_novvvv_complex
|
||||
n_integrals2 = 0
|
||||
do l=1,mo_num
|
||||
do k=1,mo_num
|
||||
call ao_two_e_integral_periodic_map_idx_sign(list_core_inact_act(i),list_core_inact_act(j),k,l,use_map1,idx_tmp,sign_tmp)
|
||||
call ao_two_e_integral_complex_map_idx_sign(list_core_inact_act(i),list_core_inact_act(j),k,l,use_map1,idx_tmp,sign_tmp)
|
||||
if (use_map1) then
|
||||
n_integrals1+=1
|
||||
values1(n_integrals1) = dble(d(k,l))
|
||||
@ -176,7 +176,7 @@ subroutine four_idx_novvvv_complex
|
||||
n_integrals2 = 0
|
||||
do l=1,mo_num
|
||||
do k=1,mo_num
|
||||
call ao_two_e_integral_periodic_map_idx_sign(list_core_inact_act(i),k,list_core_inact_act(j),l,use_map1,idx_tmp,sign_tmp)
|
||||
call ao_two_e_integral_complex_map_idx_sign(list_core_inact_act(i),k,list_core_inact_act(j),l,use_map1,idx_tmp,sign_tmp)
|
||||
if (use_map1) then
|
||||
n_integrals1+=1
|
||||
values1(n_integrals1) = dble(d(k,l))
|
||||
|
@ -25,8 +25,8 @@
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [complex*16, big_array_coulomb_integrals_periodic, (mo_num,mo_num, mo_num)]
|
||||
&BEGIN_PROVIDER [complex*16, big_array_exchange_integrals_periodic,(mo_num,mo_num, mo_num)]
|
||||
BEGIN_PROVIDER [complex*16, big_array_coulomb_integrals_complex, (mo_num,mo_num, mo_num)]
|
||||
&BEGIN_PROVIDER [complex*16, big_array_exchange_integrals_complex,(mo_num,mo_num, mo_num)]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! big_array_coulomb_integrals(j,i,k) = <ij|kj> = (ik|jj)
|
||||
@ -37,17 +37,17 @@ END_PROVIDER
|
||||
! b_a_exch_int(j,i,k) = b_a_exch_int(j,k,i)*
|
||||
END_DOC
|
||||
integer :: i,j,k,l
|
||||
complex*16 :: get_two_e_integral_periodic
|
||||
complex*16 :: get_two_e_integral_complex
|
||||
complex*16 :: integral
|
||||
|
||||
do k = 1, mo_num
|
||||
do i = 1, mo_num
|
||||
do j = 1, mo_num
|
||||
l = j
|
||||
integral = get_two_e_integral_periodic(i,j,k,l,mo_integrals_map,mo_integrals_map_2)
|
||||
integral = get_two_e_integral_complex(i,j,k,l,mo_integrals_map,mo_integrals_map_2)
|
||||
big_array_coulomb_integrals(j,i,k) = integral
|
||||
l = j
|
||||
integral = get_two_e_integral_periodic(i,j,l,k,mo_integrals_map,mo_integrals_map_2)
|
||||
integral = get_two_e_integral_complex(i,j,l,k,mo_integrals_map,mo_integrals_map_2)
|
||||
big_array_exchange_integrals(j,i,k) = integral
|
||||
enddo
|
||||
enddo
|
||||
|
@ -12,7 +12,7 @@ BEGIN_PROVIDER [ type(map_type), mo_integrals_map ]
|
||||
integer(key_kind) :: key_max
|
||||
integer(map_size_kind) :: sze
|
||||
call two_e_integrals_index(mo_num,mo_num,mo_num,mo_num,key_max)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
sze = key_max*2
|
||||
call map_init(mo_integrals_map,sze)
|
||||
call map_init(mo_integrals_map_2,sze)
|
||||
@ -379,7 +379,7 @@ integer*8 function get_mo_map_size()
|
||||
! Return the number of elements in the MO map
|
||||
END_DOC
|
||||
get_mo_map_size = mo_integrals_map % n_elements
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
get_mo_map_size += mo_integrals_map_2 % n_elements
|
||||
endif
|
||||
end
|
||||
|
@ -16,7 +16,7 @@ subroutine insert_into_mo_integrals_map_2(n_integrals, &
|
||||
call map_update(mo_integrals_map_2, buffer_i, buffer_values, n_integrals, thr)
|
||||
end
|
||||
|
||||
BEGIN_PROVIDER [ complex*16, mo_integrals_cache_periodic, (0_8:128_8*128_8*128_8*128_8) ]
|
||||
BEGIN_PROVIDER [ complex*16, mo_integrals_cache_complex, (0_8:128_8*128_8*128_8*128_8) ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Cache of MO integrals for fast access
|
||||
@ -27,7 +27,7 @@ BEGIN_PROVIDER [ complex*16, mo_integrals_cache_periodic, (0_8:128_8*128_8*128_8
|
||||
integer*8 :: ii
|
||||
integer(key_kind) :: idx
|
||||
complex(integral_kind) :: integral
|
||||
complex*16 :: get_two_e_integral_periodic_simple
|
||||
complex*16 :: get_two_e_integral_complex_simple
|
||||
FREE ao_integrals_cache
|
||||
!$OMP PARALLEL DO PRIVATE (i,j,k,l,i4,j4,k4,l4,idx,ii,integral)
|
||||
do l=mo_integrals_cache_min_8,mo_integrals_cache_max_8
|
||||
@ -39,13 +39,13 @@ BEGIN_PROVIDER [ complex*16, mo_integrals_cache_periodic, (0_8:128_8*128_8*128_8
|
||||
do i=mo_integrals_cache_min_8,mo_integrals_cache_max_8
|
||||
i4 = int(i,4)
|
||||
!DIR$ FORCEINLINE
|
||||
integral = get_two_e_integral_periodic_simple(i,j,k,l,&
|
||||
integral = get_two_e_integral_complex_simple(i,j,k,l,&
|
||||
mo_integrals_map,mo_integrals_map_2)
|
||||
ii = l-mo_integrals_cache_min_8
|
||||
ii = ior( shiftl(ii,7), k-mo_integrals_cache_min_8)
|
||||
ii = ior( shiftl(ii,7), j-mo_integrals_cache_min_8)
|
||||
ii = ior( shiftl(ii,7), i-mo_integrals_cache_min_8)
|
||||
mo_integrals_cache_periodic(ii) = integral
|
||||
mo_integrals_cache_complex(ii) = integral
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
@ -55,7 +55,7 @@ BEGIN_PROVIDER [ complex*16, mo_integrals_cache_periodic, (0_8:128_8*128_8*128_8
|
||||
END_PROVIDER
|
||||
|
||||
|
||||
complex*16 function get_two_e_integral_periodic_simple(i,j,k,l,map,map2) result(result)
|
||||
complex*16 function get_two_e_integral_complex_simple(i,j,k,l,map,map2) result(result)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -70,7 +70,7 @@ complex*16 function get_two_e_integral_periodic_simple(i,j,k,l,map,map2) result(
|
||||
logical :: use_map1
|
||||
double precision :: sign
|
||||
PROVIDE mo_two_e_integrals_in_map
|
||||
call ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
call ao_two_e_integral_complex_map_idx_sign(i,j,k,l,use_map1,idx,sign)
|
||||
if (use_map1) then
|
||||
call map_get(map,idx,tmp_re)
|
||||
call map_get(map,idx+1,tmp_im)
|
||||
@ -88,7 +88,7 @@ complex*16 function get_two_e_integral_periodic_simple(i,j,k,l,map,map2) result(
|
||||
result = tmp
|
||||
end
|
||||
|
||||
complex*16 function get_two_e_integral_periodic(i,j,k,l,map,map2)
|
||||
complex*16 function get_two_e_integral_complex(i,j,k,l,map,map2)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -101,39 +101,39 @@ complex*16 function get_two_e_integral_periodic(i,j,k,l,map,map2)
|
||||
integer*8 :: ii_8
|
||||
type(map_type), intent(inout) :: map,map2
|
||||
complex(integral_kind) :: tmp
|
||||
complex(integral_kind) :: get_two_e_integral_periodic_simple
|
||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_periodic
|
||||
complex(integral_kind) :: get_two_e_integral_complex_simple
|
||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_complex
|
||||
ii = l-mo_integrals_cache_min
|
||||
ii = ior(ii, k-mo_integrals_cache_min)
|
||||
ii = ior(ii, j-mo_integrals_cache_min)
|
||||
ii = ior(ii, i-mo_integrals_cache_min)
|
||||
if (iand(ii, -128) /= 0) then
|
||||
tmp = get_two_e_integral_periodic_simple(i,j,k,l,map,map2)
|
||||
tmp = get_two_e_integral_complex_simple(i,j,k,l,map,map2)
|
||||
else
|
||||
ii_8 = int(l,8)-mo_integrals_cache_min_8
|
||||
ii_8 = ior( shiftl(ii_8,7), int(k,8)-mo_integrals_cache_min_8)
|
||||
ii_8 = ior( shiftl(ii_8,7), int(j,8)-mo_integrals_cache_min_8)
|
||||
ii_8 = ior( shiftl(ii_8,7), int(i,8)-mo_integrals_cache_min_8)
|
||||
tmp = mo_integrals_cache_periodic(ii_8)
|
||||
tmp = mo_integrals_cache_complex(ii_8)
|
||||
endif
|
||||
get_two_e_integral_periodic = tmp
|
||||
get_two_e_integral_complex = tmp
|
||||
end
|
||||
|
||||
complex*16 function mo_two_e_integral_periodic(i,j,k,l)
|
||||
complex*16 function mo_two_e_integral_complex(i,j,k,l)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Returns one integral <ij|kl> in the MO basis
|
||||
END_DOC
|
||||
integer, intent(in) :: i,j,k,l
|
||||
complex*16 :: get_two_e_integral_periodic
|
||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_periodic
|
||||
complex*16 :: get_two_e_integral_complex
|
||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_complex
|
||||
PROVIDE mo_two_e_integrals_in_map
|
||||
!DIR$ FORCEINLINE
|
||||
mo_two_e_integral_periodic = get_two_e_integral_periodic(i,j,k,l,mo_integrals_map,mo_integrals_map_2)
|
||||
mo_two_e_integral_complex = get_two_e_integral_complex(i,j,k,l,mo_integrals_map,mo_integrals_map_2)
|
||||
return
|
||||
end
|
||||
|
||||
subroutine get_mo_two_e_integrals_periodic(j,k,l,sze,out_val,map,map2)
|
||||
subroutine get_mo_two_e_integrals_complex(j,k,l,sze,out_val,map,map2)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -144,18 +144,18 @@ subroutine get_mo_two_e_integrals_periodic(j,k,l,sze,out_val,map,map2)
|
||||
complex*16, intent(out) :: out_val(sze)
|
||||
type(map_type), intent(inout) :: map,map2
|
||||
integer :: i
|
||||
complex*16, external :: get_two_e_integral_periodic_simple
|
||||
complex*16, external :: get_two_e_integral_complex_simple
|
||||
|
||||
integer :: ii, ii0
|
||||
integer*8 :: ii_8, ii0_8
|
||||
complex(integral_kind) :: tmp
|
||||
integer(key_kind) :: i1, idx
|
||||
integer(key_kind) :: p,q,r,s,i2
|
||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_periodic
|
||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_complex
|
||||
|
||||
!DEBUG
|
||||
! do i=1,sze
|
||||
! out_val(i) = get_two_e_integral_periodic(i,j,k,l,map,map2)
|
||||
! out_val(i) = get_two_e_integral_complex(i,j,k,l,map,map2)
|
||||
! enddo
|
||||
! return
|
||||
!DEBUG
|
||||
@ -172,14 +172,14 @@ subroutine get_mo_two_e_integrals_periodic(j,k,l,sze,out_val,map,map2)
|
||||
ii = ior(ii0, i-mo_integrals_cache_min)
|
||||
if (iand(ii, -128) == 0) then
|
||||
ii_8 = ior( shiftl(ii0_8,7), int(i,8)-mo_integrals_cache_min_8)
|
||||
out_val(i) = mo_integrals_cache_periodic(ii_8)
|
||||
out_val(i) = mo_integrals_cache_complex(ii_8)
|
||||
else
|
||||
out_val(i) = get_two_e_integral_periodic_simple(i,j,k,l,map,map2)
|
||||
out_val(i) = get_two_e_integral_complex_simple(i,j,k,l,map,map2)
|
||||
endif
|
||||
enddo
|
||||
end
|
||||
|
||||
!subroutine get_mo_two_e_integrals_ij_periodic(k,l,sze,out_array,map)
|
||||
!subroutine get_mo_two_e_integrals_ij_complex(k,l,sze,out_array,map)
|
||||
! use map_module
|
||||
! implicit none
|
||||
! BEGIN_DOC
|
||||
@ -233,7 +233,7 @@ end
|
||||
! deallocate(pairs,hash,iorder,tmp_val)
|
||||
!end
|
||||
|
||||
!subroutine get_mo_two_e_integrals_i1j1_periodic(k,l,sze,out_array,map)
|
||||
!subroutine get_mo_two_e_integrals_i1j1_complex(k,l,sze,out_array,map)
|
||||
! use map_module
|
||||
! implicit none
|
||||
! BEGIN_DOC
|
||||
@ -287,7 +287,7 @@ end
|
||||
! deallocate(pairs,hash,iorder,tmp_val)
|
||||
!end
|
||||
|
||||
subroutine get_mo_two_e_integrals_coulomb_ii_periodic(k,l,sze,out_val,map,map2)
|
||||
subroutine get_mo_two_e_integrals_coulomb_ii_complex(k,l,sze,out_val,map,map2)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -311,7 +311,7 @@ subroutine get_mo_two_e_integrals_coulomb_ii_periodic(k,l,sze,out_val,map,map2)
|
||||
PROVIDE mo_two_e_integrals_in_map
|
||||
|
||||
if (k.eq.l) then ! real, call other function
|
||||
call get_mo_two_e_integrals_coulomb_ijij_periodic(k,sze,out_re,map2)
|
||||
call get_mo_two_e_integrals_coulomb_ijij_complex(k,sze,out_re,map2)
|
||||
do i=1,sze
|
||||
out_val(i) = dcmplx(out_re(i),0.d0)
|
||||
enddo
|
||||
@ -347,7 +347,7 @@ subroutine get_mo_two_e_integrals_coulomb_ii_periodic(k,l,sze,out_val,map,map2)
|
||||
endif
|
||||
end
|
||||
|
||||
subroutine get_mo_two_e_integrals_coulomb_ijij_periodic(j,sze,out_val,map2)
|
||||
subroutine get_mo_two_e_integrals_coulomb_ijij_complex(j,sze,out_val,map2)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -382,7 +382,7 @@ subroutine get_mo_two_e_integrals_coulomb_ijij_periodic(j,sze,out_val,map2)
|
||||
endif
|
||||
end
|
||||
|
||||
subroutine get_mo_two_e_integrals_exch_ii_periodic(k,l,sze,out_val,map,map2)
|
||||
subroutine get_mo_two_e_integrals_exch_ii_complex(k,l,sze,out_val,map,map2)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
@ -410,7 +410,7 @@ subroutine get_mo_two_e_integrals_exch_ii_periodic(k,l,sze,out_val,map,map2)
|
||||
|
||||
|
||||
if (k.eq.l) then ! real, call other function
|
||||
call get_mo_two_e_integrals_exch_ijji_periodic(k,sze,out_re,map,map2)
|
||||
call get_mo_two_e_integrals_exch_ijji_complex(k,sze,out_re,map,map2)
|
||||
do i=1,sze
|
||||
out_val(i) = dcmplx(out_re(i),0.d0)
|
||||
enddo
|
||||
@ -457,7 +457,7 @@ subroutine get_mo_two_e_integrals_exch_ii_periodic(k,l,sze,out_val,map,map2)
|
||||
endif
|
||||
end
|
||||
|
||||
subroutine get_mo_two_e_integrals_exch_ijji_periodic(j,sze,out_val,map,map2)
|
||||
subroutine get_mo_two_e_integrals_exch_ijji_complex(j,sze,out_val,map,map2)
|
||||
use map_module
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
|
@ -33,12 +33,12 @@ BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
|
||||
|
||||
PROVIDE mo_class
|
||||
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
mo_two_e_integrals_in_map = .True.
|
||||
if (read_mo_two_e_integrals) then
|
||||
print*,'Reading the MO integrals'
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_periodic_1',mo_integrals_map)
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_periodic_2',mo_integrals_map_2)
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_complex_1',mo_integrals_map)
|
||||
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_complex_2',mo_integrals_map_2)
|
||||
print*, 'MO integrals provided (periodic)'
|
||||
return
|
||||
else
|
||||
@ -77,8 +77,8 @@ BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
|
||||
|
||||
if (write_mo_two_e_integrals.and.mpi_master) then
|
||||
call ezfio_set_work_empty(.False.)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints_periodic_1',mo_integrals_map)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints_periodic_2',mo_integrals_map_2)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints_complex_1',mo_integrals_map)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints_complex_2',mo_integrals_map_2)
|
||||
call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('Read')
|
||||
endif
|
||||
else
|
||||
@ -986,7 +986,7 @@ end
|
||||
double precision :: c
|
||||
integer :: n, pp
|
||||
integer, allocatable :: int_idx(:)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
complex(integral_kind) :: integral2
|
||||
complex(integral_kind), allocatable :: int_value2(:)
|
||||
complex*16 :: cz
|
||||
@ -1022,7 +1022,7 @@ end
|
||||
|
||||
|
||||
do r=1,ao_num
|
||||
call get_ao_two_e_integrals_non_zero_periodic(q,r,s,ao_num,int_value2,int_idx,n)
|
||||
call get_ao_two_e_integrals_non_zero_complex(q,r,s,ao_num,int_value2,int_idx,n)
|
||||
do pp=1,n
|
||||
p = int_idx(pp)
|
||||
integral2 = int_value2(pp)
|
||||
@ -1032,7 +1032,7 @@ end
|
||||
enddo
|
||||
endif
|
||||
enddo
|
||||
call get_ao_two_e_integrals_non_zero_periodic(q,s,r,ao_num,int_value2,int_idx,n)
|
||||
call get_ao_two_e_integrals_non_zero_complex(q,s,r,ao_num,int_value2,int_idx,n)
|
||||
do pp=1,n
|
||||
p = int_idx(pp)
|
||||
integral2 = int_value2(pp)
|
||||
@ -1196,7 +1196,7 @@ END_PROVIDER
|
||||
integer :: n, pp
|
||||
integer, allocatable :: int_idx(:)
|
||||
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
complex*16 :: cz
|
||||
complex(integral_kind) :: integral2
|
||||
complex(integral_kind), allocatable :: int_value2(:)
|
||||
@ -1236,7 +1236,7 @@ END_PROVIDER
|
||||
|
||||
|
||||
do r=1,ao_num
|
||||
call get_ao_two_e_integrals_non_zero_periodic(q,r,s,ao_num,int_value2,int_idx,n)
|
||||
call get_ao_two_e_integrals_non_zero_complex(q,r,s,ao_num,int_value2,int_idx,n)
|
||||
do pp=1,n
|
||||
p = int_idx(pp)
|
||||
integral2 = int_value2(pp)
|
||||
@ -1247,7 +1247,7 @@ END_PROVIDER
|
||||
enddo
|
||||
endif
|
||||
enddo
|
||||
call get_ao_two_e_integrals_non_zero_periodic(q,s,r,ao_num,int_value2,int_idx,n)
|
||||
call get_ao_two_e_integrals_non_zero_complex(q,s,r,ao_num,int_value2,int_idx,n)
|
||||
do pp=1,n
|
||||
p = int_idx(pp)
|
||||
integral2 = int_value2(pp)
|
||||
@ -1428,13 +1428,13 @@ END_PROVIDER
|
||||
PROVIDE mo_two_e_integrals_in_map
|
||||
mo_two_e_integrals_jj = 0.d0
|
||||
mo_two_e_integrals_jj_exchange = 0.d0
|
||||
if (is_periodic) then
|
||||
complex*16 :: get_two_e_integral_periodic
|
||||
if (is_complex) then
|
||||
complex*16 :: get_two_e_integral_complex
|
||||
do j=1,mo_num
|
||||
do i=1,mo_num
|
||||
mo_two_e_integrals_jj(i,j) = dble(get_two_e_integral_periodic(i,j,i,j,&
|
||||
mo_two_e_integrals_jj(i,j) = dble(get_two_e_integral_complex(i,j,i,j,&
|
||||
mo_integrals_map,mo_integrals_map_2))
|
||||
mo_two_e_integrals_jj_exchange(i,j) = dble(get_two_e_integral_periodic(i,j,j,i,&
|
||||
mo_two_e_integrals_jj_exchange(i,j) = dble(get_two_e_integral_complex(i,j,j,i,&
|
||||
mo_integrals_map,mo_integrals_map_2))
|
||||
mo_two_e_integrals_jj_anti(i,j) = mo_two_e_integrals_jj(i,j) - mo_two_e_integrals_jj_exchange(i,j)
|
||||
enddo
|
||||
@ -1458,7 +1458,7 @@ subroutine clear_mo_map
|
||||
! Frees the memory of the MO map
|
||||
END_DOC
|
||||
call map_deinit(mo_integrals_map)
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
call map_deinit(mo_integrals_map_2)
|
||||
endif
|
||||
FREE mo_integrals_map mo_two_e_integrals_jj mo_two_e_integrals_jj_anti
|
||||
|
@ -32,7 +32,7 @@ doc: Nuclear repulsion (Computed automaticaly or Read in the |EZFIO|)
|
||||
type:double precision
|
||||
interface: ezfio
|
||||
|
||||
[is_periodic]
|
||||
[is_complex]
|
||||
type: logical
|
||||
doc: If true, the calculation uses periodic boundary conditions
|
||||
interface: ezfio, provider, ocaml
|
||||
|
@ -101,7 +101,7 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_mo_alpha, (mo_num,mo_num) ]
|
||||
BEGIN_DOC
|
||||
! Fock matrix on the MO basis
|
||||
END_DOC
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
print*,'error',irp_here
|
||||
stop -1
|
||||
else
|
||||
@ -115,7 +115,7 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_mo_beta, (mo_num,mo_num) ]
|
||||
BEGIN_DOC
|
||||
! Fock matrix on the MO basis
|
||||
END_DOC
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
print*,'error',irp_here
|
||||
stop -1
|
||||
else
|
||||
@ -158,7 +158,7 @@ BEGIN_PROVIDER [ double precision, SCF_energy ]
|
||||
SCF_energy = nuclear_repulsion
|
||||
|
||||
integer :: i,j
|
||||
if (is_periodic) then
|
||||
if (is_complex) then
|
||||
complex*16 :: scf_e_tmp
|
||||
scf_e_tmp = dcmplx(SCF_energy,0.d0)
|
||||
do j=1,ao_num
|
||||
|
@ -9,12 +9,12 @@ subroutine run
|
||||
integer ::i,j,k,l
|
||||
|
||||
provide ao_two_e_integrals_in_map
|
||||
complex*16 :: get_ao_two_e_integral_periodic, tmp_cmplx
|
||||
complex*16 :: get_ao_two_e_integral_complex, tmp_cmplx
|
||||
do i=1,ao_num
|
||||
do j=1,ao_num
|
||||
do k=1,ao_num
|
||||
do l=1,ao_num
|
||||
tmp_cmplx = get_ao_two_e_integral_periodic(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
tmp_cmplx = get_ao_two_e_integral_complex(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
print'(4(I4),2(E15.7))',i,j,k,l,tmp_cmplx
|
||||
enddo
|
||||
enddo
|
||||
|
@ -130,7 +130,7 @@ provide ao_two_e_integrals_in_map
|
||||
! call ezfio_set_ao_one_e_ints_ao_integrals_n_e(A(1:ao_num, 1:ao_num))
|
||||
! call ezfio_set_ao_one_e_ints_ao_integrals_n_e_imag(B(1:ao_num, 1:ao_num))
|
||||
! call ezfio_set_ao_one_e_ints_io_ao_integrals_n_e("Read")
|
||||
complex*16 :: int2e_tmp1,int2e_tmp2,get_ao_two_e_integral_periodic_simple,get_ao_two_e_integral_periodic, tmp_cmplx
|
||||
complex*16 :: int2e_tmp1,int2e_tmp2,get_ao_two_e_integral_complex_simple,get_ao_two_e_integral_complex, tmp_cmplx
|
||||
double precision :: tmp3,tmp4,tmp5,tmp6
|
||||
double precision :: thr0
|
||||
thr0 = 1.d-10
|
||||
@ -144,11 +144,11 @@ provide ao_two_e_integrals_in_map
|
||||
do
|
||||
read (iunit,*,end=13) i,j,k,l, tmp_re, tmp_im
|
||||
tmp_cmplx = dcmplx(tmp_re,tmp_im)
|
||||
int2e_tmp1 = get_ao_two_e_integral_periodic_simple(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
int2e_tmp2 = get_ao_two_e_integral_periodic(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
int2e_tmp1 = get_ao_two_e_integral_complex_simple(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
int2e_tmp2 = get_ao_two_e_integral_complex(i,j,k,l,ao_integrals_map,ao_integrals_map_2)
|
||||
! print'(4(I4),3(E15.7))',i,j,k,l,tmp_re,real(int2e_tmp1),real(int2e_tmp2)
|
||||
! print'(4(I4),3(E15.7))',i,j,k,l,tmp_im,imag(int2e_tmp1),imag(int2e_tmp2)
|
||||
call ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx_tmp,sign)
|
||||
call ao_two_e_integral_complex_map_idx_sign(i,j,k,l,use_map1,idx_tmp,sign)
|
||||
! print*,use_map1,idx_tmp,sign
|
||||
call map_get(ao_integrals_map,idx_tmp,tmp3)
|
||||
call map_get(ao_integrals_map_2,idx_tmp,tmp4)
|
||||
@ -164,7 +164,7 @@ provide ao_two_e_integrals_in_map
|
||||
ii = ior( shiftl(ii,6), k-ao_integrals_cache_min)
|
||||
ii = ior( shiftl(ii,6), j-ao_integrals_cache_min)
|
||||
ii = ior( shiftl(ii,6), i-ao_integrals_cache_min)
|
||||
! print*,'cache(pbc)=', ao_integrals_cache_periodic(ii)
|
||||
! print*,'cache(pbc)=', ao_integrals_cache_complex(ii)
|
||||
! print*,'cache(old)=', ao_integrals_cache(ii)
|
||||
! print*
|
||||
! if (use_map1) then
|
||||
@ -210,8 +210,8 @@ provide ao_two_e_integrals_in_map
|
||||
! call map_sort(ao_integrals_map_2)
|
||||
! call map_unique(ao_integrals_map_2)
|
||||
!
|
||||
! call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_periodic_1',ao_integrals_map)
|
||||
! call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_periodic_2',ao_integrals_map_2)
|
||||
! call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_complex_1',ao_integrals_map)
|
||||
! call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_complex_2',ao_integrals_map_2)
|
||||
! call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read'
|
||||
print*,'map1'
|
||||
do i=0,ao_integrals_map%map_size
|
||||
|
@ -1,4 +1,4 @@
|
||||
program import_ao_integrals_periodic
|
||||
program import_ao_integrals_complex
|
||||
call run
|
||||
end
|
||||
|
||||
@ -117,7 +117,7 @@ subroutine run
|
||||
buffer_values_2 = 0.d0
|
||||
do
|
||||
read (iunit,*,end=13) i,j,k,l, tmp_re, tmp_im
|
||||
call ao_two_e_integral_periodic_map_idx_sign(i,j,k,l,use_map1,idx_tmp,sign)
|
||||
call ao_two_e_integral_complex_map_idx_sign(i,j,k,l,use_map1,idx_tmp,sign)
|
||||
print'(4(I4),(L3),(I6),(F7.1))',i,j,k,l,use_map1,idx_tmp,sign
|
||||
if (use_map1) then
|
||||
n_integrals_1 += 1
|
||||
@ -166,8 +166,8 @@ subroutine run
|
||||
call map_sort(ao_integrals_map_2)
|
||||
call map_unique(ao_integrals_map_2)
|
||||
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_periodic_1',ao_integrals_map)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_periodic_2',ao_integrals_map_2)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_complex_1',ao_integrals_map)
|
||||
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_complex_2',ao_integrals_map_2)
|
||||
call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read')
|
||||
|
||||
end
|
||||
|
@ -1,4 +1,4 @@
|
||||
program import_mo_coef_periodic
|
||||
program import_mo_coef_complex
|
||||
|
||||
PROVIDE ezfio_filename
|
||||
call run
|
||||
|
@ -50,12 +50,12 @@ ao_one_e_ints
|
||||
ao_integrals_n_e_per_atom_complex (should be simple, but currently we only use dummy nuclei)
|
||||
|
||||
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
|
||||
get_ao_two_e_integrals_non_zero_complex
|
||||
get_ao_two_e_integrals_non_zero_jl_complex
|
||||
get_ao_two_e_integrals_non_zero_jl_from_list_complex
|
||||
|
||||
mo_two_e_ints (todo)
|
||||
get_mo_two_e_integrals_ij_periodic
|
||||
get_mo_two_e_integrals_ij_complex
|
||||
add_integrals_to_map_complex
|
||||
add_integrals_to_map_three_indices_complex
|
||||
add_integrals_to_map_no_exit_34_complex
|
||||
@ -103,7 +103,7 @@ ocaml/Input_mo_basis.ml
|
||||
still needs mo_coef_to_string and to_string?
|
||||
|
||||
src/nuclei/EZFIO.cfg
|
||||
[is_periodic]
|
||||
[is_complex]
|
||||
if true use periodic parts of code
|
||||
|
||||
src/utils/linear_algebra.irp.f
|
||||
@ -123,7 +123,7 @@ src/utils_periodic/import_integrals_ao_periodic.irp.f
|
||||
read ints from pyscf
|
||||
TODO: don't read ao_num from stdin
|
||||
|
||||
src/utils_periodic/import_mo_coef_periodic.irp.f
|
||||
src/utils_periodic/import_mo_coef_complex.irp.f
|
||||
read mo_coef from pyscf
|
||||
|
||||
|
||||
@ -154,7 +154,7 @@ src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f
|
||||
each complex array is formed by combining real and imag arrays
|
||||
imag arrays can only be read from disk
|
||||
no complex/imag versions of ao_integrals_n_e_per_atom, but this should be straightforward if we need it later?
|
||||
changed ao_overlap_abs so that it is set to cdabs(ao_overlap_complex) if (is_periodic)
|
||||
changed ao_overlap_abs so that it is set to cdabs(ao_overlap_complex) if (is_complex)
|
||||
TODO: (maybe not the behavior we want)
|
||||
added S_inv_complex
|
||||
TODO: (no S_half_inv_complex yet)
|
||||
@ -172,7 +172,7 @@ src/ao_one_e_ints/ao_ortho_canonical_complex.irp.f
|
||||
ao_ortho_canonical_num_complex
|
||||
similar to real version
|
||||
providers are linked, so easier to just make num_complex instead of using original num (even though they will both have the same value)
|
||||
need to make sure this doesn't require any other downstream changes (i.e. replace ao_ortho_canonical_num with complex version if (is_periodic))
|
||||
need to make sure this doesn't require any other downstream changes (i.e. replace ao_ortho_canonical_num with complex version if (is_complex))
|
||||
ao_ortho_canonical_overlap_complex
|
||||
similar to real version
|
||||
|
||||
@ -184,20 +184,20 @@ src/ao_one_e_ints/ao_ortho_canonical_complex.irp.f
|
||||
|
||||
src/ao_two_e_ints/map_integrals.irp.f
|
||||
added ao_integrals_map_2 (provider linked to ao_integrals_map)
|
||||
double size of both maps if (is_periodic)
|
||||
subroutine two_e_integrals_index_periodic
|
||||
double size of both maps if (is_complex)
|
||||
subroutine two_e_integrals_index_complex
|
||||
same as real version, but return compound (2) indices to avoid recomputing
|
||||
ao_integrals_cache_periodic
|
||||
ao_integrals_cache_complex
|
||||
similar to real version
|
||||
subroutine ao_two_e_integral_periodic_map_idx_sign
|
||||
subroutine ao_two_e_integral_complex_map_idx_sign
|
||||
from i,j,k,l, return which map to use (T->1, F->2), location of real part of integral, sign of imaginary part of integral
|
||||
complex*16 function get_ao_two_e_integral_periodic_simple
|
||||
complex*16 function get_ao_two_e_integral_complex_simple
|
||||
args i,j,k,l,map1,map2
|
||||
return complex integral composed of correct elements from one of the maps
|
||||
complex*16 function get_ao_two_e_integral_periodic
|
||||
complex*16 function get_ao_two_e_integral_complex
|
||||
same behavior as _simple version, but checks cache first
|
||||
returns integral from cache if possible, otherwise retrieves from map
|
||||
subroutine get_ao_two_e_integrals_periodic
|
||||
subroutine get_ao_two_e_integrals_complex
|
||||
same functionality as real version
|
||||
subroutine insert_into_ao_integrals_map_2
|
||||
needed for second map
|
||||
@ -323,8 +323,8 @@ src/mo_one_e_ints/pot_mo_pseudo_ints.irp.f
|
||||
for periodic AOs, we always read (can't compute)
|
||||
for MOs, we can either read from disk or transform from AOs
|
||||
simplest way might be to link all three providers (integrals{,_imag,_complex})
|
||||
if (.not.is_periodic), just ignore imag and complex arrays?
|
||||
if (is_periodic)
|
||||
if (.not.is_complex), just ignore imag and complex arrays?
|
||||
if (is_complex)
|
||||
either read real/imag from disk and combine to form complex
|
||||
or transform complex MO ints from complex AO ints and also assign real/imag parts to separate arrays?
|
||||
|
||||
@ -354,7 +354,7 @@ src/hartree_fock/scf.irp.f
|
||||
subroutine create_guess
|
||||
should work for periodic
|
||||
TODO: decide what to do about mo_coef_complex and imag/real parts for touch/save!!!
|
||||
TODO: call roothaan_hall_scf_complex if (is_periodic)
|
||||
TODO: call roothaan_hall_scf_complex if (is_complex)
|
||||
|
||||
|
||||
src/scf_utils/diagonalize_fock_complex.irp.f
|
||||
@ -373,7 +373,7 @@ src/scf_utils/diis_complex.irp.f
|
||||
|
||||
|
||||
src/scf_utils/fock_matrix.irp.f
|
||||
added checks to make sure we don't end up in real providers if (is_periodic)
|
||||
added checks to make sure we don't end up in real providers if (is_complex)
|
||||
probably not necessary?
|
||||
[ double precision, SCF_energy ]
|
||||
modified for periodic
|
||||
@ -391,7 +391,7 @@ src/scf_utils/fock_matrix_complex.irp.f
|
||||
|
||||
src/scf_utils/huckel_complex.irp.f
|
||||
similar to real version
|
||||
could just put if (is_periodic) branch in real version? (instead of making separate subroutine)
|
||||
could just put if (is_complex) branch in real version? (instead of making separate subroutine)
|
||||
has soft_touch mo_coef_complex and call to save_mos (see other notes on real/imag parts)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user