.. _physics-satelliteMergingTimescales: Satellite Merging Timescales ============================ Object providing the timescale for a satellite halo to merge with its host halo, given the satellite's current orbit. The merging timescale is determined by dynamical friction, which dissipates the satellite's orbital energy and angular momentum until it reaches the center of the host. Implementations typically follow formulae derived from :math:`N`-body experiments, parameterized by the Coulomb logarithm and orbital properties. **Default implementation:** ``satelliteMergingTimescalesJiang2008`` Methods ------- ``timeUntilMerging`` → ``double precision`` Return the time (in Gyr) until the satellite will merge with its host given the current orbit. * ``type(treeNode ), intent(inout) :: node`` * ``type(keplerOrbit), intent(inout) :: orbit`` .. _physics-satelliteMergingTimescalesBoylanKolchin2008: ``satelliteMergingTimescalesBoylanKolchin2008`` ----------------------------------------------- A satellite merging timescale class that computes the time until a satellite galaxy merges with its host using the N-body calibrated dynamical friction formula of :cite:t:`boylan-kolchin_dynamical_2008`. The predicted timescale can be rescaled by the ``[timescaleMultiplier]`` parameter. **Parameters** * ``[timescaleMultiplier]`` (default ``0.75d0``) — A multiplier for the merging timescale in dynamical friction timescale calculations. .. _physics-satelliteMergingTimescalesInfinite: ``satelliteMergingTimescalesInfinite`` -------------------------------------- A satellite merging timescale class which always gives an infinite timescale for merging (technically, it returns a value close to the largest representable double precision floating point number which should be sufficiently close to infinity for practical purposes). .. _physics-satelliteMergingTimescalesJiang2008: ``satelliteMergingTimescalesJiang2008`` --------------------------------------- A satellite merging timescales class which computes merging timescales using the dynamical friction calibration of :cite:t:`jiang_fitting_2008`. :cite:t:`jiang_fitting_2008` find that their fitting formula does not perfectly capture the results of N-body simulations, instead showing a scatter in the ratio :math:`T_\mathrm{fit}/T_\mathrm{sim}` where :math:`T_\mathrm{fit}` is the merging time from their fitting formula and :math:`T_\mathrm{sim}` is that measured from their N-body simulation. Furthermore, they show that the distribution of :math:`T_\mathrm{fit}/T_\mathrm{sim}` is well described by a log-normal with dispersion (in :math:`\log[T_\mathrm{fit}/T_\mathrm{sim}]`) of :math:`\sigma=0.4`. Random perturbations can be applied to the merger times returned by this implementation by setting :math:`\sigma=`\ ``[scatter]``\ :math:`>0` which will cause the merger time to be drawn from a log-normal distribution of width :math:`\sigma` with median equal to :math:`T_\mathrm{fit}`. **(Default implementation)** **Parameters** * ``[timescaleMultiplier]`` (default ``0.75d0``) — A multiplier for the merging timescale in dynamical friction timescale calculations. * ``[scatter]`` (default ``0.0d0``) — Specifies whether or not to add random scatter to the dynamical friction timescales in the ``Jiang2008`` satellite merging time implementation. .. _physics-satelliteMergingTimescalesLaceyCole1993: ``satelliteMergingTimescalesLaceyCole1993`` ------------------------------------------- A satellite merging timescale class which computes merging timescales using the dynamical friction calculation of :cite:t:`lacey_merger_1993`. Timescales are multiplied by the value of the ``[timescaleMultiplier]`` input parameter. **Methods** * ``timeUntilMergingMassDependence`` — Return the mass-dependent part of the time (in Gyr) until the satellite will merge with its host. **Parameters** * ``[timescaleMultiplier]`` (default ``0.75d0``) — A multiplier for the merging timescale in dynamical friction timescale calculations. .. _physics-satelliteMergingTimescalesLaceyCole1993Tormen: ``satelliteMergingTimescalesLaceyCole1993Tormen`` ------------------------------------------------- A satellite merging timescale class which computes merging timescales using the dynamical friction calculation of :cite:t:`lacey_merger_1993` with a parameterization of orbital parameters designed to fit the results of :cite:t:`tormen_rise_1997` as described by :cite:t:`cole_hierarchical_2000`. Timescales are multiplied by the value of the ``mergingTimescaleMultiplier`` input parameter. Specifically, the merging time is taken to be: .. math:: \tau_\mathrm{merge} = {f_\tau \Phi \tau_\mathrm{dynamical} \over 2 B(1)} { M_\mathrm{host}/M_\mathrm{satellite} \over \ln (M_\mathrm{host}/M_\mathrm{satellite})} where :math:`f_\tau=`\ ``mergingTimescaleMultiplier``, :math:`\tau_\mathrm{dynamical}` is the dynamical time of the host halo and :math:`B(x)=\hbox{erf}(x)-2 x \exp(x)/\sqrt{\Pi}`. The orbital factor :math:`\Phi \equiv \epsilon^{0.78} (R_\mathrm{c}/R_\mathrm{virial})^2` is drawn at random from a log-normal distribution with median :math:`-0.14` and dispersion :math:`0.26` as found by :cite:t:`cole_hierarchical_2000`. .. _physics-satelliteMergingTimescalesPoulton2021: ``satelliteMergingTimescalesPoulton2021`` ----------------------------------------- A satellite merging timescales class which computes merging timescales using the fitting formula of :cite:t:`poulton_extracting_2021`. The merging timescale is: .. math:: T_\mathrm{merge} = A \, T_\mathrm{dyn}(r) \left(\frac{r}{R_\mathrm{vir}}\right)^b \left(\frac{R_\mathrm{peri}}{R_\mathrm{vir}}\right)^c, where :math:`T_\mathrm{dyn}(r) = r/v_\mathrm{circ}(r)` is the local dynamical time, :math:`R_\mathrm{peri}` is the pericentric distance computed using the locally Keplerian approximation with the enclosed host mass, and .. math:: b = \begin{cases} b_\mathrm{interior} & r < R_\mathrm{vir} \\ b_\mathrm{exterior} & r \geq R_\mathrm{vir} \end{cases}. Parameters are set via :math:`A=`\ ``A``, :math:`c=`\ ``[c]``, :math:`b_\mathrm{interior}=`\ ``[bInterior]``, and :math:`b_\mathrm{exterior}=`\ ``[bExterior]``. The default parameter values :math:`A=5.5`, :math:`c=0.2`, :math:`b_\mathrm{interior}=-0.5`, and :math:`b_\mathrm{exterior}=-1.0` are those favored by :cite:t:`poulton_extracting_2021`. **Parameters** * ``[A]`` (default ``5.5d0``) — The normalization constant, :math:`A`, in the :cite:t:`poulton_extracting_2021` satellite merging timescale fitting formula. * ``[c]`` (default ``0.2d0``) — The exponent, :math:`c`, on the pericentric distance ratio in the :cite:t:`poulton_extracting_2021` satellite merging timescale fitting formula. * ``[bInterior]`` (default ``-0.5d0``) — The radial exponent, :math:`b`, in the :cite:t:`poulton_extracting_2021` satellite merging timescale fitting formula for satellites inside the virial radius (:math:`r < R_\mathrm{vir}`). * ``[bExterior]`` (default ``-1.0d0``) — The radial exponent, :math:`b`, in the :cite:t:`poulton_extracting_2021` satellite merging timescale fitting formula for satellites outside the virial radius (:math:`r \geq R_\mathrm{vir}`). .. _physics-satelliteMergingTimescalesPreset: ``satelliteMergingTimescalesPreset`` ------------------------------------ A satellite merging timescale class assumes that merging times have been preset for every node (or, at least, every node which becomes a satellite). It therefore simply returns the preset merging time. .. _physics-satelliteMergingTimescalesRandom: ``satelliteMergingTimescalesRandom`` ------------------------------------ Returns a satellite merging timescale chosen randomly between the current snapshot time and the next snapshot time, providing a simple statistical prescription for satellite merging that avoids artificial synchronization with snapshot output times. **Parameters** * ``[countPoints]`` — The number of random points to generate. * ``[xRange]`` — The range within which to generate points in the :math:`x`-direction. * ``[yRange]`` — The range within which to generate points in the :math:`y`-direction. * ``[zRange]`` — The range within which to generate points in the :math:`z`-direction. .. _physics-satelliteMergingTimescalesVillalobos2013: ``satelliteMergingTimescalesVillalobos2013`` -------------------------------------------- A satellite merging timescale class which computes merging timescales using the modifier of :cite:t:`villalobos_improved_2013` as .. math:: \tau_\mathrm{merge} = (1+z)^\alpha \tau^\prime_\mathrm{merge}, where :math:`\alpha=`\ ``[exponent]`` and :math:`\tau^\prime_\mathrm{merge}` is the merging timescale computed by another satellite merging timescale. **Parameters** * ``[exponent]`` (default ``0.44d0``) — The exponent of :math:`1+z` appearing in the :cite:t:`villalobos_improved_2013` modifier for satellite merging timescales. .. _physics-satelliteMergingTimescalesWetzelWhite2010: ``satelliteMergingTimescalesWetzelWhite2010`` --------------------------------------------- A satellite merging timescale class that computes the time until a satellite galaxy merges with its host using the N-body calibrated dynamical friction formula of :cite:t:`wetzel_what_2010`. The predicted timescale can be rescaled by the ``[timescaleMultiplier]`` parameter. **Parameters** * ``[timescaleMultiplier]`` (default ``0.75d0``) — A multiplier for the merging timescale in dynamical friction timescale calculations. .. _physics-satelliteMergingTimescalesZero: ``satelliteMergingTimescalesZero`` ---------------------------------- A satellite merging timescale class which always gives a zero timescale for merging.