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
def K2inv(E,kvec,l,m,a0,r0,P0,a2): k = LA.norm(kvec) omk = defns.omega(k) E2star = defns.E2k(E,k) qk = defns.qst(E,k) h = sums.hh(E,k) if h==0: print('Error: invalid kvec in K2inv') if l==m==0: out = 1/(32*pi*omk*E2star) * ( -1/a0 + r0*qk**2/2 + P0*r0**3*qk**4 + abs(qk)*(1-h)) elif l==2 and -2<=m<=2: # out = 1/(32*pi*omk*E2star*qk**4) * ( -1/a2**5 + abs(qk)**5*(1-h) ) out = 1/(32*pi*omk*E2star) * ( -1/a2**5 + abs(qk)**5*(1-h) ) # TB, no q else: return 0 if out.imag > 1e-15: print('Error in K2inv: imaginary part in output') else: out = out.real return out
def K3cubicB(E, pvec, lp, mp, kvec, l, m): #pvec=np.array(pvec); kvec=np.array(kvec) p = norm(pvec) k = norm(kvec) phat = np.array([x / p for x in pvec]) if p != 0 else pvec khat = np.array([x / k for x in kvec]) if k != 0 else 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) # Bp = p/(E-wp); Bk = k/(E-wk) # gp = 1/sqrt(1-Bp**2); gk = 1/sqrt(1-Bk**2) k_p = np.dot(pvec, kvec) # Denote primed (outgoing) momenta with t # Denote p_{12}^+ by p12, and p_{12}^- by m12; add t for primed versions pstark_vec = K3_defns.pstark( E, pvec, kvec) #gk*Bk*wp*khat + (gk-1)*p*khat_phat*khat + pvec kstarp_vec = K3_defns.pstark( E, kvec, pvec) #gp*Bp*wk*phat + (gp-1)*k*khat_phat*phat + kvec p12t_stark_vec = K3_defns.p12stark( E, pvec, kvec) #gk*Bk*(E-wp)*khat - (gk-1)*p*khat_phat*khat - pvec p12_starp_vec = K3_defns.p12stark( E, kvec, pvec) #gp*Bp*(E-wk)*phat - (gp-1)*k*khat_phat*phat - kvec pstark = norm(pstark_vec) kstarp = norm(kstarp_vec) p12t_stark = norm(p12t_stark_vec) p12_starp = norm(p12_starp_vec) p3_p3t = wk * wp - k_p p12_p12t = (E - wk) * (E - wp) - k_p p12_p3t = (E - wk) * wp + k_p p3_p12t = (E - wp) * wk + k_p t = K3_defns.T(E, pvec, kvec) u = np.outer(p12t_stark_vec, p12_starp_vec) # tensor needed for full U if lp == l == mp == m == 0: out = p3_p3t**3 + 1/4*( (p12_p3t)**3 + (p3_p12t)**3 ) + p12_p3t*pstark**2*a**2 + p3_p12t*kstarp**2*ap**2 \ + 1/16*p12_p12t**3 + 1/4*p12_p12t*( p12t_stark**2*a**2 + p12_starp**2*ap**2 ) \ + 1/3*p12_p12t*a**2*ap**2*Sspher(t,0,0,0,0) + 2/3*a**2*ap**2*Uspher(t,u,0,0,0,0) elif lp == mp == 0 and l == 2: out = 2/5*p12_p3t*y2real(pstark_vec,m) + 1/10*p12_p12t*y2real(p12t_stark_vec,m) \ + p12_p12t*ap**2*Sspher(t,0,0,2,m) + 2*ap**2*Uspher(t,u,0,0,2,m) # removed a^2=qk*^2 factor (no q) # factor of 1/sqrt(15) that Steve has is inside Sspher and Uspher elif lp == 2 and l == m == 0: out = 2/5*p3_p12t*y2real(kstarp_vec,mp) + 1/10*p12_p12t*y2real(p12_starp_vec,mp) \ + p12_p12t*a**2*Sspher(t,2,mp,0,0) + 2*a**2*Uspher(t,u,2,mp,0,0) # removed ap^2=qp*^2 factor (no q) # factor of 1/sqrt(15) that Steve has is inside Sspher and Uspher elif lp == l == 2: out = 3 * p12_p12t * Sspher(t, 2, mp, 2, m) + 6 * Uspher( t, u, 2, mp, 2, m) # removed (ap*a)^2=(qk*qp*)^2 factor (no q) # factor of 1/15 that Steve has is inside Sspher and Uspher 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 K3cubicB') return out.real