PRISMAS

Pipeline of Radiative Intensity Synthesis for Meshed Atmospheric Surfaces:
the specific-intensity grids behind SPAMMS.

Why PRISMAS?

To compute the spectrum of a distorted star, a code like SPAMMS has to know how much light each element of the surface sends towards the observer. Every element is seen at a different angle, so a single emergent flux is not enough: what is needed is the specific intensity, at every wavelength and for every viewing angle μ = cos θ. Near the centre of the visible disc we look deep into the atmosphere, into hotter layers; towards the limb we only see the cooler outer layers. As a result, both the continuum and the strength and shape of the lines change with μ, and that angular dependence is what produces limb darkening.

Those intensities must be computed in advance for every model atmosphere of a grid, at high spectral resolution and at many angles. Done by hand, this is a long and repetitive task: each model has to be read, synthesised with the right atomic data and line lists, and stored in a format the spectral-synthesis code can use. With hundreds of models, several microturbulence values and wavelength ranges of thousands of Angströms, the number of syntheses and the volume of data quickly become large, and keeping everything consistent becomes as important as the computation itself.

PRISMAS (Pipeline of Radiative Intensity Synthesis for Meshed Atmospheric Surfaces) automates the whole process. It wraps the synple spectral-synthesis code (Allende Prieto; SYNSPEC by Hubeny et al. 2021) and turns a folder of LTE or non-LTE model atmospheres into specific intensities at 101 angles and calibrated Eddington fluxes — for the wavelength range, sampling and microturbulence you choose.

From atmosphere to intensity grid

From a folder of model atmospheres to SPAMMS-ready specific intensities.

Three panels in the log g versus effective temperature plane showing the coverage of the Castelli and Kurucz, Mészáros and TLUSTY grids, with Geneva evolutionary tracks.
Coverage of the Kurucz (Castelli & Kurucz; Mészáros) and TLUSTY grids in the log g–Teff plane,
over Geneva evolutionary tracks at solar metallicity (Ekström et al. 2012).
  1. Read the atmosphere. Teff, log g and metallicities are decoded from the native file name of each model, for Kurucz-Castelli, Kurucz-Mészáros or TLUSTY grids.
  2. Synthesise. synple runs SYNSPEC over the chosen wavelength range, sampling Δλ and microturbulences, with the atomic data and line lists that match each family of atmospheres.
  3. Complete the angles. Intensities are computed on 101 values of μ = cos θ, from 0 to 1: computed directly with the synple PRISMAS branch, or rebuilt from sparser grids with PCHIP interpolation.
  4. Store. Each model gives the wavelength vector, the specific- and continuum-intensity matrices (101 μ × Nλ) and the integrated and continuum fluxes as NumPy arrays, all packed into .tar.gz files.

Pipeline capabilities

What sets PRISMAS apart: from the choice of atmospheres to the final grids.

Matching atomic data

Kurucz models use the Allende Prieto et al. (2018) line list, with ExoMol TiO and H2O for cool stars; TLUSTY models keep the original OSTAR2002 / BSTAR2006 atomic data.

Full control

Wavelength range, spectral sampling, microturbulence values, μ grid and line lists are all set by the user, to build grids tailored to each problem.

Parameters from file names

Stellar parameters and chemical composition are decoded from the native names of each grid, so whole folders run without writing any configuration.

Smart angular recovery

Sparse μ grids are rebuilt to 101 angles with PCHIP, or skipped altogether with the synple PRISMAS branch.

Laptop to HPC

The same command runs a single model, a folder in parallel over a CPU pool, or one model per job in the job arrays of a cluster.

Ready-made grids

The full 2026 grids (3000–9000 Å, Δλ = 0.01 Å, vmic = 1–10 km s−1) are too large to host, but available on request.

Computing grids with PRISMAS

One model, a whole folder, or a cluster job: the same pipeline in three execution modes.

--opt 0

Single model

One Kurucz-Castelli atmosphere, synthesised between 3000 and 5000 Å for two microturbulences.

python3 prismas.py --opt 0 --mode KC \
  --modeldir ./Examples/kurucz_castelli/ \
  --model m0.50t49000g4.5am05k2odfnew.dat \
  --numpydir ./Examples/kurucz_castelli/results/ \
  --wl [3000,5000] --vmic [2,5] --dw 0.01
--opt 1

A folder in parallel

Every TLUSTY model in a folder, with the original TLUSTY line list, spread over five CPU cores.

python3 prismas.py --opt 1 --mode T \
  --modeldir ./Examples/tlusty/ \
  --numpydir ./Examples/tlusty/results/ \
  --wl [3000,5000] --vmic [1.0,5.0] --dw 0.1 \
  --linelist [gfTLUSTYALL.dat] --ncpus 5
--opt 2

One job on a cluster

A single model per job, ready to be launched as one element of a job array on an HPC scheduler.

python3 prismas.py --opt 2 --mode KC \
  --modeldir ./Examples/kurucz_castelli/ \
  --model m0.50t49000g4.5am05ak2odfnew.dat \
  --numpydir ./Examples/kurucz_castelli/results/ \
  --wl [3000,5000] --vmic [10] --dw 0.01