subroutine setup_temp_det_list()
! setup the second list to temporaly store the list of determinants
! necessary in the real-time fciqmc list
! determine the necessary size from the already setup CurrentDets
character(*), parameter :: this_routine = "setup_temp_det_list"
integer :: ierr, tmp_siz1, tmp_siz2, i, spawn_ht_mem
tmp_siz1 = size(WalkVecDets, dim=1)
tmp_siz2 = size(WalkVecDets, dim=2)
! allocate the array
allocate(temp_det_list(0:tmp_siz1 - 1, tmp_siz2), stat=ierr)
if (ierr /= 0) call stop_all(this_routine, "Error in allocation")
! and init it
temp_det_list(0:tmp_siz1 - 1, 1:tmp_siz2) = 0
! and point to it
temp_det_pointer => temp_det_list
! and also allocate the hash-table
tmp_siz1 = size(HashIndex)
allocate(temp_det_hash(tmp_siz1), stat=ierr)
if (ierr /= 0) call stop_all(this_routine, "Error in allocation")
! and initialize it to 0
do i = 1, tmp_siz1
temp_det_hash(i)%ind = 0
end do
! also use the spawn_ht hash table, so also allocate it here!
! Allocate the hash table to the spawning array.
! The number of MB of memory required to allocate spawn_ht.
! Each node requires 16 bytes.
nhashes_spawn = int(0.8_dp * real(MaxSpawned, dp))
spawn_ht_mem = nhashes_spawn * 16 / 1000000
write(stdout, '(a78,'//int_fmt(spawn_ht_mem, 1)//')') "About to allocate hash table to the spawning array. &
&Memory required (MB):", spawn_ht_mem
write(stdout, '(a13)', advance='no') "Allocating..."; call neci_flush(stdout)
allocate(spawn_ht(nhashes_spawn), stat=ierr)
if (ierr /= 0) then
write(stdout, '(1x,a11,1x,i5)') "Error code:", ierr
call stop_all(this_routine, "Error allocating spawn_ht array.")
else
write(stdout, '(1x,a5)') "Done."
write(stdout, '(a106)') "Note that the hash table uses linked lists, and the memory usage will &
&increase as further nodes are added."
end if
call init_hash_table(spawn_ht)
end subroutine setup_temp_det_list