10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-06-23 21:52:25 +02:00

rename periodic -> complex

This commit is contained in:
Kevin Gasperich 2020-02-11 18:23:34 -06:00
parent 3ca3dc3061
commit 4374145954
25 changed files with 173 additions and 143 deletions

30
REPLACE
View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.)

View File

@ -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)

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
program import_mo_coef_periodic
program import_mo_coef_complex
PROVIDE ezfio_filename
call run

View File

@ -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)