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

Return Value real(kind=dp)


Contents


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