@brief Return all configurations that are connected to nI as array of iluts (det_list(0:niftot, n_excits)).
@details Triple excitations are not supported.
(det_list(0:niftot, n_excits))
If ommited all excitations will be generated.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nI(nel) | |||
| integer, | intent(out) | :: | n_excits | |||
| integer(kind=n_int), | intent(out), | allocatable | :: | det_list(:,:) | ||
| integer, | intent(in), | optional | :: | ex_flag |
subroutine gen_excits(nI, n_excits, det_list, ex_flag) integer, intent(in) :: nI(nel) integer, intent(out) :: n_excits integer(n_int), intent(out), allocatable :: det_list(:, :) integer, optional, intent(in) :: ex_flag character(*), parameter :: this_routine = "gen_all_excits_default" integer :: n_singles, n_doubles, n_dets, ex(2, maxExcit), ex_flag_ integer :: nJ(nel) logical :: tpar, found_all integer(n_int) :: ilut(0:niftot) integer, parameter :: arbitrary_number = 42 ! can be neither 1 or 2 n_excits = -1 call EncodeBitDet(nI, ilut) if (present(ex_flag)) then ASSERT(present(ex_flag) .implies. any(ex_flag == [1, 2])) end if ! If it is set to neither 1 nor 2, all excitations ! are generated def_default(ex_flag_, ex_flag, arbitrary_number) ! for reference in the "normal" case it looks like that: call CountExcitations3(nI, ex_flag_, n_singles, n_doubles) n_excits = n_singles + n_doubles allocate(det_list(0:niftot, n_excits)) n_dets = 0 ex = 0 call GenExcitations3(nI, ilut, nJ, ex_flag_, ex, tpar, found_all, & .false.) do while (.not. found_all) n_dets = n_dets + 1 call EncodeBitDet(nJ, det_list(:, n_dets)) call GenExcitations3(nI, ilut, nJ, ex_flag_, ex, tpar, & found_all, .false.) end do if (n_dets /= n_excits) then write(stdout, *) "expected number of excitations: ", n_excits write(stdout, *) "actual calculated ones: ", n_dets call stop_all(this_routine, "Incorrect number of excitations found") end if ! Sort the dets, so they are easy to find by binary searching call sort(det_list, ilut_lt, ilut_gt) end subroutine gen_excits