findFirstSwitch Function

public pure function findFirstSwitch(iI, iJ, start, semi) result(orb)

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(in) :: iI(0:GugaBits%len_tot)
integer(kind=n_int), intent(in) :: iJ(0:GugaBits%len_tot)
integer, intent(in) :: start
integer, intent(in) :: semi

Return Value integer


Contents

Source Code


Source Code

    pure function findFirstSwitch(iI, iJ, start, semi) result(orb)
        ! write a scratch implementation to find the first change in
        ! stepvector for two given CSFs. do it inefficiently for now
        ! improve later on
        integer(n_int), intent(in) :: iI(0:GugaBits%len_tot), iJ(0:GugaBits%len_tot)
        integer, intent(in) :: start, semi
        integer :: orb, a, b

        integer :: i
        ! with the fortran 2008 intrinsic funcitons it would be easy...
        ! for now just do a loop over double overlap region and compare
        ! stepvalues

        ! i could also use the quantity here.. or?
        ! if it is always called for the current looked at ilut..
        ! i guess it does..

        ! implement this with the new f2008 routines..
        ! i need to find the first spin-change between start and semi-1

        if (start >= semi) then
            orb = -1
            return
        end if
        ! make the spin_change bit-rep

        ! todo check if this change worked!
        ! ok... i have two different goals here..
        ! before i wanted to check for any switches.. now i only want
        ! spin-changes.. to i ever need anything else then spin-changes?
        ! ok i really only need spin-changes.. so change the testsuite
        orb = -1
        do i = start, semi - 1
            a = getStepvalue(iI, i)
            b = getStepvalue(iJ, i)
            if (a /= b) then
                orb = i
                return
            end if
        end do

    end function findFirstSwitch