LOGICAL FUNCTION TestifDETinCAS(CASDet)
INTEGER :: k, z, CASDet(NEl), orb
LOGICAL :: tElecInVirt
! CASmax is the max spin orbital number (when ordered energetically)
! within the chosen active space. Spin orbitals with energies larger
! than this maximum value must be unoccupied for the determinant to
! be in the active space.
! CASmax=NEl+VirtCASorbs
! CASmin is the max spin orbital number below the active space. As
! well as the above criteria, spin orbitals with energies equal to,
! or below that of the CASmin orbital must be completely occupied for
! the determinant to be in the active space.
!
! (These have been moved to the InitCalc subroutine so they're not
! calculated each time).
! CASmin=NEl-OccCASorbs
z = 0
tElecInVirt = .false.
do k = 1, NEl ! running over all electrons
orb = CASDet(k)
if (SpinInvBRR(orb) > CASmax) THEN
tElecInVirt = .true.
EXIT
! if at any stage an electron has an energy greater than the
! CASmax value, the determinant can be ruled out of the active
! space. Upon identifying this, it is not necessary to check
! the remaining electrons.
else
if (SpinInvBRR(orb) <= CASmin) THEN
z = z + 1
end if
! while running over all electrons, the number that occupy
! orbitals equal to or below the CASmin cutoff are counted.
end if
end do
if (tElecInVirt .or. (z /= CASmin)) THEN
! if an electron is in an orbital above the active space, or the
! inactive orbitals are not full, the determinant is automatically
! ruled out.
TestifDETinCAS = .false.
else
! no orbital in virtual and the inactive orbitals are completely
! full - det in active space.
TestifDETinCAS = .true.
end if
RETURN
END FUNCTION TestifDETinCAS