def Vr(self, bosons, T, bosons_ring): """ The ring diagram (Daisy resummation) """ T2 = (T*T)[..., np.newaxis] + 1e-100 # the 1e-100 is to avoid divide by zero errors T4 = T*T*T*T m2, nb, c = bosons ring, nbring = bosons_ring y =np.sum(nbring*Jb((m2+ring)/T2), axis=-1) - np.sum(nbring*Jb(m2/T2), axis=-1) return y*T4/(2*np.pi*np.pi)
def V1T(self, bosons, fermions, T, include_radiation=False): """ The one-loop finite-temperature potential. This is generally not called directly, but is instead used by :func:`Vtot`. Note ---- The `Jf` and `Jb` functions used here are aliases for :func:`finiteT.Jf_spline` and :func:`finiteT.Jb_spline`, each of which accept mass over temperature *squared* as inputs (this allows for negative mass-squared values, which I take to be the real part of the defining integrals. .. todo:: Implement new versions of Jf and Jb that return zero when m=0, only adding in the field-independent piece later if ``include_radiation == True``. This should reduce floating point errors when taking derivatives at very high temperature, where the field-independent contribution is much larger than the field-dependent contribution. """ # This does not need to be overridden. T2 = (T * T)[..., np.newaxis] + 1e-100 # the 1e-100 is to avoid divide by zero errors T4 = T * T * T * T m2, nb, c = bosons y = np.sum(nb * Jb(m2 / T2), axis=-1) m2, nf = fermions y += np.sum(nf * Jf(m2 / T2), axis=-1) if include_radiation: print("included") print(self.num_boson_dof) if self.num_boson_dof is not None: nb = self.num_boson_dof - np.sum(nb) y -= nb * np.pi**4 / 45. if self.num_fermion_dof is not None: nf = self.num_fermion_dof - np.sum(nf) y -= nf * 7 * np.pi**4 / 360. return y * T4 / (2 * np.pi * np.pi)