6. Nucleosynthetic Yields

Due to the associated uncertainties [1], VICE takes an agnostic approach to the user’s desired nucleosynthetic yields. Rather than adopting the results of a nucleosynthesis study, the user declares their yields outright. VICE includes features which will calculate yields upon request, but requires the user to explicitly tell it what the yield of each element from each enrichment channel should be (although there is a set of defaults).

All yields in VICE are defined as fractional net yields. This is the amount of an element that is produced and ejected to the interstellar medium minus that which was already present, in units of the star or stellar population’s initial mass. Previously produced nuclei should not be taken into account, because this is handled via recycling. For example, if a stellar population is born with \(1 M_\odot\) of oxygen total and ejects \(1 M_\odot\) of oxygen back to the interstellar medium, the yield is zero since there is no net gain.

Yields are also defined for the average star or stellar population. Stochasticity in yields introduced by, e.g., sampling of the stellar initial mass function, should not be taken into account in yield calculations intended for use in VICE.

6.1. Core Collapse Supernovae

Because core collapse supernovae (CCSNe) are assumed to occur simultaneously with the formation of their progenitor stars [2], \(y_x^\text{CC}\) represents the total yield from all CCSNe associated with a single stellar population. Letting \(m_x\) denote the mass of some element \(x\) present in the CCSN ejecta from a progenitor of initial mass \(m\), the yield at a given metallicity is defined by:

\[y_x^\text{CC} \equiv \frac{ \int_{l_\text{CC}}^u (E(m)m_x + w_x - Z_{x,\text{prog}} (m - m_\text{rem})) \frac{dN}{dm} dm }{ \int_l^u m \frac{dN}{dm} dm }\]

where the numerator is taken from the minimum mass for a CCSN explosion \(l_\text{CC}\) to the upper mass limit of star formation \(u\), but the denominator is over the entire mass range of star formation, and \(dN/dm\) is the stellar initial mass function (IMF). The constant CC_MIN_STELLAR_MASS declares \(l_\text{CC} = 8 M_\odot\) in vice/src/ccsne.h. This equation is nothing more or less than the mathematical statement of “metal production divided by total initial mass of stars.” \(E(m)\) denotes the explodability: the fraction of star of mass \(m\) which explode as a CCSN. \(w_x\) denotes the mass yield of the element \(x\) due to stellar winds at a mass \(m\), and the corrective term \(Z_{x,\text{prog}} (m - m_\text{rem})\) accounts for the mass of the element \(x\) in the ejecta that was present at birth, converting the quantity from a gross yield to a net yield. In the current version of VICE, \(m_\text{rem}\) is assumed to always be a 1.44 \(M_\odot\) black hole for massive stars based on Weinberg, Andrews & Freudenburg (2017) [6]; additional, more realistic initial-final remnant mass relations are currently being incorporated into the code base.

In practice, supernova nucleosynthesis studies determine the value of \(m_x\) for of order 10 values of \(m\) at a given metallicity and rotational velocity. To compute the numerator of this equation, VICE adopts a grid of \(m_x\) and \(w_x\) values from a user-specified nucleosynthesis study, interpolating linearly between values of \(m\) on the grid. We clarify that the interpolation is linear in \(m\), and not \(\log m\).

In this version of VICE, users can choose between the following nucleosynthesis studies:

  • Limongi & Chieffi (2018), ApJS, 237, 13

  • Sukhbold et al. (2016), ApJ, 821, 38 (W18 and N20 explosion engines)

  • Chieffi & Limongi (2013), ApJ, 764, 21

  • Nomoto, Kobayashi & Tominaga (2013), ARA&A, 51, 547

  • Chieffi & Limongi (2004), ApJ, 608, 405

  • Woosley & Weaver (1995), ApJS, 101, 181

VICE affords users the ability to specify whether or not winds should be included in their yield calculations; it stores values of \(w_x\) for all recognized elements at each metallicity and rotational velocity it has built-in tables for. It also allows users the option to calculate net or gross yields based on whether or not it sets \(Z_{x,\text{prog}}\) equal to zero. We caution however that not every study separates their wind yields from their explosive yields, in which case \(w_x = 0\) and the wind contribution is included in \(m_x\). Furthermore, not every study reports the detailed initial composition of their model stars, in which case assigning \(Z_{x,\text{prog}}\) is ambiguous. For these studies VICE is incapable of computing net yields, so it sets \(Z_{x,\text{prog}}\) to zero always for these studies, only reporting gross yields. For a breakdown on which of these cautionary tales apply to which studies, we refer users to the vice.yields.ccsne.fractional documentation.

By default, VICE will assume that all stars above \(8 M_\odot\) explode as a CCSN. Because stellar explodability is an open question in astronomy [3], \(E(m)\) can be specified as an arbitrary mathematical function, which must accept stellar mass in \(M_\odot\) as the only parameter. Lastly, this can be done with either the built-in Kroupa [4] or Salpeter [5] IMFs, or a function of mass interpreted as a user-constructed IMF.


VICE also forces \(m_x\) = 0 at \(8 M_\odot\), the default value of \(l_\text{CC}\), in order to minimize numerical artifacts introduced when extrapolating off of the grid in \(m\) to lower stellar masses.

Although \(E(m)\) can take on any mathematical form in VICE as long as its value is always between 0 and 1, a number of popular forms both simple and complex can be found in the vice.yields.ccsne.engines module.

Users can evaluate the solution to this equation by calling the function vice.yields.ccsne.fractional, implemented in vice/yields/ccsne/_yield_integrator.pyx. This function makes use of numerical quadrature routines written in ANSI/ISO C built into VICE, and is thus not dependent on any publicly available quadrature functions such as those found in scipy.

