mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-19 04:22:32 +01:00
fix bitmask for kpoint ordered MOs
This commit is contained in:
parent
7be57b7a14
commit
d44a22f3d8
@ -78,14 +78,38 @@ BEGIN_PROVIDER [ integer(bit_kind), HF_bitmask, (N_int,2)]
|
|||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j,n
|
integer :: i,j,n
|
||||||
integer :: occ(elec_alpha_num)
|
integer :: occ(elec_alpha_num)
|
||||||
|
integer :: occb(elec_beta_num)
|
||||||
|
|
||||||
HF_bitmask = 0_bit_kind
|
HF_bitmask = 0_bit_kind
|
||||||
|
if (is_complex) then
|
||||||
|
integer :: kpt,korb
|
||||||
|
kpt=1
|
||||||
|
korb=1
|
||||||
|
do i=1,elec_beta_num
|
||||||
|
occ(i) = korb + (kpt-1) * ao_num_per_kpt
|
||||||
|
occb(i) = korb + (kpt-1) * ao_num_per_kpt
|
||||||
|
kpt += 1
|
||||||
|
if (kpt > kpt_num) then
|
||||||
|
kpt = 1
|
||||||
|
korb += 1
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
do i=elec_beta_num+1,elec_alpha_num
|
||||||
|
occ(i) = korb + (kpt-1) * ao_num_per_kpt
|
||||||
|
kpt += 1
|
||||||
|
if (kpt > kpt_num) then
|
||||||
|
kpt = 1
|
||||||
|
korb += 1
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
else
|
||||||
do i=1,elec_alpha_num
|
do i=1,elec_alpha_num
|
||||||
occ(i) = i
|
occ(i) = i
|
||||||
enddo
|
enddo
|
||||||
|
endif
|
||||||
call list_to_bitstring( HF_bitmask(1,1), occ, elec_alpha_num, N_int)
|
call list_to_bitstring( HF_bitmask(1,1), occ, elec_alpha_num, N_int)
|
||||||
! elec_alpha_num <= elec_beta_num, so occ is already OK.
|
! elec_alpha_num <= elec_beta_num, so occ is already OK.
|
||||||
call list_to_bitstring( HF_bitmask(1,2), occ, elec_beta_num, N_int)
|
call list_to_bitstring( HF_bitmask(1,2), occb, elec_beta_num, N_int)
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
if (dabs(dimag(Fock_matrix_mo_complex(i,i))) .gt. 1.0d-12) then
|
if (dabs(dimag(Fock_matrix_mo_complex(i,i))) .gt. 1.0d-12) then
|
||||||
!stop 'diagonal elements of Fock matrix should be real'
|
!stop 'diagonal elements of Fock matrix should be real'
|
||||||
print *, 'diagonal elements of Fock matrix should be real',i,Fock_matrix_mo_complex(i,i)
|
print *, 'diagonal elements of Fock matrix should be real',i,Fock_matrix_mo_complex(i,i)
|
||||||
stop -1
|
!stop -1
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -4,11 +4,28 @@ BEGIN_PROVIDER [ complex*16, scf_density_matrix_ao_alpha_complex, (ao_num,ao_num
|
|||||||
! $C.C^t$ over $\alpha$ MOs
|
! $C.C^t$ over $\alpha$ MOs
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
|
complex*16, allocatable :: mo_coef_alpha_tmp(:,:)
|
||||||
|
integer :: occ(N_int*bit_kind_size)
|
||||||
|
integer :: na, i
|
||||||
|
|
||||||
|
call bitstring_to_list(hf_bitmask(1,1), occ, na, n_int)
|
||||||
|
allocate(mo_coef_alpha_tmp(ao_num,na))
|
||||||
|
do i=1,na
|
||||||
|
mo_coef_alpha_tmp(:,i) = mo_coef_complex(:,occ(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
|
||||||
call zgemm('N','C',ao_num,ao_num,elec_alpha_num,(1.d0,0.d0), &
|
call zgemm('N','C',ao_num,ao_num,elec_alpha_num,(1.d0,0.d0), &
|
||||||
mo_coef_complex, size(mo_coef_complex,1), &
|
mo_coef_alpha_tmp, size(mo_coef_alpha_tmp,1), &
|
||||||
mo_coef_complex, size(mo_coef_complex,1), (0.d0,0.d0), &
|
mo_coef_alpha_tmp, size(mo_coef_alpha_tmp,1), (0.d0,0.d0), &
|
||||||
scf_density_matrix_ao_alpha_complex, size(scf_density_matrix_ao_alpha_complex,1))
|
scf_density_matrix_ao_alpha_complex, size(scf_density_matrix_ao_alpha_complex,1))
|
||||||
|
|
||||||
|
deallocate(mo_coef_alpha_tmp)
|
||||||
|
!call zgemm('N','C',ao_num,ao_num,elec_alpha_num,(1.d0,0.d0), &
|
||||||
|
! mo_coef_complex, size(mo_coef_complex,1), &
|
||||||
|
! mo_coef_complex, size(mo_coef_complex,1), (0.d0,0.d0), &
|
||||||
|
! scf_density_matrix_ao_alpha_complex, size(scf_density_matrix_ao_alpha_complex,1))
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ complex*16, scf_density_matrix_ao_beta_complex, (ao_num,ao_num) ]
|
BEGIN_PROVIDER [ complex*16, scf_density_matrix_ao_beta_complex, (ao_num,ao_num) ]
|
||||||
@ -17,11 +34,28 @@ BEGIN_PROVIDER [ complex*16, scf_density_matrix_ao_beta_complex, (ao_num,ao_num
|
|||||||
! $C.C^t$ over $\beta$ MOs
|
! $C.C^t$ over $\beta$ MOs
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
|
complex*16, allocatable :: mo_coef_beta_tmp(:,:)
|
||||||
|
integer :: occ(N_int*bit_kind_size)
|
||||||
|
integer :: nb, i
|
||||||
|
|
||||||
|
call bitstring_to_list(hf_bitmask(1,2), occ, nb, n_int)
|
||||||
|
allocate(mo_coef_beta_tmp(ao_num,nb))
|
||||||
|
do i=1,nb
|
||||||
|
mo_coef_beta_tmp(:,i) = mo_coef_complex(:,occ(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
|
||||||
call zgemm('N','C',ao_num,ao_num,elec_beta_num,(1.d0,0.d0), &
|
call zgemm('N','C',ao_num,ao_num,elec_beta_num,(1.d0,0.d0), &
|
||||||
mo_coef_complex, size(mo_coef_complex,1), &
|
mo_coef_beta_tmp, size(mo_coef_beta_tmp,1), &
|
||||||
mo_coef_complex, size(mo_coef_complex,1), (0.d0,0.d0), &
|
mo_coef_beta_tmp, size(mo_coef_beta_tmp,1), (0.d0,0.d0), &
|
||||||
scf_density_matrix_ao_beta_complex, size(scf_density_matrix_ao_beta_complex,1))
|
scf_density_matrix_ao_beta_complex, size(scf_density_matrix_ao_beta_complex,1))
|
||||||
|
|
||||||
|
deallocate(mo_coef_beta_tmp)
|
||||||
|
!call zgemm('N','C',ao_num,ao_num,elec_beta_num,(1.d0,0.d0), &
|
||||||
|
! mo_coef_complex, size(mo_coef_complex,1), &
|
||||||
|
! mo_coef_complex, size(mo_coef_complex,1), (0.d0,0.d0), &
|
||||||
|
! scf_density_matrix_ao_beta_complex, size(scf_density_matrix_ao_beta_complex,1))
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ complex*16, scf_density_matrix_ao_complex, (ao_num,ao_num) ]
|
BEGIN_PROVIDER [ complex*16, scf_density_matrix_ao_complex, (ao_num,ao_num) ]
|
||||||
|
Loading…
Reference in New Issue
Block a user