# calc_pgen_k_space_hubbard_transcorr Function

## public function calc_pgen_k_space_hubbard_transcorr(nI, ilutI, ex, ic) result(pgen)

### Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(nel)
integer(kind=n_int), intent(in) :: ilutI(0:niftot)
integer, intent(in) :: ex(:,:)
integer, intent(in) :: ic

## Source Code

    function calc_pgen_k_space_hubbard_transcorr(nI, ilutI, ex, ic) result(pgen)
! this function i have to rewrite for the transcorrelated to take
! the same-spin doubles and triples into account!
! NOTE: ex could be of form (2,3) in the case of triples!
integer, intent(in) :: nI(nel), ex(:, :), ic
integer(n_int), intent(in) :: ilutI(0:niftot)
real(dp) :: pgen

pgen = 0.0_dp

if (ic == 2) then
if (same_spin(ex(1, 1), ex(1, 2))) then
! parallel double excitation
! the spins are checked within the function:
pgen = calc_pgen_k_space_hubbard_par(nI, ilutI, ex, ic)

pgen = pgen * pDoubles * pParallel

else
! "normal" opposite spin excitation
! the spins are checked within the function:
pgen = calc_pgen_k_space_hubbard(nI, ilutI, ex, ic)

pgen = pgen * pDoubles * (1.0_dp - pParallel)
end if
else if (ic == 3) then
pgen = calc_pgen_k_space_hubbard_triples(nI, ilutI, ex, ic)

pgen = pgen * (1.0_dp - pDoubles)

end if

end function calc_pgen_k_space_hubbard_transcorr