DirectAnnihilation_diag Subroutine

public subroutine DirectAnnihilation_diag(TotWalkersNew, iter_data)


Type IntentOptional Attributes Name
integer, intent(inout) :: TotWalkersNew
type(fcimc_iter_data), intent(inout) :: iter_data


Source Code

    subroutine DirectAnnihilation_diag(TotWalkersNew, iter_data)
        ! new direct annihilation routine to mimick the diagonal death step
        ! in the y(n) + k2 combination between reloaded CurrentDets and the
        ! DiagParts list
        integer, intent(inout) :: TotWalkersNew
        type(fcimc_iter_data), intent(inout) :: iter_data
        character(*), parameter :: this_routine = "DirectAnnihilation_diag"
        integer :: numSpawns

        ! As only diagonal events are considered here, no communication
        ! is required
        ! Also, this eliminates the need for compression as all dets are
        ! already stored contigously and in the right orde
        ! (no annihilation inside DiagParts can occur)

        ! valid_diag_spawns gets increased after the spawn
        ! to DiagParts(:,valid_diag_spawns) -> highest index is
        ! actually valid_diag_spawns-1

        numSpawns = valid_diag_spawns - 1
        call AnnihilateDiagParts(numSpawns, TotWalkersNew, iter_data)

        ! also should update the hashtable stats, specific for this diagonal
        ! spawning event, but the original one should work also for this
        ! since it only takes CurrentDets into account!

        call CalcHashTableStats(TotWalkersNew, iter_data)

        ! this should be it, deterministic annihilation is carried out in the next
        ! step, within the 'regular' annihilation

    end subroutine DirectAnnihilation_diag