2017-12-04 10:31:54 +01:00
|
|
|
subroutine get_occupation_from_dets(istate,occupation)
|
2016-12-19 13:27:16 +01:00
|
|
|
implicit none
|
|
|
|
double precision, intent(out) :: occupation(mo_tot_num)
|
|
|
|
integer, intent(in) :: istate
|
|
|
|
BEGIN_DOC
|
|
|
|
! Returns the average occupation of the MOs
|
|
|
|
END_DOC
|
|
|
|
integer :: i,j, ispin
|
|
|
|
integer :: list(N_int*bit_kind_size,2)
|
|
|
|
integer :: n_elements(2)
|
|
|
|
double precision :: c
|
2017-12-04 10:31:54 +01:00
|
|
|
ASSERT (istate > 0)
|
|
|
|
ASSERT (istate <= N_states)
|
2016-12-19 13:27:16 +01:00
|
|
|
|
|
|
|
occupation = 0.d0
|
|
|
|
do i=1,N_det
|
|
|
|
c = psi_coef(i,istate)*psi_coef(i,istate)
|
|
|
|
call bitstring_to_list_ab(psi_det(1,1,i), list, n_elements, N_int)
|
|
|
|
do ispin=1,2
|
|
|
|
do j=1,n_elements(ispin)
|
2017-12-04 10:31:54 +01:00
|
|
|
ASSERT ( list(j,ispin) < mo_tot_num )
|
2016-12-19 13:27:16 +01:00
|
|
|
occupation( list(j,ispin) ) += c
|
|
|
|
enddo
|
|
|
|
enddo
|
|
|
|
enddo
|
|
|
|
end
|