In addition to evaluating the solution to this equation, users may also read in the table of \(m_x\) values by calling vice.yields.ccsne.table, and may request the full isotopic breakdown. A dataframe is returned from this function.


These functions have no impact whatsoever on the chemical enrichment simulations built into VICE. Users declare their own yields for that purpose, while this function merely calculates them.

Relevant Source Code:

  • vice/src/yields/integral.c

  • vice/yields/ccsne/_yield_integrator.pyx

  • vice/yields/ccsne/table.py

  • vice/core/dataframe/_ccsn_yield_table.pyx

6.2. Type Ia Supernovae

The net yield of some element \(x\) from a single stellar population due to type Ia supernovae (SNe Ia) can be expressed as the total production from the duty cycle of the delay-time distribution (DTD) \(R_\text{Ia}\):

\[y_x^\text{Ia} \equiv M_x\int_0^\infty R_\text{Ia}(t) dt\]

where \(M_x\) is the average mass yield of the element \(x\) from a single type Ia supernovae.


In the astronomical literature, the delay-time distribution is usually defined as the rate of SN Ia explosions per unit stellar mass formed \(M_\star\). \(R_\text{Ia}\) thus has units of \(M_\odot^{-1} yr^{-1}\), making \(y_x^\text{Ia}\) unitless as it should be. We retain this definition here for consistency.

The integral over the DTD is simply the number of SN Ia events that occur per unit stellar mass formed:

\[y_x^\text{Ia} = M_x \frac{N_\text{Ia}}{M_\star}\]

Intuitively, the SN Ia yield is thus specified by the mass yield of a single SN Ia explosion and the number of SN Ia events that occur per unit solar mass formed.

Maoz & Mannucci (2012) [7] found that \(N_\text{Ia}/M_\star\) = \((2 \pm 1) \times 10^{-3} M_\odot^{-1}\). That is, on average, approximately 500 \(M_\odot\) of stars must form for a given stellar population to produce a single SN Ia.

The value of \(M_x\) can be determined from the results of simulation of SNe Ia. The yield is then evaluated with a user-specified value of \(N_\text{Ia}/M_\star\); the default value is \(N_\text{Ia}/M_\star\) = \(2.2 \times 10^{-3}\), the best-fit value from Maoz & Mannucci (2012).

In this version of VICE, users can choose between the following nucleosynthesis studies:

  • Iwamoto et al. (1999), ApJ, 124, 439

  • Seitenzahl et al. (2013), MNRAS, 429, 1156


These functions have no impact whatsoever on the chemical enrichment simulations built into VICE. Users declare their own yields for that purpose, while this function merely calculates them.

Relevant Source Code:

  • vice/yields/sneia/_yield_lookup.pyx

6.3. Asymptotic Giant Branch Stars

The net yield of some element \(x\) from an asymptotic giant branch (AGB) star is defined as the net fraction of a star’s mass that is converted to an element \(x\). For many elements, this also varies considerably with the initial metallicity of the star. This is therefore inherently a function of two parameters:

\[y_x^\text{AGB}(M_\star, Z) = \frac{M_{x,\text{ejected}}}{M_\star(|Z)}\]

where \(M_\star(|Z)\) is the mass of a single star of known metallicity \(Z\).

Contrary to yields from supernovae, no remaining calculations are necessary, because \(M_{x,\text{ejected}}\) is quantified in supernova nucleosynthesis studies, and VICE’s internal data tables have already divided these values by \(M_\star(|Z)\). These tables are sampled on of order \(\sim\) 10 solar masses and metallicities; users may adopt these tables in their simulations and VICE will determine the yield for all other masses and metallicities via bilinear interpolation between masses and metallicities on the grid. For masses and metallicities above or below the grid, it extrapolates from the two highest or lowest elements on the grid, respectively. Users may also construct their own mathematical forms of \(y_x^\text{AGB}\).

When using a built-in table of yields, VICE enforces non-negative yields for progenitors with masses below 1.5 \(M_\odot\). This is to prevent numerical artifacts associated with extrapolation to progenitor masses below the lowest value on the yield table. In the figure below, we plot the AGB star yields of barium as a function of progenitor mass for a handful of metallicities on the Cristallo et al. (2011, 2015) table of yields. This is a prototypical example of the motivation behind this decision - many elements have a non-monotonic dependence of their AGB star yields on progenitor mass, and this grid does not sample below 1.3 \(M_\odot\). As a consequence, VICE’s interpolation routines without modification would extrapolate \(y_\text{Ba}^\text{AGB}\) to be negative for lower masses; this would be a purely numerical artifact. Rather than allowing linear extrapolation to infer potentially large, negative yields, it is safer to assume that the yields approach zero with decreasing mass.

If this behavior isn’t desired and it would instead be preferred to allow linear extrapolation at low masses, the object vice.yields.agb.interpolator does not force yields to zero, and it can be used as an element’s AGB star yield setting (i.e. its entry in the vice.yields.agb.settings object). Users looking to modify the AGB star yields of a given element with this object should also be aware that they may need to force yields to zero below some characteristic mass in order to suppress these numerical artifacts.

In this version of VICE, users can choose between the following nucleosynthesis studies:

  • Cristallo et al. (2011, 2015) [8] [9]

  • Karakas (2010) [10]

  • Ventura et al. (2013) [11]

  • Karakas & Lugaro (2016) [12]; Karakas et al. (2018) [13]

Users can also read these tables in with the vice.yields.agb.grid function.

Relevant Source Code:

  • vice/src/singlezone/agb.c

  • vice/yields/agb/_grid_reader.pyx


The AGB star yields of barium (Ba) built into VICE as reported by Cristallo et al. (2011, 2015) for \(Z\) = 0.0001 (blue), 0.003 (bright green), 0.008 (dark red), and 0.014 (black) progenitors.