pick_three_orbs_nosym Subroutine

public subroutine pick_three_orbs_nosym(nI, tgt, pgen, ms)

picks three random unoccupied orbitals, given the occupied orbitals, ignoring symmetry This is a more efficient version of pick_three_orbs_sym for the case that point-group symmetry is not used

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(nel)
integer, intent(out) :: tgt(3)
real(kind=dp), intent(inout) :: pgen
integer, intent(in) :: ms

Contents

Source Code


Source Code

    subroutine pick_three_orbs_nosym(nI, tgt, pgen, ms)
        integer, intent(in) :: nI(nel), ms
        integer, intent(out) :: tgt(3)
        real(dp), intent(inout) :: pgen

        integer :: i, msCur, msOrb

        msCur = ms
        do i = 0, 2
            ! get the ms of this orb
            ! we take ms = 1 until the total leftover ms is negative
            if (msCur > 0) then
                msOrb = 1
            else
                ! then we start taking ms = -1
                msOrb = -1
            end if
            call get_rand_orb(nI, tgt, msOrb, i, pgen)
            ! the remaining ms
            msCur = msCur - msOrb
        end do

        ! adjust the probability by taking permutations into account
        pgen = pgen * 2 * abs(ms)

    end subroutine pick_three_orbs_nosym