subroutine perform_verlet_iteration(err)
implicit none
integer, intent(out) :: err
integer :: TotWalkersNew
call init_verlet_iteration()
call update_elapsed_time()
! load H^2 psi into spawnedParts
call obtain_h2_psi()
! merge delta_psi and spawnedParts into the new delta_psi (which is stored in
! spawnedParts)
call update_delta_psi()
! merge delta_psi (now spawnedParts) into CurrentDets
! We need to cast TotWalkers to a regular int to pass it to the annihilation
! as it is modified, we need to pass an lvalue and cannot just pass int(TotWalkers)
TotWalkersNew = int(TotWalkers)
call end_iter_stats(TotWalkersNew)
! for semistochastic method, we add in the core -> core spawns
! if(tSemiStochastic) call deterministic_annihilation(iter_data_fciqmc)
call AnnihilateSpawnedParts(spawnBufSize, TotWalkersNew, iter_data_fciqmc, err)
! Updating the statistics is usually done in the annihilation, but since we
! explicitly carry out the annihilation, this has to be included explicitly
! (We can not use DirectAnnihilation because we need the communicated spawnedParts
! in between to update delta_psi)
call CalcHashTableStats(TotWalkersNew, iter_data_fciqmc)
TotWalkers = TotWalkersNew
end subroutine perform_verlet_iteration