Exemplo n.º 1
0
def summand(e, L, nna, nnk, nk, gamma, x2, l1, m1, l2, m2, alpha, Ytype='r'):

    nnA = nna
    nnK = nnk
    nnb = -1 * (np.add(nnA, nnK))

    if (nk == 0):
        rr = nnA
    else:
        factor = (1 / (2 * gamma) +
                  (1 / gamma - 1) * mydot(nnA, nnK) / square(nk))
        rr = np.add(nnA, factor * nnK)

    rr2 = mydot(rr, rr)
    twopibyL = 2 * math.pi / L
    a = norm(nnA) * twopibyL
    b = norm(nnb) * twopibyL

    Ylmlm = 1
    if l1 == 2:
        #Ylmlm = defns.y2(rr,m1,Ytype)
        Ylmlm = defns.y2real(rr, m1)
    if l2 == 2:
        #Ylmlm = Ylmlm * defns.y2(rr,m2,Ytype)
        Ylmlm = Ylmlm * defns.y2real(rr, m2)

    exponential = exp(alpha * (x2 - rr2))

    out = Ylmlm * exponential / (x2 - rr2)
    # if (Ytype=='r' or Ytype=='real') and abs(out.imag)>1e-15:
    #   sys.exit('Error in summand: imaginary part in real basis')
    return out.real
Exemplo n.º 2
0
def K3cubicA(E, pvec, lp, mp, kvec, l, m):
    p = norm(pvec)
    k = norm(kvec)
    Ep = defns.E2k(E, p)
    Ek = defns.E2k(E, k)
    wp = defns.omega(p)
    wk = defns.omega(k)
    ap = defns.qst(E, p)
    a = defns.qst(E, k)
    pterm = E * wp - 3
    kterm = E * wk - 3

    if lp == l == mp == m == 0:
        D3p = Ep**2 - 4
        D3 = Ek**2 - 4
        out = D3p**3 + D3**3 + 2 * (pterm**3 + kterm**3) + 8 * E**2 * (
            pterm * (p * ap / Ep)**2 + kterm * (k * a / Ek)**2)
    elif lp == 0 and l == 2:
        #out = 16/5 * kterm * (E*a/Ek)**2 * defns.y2real(kvec,m)
        out = 16 / 5 * kterm * (E / Ek)**2 * defns.y2real(
            kvec, m)  # removed a=qk* factor (no q)
    elif lp == 2 and l == 0:
        #out = 16/5 * pterm * (E*ap/Ep)**2 * defns.y2real(pvec,m)
        out = 16 / 5 * pterm * (E / Ep)**2 * defns.y2real(
            pvec, mp)  # removed ap=qp* factor (no q)
    else:
        out = 0

        #out *= ap**lp * a**l   # q factors are NOT included here (no q)

    if out.imag > 1e-15:
        print('Error: imaginary part in K3cubicA')
    return out.real
Exemplo n.º 3
0
def G(e, L, nnp, nnk, l1, m1, l2, m2):
    p = sums.norm(nnp) * 2. * math.pi / L
    k = sums.norm(nnk) * 2. * math.pi / L
    #    pk = sums.norm(np.add(nnk,nnp)) * 2. *math.pi/L
    pk = sums.norm(np.add(nnk, nnp)) * 2. * math.pi / L
    omp = npsqrt(1 + square(p))
    omk = npsqrt(1 + square(k))
    #ompk = np.sqrt(1+pk**2)

    bkp2 = (e - omp -
            omk)**2 - (2 * math.pi / L)**2 * sums.norm(np.add(nnk, nnp))**2
    #    print('test')

    # nnps and nnks are the full vectors p* and k*
    nnps = boost(np.multiply(nnp, 2 * math.pi / L),
                 np.multiply(nnk, 2 * math.pi / L), e)
    nnks = boost(np.multiply(nnk, 2 * math.pi / L),
                 np.multiply(nnp, 2 * math.pi / L), e)
    #ps = sums.norm(nnps)
    #ks = sums.norm(nnks)
    qps2 = square(e - omp) / 4 - square(p) / 4 - 1
    qks2 = square(e - omk) / 4 - square(k) / 4 - 1

    # TB: Choose spherical harmonic basis
    Ytype = 'r'  # 'r' for real, 'c' for complex
    Ylmlm = 1
    momfactor1 = 1
    momfactor2 = 1
    if (l1 == 2):
        #momfactor1 = (ks)**l1/qps2
        momfactor1 = qps2**(-l1 / 2)  # TB: ks**l1 included in my y2(nnks)
        #Ylmlm = y2(nnks,m1,Ytype)
        Ylmlm = y2real(nnks, m1)
    if (l2 == 2):
        #momfactor2 = (ps)**l2/qks2
        momfactor2 = qks2**(-l2 / 2)  # TB: ps**l2 included in my y2(nnps)
        #Ylmlm = Ylmlm * y2(nnps,m2,Ytype)
        Ylmlm = Ylmlm * y2real(nnps, m2)

    #out = sums.hh(e,p)*sums.hh(e,k)/(L**3 * 4*omp*omk*(bkp2-1)) *Ylmlm * momfactor1 * momfactor2
    out = sums.hh(e, p) * sums.hh(e, k) / (L**3 * 4 * omp * omk *
                                           (bkp2 - 1)) * Ylmlm  # TB, no q

    # if (Ytype=='r' or Ytype=='real') and abs(out.imag)>1e-15:
    #     sys.exit('Error in G: imaginary part in real basis output')
    return out.real
Exemplo n.º 4
0
def wddmp(E, pvec, lp, mp, kvec, l, m, Ytype='r'):
    if lp == mp == 0:
        k = norm(kvec)
        p12sk = p12stark(E, pvec, kvec)
        if l == m == 0:
            return 1 / 3 * (qst(E, k) * norm(p12sk))**2
        elif l == 2:
            #return 2/15 * qst(E,k)**2 * conj(y2(p12sk,m,Ytype))
            #      return 2/15 * conj(y2(p12sk,m,Ytype)) # TB, no q
            return 2 / 15 * conj(y2real(p12sk, m))  # TB, no q

    else:
        return 0
Exemplo n.º 5
0
def wds(E, pvec, lp, mp, kvec, l, m, Ytype='r'):
    if lp == mp == 0:
        k = norm(kvec)
        p = norm(pvec)
        psk = pstark(E, pvec, kvec)
        if l == m == 0:
            return 1 / 2 * (E * omega(p) - sqrt(wss(E, pvec, 0, 0, kvec, 0, 0))
                            )**2 + 2 / 3 * (qst(E, k) * norm(psk))**2
        elif l == 2:
            #return 4/15 * qst(E,k)**2 * conj(y2(psk,m,Ytype))
            #      return 4/15 * conj(y2(psk,m,Ytype)) # TB, no q
            return 4 / 15 * conj(y2real(psk, m))  # TB, no q
    else:
        return 0