subroutine calcFullStartFullStopAlike(ilut, csf_i, excitInfo, excitations)
integer(n_int), intent(in) :: ilut(0:nifguga)
type(CSF_Info_t), intent(in) :: csf_i
type(ExcitationInformation_t), intent(in) :: excitInfo
integer(n_int), intent(out), allocatable :: excitations(:, :)
character(*), parameter :: this_routine = "calcFullStartFullStopAlike"
integer :: ierr
integer(n_int) :: t(0:nifguga)
real(dp) :: nOpen
! full start full stop alike is pretty easy. actually there is only
! one possible excitation, and the matrix element sign, just depends
! on the number of open orbitals in the excitation range,
! so just count that and check if excitation is possible.
! assert again just to be save
ASSERT(isZero(ilut, excitInfo%i))
ASSERT(isThree(ilut, excitInfo%j))
! is only one excitation possible
allocate(excitations(0:nifguga, 1), stat=ierr)
! where everything is the same as in ilut, except at full start and stop
t = ilut
! change start/end depending on type of excitation
set_orb(t, 2 * excitInfo%i)
set_orb(t, 2 * excitInfo%i - 1)
clr_orb(t, 2 * excitInfo%j)
clr_orb(t, 2 * excitInfo%j - 1)
! matrix element deĆ¼ends only on the number of open orbitals in the
! excitaiton region
nOpen = real(count_open_orbs_ij(csf_i, excitInfo%fullStart, excitInfo%fullEnd), dp)
! update! the sum over two-particle integrals involves a 1/2, which
! does not get compensated here by
call encode_matrix_element(t, 0.0_dp, 2)
call encode_matrix_element(t, 2.0_dp * (-1.0_dp)**nOpen, 1)
if (tFillingStochRDMOnFly) then
call encode_stochastic_rdm_info(GugaBits, t, rdm_ind= &
contract_2_rdm_ind(excitInfo%i, excitInfo%j, excitInfo%k, excitInfo%l, &
excit_lvl=2, excit_typ=excitInfo%typ), x1=0.0_dp, &
x0=extract_matrix_element(t, 1))
end if
excitations(:, 1) = t
end subroutine calcFullStartFullStopAlike