This page offers an overview of material mix classes and their important properties. The discussion is organized as follows:
The transfer medium in a SKIRT simulation is represented by one or more medium components. For each component, the spatial density distribution can be specified through built-in geometries (GeometricMedium) or imported from input files (ImportedMedium). In either case, the optical properties of the medium are defined by associating a material mix (a MaterialMix subclass) with the medium component. The MaterialMix class hierarchy allows fundamentally different material types including dust, electrons, and gas to be implemented as part of a single framework.
For each spatial cell in the simulation, the medium state includes a number density value defining the amount of material present in the cell per unit of volume. The kind of physical entity being counted by the number density and the conversion from number density to mass density depend on the type of material, as indicated in the table below. The actual conversion factor is supplied by the material mix and obviously depends on the specific material type.
Material type | Entity counted | Mass conversion |
---|---|---|
Dust | hydrogen atom | dust mass per hydrogen atom |
Electrons | electron | electron mass |
Gas | hydrogen atom | gas mass per hydrogen atom |
Most importantly, each MaterialMix subclass offers a set of functions that help implement the photon life cycle. For example, the MaterialMix::opacityAbs() and MaterialMix::opacitySca() functions return the absorption and scattering opacity given the incoming photon packet and the medium state in the spatial cell being crossed. The MaterialMix::performScattering() function handles a random-walk scattering interaction including the effects of bulk velocity, polarization, and so forth. The peelOffScattering() function similarly calculates the contribution to a scattering peel-off event given the instrument reference frame.
Furthermore, when applicable, a MaterialMix subclass also offers functions to help emit secondary photon packets. For example, the MaterialMix::emissionSpectrum() function returns the emission spectrum given the medium state in a cell and the radiation field in which the cell is embedded. Similarly, if the emission spectrum includes lines, the MaterialMix::lineEmissionSpectrum() function returns the luminosities that will be emitted at the line centers.
The following table lists some relevant physical quantities including properties that may be stored in the medium state or in a photon packet, material properties defined by material mixes, and properties that can be derived from these.
Symbol | Units | Description |
---|---|---|
Wavelength | ||
Position | ||
Distance along a path | ||
Dust grain size (radius) | ||
Volume | ||
Bulk velocity | ||
Magnetic field vector | ||
Temperature | ||
Number density (of entities) | ||
Mass per entity | ||
Cross section per entity | ||
Number column density | ||
Number (of entities) | ||
Mass density | ||
Mass column density | ||
Mass | ||
Mass coefficient | ||
Opacity | ||
Optical depth |
The diagram below shows a selection of the MaterialMix subclasses organized into logical groups. The precise class inheritance tree is slightly more complicated for practical implementation reasons.
The sections below discuss each of these groups.
The abstract DustMix class inherits MaterialMix and implements the common functionality for all dust grain mixtures supported by SKIRT. Specifically, it handles the following basic dust material properties:
The DustMix class allows its subclasses to support the following scattering modes:
HenyeyGreenstein:
the subclass supplies the assymmetry parameter MaterialPhaseFunction:
the subclass implements a custom phase function that depends only on the cosine of the scattering angle, SphericalPolarization:
the subclass supports polarization through scattering by spherical particles. In this mode, the phase function depends on the polarization state of the incoming radiation, and the polarization state of the outgoing radiation must be updated appropriately. The phase function depends on both scattering angles The properties handled by the DustMix class correspond to the properties of a single grain population that is representative for the complete dust mix. In the context of tracking photon paths through a dusty medium, using properly calculated representive absorption and scattering cross sections and Mueller matrix coefficients is mathematically exact. In other words, for scattering modes MaterialPhaseFunction
and SphericalPolarization
, the representative grain approach does not involve an approximation. However, the calculation of a representative scattering asymmetry parameter HenyeyGreenstein
scattering mode does involve a non-exact averaging procedure. Because the Henyey-Greenstein scattering phase function is non-physical to begin with, using a single approximate
The DustMix class in turn has three abstract subclasses, each implementing a different approach to obtaining the relevant dust properties:
The information offered by the single representative dust grain classes is insufficient to accurately calculate dust emission spectra for the dust mixture. This is so because the emission spectrum is a nonlinear function of the grain size (among many other things), and thus a single grain cannot accurately represent a population with a potentialy large range of grain sizes. Furthermore, smaller dust grains are often not in local thermal equilibrium, and instead are heated stochastically by individual photon absorption events. Modeling emission for these grains involves a temperature probability distribution rather than just an equilibrium temperature. And lastly, the calculation obviously needs calorimetric properties of the grain material in addition to optical properties.
The MultiGrainDustMix class therefore implements additional functionality to allow calculating the emission spectrum for multiple grain populations with given optical and calorimetric properties and with a given size distribution. To enable these capabilities, the MultiGrainDustMix class obtains the following information for each of the dust grain populations added by the subclass: the absorption efficiencies
The representative optical grain properties for use during the photon cycle are calculated from this information by integrating over the grain size distribution
To calculate emission spectra, the class discretizes the grain size distribution for each type of grain material into a number of consecutive size bins, and calculates the optical and calorimetric properties of a representative grain for each of these bins. The number of bins for each type of grain material can be configured by the user. See MultiGrainDustMix for details.
The MultiGrainDustMix class uses one of two methods to calculate the emissivity of the dust mix:
SKIRT offers a range of built-in "turn-key" dust mixes representing sets of dust properties that have been published by various authors, including for example:
Refer to the respective classes and to other DustMix subclasses for more information.
The ConfigurableDustMix class represents a fully user-configurable dust mix described by one or more dust grain populations. Specifically, the class can be configured with a list of GrainPopulation instances, each of which represents a particular dust grain population with configurable grain composition, grain size distribution, and size bin discretization. This is illustrated in the following diagram (connections starting with a triangle denote inheritance; connections starting with a diamond denote aggregation).
A GrainComposition object represents the optical and calorimetric properties of a particular grain material according to a certain model. A GrainSizeDistribution object represents a particular grain size distribution function. For each grain population, a ConfigurableDustMix object holds a GrainPopulation object, which in turn holds a GrainComposition object and a GrainSizeDistribution object, and specifies the number of size bins used for discretizing the size distribution.
In addition, the user can define the amount of dust in each grain population by specifying one of the following three quantities:
For example, one could mimic an MRNDustMix with the following ski file configuration:
<ConfigurableDustMix scatteringType="HenyeyGreenstein"> <populations type="GrainPopulation"> <GrainPopulation numSizes="10" normalizationType="FactorOnSizeDistribution" factorOnSizeDistribution="7.762471166e-31"> <composition type="GrainComposition"> <DraineSilicateGrainComposition/> </composition> <sizeDistribution type="GrainSizeDistribution"> <PowerLawGrainSizeDistribution minSize="0.005 micron" maxSize="0.25 micron" exponent="3.5"/> </sizeDistribution> </GrainPopulation> <GrainPopulation numSizes="10" normalizationType="FactorOnSizeDistribution" factorOnSizeDistribution="7.413102413e-31"> <composition type="GrainComposition"> <DraineGraphiteGrainComposition/> </composition> <sizeDistribution type="GrainSizeDistribution"> <PowerLawGrainSizeDistribution minSize="0.005 micron" maxSize="0.25 micron" exponent="3.5"/> </sizeDistribution> </GrainPopulation> </populations> </ConfigurableDustMix>
For more information and examples, see Configuring custom dust mixes.
The ElectronMix class implements Compton scattering for a population of electrons, which converges to Thomson scattering at low photon energies. It is meaningful to implement both processes, because the calculations for Compton scattering are substantially slower than those for Thomson scattering.
Specifically, for wavelengths shorter than 10 nm, the class models Compton scattering, which features a wavelength-dependent cross section and phase function, and which causes the photon energy (wavelength) to change during the interaction. See the ComptonPhaseFunction class for more information. The current implementation of Compton scattering does not support polarization.
For wavelengths longer than 10nm, the scattering process can be described by elastic and wavelength-independent Thomson scattering. The scattering cross section is given by the well-known Thomson cross section (a constant) and the phase function is that of a dipole. See the DipolePhaseFunction class for more information. In this wavelength regime, polarization is fully supported (if enabled by the user).
It is also possible to request a random thermal motion to be added corresponding to the local kinetic temperature. See the ElectronMix class for more information.
There is no general implementation of gaseous media in SKIRT. Instead, each material mix class in this category implements one or more specific physical processes related to a given chemical species (atom, molecule, ion) or combination thereof. In this section, we merely summarize the capabilities of the classes available at the time of writing and refer to the individual class documentation for more information.
The SpinFlipHydrogenGasMix and NonLTELineGasMix classes inherit the EmittingGasMix class, which provides common functionality to gas mixes that support secondary emission. The XRayAtomicGasMix does not because fluorescence is implemented as a special form of scattering.