Top |
double | Delta | Read / Write / Construct Only |
double | cDelta | Read / Write |
gboolean | cDelta-fit | Read / Write |
double | lnXf | Read / Write / Construct |
double | lnXi | Read / Write / Construct |
double | log10MDelta | Read / Write |
gboolean | log10MDelta-fit | Read / Write |
NcHaloDensityProfileMassDef | mass-def | Read / Write / Construct Only |
double | reltol | Read / Write / Construct |
GEnum ├── NcHaloDensityProfileMassDef ╰── NcHaloDensityProfileSParams GObject ╰── NcmModel ╰── NcHaloDensityProfile ├── NcHaloDensityProfileDK14 ├── NcHaloDensityProfileEinasto ├── NcHaloDensityProfileHernquist ╰── NcHaloDensityProfileNFW
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()
.
The two parameters $\rho_s$ and $r_s$ are described by the fundamental parametrization in terms of $M_\Delta$ (“log10MDelta”) 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)$.
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)$.
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}
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.
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.
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()
,
NcHaloDensityProfile *
nc_halo_density_profile_ref (NcHaloDensityProfile *dp
);
Increases the reference count of dp
by one.
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.
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;
void nc_halo_density_profile_set_reltol (NcHaloDensityProfile *dp
,const gdouble reltol
);
Sets the relative tolerance used in the numerical computations.
void nc_halo_density_profile_set_lnXi (NcHaloDensityProfile *dp
,const gdouble lnXi
);
Sets the numerical computation lower limit.
void nc_halo_density_profile_set_lnXf (NcHaloDensityProfile *dp
,const gdouble lnXf
);
Sets the numerical computation upper limit.
gdouble
nc_halo_density_profile_get_reltol (NcHaloDensityProfile *dp
);
Gets the current relative tolerance.
gdouble
nc_halo_density_profile_get_lnXi (NcHaloDensityProfile *dp
);
Gets the computation interval lower limit $\ln(X_i)$.
gdouble
nc_halo_density_profile_get_lnXf (NcHaloDensityProfile *dp
);
Gets the computation interval upper limit $\ln(X_f)$.
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()
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]
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]
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]
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]
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!
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}$.
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}$.
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}.
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}.
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}.
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.
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}.
gdouble nc_halo_density_profile_eval_2d_density (NcHaloDensityProfile *dp
,NcHICosmo *cosmo
,const gdouble R
,const gdouble z
);
This function computes the 2D projection of the density profile at radius $R$ and redshift $z$, see Eq. \eqref{}.
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{}.
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.
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{}.
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{}.
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.
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.
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.
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 “log10MDelta” 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}
Fundamental parametrization of the profile $\rho(r)$, any additional parameter must be included in the implementation of this class.
#define NC_HALO_DENSITY_PROFILE_DEFAULT_LOG10M_DELTA (log10 (2.0e14))
“Delta”
property “Delta” double
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
“cDelta”
property “cDelta” double
Concentration parameter, $c_\Delta$, see Eq \eqref{def:cDelta}.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: 4
“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
“lnXf”
property “lnXf” double
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
“lnXi”
property “lnXi” double
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
“log10MDelta”
property “log10MDelta” double
Logarithm base 10 of the cluster mass $M_\Delta$ in units of solar masses $M_\odot$
(ncm_c_mass_solar()
) within $r_\Delta$, where $\Delta$ is
the over-density, see Eq. \eqref{eq:mrr}.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: 14.301
“log10MDelta-fit”
property “log10MDelta-fit” gboolean
Boolean property that controls whether the parameter “log10MDelta” should be included in a statistical analysis.
Owner: NcHaloDensityProfile
Flags: Read / Write
Default value: FALSE
“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