Source code for rabacus.cosmology.jeans

""" A general Jeans scale module. """


import numpy as np

from rabacus.constants import physical
from rabacus.constants import units


__all__ = ['Jeans']


[docs]class Jeans: r""" A Jeans scale class. Provides access to Jeans scales functions. Default values for Yp and fg are taken from Planck Cosmological Parameters Yp = 0.248 fg = Omega_b / Omega_m = 0.154 Args: Kwargs: `Yp` (float): helium mass fraction `fg` (float): gas fraction `gamma` (float): ratio of specific heats """ def __init__( self, Yp=0.248, fg=0.154, gamma=5.0/3.0 ): self.Yp = Yp self.fg = fg self.gamma = gamma self.U = units.Units() self.PC = physical.PhysicalConstants()
[docs] def mu( self, xH2, xHe2, xHe3 ): """ Mean molecular weight, i.e. the mean mass of an ion in atomic mass units, as a function of ionization state. Args: `xH2` (float): nHII / nH `xHe2` (float): nHeII / nHe `xHe3` (float): nHeIII / nHe """ num = 4.0 t1 = 3.0 * self.Yp t2 = 4.0 * xH2 * (1.0-self.Yp) t3 = (xHe2 + 2.0*xHe3) * self.Yp den = 4.0 - t1 + t2 + t3 mu = num / den return mu
[docs] def t_dyn( self, nH ): """ Dynamical time Args: `nH` (float): number density of hydrogen """ num = ( 1.0-self.Yp ) * self.fg den = nH * self.PC.G * self.PC.m_p t_dyn = np.sqrt( num / den ) t_dyn.units = 's' return t_dyn
[docs] def cs( self, T, mu ): """ Sound speed Args: `T` (float): temperature `mu` (float): mean molecular weight """ cs = np.sqrt( self.gamma * self.PC.kb * T / ( mu * self.PC.m_p ) ) cs.units = 'km/s' return cs
[docs] def t_sc( self, L, T, mu ): """ Sound crossing time. Args: `L` (float): length scale `T` (float): temperature `mu` (float): mean molecular weight """ cs = self.cs( T, mu ) t_sc = L / cs t_sc.units = 's' return t_sc
[docs] def L( self, nH, T, mu ): """ Jeans length Args: `nH` (float): hydrogen number density `T` (float): temperature `mu` (float): mean molecular weight """ cs = self.cs( T, mu ) t_dyn = self.t_dyn( nH ) L = cs * t_dyn L.units = 'kpc' return L
[docs] def NH( self, nH, T, mu ): """ Jeans column density Args: `nH` (float): hydrogen number density `T` (float): temperature `mu` (float): mean molecular weight """ NH = nH * self.L( nH, T, mu ) NH.units = 'cm^-2' return NH