For intermediate regime equilibrium particles, density, energy density and pressure are obtained through integration of distribution function
from common import integrators
import numpy
name = 'intermediate'def density(particle):
    density, _ = integrators.integrate_1D(
        lambda p: (
            particle.equilibrium_distribution_function(
                particle.energy(p) / particle.T
            ) * p**2 * particle.dof / 2. / numpy.pi**2
        ), (particle.grid.MIN_MOMENTUM / particle.params.a,
            particle.grid.MAX_MOMENTUM / particle.params.a)
    )
    return densitydef energy_density_integrand(p, particle):
    E = particle.energy(p)
    return (
        particle.equilibrium_distribution_function(E / particle.T)
        * p**2 * E
        * particle.dof / 2. / numpy.pi**2
    )def energy_density(particle):
    energy_density, _ = integrators.integrate_1D(
        lambda p: energy_density_integrand(p, particle),
        (particle.grid.MIN_MOMENTUM / particle.params.a,
         particle.grid.MAX_MOMENTUM / particle.params.a)
    )
    return energy_densitydef pressure_integrand(p, particle):
    E = particle.energy(p)
    return (
        particle.equilibrium_distribution_function(E / particle.T)
        * p**4 / E
        * particle.dof / 6. / numpy.pi**2
    )def pressure(particle):
    pressure, _ = integrators.integrate_1D(
        lambda p: pressure_integrand(p, particle),
        (particle.grid.MIN_MOMENTUM / particle.params.a,
         particle.grid.MAX_MOMENTUM / particle.params.a)
    )
    return pressuredef numerator(particle):
    return (particle.mass**2 * particle.params.x
            / particle.params.m**2 / particle.aT
            * I(particle, 2))def denominator(particle):
    return (I(particle, 4) + particle.conformal_mass**2 * I(particle)) / particle.aT**2def I(particle, y_power=2):
    return particle.dof / 2. / numpy.pi**2 * integrators.integrate_1D(
        lambda y: (
            y**y_power * numpy.exp(-particle.conformal_energy(y) / particle.aT)
            / (numpy.exp(-particle.conformal_energy(y) / particle.aT) + particle.eta) ** 2
        ),
        (particle.grid.MIN_MOMENTUM, particle.grid.MAX_MOMENTUM)
    )[0]