Top | ![]() |
![]() |
![]() |
![]() |
Functions
Properties
gdouble | Delta | Read / Write / Construct Only |
gdouble | MDelta | Read / Write |
gboolean | MDelta-fit | Read / Write |
gdouble | cDelta | Read / Write |
gboolean | cDelta-fit | Read / Write |
gdouble | lnXf | Read / Write / Construct |
gdouble | lnXi | Read / Write / Construct |
NcHaloDensityProfileMassDef | mass-def | Read / Write / Construct Only |
gdouble | reltol | Read / Write / Construct |
Object Hierarchy
GEnum ├── NcHaloDensityProfileMassDef ╰── NcHaloDensityProfileSParams GObject ╰── NcmModel ╰── NcHaloDensityProfile ├── NcHaloDensityProfileDK14 ├── NcHaloDensityProfileEinasto ├── NcHaloDensityProfileHernquist ╰── NcHaloDensityProfileNFW
Description
This abstract class describes the radial matter density profile in real
space. Each implementation must provide, at least, the
dimensionless 3D density:
\begin{equation}\label{def:dlrho}
\hat\rho(x) \equiv \frac{\rho(x r_s)}{\rho_s}, \quad \rho(r) = \rho_s \hat\rho\left(\frac{r}{r_s}\right),
\end{equation}
where $\rho(r)$ is the actual density profile, $\rho_s$ is the profile scale
and $r_s$ the scale radius. This function corresponds to the virtual function
nc_halo_density_profile_eval_dl_density()
.
Parametrization
The two parameters $\rho_s$ and $r_s$ are described by the fundamental parametrization in terms of $M_\Delta$ (“MDelta”) and the concentration $c_\Delta$ (“cDelta”) given a mass defined by $\Delta$ (“Delta”) and a background density $\rho_\mathrm{bg}$ (“mass-def”). Strictly speaking, the object has two unmutable properties “Delta” and “mass-def” that defines the value of $\Delta$ and the background density $\rho_\mathrm{bg}$. Once these properties are defined, one can compute $(r_s,\;\rho_s)$ from $(M_\Delta,\; c_\Delta)$.
Computing $r_s$
The mass-radius relation defined in terms of the background density is \begin{equation}\label{eq:mrr} M_\Delta = \frac{4\pi}{3}r_\Delta^3\Delta\,\rho_\mathrm{bg}, \end{equation} which implicitly defines $r_\Delta$. The concentration $c_\Delta$ is then defined by \begin{equation}\label{def:cDelta} c_\Delta \equiv \frac{r_\Delta}{r_s}. \end{equation} Consequently, the scale radius $r_s$ can be computed from $M_\Delta$ and $c_\Delta$ using \begin{equation}\label{def:r_s} r_s = \frac{1}{c_\Delta}\left(\frac{3M_\Delta}{4\pi\Delta\,\rho_\mathrm{bg}}\right)^{1/3} = \frac{r_{s0}}{(\Delta\,\rho_\mathrm{bg})^{1/3}}, \qquad r_{s0} \equiv \frac{1}{c_\Delta}\left(\frac{3M_\Delta}{4\pi}\right)^{1/3}. \end{equation} We split the expression of $r_s$ in a constant part $r_{s0}$ and a redshift dependent (time-depedent) part $(\Delta\,\rho_\mathrm{bg}(z))^{-1/3}$.
Note that, the parameter $r_s$ can be computed directly from $(M_\Delta,\; c_\Delta)$, given the mass definition, without refering to $\hat\rho(x)$.
Computing $\rho_s$
Now, applying the mass definition $M_\Delta$ in terms of the radius $r_\Delta$
to our profile results in
\begin{equation}\label{eq:def:Mr}
M_\Delta = \int_0^{r_\Delta}4\pi r^2\rho(r)\mathrm{d}r
= 4\pi r_s^3 \rho_s \int_0^{c_\Delta}x^2\hat\rho(x)\mathrm{d}x
= 4\pi r_s^3 \rho_s I_{x^2\hat\rho}(c_\Delta),
\end{equation}
where we defined
\begin{equation}\label{def:Ix2_dld}
I_{x^2\hat\rho}(c_\Delta) \equiv \int_0^{c_\Delta}x^2\hat\rho(x)\mathrm{d}x.
\end{equation}
This integral can be implemented through the virtual method
nc_halo_density_profile_eval_dl_spher_mass()
, otherwise it will
be computed numerically using nc_halo_density_profile_eval_dl_density()
.
This same mass can be obtained from the background density using
mass-radius relation \eqref{eq:mrr}, consequently
\begin{equation}\label{def:rho_s}
\rho_s = \frac{c_\Delta^3\Delta\,\rho_\mathrm{bg}}{3I_{x^2\hat\rho}(c_\Delta)}.
\end{equation}
The only redshift dependency (time-dependency) here comes from the value of
$\rho_\mathrm{bg}(z)$, for this reason it is convenient to define a constant
quantity
\begin{equation}\label{def:rho_s0}
\rho_{s0} \equiv \frac{\rho_s}{\Delta\,\rho_\mathrm{bg}} = \frac{c_\Delta^3}{3I_{x^2\hat\rho}(c_\Delta)}.
\end{equation}
2D projection
The surface density obtained from the projection of the density
profile along the line-of-sight is given by
\begin{align}
\Sigma(R) &= \int_{-\infty}^\infty\rho(\sqrt{R^2+z^2})\mathrm{d}z, \\
&= 2\rho_s\int_{0}^\infty\hat\rho(\sqrt{R^2/r_s^2 + z^2/r_s^2})\mathrm{d}z, \\ \label{eq:def:hatSigma}
&= r_s\rho_s\hat\Sigma(R / r_s), & \hat\Sigma(X) &\equiv 2\int_{0}^\infty\hat\rho(\sqrt{X^2 + u^2})\mathrm{d}u.
\end{align}
In the equation above we obtain the 2D projection $\Sigma(R)$ in terms
of its dimensionless version $\hat\Sigma(X)$, where $X = R / r_s$.
The user can implement the method nc_halo_density_profile_eval_dl_2d_density()
providing $\hat\Sigma(X)$ directly or rely on the numerical implementation.
Mass on the cylinder of radius $R$
Using the 2D projection $\Sigma(R)$ one computes the total mass
inside an infinite cylinder of radius $R$ using
\begin{align}
\overline{M}(R) &= \int_0^R\Sigma(R')2\pi R'\mathrm{d}R' = 2\pi r_s^3\rho_s \hat{\overline{M}}(<R/r_s), \\ \label{eq:def:cylmass}
\hat{\overline{M}}(X) &\equiv \int_0^X\hat\Sigma(X')X'\mathrm{d}X'.
\end{align}
Here it is possible to implement the function $\hat{\overline{M}}(X)$
through the method nc_halo_density_profile_eval_dl_cyl_mass()
or to use
the default numerical implementation.
Numerical computation
If the implementation (i.e., a particular radial profile implementation of this abstract class) does not provide any of the functions:
nc_halo_density_profile_eval_dl_spher_mass()
,
nc_halo_density_profile_eval_dl_2d_density()
,
nc_halo_density_profile_eval_dl_cyl_mass()
,
they will be computed numerically integrating the density
$\hat{\rho}$ (nc_halo_density_profile_eval_dl_density()
).
These functions will be prepared to be computed inside the
interval $(X_i,\,X_f)$ defined by “lnXi”
and “lnXf” and using the relative
tolerance “reltol”. See the following
functions to control this behavior:
nc_halo_density_profile_set_reltol()
,
Functions
nc_halo_density_profile_new_from_name ()
NcHaloDensityProfile *
nc_halo_density_profile_new_from_name (gchar *density_profile_name
);
This function returns a new NcHaloDensityProfile whose type is defined by density_profile_name
string.
nc_halo_density_profile_ref ()
NcHaloDensityProfile *
nc_halo_density_profile_ref (NcHaloDensityProfile *dp
);
Increases the reference count of dp
by one.
nc_halo_density_profile_free ()
void
nc_halo_density_profile_free (NcHaloDensityProfile *dp
);
Atomically decrements the reference count of dp
by one. If the reference count drops to 0,
all memory allocated by dp
is released.
nc_halo_density_profile_clear ()
void
nc_halo_density_profile_clear (NcHaloDensityProfile **dp
);
Atomically decrements the reference count of dp
by one. If the reference count drops to 0,
all memory allocated by dp
is released. Set the pointer to NULL;
nc_halo_density_profile_set_reltol ()
void nc_halo_density_profile_set_reltol (NcHaloDensityProfile *dp
,const gdouble reltol
);
Sets the relative tolerance used in the numerical computations.
nc_halo_density_profile_set_lnXi ()
void nc_halo_density_profile_set_lnXi (NcHaloDensityProfile *dp
,const gdouble lnXi
);
Sets the numerical computation lower limit.
nc_halo_density_profile_set_lnXf ()
void nc_halo_density_profile_set_lnXf (NcHaloDensityProfile *dp
,const gdouble lnXf
);
Sets the numerical computation upper limit.
nc_halo_density_profile_get_reltol ()
gdouble
nc_halo_density_profile_get_reltol (NcHaloDensityProfile *dp
);
Gets the current relative tolerance.
nc_halo_density_profile_get_lnXi ()
gdouble
nc_halo_density_profile_get_lnXi (NcHaloDensityProfile *dp
);
Gets the computation interval lower limit $\ln(X_i)$.
nc_halo_density_profile_get_lnXf ()
gdouble
nc_halo_density_profile_get_lnXf (NcHaloDensityProfile *dp
);
Gets the computation interval upper limit $\ln(X_f)$.
nc_halo_density_profile_get_phys_limts ()
void nc_halo_density_profile_get_phys_limts (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
,gdouble *Ri
,gdouble *Rf
);
Gets the physical computation interval $(R_i,\, R_f)$. This interval is relevant only if the object relies on the numerical computation of the functions:
nc_halo_density_profile_eval_dl_2d_density()
nc_halo_density_profile_eval_dl_cyl_mass()
nc_halo_density_profile_eval_dl_density ()
gdouble nc_halo_density_profile_eval_dl_density (NcHaloDensityProfile *dp
,const gdouble x
);
This function computes the dimensionless density profile, see Eq. \eqref{def:dlrho}.
[virtual eval_dl_density]
nc_halo_density_profile_eval_dl_spher_mass ()
gdouble nc_halo_density_profile_eval_dl_spher_mass (NcHaloDensityProfile *dp
,const gdouble x
);
This function computes the 2d projection of the dimensionless density profile as described in Eq. \eqref{def:Ix2_dld}.
[virtual eval_dl_spher_mass]
nc_halo_density_profile_eval_dl_2d_density ()
gdouble nc_halo_density_profile_eval_dl_2d_density (NcHaloDensityProfile *dp
,const gdouble X
);
This function computes the dimensionless 2D density profile, see Eq. \eqref{eq:def:hatSigma}.
[virtual eval_dl_2d_density]
nc_halo_density_profile_eval_dl_cyl_mass ()
gdouble nc_halo_density_profile_eval_dl_cyl_mass (NcHaloDensityProfile *dp
,const gdouble X
);
This function computes the dimensionless cylinder mass, see Eq. \eqref{eq:def:cylmass}.
[virtual eval_dl_cyl_mass]
nc_halo_density_profile_Delta ()
gdouble nc_halo_density_profile_Delta (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
);
This function computes the overdensity with respect to the mass density $\Delta$.
The virial overdensity in units of the critical density. Following Colossus code (Diemer 2018) INCLUIR REF! This function uses the fitting formula of Bryan & Norman 1998 INCLUIR REF!
nc_halo_density_profile_rho_bg ()
gdouble nc_halo_density_profile_rho_bg (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
);
This function computes the background mass density $\rho_\mathrm{bg}$ in $M_\odot\mathrm{Mpc}^{-3}$.
nc_halo_density_profile_Delta_rho_bg ()
gdouble nc_halo_density_profile_Delta_rho_bg (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
);
This function computes the mass density threshold $\Delta\,\rho_bg$ in $M_\odot\mathrm{Mpc}^{-3}$.
nc_halo_density_profile_rho_s ()
gdouble nc_halo_density_profile_rho_s (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
);
This function computes the $\rho_s$ parameter as described in Eqs. \eqref{def:rho_s} and \eqref{def:rho_s0}.
nc_halo_density_profile_r_s ()
gdouble nc_halo_density_profile_r_s (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
);
This function computes the $r_s$ parameter as described in Eq. \eqref{def:r_s}.
nc_halo_density_profile_r_s_rho_s ()
void nc_halo_density_profile_r_s_rho_s (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
,gdouble *r_s
,gdouble *rho_s
);
This function computes $r_s$ and $\rho_s$ parameters as described in Eqs. \eqref{def:r_s}, \eqref{def:rho_s} and \eqref{def:rho_s0}.
nc_halo_density_profile_eval_density ()
gdouble nc_halo_density_profile_eval_density (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble r
,const gdouble z
);
This function computes the density profile in real space.
nc_halo_density_profile_eval_spher_mass ()
gdouble nc_halo_density_profile_eval_spher_mass (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble z
);
This function computes the total mass enclose in the sphere of radius $r$, see Eq. \eqref{eq:def:Mr}.
nc_halo_density_profile_eval_2d_density ()
gdouble nc_halo_density_profile_eval_2d_density (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble R
,const gdouble z
);
This function computes 2D projection of the density profile at radius $R$ and redshift $z$, see Eq. \eqref{}.
nc_halo_density_profile_eval_cyl_mass ()
gdouble nc_halo_density_profile_eval_cyl_mass (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble R
,const gdouble z
);
This function computes the total mass enclose in the cylinder of radius $R$, see Eq. \eqref{}.
nc_halo_density_profile_eval_density_array ()
GArray * nc_halo_density_profile_eval_density_array (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,GArray *r
,gdouble fin
,gdouble fout
,const gdouble z
);
This function computes the density profile in real space.
nc_halo_density_profile_eval_2d_density_array ()
GArray * nc_halo_density_profile_eval_2d_density_array (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,GArray *R
,gdouble fin
,gdouble fout
,const gdouble z
);
This function computes 2D projection of the density profile at radius $R$ and redshift $z$, see Eq. \eqref{}.
nc_halo_density_profile_eval_cyl_mass_array ()
GArray * nc_halo_density_profile_eval_cyl_mass_array (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,GArray *R
,gdouble fin
,gdouble fout
,const gdouble z
);
This function computes the total mass enclose in the cylinder of radius $R$, see Eq. \eqref{}.
nc_halo_density_profile_eval_numint_dl_spher_mass ()
gdouble nc_halo_density_profile_eval_numint_dl_spher_mass (NcHaloDensityProfile *dp
,const gdouble x
);
This function computes the 2d projection of the dimensionless density profile as described in Eq. \eqref{def:Ix2_dld}. This is the default implementation that will be used unless the child object provides one. This interface is present for testing purpose.
nc_halo_density_profile_eval_numint_dl_2d_density ()
gdouble nc_halo_density_profile_eval_numint_dl_2d_density (NcHaloDensityProfile *dp
,const gdouble X
);
This function computes the dimensionless 2D density profile, see Eq. \eqref{eq:def:hatSigma}. This is the default implementation that will be used unless the child object provides one. This interface is present for testing purpose.
nc_halo_density_profile_eval_numint_dl_cyl_mass ()
gdouble nc_halo_density_profile_eval_numint_dl_cyl_mass (NcHaloDensityProfile *dp
,const gdouble X
);
This function computes the dimensionless cylinder mass, see Eq. \eqref{eq:def:cylmass}. This is the default implementation that will be used unless the child object provides one. This interface is present for testing purpose.
Types and Values
enum NcHaloDensityProfileMassDef
Spherical overdensity halo mass: $$M_\Delta = \frac{4\pi}{3} \Delta \rho_\mathrm{bg} r_\Delta^3,$$
where $\rho_\mathrm{bg}$ is the background density of the universe at redshift z, $\rho_\mathrm{bg} (z)$.
For NC_HALO_DENSITY_PROFILE_MASS_DEF_VIRIAL
, the parameter “MDelta” is ignored and
\begin{equation}\label{def:DVir}
\Delta_\mathrm{Vir} = 18 \pi^2 + 82 x - 39 x^2, \quad x \equiv \Omega_m(z) - 1.
\end{equation}
enum NcHaloDensityProfileSParams
Fundamental parametrization of the profile $\rho(r)$, any additional parameter must be included in the implementation of this class.
Property Details
The “Delta”
property
“Delta” gdouble
Constant that indicates the overdensity with respect to the background density $\rho_\mathrm{bg}$. See “mass-def”.
Owner: NcHaloDensityProfile
Flags: Read / Write / Construct Only
Allowed values: [100,3200]
Default value: 200
The “MDelta”
property
“MDelta” gdouble
Cluster mass $M_\Delta$ in units of solar masses $M_\odot$
(ncm_c_mass_solar()
) within $r_\Delta$, where $\Delta$ is
the overdensity, see Eq. \eqref{eq:mrr}.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: 2e+14
The “MDelta-fit”
property
“MDelta-fit” gboolean
Boolean property that controls whether the parameter “MDelta” should be included in a statistical analysis.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: FALSE
The “cDelta”
property
“cDelta” gdouble
Concentration parameter, $c_\Delta$, see Eq \eqref{def:cDelta}.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: 4
The “cDelta-fit”
property
“cDelta-fit” gboolean
Boolean property that controls whether the parameter “cDelta” should be included in a statistical analysis.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: FALSE
The “lnXf”
property
“lnXf” gdouble
Logarithm of the upper limit of the interval where the projected densities are computed $\ln(X_f)$.
Owner: NcHaloDensityProfile
Flags: Read / Write / Construct
Default value: 9.21034
The “lnXi”
property
“lnXi” gdouble
Logarithm of the lower limit of the interval where the projected densities are computed $\ln(X_i)$.
Owner: NcHaloDensityProfile
Flags: Read / Write / Construct
Default value: -9.21034
The “mass-def”
property
“mass-def” NcHaloDensityProfileMassDef
Background density $\rho_\mathrm{bg}$ used in the mass definition \eqref{eq:mrr}. See the enumerator NcHaloDensityProfileMassDef for more details about the background density definition.
Owner: NcHaloDensityProfile
Flags: Read / Write / Construct Only
Default value: NC_HALO_DENSITY_PROFILE_MASS_DEF_MEAN
The “reltol”
property
“reltol” gdouble
Relative tolerance used in the numerical computations.
Owner: NcHaloDensityProfile
Flags: Read / Write / Construct
Allowed values: [2.22045e-16,1]
Default value: 1e-07