perform_verlet_iteration Subroutine

public subroutine perform_verlet_iteration(err)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: err

Contents


Source Code

    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