| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nI(nel) | |||
| type(Excite_2_t), | intent(in) | :: | ex | |||
| logical, | intent(in) | :: | tSign | |||
| logical, | intent(in), | optional | :: | assert_occupation |
function sltcnd_2_base_ua(nI, ex, tSign, assert_occupation) result(hel) ! Calculate the by the Slater-Condon Rules when the two ! determinants differ by two orbitals exactly (the simplest case). integer, intent(in) :: nI(nel) type(Excite_2_t), intent(in) :: ex logical, intent(in) :: tSign logical, intent(in), optional :: assert_occupation HElement_t(dp) :: hel debug_function_name("sltcnd_2_base_ua") #ifdef DEBUG_ block use constants, only: stderr use util_mod, only: stop_all logical :: test_occupation if (present(assert_occupation)) then test_occupation = assert_occupation else test_occupation = .true. end if if (test_occupation) then if (.not. occupation_allowed(nI, ex)) then write(stderr, *) 'src', ex%val(1, :) write(stderr, *) 'tgt', ex%val(2, :) write(stderr, *) 'nI', nI call stop_all(this_routine, "Not allowed by occupation.") end if end if end block #endif ! Only non-zero contributions if Ms preserved in each term (consider ! physical notation). hel = sltcnd_2_kernel_ua(ex) if (tSign) hel = -hel end function sltcnd_2_base_ua