.. _physics-initialMassFunction: Initial Mass Functions ====================== Class providing stellar initial mass functions (:term:`IMF`), :math:`\phi(M) = \mathrm{d}N/\mathrm{d}M`, normalized to unit total stellar mass formed. The :term:`IMF` determines the relative number of stars at each mass and therefore governs the recycled gas fraction, metal yields, ionizing photon rate, and the total luminosity of a stellar population. All :term:`IMF` are assumed continuous in :math:`M` unless otherwise noted. Implementations provide the :term:`IMF` itself, its cumulative integral, the minimum and maximum stellar mass, and a tabulation suitable for numerical integration over the stellar population. **Default implementation:** ``initialMassFunctionChabrier2001`` Methods ------- ``massMinimum`` → ``double precision`` Return the minimum stellar mass (in :math:`\mathrm{M}_\odot`) in the initial mass function, i.e., the lowest mass star formed; below this mass the IMF is zero and no contribution to recycling or yields is included. ``massMaximum`` → ``double precision`` Return the maximum stellar mass (in :math:`\mathrm{M}_\odot`) in the initial mass function, i.e., the most massive star formed; above this mass the IMF is zero and stars above this threshold are assumed to form as black holes or fail to explode. ``phi`` → ``double precision`` Return the initial mass function, :math:`\phi(M)=\mathrm{d}N/\mathrm{d}M`, at the given mass :math:`M=`\ ``massInitial``. * ``double precision, intent(in ) :: massInitial`` ``numberCumulative`` → ``double precision`` Return the integral of the initial mass function, :math:`\int_{m_\mathrm{lower}}^{m_\mathrm{upper}} \phi(M) \mathrm{d}M`. * ``double precision, intent(in ) :: massLower, massUpper`` ``tabulate`` → ``void`` Return the initial mass function, :math:`\phi(M)=\mathrm{d}N/\mathrm{d}M`, at the given mass :math:`M=`\ ``initialMass``. * ``class(table1D), allocatable, intent(inout) :: imfTable`` ``label`` → ``type(varying_string)`` Return a short human-readable string label identifying this initial mass function (e.g., "Chabrier2001", "Kroupa2001"), used for constructing unique hashed descriptors and labeling output. .. _physics-initialMassFunctionBaugh2005TopHeavy: ``initialMassFunctionBaugh2005TopHeavy`` ---------------------------------------- A stellar initial mass function class for the top-heavy stellar initial mass function from :cite:t:`baugh_can_2005`: The ``Baugh2005TopHeavy`` :term:`IMF` is defined by :cite:p:`baugh_can_2005`: .. math:: \phi(M) \propto M^{-1} \hbox{ for } 0.15\mathrm{M}_\odot < M < 125\mathrm{M}_\odot .. _physics-initialMassFunctionBPASS: ``initialMassFunctionBPASS`` ---------------------------- A stellar initial mass function class used by the `BPASS `_ library: .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{-1.30} & \hbox{ for } 0.1\mathrm{M}_\odot < M < 0.5\mathrm{M}_\odot \\ M^{-2.35} & \hbox{ for } 1\mathrm{M}_\odot < M < 120\mathrm{M}_\odot \\ 0 & \hbox {otherwise.} \end{array} \right. .. _physics-initialMassFunctionChabrier2001: ``initialMassFunctionChabrier2001`` ----------------------------------- A stellar initial mass function class based on :cite:t:`chabrier_galactic_2001`: .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{-1} \exp(-[\log_{10}(M/M_\mathrm{c})/\sigma_\mathrm{c}]^2/2) & \hbox{ for } M_\mathrm{l} < M < M_\mathrm{t} \\ M^\alpha & \hbox{ for } M_\mathrm{t} < M < M_\mathrm{u} \\ 0 & \hbox {otherwise,} \end{array} \right. where :math:`\sigma_\mathrm{c}=`\ ``[sigma]``, :math:`M_\mathrm{c}=`\ ``[massCharacteristic]``\ :math:`\mathrm{M}_\odot`, :math:`\alpha=`\ ``[exponent]``, :math:`M_\mathrm{t}=`\ ``[massTransition]``\ :math:`\mathrm{M}_\odot`, :math:`M_\mathrm{l}=`\ ``[massLower]``\ :math:`\mathrm{M}_\odot`, and :math:`M_\mathrm{u}=`\ ``[massUpper]``\ :math:`\mathrm{M}_\odot`. **(Default implementation)** **Parameters** * ``[massUpper]`` (default ``125.0d0``) — The upper mass limit for the :cite:t:`chabrier_galactic_2001` :term:`IMF`. * ``[massLower]`` (default ``0.1d0``) — The lower mass limit for the :cite:t:`chabrier_galactic_2001` :term:`IMF`. * ``[massTransition]`` (default ``1.0d0``) — The transition limit for the :cite:t:`chabrier_galactic_2001` :term:`IMF`. * ``[sigma]`` (default ``0.69d0``) — The width of the lognormal part of the :cite:t:`chabrier_galactic_2001` :term:`IMF`. * ``[exponent]`` (default ``-2.3d0``) — The exponent of the power law part of the :cite:t:`chabrier_galactic_2001` :term:`IMF`. * ``[massCharacteristic]`` (default ``0.08d0``) — Characteristic mass of the lognormal part of the :cite:t:`chabrier_galactic_2001` :term:`IMF`. .. _physics-initialMassFunctionKennicutt1983: ``initialMassFunctionKennicutt1983`` ------------------------------------ A stellar initial mass function class for the :cite:t:`kennicutt_rate_1983` :term:`IMF`: .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{-1.25} & \hbox{ for } 0.10\mathrm{M}_\odot < M < 1.00\mathrm{M}_\odot \\ M^{-2.00} & \hbox{ for } 1.00\mathrm{M}_\odot < M < 2.00\mathrm{M}_\odot \\ M^{-2.30} & \hbox{ for } 2.00\mathrm{M}_\odot < M < 125\mathrm{M}_\odot \\ 0 & \hbox {otherwise.} \end{array} \right. .. _physics-initialMassFunctionKroupa2001: ``initialMassFunctionKroupa2001`` --------------------------------- A stellar initial mass function class for the :cite:t:`kroupa_variation_2001` :term:`IMF`. .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{-0.3} & \hbox{ for } 0.01\mathrm{M}_\odot < M < 0.08\mathrm{M}_\odot \\ M^{-1.8} & \hbox{ for } 0.08\mathrm{M}_\odot < M < 0.5\mathrm{M}_\odot \\ M^{-2.7} & \hbox{ for } 0.5\mathrm{M}_\odot < M < 1\mathrm{M}_\odot \\ M^{-2.3} & \hbox{ for } 1\mathrm{M}_\odot < M < 125\mathrm{M}_\odot \\ 0 & \hbox {otherwise.} \end{array} \right. .. _physics-initialMassFunctionMillerScalo1979: ``initialMassFunctionMillerScalo1979`` -------------------------------------- A stellar initial mass function class for the :cite:t:`miller_initial_1979` :term:`IMF`: .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{-1.25} & \hbox{ for } 0.10\mathrm{M}_\odot < M < 1.00\mathrm{M}_\odot \\ M^{-2.00} & \hbox{ for } 1.00\mathrm{M}_\odot < M < 2.00\mathrm{M}_\odot \\ M^{-2.30} & \hbox{ for } 2.00\mathrm{M}_\odot < M < 10.0\mathrm{M}_\odot \\ M^{-3.30} & \hbox{ for } 10.0\mathrm{M}_\odot < M < 125\mathrm{M}_\odot \\ 0 & \hbox {otherwise.} \end{array} \right. .. _physics-initialMassFunctionPiecewisePowerLaw: ``initialMassFunctionPiecewisePowerLaw`` ---------------------------------------- A stellar initial mass function class for piecewise power-law :term:`IMF`\ s. Arbitrary piecewise power-law :term:`IMF`\ s can be defined using the ``PiecewisePowerLaw`` method. The :term:`IMF` will be constructed such that: .. math:: \phi(M) \propto M^{\alpha_i} \hbox{ if } M_i \le M < M_{i+1}, where :math:`i=1`\ …\ :math:`N`, the :math:`M_i` are given by ``[mass]`` and the :math:`\alpha_i` are given by ``[exponent]``. (Note that ``[mass]`` must contain :math:`N+1` elements, while ``[exponent]`` contains only :math:`N` elements.) The normalization of each power-law piece is chosen to ensure a continuous :term:`IMF` that is normalized to unit mass overall. **Parameters** * ``[mass]`` (default ``[0.1d0,125.0d0]``) — The mass points used to define a piecewise power-law initial mass function. * ``[exponent]`` (default ``[-2.35d0]``) — The exponents used to define a piecewise power-law initial mass function. .. _physics-initialMassFunctionSalpeter1955: ``initialMassFunctionSalpeter1955`` ----------------------------------- A stellar initial mass function class for the :cite:t:`salpeter_luminosity_1955` :term:`IMF` defined as: .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{-2.35} & \hbox{ for } 0.1\mathrm{M}_\odot < M < 125\mathrm{M}_\odot \\ 0 & \hbox {otherwise.} \end{array} \right. .. _physics-initialMassFunctionScalo1986: ``initialMassFunctionScalo1986`` -------------------------------- A stellar initial mass function class for the :cite:t:`scalo_stellar_1986` :term:`IMF`: .. math:: \phi(M) \propto \left\{ \begin{array}{ll} M^{+1.60} & \hbox{ for } 0.10\mathrm{M}_\odot < M < 0.18\mathrm{M}_\odot \\ M^{-1.01} & \hbox{ for } 0.18\mathrm{M}_\odot < M < 0.42\mathrm{M}_\odot \\ M^{-2.75} & \hbox{ for } 0.42\mathrm{M}_\odot < M < 0.62\mathrm{M}_\odot \\ M^{-2.08} & \hbox{ for } 0.62\mathrm{M}_\odot < M < 1.18\mathrm{M}_\odot \\ M^{-3.50} & \hbox{ for } 1.18\mathrm{M}_\odot < M < 3.50\mathrm{M}_\odot \\ M^{-2.63} & \hbox{ for } 3.50\mathrm{M}_\odot < M < 125\mathrm{M}_\odot \\ 0 & \hbox {otherwise.} \end{array} \right.