コード例 #1
0
ファイル: boltzmann.py プロジェクト: AntonVopilov/pyBBN
    def rates(self):
        forward_integral = numpy.vectorize(lambda p0: p0**2 / (2 * numpy.pi)**3
                                           * self.integrate(p0, self.F_A)[0])

        backward_integral = numpy.vectorize(lambda p0: p0**2 / (2 * numpy.pi)**3
                                            * self.integrate(p0, self.F_B)[0])

        grid = self.particle.grid

        forward_rate, _ = integrators.integrate_1D(forward_integral,
                                                   (grid.MIN_MOMENTUM, grid.MAX_MOMENTUM))

        backward_rate, _ = integrators.integrate_1D(backward_integral,
                                                    (grid.MIN_MOMENTUM, grid.MAX_MOMENTUM))

        return -forward_rate, backward_rate
コード例 #2
0
def pressure(particle):
    """ \begin{equation}
            P = \int dp I_P
        \end{equation}
    """
    pressure, _ = integrators.integrate_1D(
        lambda p: pressure_integrand(p, particle), (0, 20 * particle.T))
    return pressure
コード例 #3
0
def energy_density(particle):
    """ \begin{equation}
            \rho = \int dp I_\rho
        \end{equation}
    """
    energy_density, _ = integrators.integrate_1D(
        lambda p: energy_density_integrand(p, particle), (0, 20 * particle.T))
    return energy_density
コード例 #4
0
ファイル: IntermediateParticle.py プロジェクト: ckald/pyBBN
def pressure(particle):
    """ \begin{equation}
            P = \int dp I_P
        \end{equation}
    """
    pressure, _ = integrators.integrate_1D(
        lambda p: pressure_integrand(p, particle),
        (0, 20 * particle.T)
    )
    return pressure
コード例 #5
0
ファイル: IntermediateParticle.py プロジェクト: ckald/pyBBN
def energy_density(particle):
    """ \begin{equation}
            \rho = \int dp I_\rho
        \end{equation}
    """
    energy_density, _ = integrators.integrate_1D(
        lambda p: energy_density_integrand(p, particle),
        (0, 20 * particle.T)
    )
    return energy_density
コード例 #6
0
def density(particle):
    """ ## Particle density

        \begin{equation}
            g \int \frac{p^2 dp}{2 \pi^2} f\left( \frac{p}{T} \right)
        \end{equation}
    """
    density, _ = integrators.integrate_1D(
        lambda p: (particle.equilibrium_distribution_function(
            particle.energy(p) / particle.T) * p**2 * particle.dof / 2. / numpy
                   .pi**2), (0, 20 * particle.T))
    return density
コード例 #7
0
ファイル: IntermediateParticle.py プロジェクト: ckald/pyBBN
def density(particle):
    """ ## Particle density

        \begin{equation}
            g \int \frac{p^2 dp}{2 \pi^2} f\left( \frac{p}{T} \right)
        \end{equation}
    """
    density, _ = integrators.integrate_1D(
        lambda p: (
            particle.equilibrium_distribution_function(particle.energy(p) / particle.T)
            * p**2 * particle.dof / 2. / numpy.pi**2
        ), (0, 20 * particle.T)
    )
    return density
コード例 #8
0
    def integrate(self, p0, fau=None, bounds=None):
        if p0 == 0:
            return self.rest_integral(fau)

        if bounds is None:
            bounds = (self.grids[0].MIN_MOMENTUM, self.grids[0].MAX_MOMENTUM)

        def prepared_integrand(p1):
            return self.integrand(p0, p1, fau)

        integral, error = integrators.integrate_1D(prepared_integrand,
                                                   bounds=bounds)
        constant = self.particle.params.a / 16. / math.pi

        return constant * integral
