Alternative Dark Matter Models

Galacticus is most often run with cold dark matter (CDM), but it also implements several alternative dark matter models — warm dark matter (WDM), fuzzy dark matter (FDM), and decaying dark matter (DDM). Rather than maintaining a separate, complete parameter file for each of these, Galacticus provides a set of small, composable “modifier” files that transform the CDM reference model into the corresponding alternative-dark-matter model. This tutorial explains how these fit together and how to use them.

You should first be familiar with the parameter files tutorial, and in particular its description of change files, which are the mechanism used here.

The reference model

The parameters/reference/ folder of the Galacticus source distribution contains a library of reference parameter “building blocks” — for example cosmology.xml, powerSpectrum.xml, structureFormation.xml, darkMatterHalosProfile.xml, and so on. Each defines the parameters for one aspect of a model, using the current best-choice physics and calibrations. Complete models are assembled from these blocks using XML includes.

A complete, ready-to-run example is parameters/reference/milkyWay.xml, which includes the building blocks and adds a task, merger-tree masses, and output options. By default this — like all of the reference building blocks — describes a CDM model. The alternative-dark-matter modifiers below are designed to be applied on top of a model assembled in this way.

Applying a dark-matter modifier

Each alternative-dark-matter model is described by a single change file in parameters/reference/:

To use one, list it on the command line after the base parameter file. For example, to run the Milky Way reference model as a decaying dark matter model:

$ ./Galacticus.exe parameters/reference/milkyWay.xml parameters/reference/decayingDarkMatter.xml

Galacticus first reads milkyWay.xml and then applies the changes in decayingDarkMatter.xml to it, so that the run uses decaying dark matter physics throughout. Warm and fuzzy dark matter work in exactly the same way — just substitute the appropriate modifier file.

Because modifiers are ordinary change files, they can be combined with others. For instance, several of the dark-matter validation models apply powerSpectraSuppressed.xml (which switches to a sharp-k-space window function appropriate for a suppressed power spectrum) before a WDM or FDM modifier.

Available modifiers

Each modifier replaces the dark matter particle and then makes the further changes needed to model that particle’s effect on structure formation. The fiducial particle properties given below are reasonable defaults intended to illustrate each model; you will normally want to override them with your own values (see below).

Warm dark matter (warmDarkMatter.xml)

Uses a thermal-relic warm dark matter particle (fiducially a \(6.1\,\mathrm{keV}\) particle). Warm dark matter suppresses the linear power spectrum below its free-streaming scale, so the modifier wraps the transfer function in the Bode et al. (2001) warm dark matter transfer function (with the cut-off scale of Vogel and Abazajian (2023)), and switches the dark matter-only profile to a “cusp-NFW” profile with the prompt-cusp node operator.

Fuzzy dark matter (fuzzyDarkMatter.xml)

Uses an ultra-light (fuzzy) dark matter particle (fiducially \(m = 10^{-21}\,\mathrm{eV}\)). As for warm dark matter, the wave nature of the particle suppresses small-scale power, so the modifier replaces the transfer function with one generated by AxionCAMB, and switches the dark matter-only profile to a soliton+NFW profile with the soliton node operator.

Decaying dark matter (decayingDarkMatter.xml)

Uses a dark matter particle that decays, on some lifetime, into a lighter daughter that receives a velocity kick (fiducially a lifetime of \(10\,\mathrm{Gyr}\) and a mass splitting of \(1.3\times10^{-4}\), from which the velocity kick is derived). This model follows Montandon et al. (2026) and enters in two places:

  • The halo mass function. The decay-induced mass loss softens the collapse of halos, which is captured by a mass-dependent critical overdensity for collapse and a remapping from the initial (Lagrangian) mass to the observed collapsed mass. The modifier wraps the critical overdensity feeding the mass function in the decaying dark matter critical overdensity, and wraps the mass function itself in the decaying dark matter mass function.

  • The internal structure of halos. The continuous mass loss heats and puffs up halos. The modifier switches the dark matter-only profile to the “decaying” mass-loss profile (wrapping a heated NFW profile) and adds decaying dark matter halo heating.

Two points distinguish decaying dark matter from the warm and fuzzy cases:

  • The transfer function is left unmodified. In this model all of the decaying dark matter physics is carried by the critical overdensity and the mass remapping; the variance \(\sigma(M)\) is computed from the unmodified CDM linear power spectrum. (Combining this modifier with a suppressed transfer function would double-count the small-scale suppression.)

  • Halo mass definition. Montandon et al. (2026) measure their halo mass function using the \(M_\mathrm{200m}\) definition (the mass within a sphere enclosing 200 times the mean matter density), whereas Galacticus returns the spherical-collapse (\(M_\mathrm{virial}\)) mass. Converting between the two requires a halo density-profile model that is not currently applied, so no attempt is made to match the \(M_\mathrm{200m}\) definition; expect a corresponding systematic offset when comparing directly to their results.

Overriding the fiducial parameters

The particle properties set by each modifier are only illustrative defaults. To use your own values, simply apply a further change file after the modifier. For example, to run a decaying dark matter model with a lifetime of \(40\,\mathrm{Gyr}\) and a velocity kick of \(100\,\mathrm{km/s}\) specified directly (rather than via a mass splitting), place the following in a file myDecayingDarkMatter.xml:

<?xml version="1.0" encoding="UTF-8"?>
<changes>
  <change type="replace" path="darkMatterParticle">
    <darkMatterParticle value="decayingDarkMatter">
      <darkMatterParticle value="CDM"  />
      <lifetime           value="40.0" />
      <velocityKick       value="100.0"/>
    </darkMatterParticle>
  </change>
</changes>

and run:

$ ./Galacticus.exe parameters/reference/milkyWay.xml parameters/reference/decayingDarkMatter.xml myDecayingDarkMatter.xml

Since change files are applied in order, the final file’s replacement of the darkMatterParticle takes precedence, while all of the other structure-formation and halo-structure changes made by decayingDarkMatter.xml are retained.