Stellar evolution and feedback
- The feedback prescription is composed of a few different models:
The initial mass function (IMF) defines the quantity of each type of star,
The lifetime of a star defines when a star will explode (or die),
The supernovae of type II (SNII) define the rates and yields,
The supernovae of type Ia (SNIa) define the rates and yields,
The energy injection that defines how to inject the energy / metals into the particles.
The Stellar Winds (SW) defines the energy and mass continuously ejected by stars until their death.
Most of the parameters are defined inside a table (GEARFeedback:yields_table). To generate the table, we use pychem python module. You can get a table by clicking on this link. Some examples in swiftsim/examples/ use this table, e.g. swiftsim/examples/GEAR, swiftsim/examples/IsolatedGalaxy/IsolatedGalaxy_multi_component/GEAR/
Stellar evolution
Initial mass function
GEAR is using the IMF model from Kroupa (2001).
We also restrict the mass of the stars to be inside \([\mathrm{Mmin}, \mathrm{Mmax}] M_\odot\), where Mmin and Mmax are read from the table. In the default model, the IMF \(\xi(m)\) that represents the number of stars found in the mass range \([m, m + \mathrm{d}m]\) is (Revaz (2012)):
where,
Note that those values differs by -1 with respect to the ones provided in the GEAR tables, where the IMF \(\phi(m)\) is defined as the fraction of stellar mass found in the mass range \([m, m + \mathrm{d}m]\):
Lifetime
The lifetime of a star in GEAR depends only on two parameters: first its mass and then its metallicity. In GEAR, we use the following approximation (Poirier, 2004) and summarised in Hausammann (2021):
where \(\tau\) is the lifetime in years, \(m\) is the mass of the star (in solar mass) and \(Z\) is the metallicity of the star. The default table we provided uses the following values:
Supernovae II
The supernovae rate is given by the number of stars massive enough that end their life at the required time:
where \(M_l\) and \(M_u\) are the lower and upper mass limits for a star exploding in SNII, \(\delta\) is the Dirac function and \(\phi\) is the initial mass function (in mass).
The yields for SNII cannot be written in an analytical form; they depend on a few different tables that are based on the work of Kobayashi et al. (2000) and Tsujimoto et al. (1995).
Supernovae Ia
The supernovae Ia are more complicated as they involve two different stars. The SNIa rate is:
where \(M_{p,l}\) and \(M_{p,u}\) are the mass limits for a progenitor of a white dwarf, \(b_i\) is the probability to have a companion and \(M_{d,l,i}\) and \(M_{d,u,i}\) are the mass limits for each type of companion. The first integral represents the number of white dwarfs progenitor, while the second part accounts the probability of forming a binary. The default parameters used for the SNIa rate are given in the following table. They can be set to different values via PyChem:
Companion |
\(M_{d,l,i}\) |
\(M_{d,u,i}\) |
\(b_i\) |
|---|---|---|---|
Red giant |
0.9 |
1.5 |
0.02 |
Main sequence |
1.8 |
2.5 |
0.05 |
The yields are based on the same papers as the SNII.
Stellar winds
The stellar wind model used in GEAR is based on the work of Deng et al. (2024b).
The energy and mass ejected by a star (single type of stellar particle) in GEAR depends only on two parameters: its initial mass (\(M_\mathrm{init}\)) and its metallicity (\(Z\)). A set of power laws allows us to calculate two quantities, the mass ejected (\(\dot{M}\)) and the terminal wind velocity (\(v_\infty\)):
where \(\mathcal{A}(M,Z)\) is either \(\dot{M}\) or \(v_\infty\), \(y\equiv \log_{10}(Z)\), \(x\equiv \log_{10}(M_\mathrm{init})\) and where \(x_0\) is a mass limit above which the relations are linear. Then, the ejected power is given by:
The ejected power and mass of a Single star population (SSP) or Continuous star particles (see Star particles types for the terminlogy) is the sum of all the stars contained in the stellar particle, or more precisely, the integral over the part of the IMF that is not dead yet:
Where \(Q(m)\) is the desired quantity (either \(\dot{M}\) or \(L\)) for a single star of mass \(m\), \(Q_{\star}\) the wanted quantity of the stellar particle, \(M_u\) the upper mass limits for a dying (or exploding) star, \(M_{min}\) the minimal mass of the IMF, \(\delta\) is the Dirac function and \(\phi\) is the initial mass function (in mass).
Stellar evolution table
To generate the table, we use pychem python module. Below, we provide an overview of the structure of the table. Please refer to the pychem documentation for more information.
![digraph feedback {
subgraph cluster_data {
Data[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>Data</u></td>
</tr>
<tr>
<td>elts</td>
</tr>
<tr>
<td>MeanWDMass</td>
</tr>
<tr>
<td>SolarMassAbundances</td>
</tr>
</table>>];
}
subgraph cluster_imf {
IMF[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>IMF</u></td>
</tr>
<tr>
<td>n</td>
</tr>
<tr>
<td>as</td>
</tr>
<tr>
<td>ms</td>
</tr>
<tr>
<td>Mmin</td>
</tr>
<tr>
<td>Mmax</td>
</tr></table>>];
}
subgraph cluster_lifetimes {
LifeTimes[label=<<u>LifeTimes</u>>,shape="none"];
}
subgraph cluster_snii {
SNII[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>SNII</u></td>
</tr>
<tr>
<td>Mmin</td>
</tr>
<tr>
<td>Mmax</td>
</tr>
</table>>];
}
subgraph cluster_snia {
SNIa[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>SNIa</u></td>
</tr>
<tr>
<td>a</td>
</tr>
<tr>
<td>Mpl</td>
</tr>
<tr>
<td>Mpu</td>
</tr>
<tr>
<td>Mdu1</td>
</tr>
<tr>
<td>Mdl1</td>
</tr>
<tr>
<td>bb1</td>
</tr>
<tr>
<td>Mdu2</td>
</tr>
<tr>
<td>Mdl2</td>
</tr>
<tr>
<td>bb2</td>
</tr>
</table>>];
}
subgraph cluster_snii_all {
graph[style="dotted"];
snii_all[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>An array per element</u></td>
</tr>
<tr>
<td>min</td>
</tr>
<tr>
<td>step</td>
</tr>
</table>>];
}
subgraph cluster_snii_ej {
graph[style="dotted"];
snii_ej[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>Ej</u></td>
</tr>
<tr>
<td>min</td>
</tr>
<tr>
<td>step</td>
</tr>
</table>>];
}
subgraph cluster_snii_ejnp {
graph[style="dotted"];
snii_ejnp[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>Ejnp</u></td>
</tr>
<tr>
<td>min</td>
</tr>
<tr>
<td>step</td>
</tr>
</table>>];
}
subgraph cluster_coeff_z {
graph[style="dotted"];
coeff_z[label=<<u>coeff_z</u>>, shape="none"];
}
subgraph cluster_snia_metals {
snia_metals[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>Metals</u></td>
</tr>
<tr>
<td>elts</td>
</tr>
<tr>
<td>data</td>
</tr>
</table>>];
}
subgraph cluster_sw {
SW[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>SW</u></td>
</tr>
<tr>
<td>Mmin</td>
</tr>
<tr>
<td>Mmax</td>
</tr>
</table>>];
}
subgraph cluster_sw_e_m {
graph[style="dotted"];
sw_e_m[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>Power/Mass</u></td>
</tr>
<tr>
<td>min</td>
</tr>
<tr>
<td>num_step</td>
</tr>
<tr>
<td>step_size</td>
</tr>
</table>>];
}
subgraph cluster_sw_I_e_m {
graph[style="dotted"];
sw_I_e_m[shape="none", label=<
<table BORDER="0">
<tr>
<td><u>Integrated Power/Mass</u></td>
</tr>
<tr>
<td>min</td>
</tr>
<tr>
<td>num_step</td>
</tr>
<tr>
<td>step_size</td>
</tr>
</table>>];
}
Data->LifeTimes;
Data->IMF;
Data->SNII;
Data->SNIa;
Data->SW;
LifeTimes->coeff_z;
SNII->snii_all;
SNII->snii_ej;
SNII->snii_ejnp;
SNIa->snia_metals;
SW->sw_e_m;
SW->sw_I_e_m;
}](../../_images/graphviz-f132b1a118ea2994580b40da1632882d83fd0d63.png)
where the solid (dashed) squares represent a group (a dataset) with the name of the object underlined and the attributes written below. Everything is in solar mass or without units (e.g. mass fraction or unitless constant).
In Data, the attribute elts is an array of string with the element names (the last should be Metals, it corresponds to the sum of all the elements), MeanWDMass is the mass of the white dwarfs and SolarMassAbundances is an array of float containing the mass fraction of the different element in the sun.
simply
In IMF, n + 1 is the number of parts in the IMF, as are the exponent (n+1 elements), ms are the mass limits between each part (n elements) and Mmin (Mmax) is the minimal (maximal) mass of a star.
In LifeTimes, the coefficients are given in the form of a single table (coeff_z with a 3x3 shape).
In SNIa, a is the exponent of the distribution of binaries, bb1 and bb2 are the coefficients \(b_i\) and the other attributes follow the same names as in the SNIa formulas.
The Metals group from the SNIa contains the name of each element (elts) and the metal mass fraction ejected by each supernova (data) in the same order. They must contain the same elements as in Data.
Then, for the SNII, the mass limits are given by Mmin and Mmax. For the yields, the datasets required are Ej (mass fraction ejected [processed]), Ejnp (mass fraction ejected [non processed]) and one dataset for each element present in elts. The datasets should all have the same size, be uniformly sampled in log and contain the attributes min (mass in log for the first element) and step (difference of mass in log between two elements).
Finally, in the SW group, under the subgroup MetallicityDependent, there are 4 2D datasets: Energy and Mass for the power and mass ejected by the stellar winds for a single star, and Integrated_Energy and Integrated_Mass_Loss for the ejected power and mass of either a Single stellar population (SSP) or a Continuous stars. Each of these datasets contains 8 attributes: label (the label of the dataset), dims (the dimensions of the grid), m0 and z0 (the mass and metallicity in log of the first element of the grid), dm and dz (the logarithmic spacing in mass and metallcity between two elements of the grid), and nm and nz (the number of elements in mass and metallicity in the grid).
GEAR includes two types of tables, one for population II stars and one for population III. The tables are specified by GEARFeedback:yields_table and GEARFeedback:yields_table_first_stars. The choice of the table depends on the metallicity [Fe/H] (GEARFeedback:imf_transition_metallicity). Below this metallicity, we use yields_table_first_stars ; above, we use yields_tables. If we set imf_transition_metallicity to 0, we only use yields_tables.
Star particles types
In GEAR, we consider three types of star particles:
Single stellar population (SSP) star particles: These particles represent a population of stars defined by the provided IMF. These particles are created by the star formation scheme.
Individual stars: These particles represent individual stars. These particles are created by the sink particles scheme (see Model summary).
Continuous stars: These particles represent the integrated low mass portion of the IMF (e.g. stars with \(M_\star < 8 \, M_\odot\)), while the remaining mass is sampled as individual stars (e.g. stars with \(M_\star \geq 8 \, M_\odot\)). These particles are created by the sink particles scheme (see Model summary). Note that by a careful choice of parameters, these stars may represent the full IMF and thus be treated like SSP stars, with the difference being that they are spawned by sink particles and not gas.
The stellar evolution is treated as follows for each star type:
Individual stars: There is no IMF sampling or averaging needed. We know the star’s mass and metallicity. Therefore, its stellar evolution properties are known, e.g. it will explode into exactly one SN II. There is no SNIa.
Single star population (SSP) and Continuous stars: They are treated in the same manner, with the only difference being the IMF upper limit. For the SSP stars, this is
Mmaxdefined in the stellar evolution tables; for the continuous stars, this is defined byGEARSink:minimal_discrete_mass_Msunfor population II stars andGEARSink:minimal_discrete_mass_first_stars_Msunfor population III stars. For these particles, we need to sample the IMF. This is explained in the next section.
IMF sampling
To properly determine the number of supernovae and the mass of the ejected yields, we need to sample the IMF for SSP and continuous star particles. GEAR implements two methods (Revaz et al. 2016):
Continuous IMF sampling (CIMFS) (
GEARFeedback:discrete_yields: 0): We integrate the quantities over the IMF and then explode a floating-point number of stars, which can be below 1 in some cases. This method works well for large stellar particle mass and supernovae rates, but not for low stellar particle mass or low supernovae rates. Note that SNIa often occur in the second regime, hence the method. The overall effect is similar to diluting the SN explosions over time.Random discrete IMF sampling (RIMFS) (
GEARFeedback:discrete_yields: 1): We avoid the issue of non-integer event numbers by taking the floor of the calculated SN count and stochastically adding an additional supernova based on the fractional part. We then compute the properties for a single stellar at a time.
Feedback energy, metals and momentum injection
When a star goes into a supernova (type II and Ia), the stellar evolution determines how much energy, mass and metals are released during the explosion. For the SNII, the tables contain the value of the energy released for different stars’ masses (usually \(10^{51}\) erg, but can vary by model). For the SNIa, the energy is specified by the parameter GEARFeedback:supernovae_Ia_energy_erg. In both cases, these are the energies before any supernova efficiency is applied.
The energy can be distributed as internal/thermal energy or as momentum. Thus, we need to distribute internal energy, momentum, mass and metals to the gas particles. We will group all these in the “fluxes” term. We have two models for the distribution of these fluxes and the subgrid modelling of the supernovae: GEAR model and GEAR mechanical model. We describe the two schemes in the GEAR supernova feedback page.
Model parameters
Here, we provide a summary of the feedback parameters contained in the YAML parameter file.
The first two parameters relate to the quantity of energy injected and are available for all feedback prescriptions.
The energy released by a supernova:
supernovae_Ia_energy_erg. Note that the SNII energy is stored in the feedback tablesyields_table_first_starsandyields_table.The effective injected energy is multiplied by a factor
supernovae_efficiency. This factor is applied to SNII and SNIa.yields_table: Table containing the stellar evolution parameters for population II stars, including the yields.yields_table_first_stars: Similar toyields_tablebut for the first stars (population III).imf_transition_metallicityspecifies which table to use based on [Fe/H]. If the gas metallicity is belowimf_transition_metallicity, we use the population III table; if it is above, we use the population table II.Two different models exist for the IMF sampling of supernovae (
GEARFeedback:discrete_yields): the continuous mode (GEARFeedback:discrete_yields: 1) and the discrete mode (GEARFeedback:discrete_yields: 0).elementsis the list of yields to read from the tables. The number of elements is specified at compile time(--with-chemistry=GEAR_N)discrete_star_minimal_gravity_mass_Msun: Minimal gravity mass in solar masses after a discrete star completely explodes. Default: 0.1GEARSupernovaeII:interpolation_sizeis the number of elements to keep in the interpolation of the data.GEARStellar_wind:interpolation_size_massSize of the mass array of the grid used in stellar winds yields.GEARStellar_wind:interpolation_size_metallicitySize of the metallicity array of the grid used in stellar winds yields.
Here is the whole feedback section:
GEARFeedback:
supernovae_Ia_energy_erg: 1e51 # Energy released by a single supernova.
supernovae_efficiency: 0.1 # Supernovae energy efficiency, used for both SNIa and SNII. The energy released effectively is E_sn = supernovae_efficiency*E_sn
yields_table: chemistry-AGB+OMgSFeZnSrYBaEu-16072013.h5 # Table containing the yields.
yields_table_first_stars: chemistry-PopIII.hdf5 # Table containing the yields of the first stars (population III).
imf_transition_metallicity: -5 # Maximal metallicity ([Fe/H]) for a first star (0 to deactivate).
discrete_yields: 0 # Should we use discrete yields or the IMF integrated one?
elements: [Fe, Mg, O, S, Zn, Sr, Y, Ba, Eu] # Elements to read in the yields table. The number of elements should be one less than the number of elements (N) requested during the configuration (--with-chemistry=GEAR_N).
discrete_star_minimal_gravity_mass_Msun: 0.1 # Minimal gravity mass after a discrete star completely explodes. In M_sun. (Default: 0.1)
GEARSupernovaeII:
interpolation_size: 200 # Number of elements to keep in the interpolation of the data. (Default: 200)
GEARStellar_wind:
interpolation_size_mass: 200 # Number of elements to keep in the mass interpolation of the data. (Default: 200)
interpolation_size_metallicity: 110 # Number of elements to keep in the metallicity interpolation of the data. (Default: 110)
References
pychem : python module to generate GEAR tables