コード例 #9
0
def baryonic_rates(_a):
    global a
    a = _a

    grid = particles.neutrino.grid

    data = []
    for integrand, bounds in [(_rate1, (grid.MIN_MOMENTUM, grid.MAX_MOMENTUM)),
                              (_rate2, (grid.MIN_MOMENTUM, grid.MAX_MOMENTUM)),
                              (_rate3, (grid.MIN_MOMENTUM, (q - m_e) * a)),
                              (_rate4, (grid.MIN_MOMENTUM, (q - m_e) * a)),
                              (_rate5, ((q + m_e) * a, grid.MAX_MOMENTUM)),
                              (_rate6, ((q + m_e) * a, grid.MAX_MOMENTUM))]:
        if bounds[0] < bounds[1]:
            data.append(CONST.rate_normalization /
                        particles.neutrino.params.a**5 *
                        integrate_1D(integrand, bounds=bounds)[0])
        else:
            data.append(0.)

    return data
コード例 #10
0
def Int(particle, y_power=2):
    if environment.get('LAGUERRE_GAUSS_FOR_MASSIVE_EQUILIBRIUM_PARTICLES'):
        aT = particle.params.aT
        mat = particle.conformal_mass / aT

        laguerre = (
            particle.dof / 2. / numpy.pi**2 * aT**(y_power + 1) *
            numpy.exp(-mat) * gauss_laguerre.integrate_1D(lambda eps: (
                (eps + mat) * (eps * (eps + 2. * mat))**((y_power - 1.) / 2.) /
                (numpy.exp(-eps - mat) + particle.eta)**2))[0])
        return laguerre
    else:
        legendre = particle.dof / 2. / numpy.pi**2 * integrators.integrate_1D(
            lambda y:
            (y**y_power * numpy.exp(
                particle.conformal_energy(y) / particle.params.aT) /
             (numpy.exp(particle.conformal_energy(y) / particle.params.aT) +
              particle.eta)**2),
            (particle.grid.MIN_MOMENTUM, particle.grid.MAX_MOMENTUM))[0]

        return legendre
コード例 #11
0
ファイル: kawano.py プロジェクト: anasthesia/pyBBN
def baryonic_rates(_a):
    global a
    a = _a

    grid = particles.neutrino.grid

    data = []
    for integrand, bounds in [
            (_rate1, (grid.MIN_MOMENTUM, grid.MAX_MOMENTUM)),
            (_rate2, (grid.MIN_MOMENTUM, grid.MAX_MOMENTUM)),
            (_rate3, (grid.MIN_MOMENTUM, (q - m_e)*a)),
            (_rate4, (grid.MIN_MOMENTUM, (q - m_e)*a)),
            (_rate5, ((q + m_e)*a, grid.MAX_MOMENTUM)),
            (_rate6, ((q + m_e)*a, grid.MAX_MOMENTUM))]:

        if bounds[0] < bounds[1]:
            data.append(CONST.rate_normalization / a**5
                        * integrate_1D(integrand, bounds=bounds)[0])
        else:
            data.append(0.)

    return data
コード例 #12
0
ファイル: IntermediateParticle.py プロジェクト: ckald/pyBBN
def Int(particle, y_power=2):
    if environment.get('LAGUERRE_GAUSS_FOR_MASSIVE_EQUILIBRIUM_PARTICLES'):
        aT = particle.params.aT
        mat = particle.conformal_mass / aT

        laguerre = (
            particle.dof / 2. / numpy.pi**2 * aT**(y_power + 1) * numpy.exp(-mat)
            * gauss_laguerre.integrate_1D(lambda eps: (
                (eps + mat) * (eps * (eps + 2. * mat))**((y_power - 1.) / 2.)
                / (numpy.exp(-eps - mat) + particle.eta)**2
            ))[0]
        )
        return laguerre
    else:
        legendre = particle.dof / 2. / numpy.pi**2 * integrators.integrate_1D(
            lambda y: (
                y**y_power * numpy.exp(particle.conformal_energy(y) / particle.params.aT)
                / (numpy.exp(particle.conformal_energy(y) / particle.params.aT) + particle.eta)**2
            ),
            (particle.grid.MIN_MOMENTUM, particle.grid.MAX_MOMENTUM)
        )[0]

        return legendre