Stellar Atmospheres and Spectral Synthesis
A second step in most SLUG simulations is, after using the Stellar Tracks to generate the properties of every star, to use those properties as inputs to a set of stellar atmosphere models to predict the stars’ specific luminosities per unit wavelength \(L_\lambda\).
The behavior of stellar atmosphere models in SLUG is controlled by the model
keyword in the Spectral Synthesis Keywords section of The SLUG Input Deck,
which specifies which stellar atmosphere model or set of models to use. The
most common choice will be model = "default", which selects a combination of
atmosphere models from the standard data set (see Getting SLUG) with
broad coverage of the stellar properties that matter for spectral synthesis:
effective temperature \(T_\mathrm{eff}\), log surface gravity \(\log g\),
iron metallicity [Fe/H], and, for some evolved stars, surface composition and
stellar wind mass flux. See The Default Atmosphere Model for more details on
the default atmosphere model, Alternative Atmosphere Models for details
on how to select other models from the available list, and
Adding New Stellar Atmosphere Models for details on how to add new atmosphere models.
Spectral synthesis is also affected by the properties of the stars, as controlled
by the alphaFe and CFe keywords in the Stellar Population Keywords section
of The SLUG Input Deck. These parameters set the [alpha/Fe] and [C/Fe] abundances
of the stellar atmospheres, for the subset of model atmosphere libraries that have
models available for a range of [alpha/Fe] and [C/Fe] values.
In addition to setting the model atmosphere, users can control the wavelength grid
over which spectra are computed using the wl_min, wl_max, and nwl keywords
in the Spectral Synthesis Keywords section of The SLUG Input Deck, and can set
a redshift z. If the redshift is non-zero, the wavelengths specified by the
wl_min, wl_max, and nwl keywords are interpreted as describing the
wavelength grid in the comoving frame of the emitting stellar population, and
the output spectrum will be written in this comoving frame – the z does not
affect the output spectra. However, it does affect Photometry and Filters, which
is computed using the wavelength grid redshifted to the observed frame.
The Default Atmosphere Model
The default atmosphere model in SLUG categorizes stars into three types: Wolf-Rayet stars, white dwarf stars, and all other stars (“normal” stars). The precise criteria used for these categories are as follows.
A star is first tested for being a Wolf-Rayet star. Only stars with a current mass
above \(5\,\mathrm{M}_\odot\) are ever considered as candidates. Among these, a
star whose surface hydrogen mass fraction exceeds 0.6 is treated specially, because
such stars (for example very massive stars near the zero-age main sequence) can be
hotter than 50000 K while their surfaces are still essentially unprocessed. Such a
star is not a Wolf-Rayet star if its \(T_\mathrm{eff}\) does not exceed the
higher of 50000 K and the maximum \(T_\mathrm{eff}\) covered by any of the chained
atmosphere models for normal stars (e.g., 55000 K for TLUSTY_O). A hotter star is
classified as subtype WNL-H60 (see below) if its \(\log T_\mathrm{eff}\) falls
within the range covered by the chained WNL-H60 models, consistent with the WNh
spectra observed for the most massive main-sequence stars; if it falls outside that
range, or no WNL-H60 models are available, it proceeds to the remaining tests below.
Next, a star whose surface helium mass fraction lies between 0.4 and 0.9 is a
candidate for one of three hydrogen-rich (WNL) subtypes, selected by its surface
hydrogen mass
fraction (below 0.3, between 0.3 and 0.5, or above 0.5, corresponding to the WNL-H20,
WNL-H40, and WNL-H60 subtypes respectively); it is actually classified into that
subtype only if its \(\log T_\mathrm{eff}\) also falls within the range actually
covered by the chained atmosphere models available for that subtype (see
Alternative Atmosphere Models), so that a star whose composition merely
resembles a WNL star, but whose temperature no available WNL grid covers, falls
through to the next test rather than being forced into an ill-fitting classification.
A star that is not classified as WNL by this test, but whose \(T_\mathrm{eff}\)
exceeds 50000 K, is instead classified as a Wolf-Rayet star of subtype WNE if its
surface carbon mass fraction is less than its surface nitrogen mass fraction, or WC
otherwise. These subtypes are intended for hydrogen-poor stars, but this final test
can also apply to a star with surface hydrogen mass fraction above 0.6 if it is too
hot to be classified as WNL-H60 by the first test, or if no WNL-H60 models are
available. A star failing every one of these tests is not a Wolf-Rayet star.
A star that is not a Wolf-Rayet star is next tested for being a white dwarf. This classification applies only if the star’s (\(T_\mathrm{eff}\), \(\log g\)) falls above the coverage provided by the available normal-star atmosphere models along at least one of the two axes, while at the same time remaining within reach of the floor of the coverage provided by the available white-dwarf atmosphere models along both axes. This two-sided test ensures that a star is only routed to the white dwarf atmosphere models when there is a genuine gap in the normal-star atmosphere models’ own coverage that the white dwarf models can plausibly fill, rather than routing every hot, compact star there regardless of whether the normal atmosphere models already cover it.
Every other star – the vast majority of them – is treated as a normal star.
Once a star has been categorized, it is routed to the stellar atmosphere models that cover that type of star. These are applied in order, with stars that are not covered by one set of atmospheres being passed on to the next and so forth; the code is structured this way because published model atmosphere libraries generally specialize to one particular type of star (e.g., O and B stars, evolved cool giants, main sequence stars, etc.). Thus a star is tried against atmospheres until one that fits it is found.
The atmosphere models in the default set for WR stars are:
POWR_WC: the carbon-sequence (WC, with WO and WNC folded in) grid from the Potsdam Wolf-Rayet (PoWR) model atmosphere group. Covers \(T_\mathrm{eff} \approx 39800-199500\,\mathrm{K}\), parameterized by transformed radius \(\log R_t = -0.80\) to \(1.60\) rather than \(\log g\) (Wolf-Rayet winds are optically thick, so \(\log g\) is not a meaningful atmosphere parameter), and [Fe/H] \(= -1.24\) to \(0\) (4 values, spanning roughly Galactic through sub-SMC metallicity).POWR_WNE: the hydrogen-poor nitrogen-sequence (WNE) grid from PoWR. Covers \(T_\mathrm{eff} \approx 31600-199500\,\mathrm{K}\), \(\log R_t = -0.20\) to \(1.90\), and [Fe/H] \(= -1.18\) to \(0\) (4 values).POWR_WNL_H20,POWR_WNL_H40,POWR_WNL_H60: the hydrogen-rich nitrogen-sequence (WNL) grids from PoWR, split into three separate files by surface hydrogen mass fraction bucket (approximately 0.20, 0.40, and 0.60 respectively), following the Roy et al. (2020) WNL classification. Each covers \(T_\mathrm{eff} \approx 25100-112200\,\mathrm{K}\), \(\log R_t = 0.0\) to \(1.90\), and [Fe/H] \(= -1.18\) to \(0\).
The atmosphere models in the default set for normal stars are:
TLUSTY_O: the non-LTE TLUSTY OSTAR grid (Hubeny et al. 2025) for O stars. Covers \(T_\mathrm{eff} = 27500-55000\,\mathrm{K}\), \(\log g = 3.0-4.75\), and [Fe/H] \(= -2.0\) to \(0.30\) (8 values), at a fixed microturbulent velocity of 10 km/s.TLUSTY_B: the companion non-LTE TLUSTY BSTAR grid (Hubeny et al. 2025) for B stars. Covers \(T_\mathrm{eff} = 15000-30000\,\mathrm{K}\), \(\log g = 1.75-4.75\), and [Fe/H] \(= -2.0\) to \(0.30\) (8 values), at a choice of 2, 5, or 10 km/s microturbulent velocity (2 km/s by default).BOSZ: the BOSZ synthetic spectral library (Mészáros et al. 2012, 2024; Bohlin et al. 2017), built from a combination of ATLAS9 and MARCS model atmospheres. Covers \(T_\mathrm{eff} = 2800-16000\,\mathrm{K}\), \(\log g = -0.5\) to \(5.5\), [Fe/H] \(= -2.5\) to \(0.75\), and [alpha/Fe] \(= -0.25\) to \(0.50\), at fixed [C/Fe] \(= 0\), spectral resolution \(R = 500\), and microturbulent velocity 0 km/s.CK04: the Castelli & Kurucz (2004) ATLAS9 grid, as distributed via the STScI CDBS archive. Covers \(T_\mathrm{eff} = 3500-50000\,\mathrm{K}\), \(\log g = 0.0-5.0\), and [Fe/H] \(= -2.5\) to \(0.5\) (8 values); this grid has no [alpha/Fe], [C/Fe], or microturbulence axis.MARCS: the MARCS grid of spherical and plane-parallel LTE model atmospheres (Gustafsson et al. 2008). Covers \(T_\mathrm{eff} = 2500-8000\,\mathrm{K}\), \(\log g = -0.5\) to \(5.5\), [Fe/H] \(= -5.0\) to \(1.0\) (15 values), and [alpha/Fe] \(= -0.4\) to \(0.4\) (6 values), at fixed [C/Fe] \(= 0\) and a choice of 0, 1, 2, or 5 km/s microturbulent velocity (2 km/s by default).
The atmosphere models in the default set for white dwarf stars are:
TREMBLAY_DA: the pure-hydrogen (DA) white dwarf atmosphere grid of Tremblay et al. (2011), including the Kowalski & Saumon (2006) high-density correction, from the Warwick model grid page. Covers \(T_\mathrm{eff} = 1500-140000\,\mathrm{K}\) and \(\log g = 6.5-9.5\); white dwarf atmospheres have no [Fe/H], [alpha/Fe], or [C/Fe] axis at all, since they are parameterized by \(T_\mathrm{eff}\) and \(\log g\) alone.TREMBLAY_ELM: the companion extremely-low-mass (ELM) pure-hydrogen white dwarf grid of Claret et al. (2020), from the same Warwick model grid page. Covers \(T_\mathrm{eff} = 4000-40000\,\mathrm{K}\) and \(\log g = 4.0-9.5\).RAUCH: the solar-abundance NLTE hot subdwarf / pre-white-dwarf (central-star- of-planetary-nebula) atmosphere grid of Rauch (2003), queried from the TheoSSA virtual observatory service operated by the German Astrophysical Virtual Observatory. Covers (non-rectangularly) \(T_\mathrm{eff} = 50000-190000\,\mathrm{K}\) and \(\log g = 5-8\).RAUCH_H07: a companion pure H/He grid (no metal line blanketing) from the same TheoSSA source, filtered to the same 5-2000 Angstrom wavelength range asRAUCH. Covers (non-rectangularly) the same \(T_\mathrm{eff} = 50000-190000\,\mathrm{K}\) range asRAUCH, but extends to higher \(\log g = 5-9\), filling a gap betweenRAUCH’s own \(\log g \le 8\) ceiling and the Tremblay grids’ own \(T_\mathrm{eff}\) ceilings. Because it lacks metal line blanketing, it is less physically faithful thanRAUCH, so it is listed afterRAUCHin the default chain and is only ever used for a starRAUCHcannot cover.
The full list of references for each set of atmospheres, which should be cited in any
publication using that track set, is provided in the data/spectra/spectra.toml
registry.
Alternative Atmosphere Models
Users are free to use either individual stellar atmosphere libraries
or arbitrary combinations of them setting the model keyword to one or more
names of stellar atmosphere models. The list of available models is provided
in a registry file, the name of which is provided by the registry keyword
in the [specsyn] section of The SLUG Input Deck; the default registry
used by the standard data set is data/spectra/spectra.toml. If a single model name
is provided in model, only that atmosphere set will be used, while if
multiple names are provided SLUG will try the specified models in order, by
checking for each star if its properties are within the range covered by the
first set of models, if not trying the second set, and so forth.
However, be warned that SLUG will exit with an error if it encounters a
star whose properties are not within the coverage of any of the provided models; the
“default” model set has been assembled carefully to ensure that it covers
almost all of the possible stellar properties that can be produced by
Standard Track Sets, with clamping applied to some extreme, rare cases
that fall outside the coverage grid (e.g., very compact, high \(\log g\)
O and B stars that can be produced at the lowest [Fe/H], and which are outside
the range covered by any of the available atmosphere models). However, this
will in general not be the case for any other model grid. Therefore it is
recommended to use options other than model = "default" only for simulations
exploring a limited range of stellar masses or ages, or for users who are
prepared to do a considerable amount of hand-tuning to ensure adequate coverage.
Finally, users have the option to set model = "blackbody", in which case stars
will be treated as blackbodies at the effective temperature provided by the
tracks. This option is intended for code testing only, and should not be used in
production simulations.
Adding New Stellar Atmosphere Models
As with Stellar Tracks, it is possible to add new atmosphere models to SLUG
without altering the source code, just by adding an HDF5 file containing the
atmosphere data and a registry entry in a TOML registry
file – either a new entry in the standard registry file data/spectra/spectra.toml,
or a new registry file specified by the registry keyword in the
Spectral Synthesis Keywords section of The SLUG Input Deck.
The required format described below is the one used by the ordinary (“normal star”)
atmosphere models – e.g. BOSZ, CK04, MARCS, TLUSTY_O, TLUSTY_B –
and is the format to follow when adding a new model of this kind. The Wolf-Rayet and
white dwarf atmosphere models use their own, more specialized HDF5 layouts (selected
by the WR_grid and WD_grid registry keys described below), which are not
documented here; the scripts referenced at the end of this section can be used as a
guide to those formats as well.
The required format for the HDF5 file is as follows.
A spectral library file contains one top-level group named wavelengths, which
holds one or more 1D datasets giving the wavelength grid(s), in Angstrom and sorted
ascending, on which the library’s spectra are tabulated. If the library provides
spectra at more than one internal spectral resolution r, each such dataset
should be named r<r>, where <r> is that resolution rounded to the nearest
integer (e.g. r500); if the library provides only a single wavelength grid, that
one dataset may be given any name, and it will be used automatically regardless of
r. SLUG does not currently expose any input deck keyword to select among
multiple resolutions – every spectral synthesizer is built with a single, fixed
internal r (see defaultR in SpecsynCommons.hpp) – so this axis exists
in the file format for future extensibility, but is not presently a way for a user
to distinguish between resolutions at run time.
Beyond wavelengths, the file contains one top-level group per available
combination of [Fe/H] and, optionally, [alpha/Fe], [C/Fe], microturbulent velocity,
and spectral resolution; the name given to each such group is arbitrary and is never
interpreted by SLUG. Each such group must have:
An attribute
feh(a single float): the [Fe/H] value of this group’s models. This attribute is required.An attribute
afe(a single float): the [alpha/Fe] value of this group’s models. This attribute is optional; if it is absent, this group is treated as matching any requested [alpha/Fe] value, appropriate for a library (likeTLUSTY_OorCK04) that does not provide multiple [alpha/Fe] choices.An attribute
cfe(a single float): the [C/Fe] value of this group’s models. This attribute is optional, with the same “matches anything” behavior asafeif it is absent.An attribute
micro(a single float, in km/s): the microturbulent velocity of this group’s models. This attribute is optional, with the same “matches anything” behavior asafeif it is absent – appropriate for a library (likeCK04) with no microturbulence axis at all.An attribute
r(a single float): the spectral resolution of this group’s models. This attribute is optional, with the same “matches anything” behavior asafeif it is absent.
Within each such group, there is one dataset per (\(T_\mathrm{eff}\), \(\log g\)) point actually available at that group’s own [Fe/H]/[alpha/Fe]/ [C/Fe]/microturbulence/resolution combination; the name given to each such dataset is likewise arbitrary. These points need not form a complete rectangular grid – gaps are permitted, and SLUG simply treats an unpopulated point as unavailable when interpolating (routing a star that needs it to the next atmosphere model in the chain, if one is available; see Alternative Atmosphere Models). Each such dataset must have:
An attribute
teff(a single float, in K – not \(\log_{10} T_\mathrm{eff}\)): the effective temperature of this model. This attribute is required.An attribute
logg(a single float): \(\log_{10}\) of this model’s surface gravity, with \(g\) in cgs units (\(\mathrm{cm\,s^{-2}}\)). This attribute is required.
and must hold a 1D array, of the same length as the group’s own wavelength grid
(wavelengths/r<r>, or the file’s sole wavelength dataset if there is only one),
giving the model’s surface flux density \(F_\lambda\), in
\(\mathrm{erg\,s}^{-1}\,\mathrm{cm}^{-2}\,\mathrm{Angstrom}^{-1}\), at each
wavelength – that is, the flux emitted per unit area of the stellar surface, not
the flux already scaled by any particular star’s actual surface area or by distance.
SLUG multiplies this by the surface area of the star actually being synthesized
(computed from its luminosity and effective temperature) to obtain its specific
luminosity.
The required format for the registry entry is as follows.
A spectra registry is a TOML file with a top-level spectra_sets key giving an
array of strings, one per atmosphere model the registry describes; the default
registry, data/spectra/spectra.toml, lists the standard atmosphere models
described above. For every name appearing in spectra_sets, the registry must
also contain a top-level table of that same name (e.g. [BOSZ]) with at least the
following key:
file(a string): The path to this model’s HDF5 file, resolved relative to the directory containing the registry file itself (not the current working directory), exactly as for a track registry’s ownfilekey (see Standard Track Sets); this may be a relative path containing..components, not just a bare file name.
Unlike a track registry, a spectra registry entry has no other strictly required
key – in particular, an [Fe/H] value is always read directly from each HDF5 group’s
own feh attribute at runtime, so nothing here needs to advertise it up front
(though the optional Fe_H key below is still recommended, for documentation
purposes, exactly as for a track registry).
A registry entry may also include any of the following optional keys:
version: A version string for this atmosphere model.references: An array of strings, one full citation per publication that should be cited by anyone using this atmosphere model.reference_urls: An array of URL strings, one per entry ofreferences, in the same order.Fe_H: An array of numbers, the [Fe/H] values this model provides. SLUG itself never reads this key (unlike the corresponding key in a track registry); it exists purely to let a user discover a model’s own metallicity coverage without opening its HDF5 file.alpha_Fe,C_Fe: Arrays of numbers, the [alpha/Fe] and [C/Fe] values this model provides (omitted for a model, likeCK04, that does not vary along either axis).micro: An array of numbers, the microturbulent velocities (in km/s) this model provides (omitted for a model with no microturbulence axis at all).micro_default: A single number, the microturbulent velocity (in km/s) SLUG uses for this model – there is currently no input deck keyword to override it with a different value. Meaningful only for a model that has a microturbulence axis in the first place.r: An array of numbers, the spectral resolutions this model provides.download_urls: An array of URL strings pointing to the original, unprocessed data this model was built from.WR_grid(a boolean): Iftrue, this entry describes a Wolf-Rayet atmosphere grid, to be read using the specialized format used internally by theSpecsynLibWRclass rather than the general format described above. Mutually exclusive withWD_grid.WD_grid(a boolean): Iftrue, this entry describes a white dwarf atmosphere grid, to be read using the specialized format used internally by theSpecsynLibWDclass rather than the general format described above. Mutually exclusive withWR_grid.
The scripts used to generate the HDF5 files for all the atmosphere models in the
standard data set are provided in the data/tools/spectra directory of the
repository, and can be used as guides.