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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nI(nel) | |||
| integer, | intent(out) | :: | tgt(3) | |||
| real(kind=dp), | intent(inout) | :: | pgen | |||
| integer, | intent(in) | :: | ms |
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