dampLMatel Subroutine

public pure subroutine dampLMatel(a, b, c, matel)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: a
integer, intent(in) :: b
integer, intent(in) :: c
real(kind=dp), intent(inout) :: matel

Contents

Source Code


Source Code

    pure subroutine dampLMatel(a, b, c, matel)
        ! spin-projector for the tc terms - apply heuristically for three-body terms
        ! Input: a,b,c - Target orbital indices
        ! Input/Output: matel - on input, the bare matrix element, on return, the
        !                       matrix element including spin-correction
        integer, intent(in) :: a, b, c
        HElement_t(dp), intent(inout) :: matel

        ! same-spin contributions are divided by 4 (this is exact)
        if (G1(a)%MS == G1(b)%MS .and. G1(b)%MS == G1(c)%MS) then
            matel = matel / 4.0_dp
        else
            ! opposite-spin contributions are divided by 2 (this is a guess, the
            ! exact form has an admixture of exchange terms)
            matel = matel / 2.0_dp
        end if
    end subroutine dampLMatel