10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-06-28 08:02:33 +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 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 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 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) double precision :: A_center(3), B_center(3)
integer :: power_A(3), power_B(3) integer :: power_A(3), power_B(3)
double precision :: lower_exp_val, dx double precision :: lower_exp_val, dx
if (is_periodic) then if (is_complex) then
do j=1,ao_num do j=1,ao_num
do i= 1,ao_num do i= 1,ao_num
ao_overlap_abs(i,j)= cdabs(ao_overlap_complex(i,j)) 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(key_kind) :: key_max
integer(map_size_kind) :: sze integer(map_size_kind) :: sze
call two_e_integrals_index(ao_num,ao_num,ao_num,ao_num,key_max) 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 sze = key_max*2
call map_init(ao_integrals_map,sze) call map_init(ao_integrals_map,sze)
call map_init(ao_integrals_map_2,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 :: i
integer(key_kind) :: hash integer(key_kind) :: hash
double precision :: thresh,tmp double precision :: thresh,tmp
if(is_periodic) then if(is_complex) then
print*,'not implemented for periodic:',irp_here print*,'not implemented for periodic:',irp_here
stop -1 stop -1
endif 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 integer(key_kind) :: hash
double precision :: tmp double precision :: tmp
if(is_periodic) then if(is_complex) then
print*,'not implemented for periodic:',irp_here print*,'not implemented for periodic:',irp_here
stop -1 stop -1
endif 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 integer(key_kind) :: hash
double precision :: tmp double precision :: tmp
if(is_periodic) then if(is_complex) then
print*,'not implemented for periodic:',irp_here print*,'not implemented for periodic:',irp_here
stop -1 stop -1
endif endif

View File

@ -1,7 +1,7 @@
use map_module 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 use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -138,7 +138,7 @@ subroutine two_e_integrals_index_reverse_complex_2(i,j,k,l,i1)
end 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 implicit none
BEGIN_DOC BEGIN_DOC
! Cache of AO integrals for fast access ! 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 complex(integral_kind) :: integral
integer(key_kind) :: p,q,r,s,ik,jl integer(key_kind) :: p,q,r,s,ik,jl
logical :: ilek, jlel, iklejl 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, & !$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 j=ao_integrals_cache_min,ao_integrals_cache_max
do i=ao_integrals_cache_min,ao_integrals_cache_max do i=ao_integrals_cache_min,ao_integrals_cache_max
!DIR$ FORCEINLINE !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) ao_integrals_map,ao_integrals_map_2)
ii = l-ao_integrals_cache_min ii = l-ao_integrals_cache_min
ii = ior( shiftl(ii,6), k-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), j-ao_integrals_cache_min)
ii = ior( shiftl(ii,6), i-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 enddo
enddo enddo
@ -177,7 +177,7 @@ BEGIN_PROVIDER [ complex*16, ao_integrals_cache_periodic, (0:64*64*64*64) ]
END_PROVIDER 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 use map_module
implicit none implicit none
BEGIN_DOC 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 double precision, intent(out) :: sign
integer(key_kind) :: p,q,r,s,ik,jl,ij,kl integer(key_kind) :: p,q,r,s,ik,jl,ij,kl
!DIR$ FORCEINLINE !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) p = min(i,j)
r = max(i,j) r = max(i,j)
ij = p+shiftr(r*r-r,1) 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 endif
end 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 use map_module
implicit none implicit none
BEGIN_DOC 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 double precision :: sign
! a.le.c, b.le.d, tri(a,c).le.tri(b,d) ! a.le.c, b.le.d, tri(a,c).le.tri(b,d)
PROVIDE ao_two_e_integrals_in_map 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 if (use_map1) then
call map_get(map,idx,tmp_re) call map_get(map,idx,tmp_re)
call map_get(map,idx+1,tmp_im) 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 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 use map_module
implicit none implicit none
BEGIN_DOC 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 type(map_type), intent(inout) :: map,map2
integer :: ii integer :: ii
complex(integral_kind) :: tmp 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 integer(key_kind) :: p,q,r,s,ik,jl
logical :: ilek, jlel, iklejl logical :: ilek, jlel, iklejl
! a.le.c, b.le.d, tri(a,c).le.tri(b,d) ! 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 !DIR$ FORCEINLINE
! if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then ! if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
! tmp = (0.d0,0.d0) ! 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, j-ao_integrals_cache_min)
ii = ior(ii, i-ao_integrals_cache_min) ii = ior(ii, i-ao_integrals_cache_min)
if (iand(ii, -64) /= 0) then 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 else
ii = l-ao_integrals_cache_min ii = l-ao_integrals_cache_min
ii = ior( shiftl(ii,6), k-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), j-ao_integrals_cache_min)
ii = ior( shiftl(ii,6), i-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 endif
result = tmp result = tmp
endif endif
end 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 use map_module
BEGIN_DOC BEGIN_DOC
! Gets multiple AO bi-electronic integral from the AO map . ! 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 return
endif endif
complex*16 :: get_ao_two_e_integral_periodic complex*16 :: get_ao_two_e_integral_complex
do i=1,sze 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 enddo
end 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 print*,'not implemented for periodic',irp_here
stop -1 stop -1
! use map_module ! 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 :: i
! integer(key_kind) :: hash ! integer(key_kind) :: hash
! double precision :: thresh,tmp ! double precision :: thresh,tmp
! if(is_periodic) then ! if(is_complex) then
! print*,'not implemented for periodic:',irp_here ! print*,'not implemented for periodic:',irp_here
! stop -1 ! stop -1
! endif ! endif
@ -424,7 +424,7 @@ 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_complex(j,l,thresh,sze_max,sze,out_val,out_val_index,non_zero_int)
print*,'not implemented for periodic',irp_here print*,'not implemented for periodic',irp_here
stop -1 stop -1
! use map_module ! 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 ! integer(key_kind) :: hash
! double precision :: tmp ! double precision :: tmp
! !
! if(is_periodic) then ! if(is_complex) then
! print*,'not implemented for periodic:',irp_here ! print*,'not implemented for periodic:',irp_here
! stop -1 ! stop -1
! endif ! endif
@ -475,7 +475,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,ou
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_complex(j,l,thresh,list,n_list,sze_max,out_val,out_val_index,non_zero_int)
print*,'not implemented for periodic',irp_here print*,'not implemented for periodic',irp_here
stop -1 stop -1
! use map_module ! 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 ! integer(key_kind) :: hash
! double precision :: tmp ! double precision :: tmp
! !
! if(is_periodic) then ! if(is_complex) then
! print*,'not implemented for periodic:',irp_here ! print*,'not implemented for periodic:',irp_here
! stop -1 ! stop -1
! endif ! endif

View File

@ -351,11 +351,11 @@ BEGIN_PROVIDER [ logical, ao_two_e_integrals_in_map ]
double precision :: map_mb double precision :: map_mb
PROVIDE read_ao_two_e_integrals io_ao_two_e_integrals 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 if (read_ao_two_e_integrals) then
print*,'Reading the AO integrals (periodic)' 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_complex_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_2',ao_integrals_map_2)
print*, 'AO integrals provided (periodic)' print*, 'AO integrals provided (periodic)'
ao_two_e_integrals_in_map = .True. ao_two_e_integrals_in_map = .True.
return 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` ! Initialize :c:data:`mo_coef_begin_iteration` to the current :c:data:`mo_coef`
END_DOC END_DOC
if (is_periodic) then if (is_complex) then
mo_coef_begin_iteration_complex = mo_coef_complex mo_coef_begin_iteration_complex = mo_coef_complex
else else
mo_coef_begin_iteration = mo_coef mo_coef_begin_iteration = mo_coef
@ -40,7 +40,7 @@ subroutine reorder_core_orb
integer, allocatable :: index_core_orb(:),iorder(:) integer, allocatable :: index_core_orb(:),iorder(:)
double precision, allocatable :: accu(:) double precision, allocatable :: accu(:)
integer :: i1,i2 integer :: i1,i2
if (is_periodic) then if (is_complex) then
complex*16, allocatable :: accu_c(:) complex*16, allocatable :: accu_c(:)
allocate(accu(mo_num),accu_c(mo_num),index_core_orb(n_core_orb),iorder(mo_num)) allocate(accu(mo_num),accu_c(mo_num),index_core_orb(n_core_orb),iorder(mo_num))
do i = 1, n_core_orb do i = 1, n_core_orb

View File

@ -22,7 +22,7 @@ END_PROVIDER
HF_energy = nuclear_repulsion HF_energy = nuclear_repulsion
HF_two_electron_energy = 0.d0 HF_two_electron_energy = 0.d0
HF_one_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 complex*16 :: hf_1e_tmp, hf_2e_tmp
hf_1e_tmp = (0.d0,0.d0) hf_1e_tmp = (0.d0,0.d0)
hf_2e_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) call ezfio_has_mo_basis_mo_coef(exists)
if (.not.exists) then if (.not.exists) then
if (mo_guess_type == "HCore") then if (mo_guess_type == "HCore") then
if (is_periodic) then if (is_complex) then
mo_coef_complex = ao_ortho_lowdin_coef_complex mo_coef_complex = ao_ortho_lowdin_coef_complex
TOUCH mo_coef_complex TOUCH mo_coef_complex
mo_label = 'Guess' mo_label = 'Guess'
@ -68,7 +68,7 @@ subroutine create_guess
SOFT_TOUCH mo_coef mo_label SOFT_TOUCH mo_coef mo_label
endif endif
else if (mo_guess_type == "Huckel") then else if (mo_guess_type == "Huckel") then
if (is_periodic) then if (is_complex) then
call huckel_guess_complex call huckel_guess_complex
else else
call huckel_guess call huckel_guess
@ -92,7 +92,7 @@ subroutine run
integer :: i_it, i, j, k integer :: i_it, i, j, k
mo_label = "Orthonormalized" mo_label = "Orthonormalized"
if (is_periodic) then if (is_complex) then
call roothaan_hall_scf_complex call roothaan_hall_scf_complex
else else
call roothaan_hall_scf call roothaan_hall_scf

View File

@ -252,7 +252,7 @@ subroutine mix_mo_jk(j,k)
dsqrt_2 = 1.d0/dsqrt(2.d0) dsqrt_2 = 1.d0/dsqrt(2.d0)
i_plus = min(j,k) i_plus = min(j,k)
i_minus = max(j,k) i_minus = max(j,k)
if (is_periodic) then if (is_complex) then
complex*16 :: array_tmp_c(ao_num,2) complex*16 :: array_tmp_c(ao_num,2)
array_tmp_c = (0.d0,0.d0) array_tmp_c = (0.d0,0.d0)
do i = 1, ao_num 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_num(mo_num)
call ezfio_set_mo_basis_mo_label(mo_label) call ezfio_set_mo_basis_mo_label(mo_label)
call ezfio_set_mo_basis_ao_md5(ao_md5) 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)) allocate ( buffer(ao_num,mo_num),buffer_im(ao_num,mo_num))
buffer = 0.d0 buffer = 0.d0
buffer_im = 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_num(mo_num)
!call ezfio_set_mo_basis_mo_label(mo_label) !call ezfio_set_mo_basis_mo_label(mo_label)
!call ezfio_set_mo_basis_ao_md5(ao_md5) !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)) allocate ( buffer(ao_num,mo_num),buffer_im(ao_num,mo_num))
buffer = 0.d0 buffer = 0.d0
buffer_im = 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_num(n)
call ezfio_set_mo_basis_mo_label(mo_label) call ezfio_set_mo_basis_mo_label(mo_label)
call ezfio_set_mo_basis_ao_md5(ao_md5) 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)) allocate ( buffer(ao_num,n),buffer_im(ao_num,n))
buffer = 0.d0 buffer = 0.d0
buffer_im = 0.d0 buffer_im = 0.d0

View File

@ -5,7 +5,7 @@ subroutine hcore_guess
implicit none implicit none
character*(64) :: label character*(64) :: label
label = "Guess" label = "Guess"
if (is_periodic) then if (is_complex) then
call mo_as_eigvectors_of_mo_matrix_complex(mo_one_e_integrals_complex, & 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,1), &
size(mo_one_e_integrals_complex,2),label,1,.false.) size(mo_one_e_integrals_complex,2),label,1,.false.)

View File

@ -1,7 +1,7 @@
subroutine orthonormalize_mos subroutine orthonormalize_mos
implicit none implicit none
integer :: m,p,s integer :: m,p,s
if (is_periodic) then if (is_complex) then
m = size(mo_coef_complex,1) m = size(mo_coef_complex,1)
p = size(mo_overlap_complex,1) p = size(mo_overlap_complex,1)
call ortho_lowdin_complex(mo_overlap_complex,p,mo_num,mo_coef_complex,m,ao_num) 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 END_DOC
integer :: i,j,k,l integer :: i,j,k,l
core_energy = 0.d0 core_energy = 0.d0
if (is_periodic) then if (is_complex) then
do i = 1, n_core_orb do i = 1, n_core_orb
j = list_core(i) j = list_core(i)
core_energy += 2.d0 * dble(mo_one_e_integrals_complex(j,j)) + mo_two_e_integrals_jj(j,j) 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)] BEGIN_PROVIDER [complex*16, core_fock_operator_complex, (mo_num,mo_num)]
implicit none implicit none
integer :: i,j,k,l,m,n integer :: i,j,k,l,m,n
complex*16 :: get_two_e_integral_periodic complex*16 :: get_two_e_integral_complex
BEGIN_DOC BEGIN_DOC
! this is the contribution to the Fock operator from the core electrons ! this is the contribution to the Fock operator from the core electrons
END_DOC END_DOC
@ -63,8 +63,8 @@ BEGIN_PROVIDER [complex*16, core_fock_operator_complex, (mo_num,mo_num)]
do m = 1, n_core_orb do m = 1, n_core_orb
n = list_core(m) n = list_core(m)
core_fock_operator_complex(j,l) += 2.d0 * & 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_complex(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,n,l,mo_integrals_map,mo_integrals_map_2)
enddo enddo
enddo enddo
enddo enddo

View File

@ -79,7 +79,7 @@ subroutine four_idx_novvvv_complex
integer :: i,j,k,l,n_integrals1,n_integrals2 integer :: i,j,k,l,n_integrals1,n_integrals2
logical :: use_map1 logical :: use_map1
complex*16, allocatable :: f(:,:,:), f2(:,:,:), d(:,:), T(:,:,:,:), T2(:,:,:,:) 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(:) integer(key_kind), allocatable :: idx1(:),idx2(:)
complex(integral_kind), allocatable :: values1(:),values2(:) complex(integral_kind), allocatable :: values1(:),values2(:)
double precision :: sign_tmp double precision :: sign_tmp
@ -107,8 +107,8 @@ subroutine four_idx_novvvv_complex
do r=1,ao_num do r=1,ao_num
do q=1,ao_num do q=1,ao_num
do p=1,r 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 (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_periodic(r,q,p,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 enddo
enddo enddo
@ -146,7 +146,7 @@ subroutine four_idx_novvvv_complex
n_integrals2 = 0 n_integrals2 = 0
do l=1,mo_num do l=1,mo_num
do k=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 if (use_map1) then
n_integrals1+=1 n_integrals1+=1
values1(n_integrals1) = dble(d(k,l)) values1(n_integrals1) = dble(d(k,l))
@ -176,7 +176,7 @@ subroutine four_idx_novvvv_complex
n_integrals2 = 0 n_integrals2 = 0
do l=1,mo_num do l=1,mo_num
do k=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 if (use_map1) then
n_integrals1+=1 n_integrals1+=1
values1(n_integrals1) = dble(d(k,l)) values1(n_integrals1) = dble(d(k,l))

View File

@ -25,8 +25,8 @@
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [complex*16, big_array_coulomb_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_periodic,(mo_num,mo_num, mo_num)] &BEGIN_PROVIDER [complex*16, big_array_exchange_integrals_complex,(mo_num,mo_num, mo_num)]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! big_array_coulomb_integrals(j,i,k) = <ij|kj> = (ik|jj) ! 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)* ! b_a_exch_int(j,i,k) = b_a_exch_int(j,k,i)*
END_DOC END_DOC
integer :: i,j,k,l integer :: i,j,k,l
complex*16 :: get_two_e_integral_periodic complex*16 :: get_two_e_integral_complex
complex*16 :: integral complex*16 :: integral
do k = 1, mo_num do k = 1, mo_num
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
l = j 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 big_array_coulomb_integrals(j,i,k) = integral
l = j 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 big_array_exchange_integrals(j,i,k) = integral
enddo enddo
enddo enddo

View File

@ -12,7 +12,7 @@ BEGIN_PROVIDER [ type(map_type), mo_integrals_map ]
integer(key_kind) :: key_max integer(key_kind) :: key_max
integer(map_size_kind) :: sze integer(map_size_kind) :: sze
call two_e_integrals_index(mo_num,mo_num,mo_num,mo_num,key_max) 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 sze = key_max*2
call map_init(mo_integrals_map,sze) call map_init(mo_integrals_map,sze)
call map_init(mo_integrals_map_2,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 ! Return the number of elements in the MO map
END_DOC END_DOC
get_mo_map_size = mo_integrals_map % n_elements 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 get_mo_map_size += mo_integrals_map_2 % n_elements
endif endif
end 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) call map_update(mo_integrals_map_2, buffer_i, buffer_values, n_integrals, thr)
end 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 implicit none
BEGIN_DOC BEGIN_DOC
! Cache of MO integrals for fast access ! 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*8 :: ii
integer(key_kind) :: idx integer(key_kind) :: idx
complex(integral_kind) :: integral complex(integral_kind) :: integral
complex*16 :: get_two_e_integral_periodic_simple complex*16 :: get_two_e_integral_complex_simple
FREE ao_integrals_cache FREE ao_integrals_cache
!$OMP PARALLEL DO PRIVATE (i,j,k,l,i4,j4,k4,l4,idx,ii,integral) !$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 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 do i=mo_integrals_cache_min_8,mo_integrals_cache_max_8
i4 = int(i,4) i4 = int(i,4)
!DIR$ FORCEINLINE !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) mo_integrals_map,mo_integrals_map_2)
ii = l-mo_integrals_cache_min_8 ii = l-mo_integrals_cache_min_8
ii = ior( shiftl(ii,7), k-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), j-mo_integrals_cache_min_8)
ii = ior( shiftl(ii,7), i-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 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 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 use map_module
implicit none implicit none
BEGIN_DOC 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 logical :: use_map1
double precision :: sign double precision :: sign
PROVIDE mo_two_e_integrals_in_map 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 if (use_map1) then
call map_get(map,idx,tmp_re) call map_get(map,idx,tmp_re)
call map_get(map,idx+1,tmp_im) 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 result = tmp
end 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 use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -101,39 +101,39 @@ complex*16 function get_two_e_integral_periodic(i,j,k,l,map,map2)
integer*8 :: ii_8 integer*8 :: ii_8
type(map_type), intent(inout) :: map,map2 type(map_type), intent(inout) :: map,map2
complex(integral_kind) :: tmp complex(integral_kind) :: tmp
complex(integral_kind) :: get_two_e_integral_periodic_simple complex(integral_kind) :: get_two_e_integral_complex_simple
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_periodic PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_complex
ii = l-mo_integrals_cache_min ii = l-mo_integrals_cache_min
ii = ior(ii, k-mo_integrals_cache_min) ii = ior(ii, k-mo_integrals_cache_min)
ii = ior(ii, j-mo_integrals_cache_min) ii = ior(ii, j-mo_integrals_cache_min)
ii = ior(ii, i-mo_integrals_cache_min) ii = ior(ii, i-mo_integrals_cache_min)
if (iand(ii, -128) /= 0) then 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 else
ii_8 = int(l,8)-mo_integrals_cache_min_8 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(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(j,8)-mo_integrals_cache_min_8)
ii_8 = ior( shiftl(ii_8,7), int(i,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 endif
get_two_e_integral_periodic = tmp get_two_e_integral_complex = tmp
end 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 implicit none
BEGIN_DOC BEGIN_DOC
! Returns one integral <ij|kl> in the MO basis ! Returns one integral <ij|kl> in the MO basis
END_DOC END_DOC
integer, intent(in) :: i,j,k,l integer, intent(in) :: i,j,k,l
complex*16 :: get_two_e_integral_periodic complex*16 :: get_two_e_integral_complex
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_periodic PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_complex
PROVIDE mo_two_e_integrals_in_map PROVIDE mo_two_e_integrals_in_map
!DIR$ FORCEINLINE !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 return
end 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 use map_module
implicit none implicit none
BEGIN_DOC 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) complex*16, intent(out) :: out_val(sze)
type(map_type), intent(inout) :: map,map2 type(map_type), intent(inout) :: map,map2
integer :: i integer :: i
complex*16, external :: get_two_e_integral_periodic_simple complex*16, external :: get_two_e_integral_complex_simple
integer :: ii, ii0 integer :: ii, ii0
integer*8 :: ii_8, ii0_8 integer*8 :: ii_8, ii0_8
complex(integral_kind) :: tmp complex(integral_kind) :: tmp
integer(key_kind) :: i1, idx integer(key_kind) :: i1, idx
integer(key_kind) :: p,q,r,s,i2 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 !DEBUG
! do i=1,sze ! 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 ! enddo
! return ! return
!DEBUG !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) ii = ior(ii0, i-mo_integrals_cache_min)
if (iand(ii, -128) == 0) then if (iand(ii, -128) == 0) then
ii_8 = ior( shiftl(ii0_8,7), int(i,8)-mo_integrals_cache_min_8) 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 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 endif
enddo enddo
end 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 ! use map_module
! implicit none ! implicit none
! BEGIN_DOC ! BEGIN_DOC
@ -233,7 +233,7 @@ end
! deallocate(pairs,hash,iorder,tmp_val) ! deallocate(pairs,hash,iorder,tmp_val)
!end !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 ! use map_module
! implicit none ! implicit none
! BEGIN_DOC ! BEGIN_DOC
@ -287,7 +287,7 @@ end
! deallocate(pairs,hash,iorder,tmp_val) ! deallocate(pairs,hash,iorder,tmp_val)
!end !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 use map_module
implicit none implicit none
BEGIN_DOC 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 PROVIDE mo_two_e_integrals_in_map
if (k.eq.l) then ! real, call other function 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 do i=1,sze
out_val(i) = dcmplx(out_re(i),0.d0) out_val(i) = dcmplx(out_re(i),0.d0)
enddo enddo
@ -347,7 +347,7 @@ subroutine get_mo_two_e_integrals_coulomb_ii_periodic(k,l,sze,out_val,map,map2)
endif endif
end 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 use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -382,7 +382,7 @@ subroutine get_mo_two_e_integrals_coulomb_ijij_periodic(j,sze,out_val,map2)
endif endif
end 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 use map_module
implicit none implicit none
BEGIN_DOC 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 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 do i=1,sze
out_val(i) = dcmplx(out_re(i),0.d0) out_val(i) = dcmplx(out_re(i),0.d0)
enddo enddo
@ -457,7 +457,7 @@ subroutine get_mo_two_e_integrals_exch_ii_periodic(k,l,sze,out_val,map,map2)
endif endif
end 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 use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC

View File

@ -33,12 +33,12 @@ BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
PROVIDE mo_class PROVIDE mo_class
if (is_periodic) then if (is_complex) then
mo_two_e_integrals_in_map = .True. mo_two_e_integrals_in_map = .True.
if (read_mo_two_e_integrals) then if (read_mo_two_e_integrals) then
print*,'Reading the MO integrals' 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_complex_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_2',mo_integrals_map_2)
print*, 'MO integrals provided (periodic)' print*, 'MO integrals provided (periodic)'
return return
else else
@ -77,8 +77,8 @@ BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
if (write_mo_two_e_integrals.and.mpi_master) then if (write_mo_two_e_integrals.and.mpi_master) then
call ezfio_set_work_empty(.False.) 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_complex_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_2',mo_integrals_map_2)
call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('Read') call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('Read')
endif endif
else else
@ -986,7 +986,7 @@ end
double precision :: c double precision :: c
integer :: n, pp integer :: n, pp
integer, allocatable :: int_idx(:) integer, allocatable :: int_idx(:)
if (is_periodic) then if (is_complex) then
complex(integral_kind) :: integral2 complex(integral_kind) :: integral2
complex(integral_kind), allocatable :: int_value2(:) complex(integral_kind), allocatable :: int_value2(:)
complex*16 :: cz complex*16 :: cz
@ -1022,7 +1022,7 @@ end
do r=1,ao_num 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 do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral2 = int_value2(pp) integral2 = int_value2(pp)
@ -1032,7 +1032,7 @@ end
enddo enddo
endif endif
enddo 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 do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral2 = int_value2(pp) integral2 = int_value2(pp)
@ -1196,7 +1196,7 @@ END_PROVIDER
integer :: n, pp integer :: n, pp
integer, allocatable :: int_idx(:) integer, allocatable :: int_idx(:)
if (is_periodic) then if (is_complex) then
complex*16 :: cz complex*16 :: cz
complex(integral_kind) :: integral2 complex(integral_kind) :: integral2
complex(integral_kind), allocatable :: int_value2(:) complex(integral_kind), allocatable :: int_value2(:)
@ -1236,7 +1236,7 @@ END_PROVIDER
do r=1,ao_num 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 do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral2 = int_value2(pp) integral2 = int_value2(pp)
@ -1247,7 +1247,7 @@ END_PROVIDER
enddo enddo
endif endif
enddo 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 do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral2 = int_value2(pp) integral2 = int_value2(pp)
@ -1428,13 +1428,13 @@ END_PROVIDER
PROVIDE mo_two_e_integrals_in_map PROVIDE mo_two_e_integrals_in_map
mo_two_e_integrals_jj = 0.d0 mo_two_e_integrals_jj = 0.d0
mo_two_e_integrals_jj_exchange = 0.d0 mo_two_e_integrals_jj_exchange = 0.d0
if (is_periodic) then if (is_complex) then
complex*16 :: get_two_e_integral_periodic complex*16 :: get_two_e_integral_complex
do j=1,mo_num do j=1,mo_num
do i=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_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_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) 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
@ -1458,7 +1458,7 @@ subroutine clear_mo_map
! Frees the memory of the MO map ! Frees the memory of the MO map
END_DOC END_DOC
call map_deinit(mo_integrals_map) call map_deinit(mo_integrals_map)
if (is_periodic) then if (is_complex) then
call map_deinit(mo_integrals_map_2) call map_deinit(mo_integrals_map_2)
endif endif
FREE mo_integrals_map mo_two_e_integrals_jj mo_two_e_integrals_jj_anti 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 type:double precision
interface: ezfio interface: ezfio
[is_periodic] [is_complex]
type: logical type: logical
doc: If true, the calculation uses periodic boundary conditions doc: If true, the calculation uses periodic boundary conditions
interface: ezfio, provider, ocaml interface: ezfio, provider, ocaml

View File

@ -101,7 +101,7 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_mo_alpha, (mo_num,mo_num) ]
BEGIN_DOC BEGIN_DOC
! Fock matrix on the MO basis ! Fock matrix on the MO basis
END_DOC END_DOC
if (is_periodic) then if (is_complex) then
print*,'error',irp_here print*,'error',irp_here
stop -1 stop -1
else else
@ -115,7 +115,7 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_mo_beta, (mo_num,mo_num) ]
BEGIN_DOC BEGIN_DOC
! Fock matrix on the MO basis ! Fock matrix on the MO basis
END_DOC END_DOC
if (is_periodic) then if (is_complex) then
print*,'error',irp_here print*,'error',irp_here
stop -1 stop -1
else else
@ -158,7 +158,7 @@ BEGIN_PROVIDER [ double precision, SCF_energy ]
SCF_energy = nuclear_repulsion SCF_energy = nuclear_repulsion
integer :: i,j integer :: i,j
if (is_periodic) then if (is_complex) then
complex*16 :: scf_e_tmp complex*16 :: scf_e_tmp
scf_e_tmp = dcmplx(SCF_energy,0.d0) scf_e_tmp = dcmplx(SCF_energy,0.d0)
do j=1,ao_num do j=1,ao_num

View File

@ -9,12 +9,12 @@ subroutine run
integer ::i,j,k,l integer ::i,j,k,l
provide ao_two_e_integrals_in_map 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 i=1,ao_num
do j=1,ao_num do j=1,ao_num
do k=1,ao_num do k=1,ao_num
do l=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 print'(4(I4),2(E15.7))',i,j,k,l,tmp_cmplx
enddo enddo
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(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_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") ! 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 :: tmp3,tmp4,tmp5,tmp6
double precision :: thr0 double precision :: thr0
thr0 = 1.d-10 thr0 = 1.d-10
@ -144,11 +144,11 @@ provide ao_two_e_integrals_in_map
do do
read (iunit,*,end=13) i,j,k,l, tmp_re, tmp_im read (iunit,*,end=13) i,j,k,l, tmp_re, tmp_im
tmp_cmplx = dcmplx(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_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_periodic(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_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) ! 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 ! print*,use_map1,idx_tmp,sign
call map_get(ao_integrals_map,idx_tmp,tmp3) call map_get(ao_integrals_map,idx_tmp,tmp3)
call map_get(ao_integrals_map_2,idx_tmp,tmp4) 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), k-ao_integrals_cache_min)
ii = ior( shiftl(ii,6), j-ao_integrals_cache_min) ii = ior( shiftl(ii,6), j-ao_integrals_cache_min)
ii = ior( shiftl(ii,6), i-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*,'cache(old)=', ao_integrals_cache(ii)
! print* ! print*
! if (use_map1) then ! if (use_map1) then
@ -210,8 +210,8 @@ provide ao_two_e_integrals_in_map
! call map_sort(ao_integrals_map_2) ! call map_sort(ao_integrals_map_2)
! call map_unique(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_complex_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_2',ao_integrals_map_2)
! call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read' ! call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read'
print*,'map1' print*,'map1'
do i=0,ao_integrals_map%map_size 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 call run
end end
@ -117,7 +117,7 @@ subroutine run
buffer_values_2 = 0.d0 buffer_values_2 = 0.d0
do do
read (iunit,*,end=13) i,j,k,l, tmp_re, tmp_im 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 print'(4(I4),(L3),(I6),(F7.1))',i,j,k,l,use_map1,idx_tmp,sign
if (use_map1) then if (use_map1) then
n_integrals_1 += 1 n_integrals_1 += 1
@ -166,8 +166,8 @@ subroutine run
call map_sort(ao_integrals_map_2) call map_sort(ao_integrals_map_2)
call map_unique(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_complex_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_2',ao_integrals_map_2)
call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read') call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read')
end end

View File

@ -1,4 +1,4 @@
program import_mo_coef_periodic program import_mo_coef_complex
PROVIDE ezfio_filename PROVIDE ezfio_filename
call run 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_integrals_n_e_per_atom_complex (should be simple, but currently we only use dummy nuclei)
ao_two_e_ints (todo) ao_two_e_ints (todo)
get_ao_two_e_integrals_non_zero_periodic get_ao_two_e_integrals_non_zero_complex
get_ao_two_e_integrals_non_zero_jl_periodic get_ao_two_e_integrals_non_zero_jl_complex
get_ao_two_e_integrals_non_zero_jl_from_list_periodic get_ao_two_e_integrals_non_zero_jl_from_list_complex
mo_two_e_ints (todo) 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_complex
add_integrals_to_map_three_indices_complex add_integrals_to_map_three_indices_complex
add_integrals_to_map_no_exit_34_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? still needs mo_coef_to_string and to_string?
src/nuclei/EZFIO.cfg src/nuclei/EZFIO.cfg
[is_periodic] [is_complex]
if true use periodic parts of code if true use periodic parts of code
src/utils/linear_algebra.irp.f src/utils/linear_algebra.irp.f
@ -123,7 +123,7 @@ src/utils_periodic/import_integrals_ao_periodic.irp.f
read ints from pyscf read ints from pyscf
TODO: don't read ao_num from stdin 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 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 each complex array is formed by combining real and imag arrays
imag arrays can only be read from disk 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? 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) TODO: (maybe not the behavior we want)
added S_inv_complex added S_inv_complex
TODO: (no S_half_inv_complex yet) 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 ao_ortho_canonical_num_complex
similar to real version 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) 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 ao_ortho_canonical_overlap_complex
similar to real version 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 src/ao_two_e_ints/map_integrals.irp.f
added ao_integrals_map_2 (provider linked to ao_integrals_map) added ao_integrals_map_2 (provider linked to ao_integrals_map)
double size of both maps if (is_periodic) double size of both maps if (is_complex)
subroutine two_e_integrals_index_periodic subroutine two_e_integrals_index_complex
same as real version, but return compound (2) indices to avoid recomputing same as real version, but return compound (2) indices to avoid recomputing
ao_integrals_cache_periodic ao_integrals_cache_complex
similar to real version 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 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 args i,j,k,l,map1,map2
return complex integral composed of correct elements from one of the maps 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 same behavior as _simple version, but checks cache first
returns integral from cache if possible, otherwise retrieves from map 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 same functionality as real version
subroutine insert_into_ao_integrals_map_2 subroutine insert_into_ao_integrals_map_2
needed for second map 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 periodic AOs, we always read (can't compute)
for MOs, we can either read from disk or transform from AOs for MOs, we can either read from disk or transform from AOs
simplest way might be to link all three providers (integrals{,_imag,_complex}) simplest way might be to link all three providers (integrals{,_imag,_complex})
if (.not.is_periodic), just ignore imag and complex arrays? if (.not.is_complex), just ignore imag and complex arrays?
if (is_periodic) if (is_complex)
either read real/imag from disk and combine to form 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? 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 subroutine create_guess
should work for periodic should work for periodic
TODO: decide what to do about mo_coef_complex and imag/real parts for touch/save!!! 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 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 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? probably not necessary?
[ double precision, SCF_energy ] [ double precision, SCF_energy ]
modified for periodic modified for periodic
@ -391,7 +391,7 @@ src/scf_utils/fock_matrix_complex.irp.f
src/scf_utils/huckel_complex.irp.f src/scf_utils/huckel_complex.irp.f
similar to real version 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) has soft_touch mo_coef_complex and call to save_mos (see other notes on real/imag parts)