II. SPECTRUM Technical Details

This section is divided into the following parts:

A) The spectral line list, luke.lst

B) The format of the output file, and what to do with it

C) The atomic species and molecular species currently supported by SPECTRUM and the atomic data file atom.dat

D) The abundance scale

E) Isotopes

F) A brief overview of how SPECTRUM does the calculations

G) Other considerations

A) The spectral line list, luke.lst

The format of the luke.lst file is best explained by looking at a sample line:

4045.820   26.0   11976   36686    0.280  1.000 01  NIST
Column 1 is the wavelength of the line in Angstroms

Column 2 is the species code. 26.0 refers to neutral iron, 22.1 to singly ionized titanium,  etc.  That is to say, the integer part of the code is the atomic number of the species, the fractional part refers to the ionization state.  Molecular codes refer to the atoms in the diatomic molecule: 106.0 refers to CH, 1 for H, 6 for C, 607.0 to CN, etc.

Column 3 contains the energy of the lower energy level in inverse centimeters.

Column 4 contains the energy of the higher energy level in inverse cm.

Column 5 contains log(gf) - the log of the oscillator strength times the statistical weight of the lower level.

Column 6 is the damping factor - it is the factor by which the van der Waals damping coefficient is multiplied. You will notice that some of these factors are different from 1.000; they have been adjusted by comparison to the solar spectrum, and are so far rather rough. For critical work, determine your own parameters. The lines with adjusted damping factors are generally the strongest lines with damping wings. For weak and moderate-strength lines, the value used for the damping factor is not critical, and good results can be obtained by leaving it at 1.000.  For neutral lines, SPECTRUM uses the broadening theory for s-p, p-s, p-d, d-p, d-f and f-d transitions of Anstee & O'Mara (1995), Barklem & O'Mara (1997) and Barklem, O'Mara & Ross (1998).  For lines of ionized species, the standard van der Waals theory is used.

Column 7 contains a code that refers to the type of transition.  For example, s - p transitions are designated by 01, p - s by 10, d - f by 23, etc.  The code is made up of the angular momentum quantum numbers of the initial and final states.  This information is used by SPECTRUM in computing the van der Waals broadening (for more details, see below).  If you do not know the type of transition, or want to use the standard van der Waals theory instead of the broadening theory of O'Mara and collaborators (see preceeding paragraph), or the transition type is not included in the list in the preceeding paragraph,  use '99'.

Column 8 contains a reference to the source of the gf values. CB refers to Corliss and Bowman (1962), KP to Kurucz and Peytremann (1975), N1, N2 and J to the National Bureau of Standards critical compilations, NIST to the new and revised critical compilations from NIST (formerly National Bureau of Standards) which can be found on the web,  BW82, BW86, etc. to the many papers by the group under Blackwell at Oxford, England. References like "r11ef" refer to the various bands and branches of the electronic transitions of diatomic molecules. RG refers to a line which is listed in "The Solar Spectrum, 2935 A to 8770 A" by Moore et al. (1966), and for which the levels are known, but which does not have an oscillator strength in the literature. "rg" refers to unidentified lines in the solar spectrum. These lines have been represented with Fe I lines with a 3ev lower energy level. The oscillator strengths for these lines and for any line with an "m" or "*" appended to the reference, have been calculated or "adjusted" by the process described below.

Some of the oscillator strengths have been adjusted in luke.lst in the following way. Equivalent widths for  the adjusted lines  have been measured in the Kurucz et al (1984) Solar Atlas by fitting  an approximate Voigt line profile (actually a "mixed" profile  involving  a weighted sum of a Gaussian and a Lorentzian profile) to the line profiles. The program which does this (xmkf, written by the author) carries out a nonlinear least-squares fit to the profile (in some cases involving more than 20 lines for complex blends) and reports back the equivalent width of each spectral line. Using this program, equivalent widths for lines making up even quite complex blends can be measured. These equivalent widths are then entered into another program (adapted from SPECTRUM) called GFADJUST which calculates the gf value that will reproduce the correct line strength in the synthetic spectrum.  I do not make any guarantees for these oscillator strengths, but I can reproduce the solar spectrum remarkably well in the regions I have worked on, and significantly hotter and cooler models give good fits with real spectra using these "adjusted" values. As a caveat, I should mention that the gf values were adjusted assuming Kurucz's abundances (i.e the abundances in the file atom.dat), which are not exactly "standard"(see section C below). I may recompute the gf values at sometime in the future using "standard" abundances, but I do not feel a compelling need for this right at the moment. I would suggest that anyone who uses SPECTRUM to do abundance calculations should either use the NIST oscillator strengths, or make a critical appraisal of the gf values in luke.lst or, better yet, calculate them yourself (!), before using them.

Note:  My student Paul Robinson and I have recently compared in some detail the synthetic solar spectrum produced by SPECTRUM with the observed solar atlas by Furenlid et al in the range 3800 - 6800A.  We have updated the gf values for many lines with the new critical values taken from the NIST  website.  This has resulted in quite a good agreement between observed and synthetic spectra, but obviously, the work of getting exact agreement is enormous.

Oscillator strengths for the diatomic molecules in luke.lst have been obtained from a number of sources.  I have used the SCAN database line lists for CH and for the red system of CN.  I have used the line lists from the Kurucz CD's for the violet system of CN and for OH, NH, SiO, SiH, MgH, C2, and CO.  The luke.lst file does not contain lines of TiO, because inclusion of these lines greatly inflates the size of the file.  Users can obtain TiO lines from the SCAN database.

Line lists for other parts of the spectrum are now available.  The file luke.nir.lst covers the near-infrared region from 6800A to 10,000A.  The file luke.ir.lst goes from 1 micron to 4 microns.  These lists have been compiled from the Kurucz line lists and from various sources for the diatomic molecules.  Please note that the quality of the data in these line lists is not as good as luke.lst, so they should be used with caution. 

In addition, the file luke.lst is not really suitable for hot stars, as it contains only very few lines of doubly or triply ionized species.  This will be corrected in the future when a similar line list called "hot.lst" is released. 

B) The format of the output file, and what to do with it.

The format of the default ASCII output file has two columns. The first column is the wavelength in Angstroms, and the second column depends on the mode in which SPECTRUM is operating as follows:

      mode                       switch        format of second column

Normalized Intensity          none     normalized intensity.
Absolute Flux                      f          Flux (erg/cm^2/sec/Angstrom)
Specific Intensity                 m          normalized specific intensity
Specific Intensity                 M          specific intensity
In the Absolute Flux mode, the Flux is in units of erg/cm^2/sec/Angstrom. Kurucz's fluxes are recorded as erg/cm^2/sec/nanometer. To convert my fluxes to Kurucz's fluxes, multiply my fluxes by 10.

SPECTRUM may be commanded to output the emergent spectrum in a binary file (see section I). This saves much space on the hard disk, but the original spectrum is a bit more difficult to access. I have provided on the ftp site two programs, BSMOOTH2 and BFLXSM2 which can be used to smooth the output to any desired resolution by convolving a Gaussian with the output.  If you require a more complex line spread function, contact me.

C) The atomic and molecular species currently supported by SPECTRUM

The data file atom.dat contains the atomic and molecular data for the species which are currently supported by SPECTRUM. There are eight columns in this file. The first column gives the "code", which, for atoms, is the atomic number. For molecules, the code indicates the constituent atoms in the molecule. That is to say, CH is "106", where 1 represents H and 6 represents C. The second column gives the abundance on the scale log(N/Ntotal) (see section D below). For the molecules, the number -7.50 has been entered in the abundance column. This number is used by SPECTRUM to calculate a "calculation radius" for a spectral line and does not refer to the actual abundance of the molecule in the stellar atmosphere. The third column is the atomic mass.  The fourth column is the first ionization energy for atoms, and the dissociation energy for molecules. The fifth column is the second ionization energy for atoms or the reduced mass for molecules. The sixth and seventh columns are the third and fourth ionization energies for atoms.  For molecules, the sixth column is a factor by which the molecular gf value is multiplied.  This gives the user added control over the strength of the molecular bands seen in the spectrum, and can be adjusted to bring the computed bands into agreement with the observed bands if necessary. The eighth column gives the highest ion (for a particular element) which is supported by SPECTRUM. If this number is "1", then lines of singly ionized species are supported, but higher ionization stages are not (except in equilibrium calculations which include the ionization stage one greater than indicated in atom.dat). If the number is "2", then lines of doubly ionized species (for instance, C III or Si III) are supported, etc.

Please note that it is not sufficient to edit atom.dat to add another element or molecule to SPECTRUM. Partition functions must be added as well, which means that the SPECTRUM source code must be edited and SPECTRUM recompiled. I am adding elements and higher stages of ionization when I get the time, and if you have a special request for a new atom or ion, please contact me, and I will try to accomodate (SPECTRUM at present will only accomodate at most lines of doubly ionized species). I am working on adding other molecules to SPECTRUM.

An alternate atomic data file, stdatom.dat, is provided.  This file contains elemental abundances which are slightly different from those in atom.dat, and are based on the abundances in the paper by Grevesse & Sauval (1998).  The file atom.dat contains the abundances used by Kurucz in the calculation of his models, but it should be noted that a number of these elemental abundances differ from the most modern abundances based either on meteorites or on studies of the solar photosphere.  The greatest difference is in iron.  Kurucz uses the abundance -4.37 which corresponds to 7.67 on the logarithmic scale in which the abundance of hydrogen is set equal to 12.0 (see section D below).  The modern value for the iron abundance is closer to 7.50, or even 7.47, a difference of 0.2 dex!

SPECTRUM currently supports (i.e. will calculate the spectrum) for the following diatomic molecules: CH, NH, OH, MgH, SiH, CaH, SiO, C2, CN, and TiO.

D) The abundance scale

It was mentioned above that the way the abundance scale is expressed in atom.dat (or for that matter, Kurucz's model atmosphere program ATLAS) is not the standard way that is usually found in the literature. Normally, abundances of elements are expressed with respect to hydrogen, on a scale in which the log of the abundance of hydrogen is set equal to 12.0. SPECTRUM uses a scale in which the abundances are expressed with respect to the total number density of atoms (and ions). To convert between the two scales is easy; use the following formula

log(A/N(Hydrogen)) = 12.0 + log(A/Ntotal) - log(N(Hydrogen)/Ntotal).

for log(N(Hydrogen/Ntotal), SPECTRUM and Kurucz use -0.0405.

I should note that SPECTRUM has been used to successfully calculate spectra for hydrogen poor (helium-rich) models. To introduce a non-standard hydrogen and/or helium abundance, it is necessary to edit atom.dat AND to use a model calculated for those abundances. If you do not use a model with hydrogen and helium abundances consistent with those found in atom.dat, it is likely that SPECTRUM will bomb, as the equilibrium equations will have no solution.

One may calculate stellar spectra for metal-rich and metal-poor stars without changing atom.dat.  The stellar atmosphere model will have a value for [M/H] in its header (the third number in the simplified SPECTRUM header) which represents the logarithm of the ratio of the overall metal abundance of the atmosphere model to that of the sun.  For instance, if the model is for a star in which the metals are reduced in abundance by a factor of 10 relative to the sun, [M/H] = -1.00.    [M/H] is used as a scaling factor for the abundances in atom.dat, except for hydrogen and helium.  If you are interested in computing spectra for models in which the mix of abundances is not solar, then it is necessary to edit atom.dat.  Kurucz, for instance, has calculated some models with enhanced alpha-peak elements, and to use those models you would need to edit atom.dat appropriately.

E) Isotopes

Versions of SPECTRUM 2.65 and later support the computation of isotopes.   The calculation of isotopic spectra is enabled with switch "i".  To utilize this facility, you will need to prepare a line list for the spectral region of interest similar to luke.lst, but containing an extra column.  This extra column contains the "isotope code".  The following example is taken from the example line list included in the distribution, isoexample.lst:

          Isotope column
6707.752 21.0 0 32659 47563 -2.672 1.000 99 K23
6707.754 3.0 7 0 14904 -0.431 1.000 01 AGL
6707.766 3.0 7 0 14904 -0.209 1.000 01 AGL
6707.771 20.0 0 46748 61652 -4.015 1.000 99 K23
6707.824 26.1 0 93488 108392 -3.094 1.000 99 K23

You will notice two spectral lines for lithium (code = 3.0). The "7" in the isotope column indicates that this line is for Lithium-7. Most of the lines have "0" in this column.
This means that these lines represent
all the possible isotopes for that species taken together.

A similar thing can be done for molecules. Let us take the molecule CN as an example. The two most abundant isotopes for C are Carbon-12 and Carbon-13. Nitrogen
also has isotopes Nitrogen-14 and
Nitrogen-15. SPECTRUM supports the following CN molecules

Isotope code

12C 14N 12
13C 14N 13
12C 15N 15

Here is an example line list with CN isotopes:

8050.165 20.0 0 48291 60710 -3.001 1.000 99 K88
8050.173 607.0 12 12405 0906 -3.103 1.000 99 KCNBX
8050.185 607.0 12 12265 0603 -2.869 1.000 99 KCNBX
8050.194 607.0 15 12941 0805 -1.894 1.000 99 KCNBX
8050.230 607.0 13 11656 0906 -3.580 1.000 99 KCNBX

A list of supported isotopes can be found in isotope.iso, which is the list that you should supply when SPECTRUM prompts you for

Enter name of isotope data file (default = isotope.iso) >

Please note that not all possible combinations of isotopes in molecules are supported. For instance, 13C 15N is not supported, as it should always have extremely low
abundances. If you include a line
in the line list file for an unsupported molecule or isotope, SPECTRUM will tell you.

The format of the isotope.iso file is:

Column1: species code
Column2: isotope code
Column3: molecular weight
Column4: fractional abundance in the sun/solar system. For a single species these numbers should all add up to 1.000 (or pretty close).

If you want to compute spectra with different isotopic ratios, change the appropriate numbers in column4.

Here is a list of all currently supported molecules in the isotope mode (note "D" stands for Deuterium)

Molecule Isotope Code
12C H 12
13C H 13
12C D 2
14N H 14
15N H 15
14N D 2
16O H 16
17O H 17
18O H 18
16O D 2
24Mg H 24
25Mg H 25
26Mg H 26
24Mg D 2
28Si H 28
29Si H 29
30Si H 30
28Si D 2
40Ca H 40
42Ca H 42
43Ca H 43
44Ca H 44
46Ca H 46
48Ca H 48
40Ca D 2
12C 12C 12
12C 13C 13
13C 13C 33
12C 14N 12
12C 15N 15
13C 14N 13
12C 16O 12
12C 17O 17
12C 18O 18
13C 16O 13
28Si 16O 16
29Si 16O 29
30Si 16O 30
28Si 17O 17
28Si 18O 18

Note: Isotopes for TiO are not yet supported.

F) A brief overview of how SPECTRUM does its calculations

As mentioned above, SPECTRUM carries out some preliminary calculations before getting down to the business of calculating the spectrum itself. SPECTRUM uses a Kurucz atmosphere model as input, but utilizes only the columns containing the mass depth points, the run of temperature and the run of pressure. SPECTRUM then computes for itself the electron number density and the number densities of important species, namely, hydrogen, helium, carbon, nitrogen, oxygen, their ions and the relevant diatomic molecules. Specifically, SPECTRUM solves a system of 7 non-linear equilibrium equations to determine these number densities. These equations are:

1) Equilibrium equation for hydrogen, including neutral and ionized hydrogen, the H- ion, H2, H2+, CH, NH and OH.

2) Equilibrium equation for Helium, including two stages of ionization

3) Equilibrium equation for Carbon, including two stages of ionization (i.e. CI, CII and CIII), and the molecules CH,CN,CO and C2.

4) Equilibrium equation for Nitrogen, including two stages of ionization, and the molecules CN, NH, NO, N2

5) Equilibrium equation for Oxygen, including two stages of ionization, and the molecules CO, NO, OH, O2

6) Charge balance equation, including electron contributions from the ionization of hydrogen, helium, carbon, nitrogen and oxygen and the following species: sodium, magnesium, silicon, potassium, calcium, aluminum, and iron.

7) Total number density, including all species mentioned above, which must agree with P/kT as read from Kurucz's model.

This system of equations is solved iteratively at each of the levels in the stellar atmosphere. Electron number densities so derived are always within 1% of those in the Kurucz model. Convergence is rapid, and the abundances of the different species and molecules are stored for each of the atmosphere levels in memory.

SPECTRUM then moves on to the computation of reference opacities and optical depths at each level in the atmosphere. Opacities currently included in SPECTRUM are: hydrogen bound-free and free-free, helium bound- free, helium I free-free, helium II free-free, H minus bound-free and free- free, H2+ opacity, hydrogen rayleigh scattering, H2 rayleigh scattering, He I rayleigh scattering, He I minus opacity, low temperature opacities (including continuous opacities due to C I, Mg I, Al I, Fe I, Si I, CH, OH and MgH), intermediate temperature opacities (including opacities due to N I, O I, Mg II, Ca II and Si II) and electron scattering.

With these preliminaries completed, SPECTRUM can now begin to compute the synthetic spectrum. The numbers or words in parentheses correspond to the parameters used in the ultraviolet part of the spectrum. SPECTRUM basically computes the spectrum in 20 (5) Angstrom blocks, although smaller segments of spectra can be synthesized. For each 20 (5) Angstrom block, SPECTRUM first computes the continuum opacity and the emergent continuum flux at the center (both ends) of each block (the exception to this is if this 20 (5) Angstrom block contains a continuous absorption edge. Then SPECTRUM modifies the red end of this block to 0.05 A before the absorption edge; the next block straddles the absorption edge, and then the new block starts at 0.05 A past the absorption edge). The continuous opacity at every point is then estimated by interpolation. SPECTRUM then proceeds to the calculation of the line opacity at each spectrum point. SPECTRUM must decide, at every spectrum point, which spectral lines to include in the calculation of the line opacity. To do this SPECTRUM maintains two lists of lines. The first list includes all spectral lines in the line file which lie within 10A (15A) of the current spectrum point. For all the lines in this list, SPECTRUM assigns a "computation radius" based upon a rough and ready computation of the line strength. If the computation radius of a line includes the spectrum point being currently computed, it is moved from the first list into a second list which comprises all of the lines which contribute to the line opacity at that point. Once SPECTRUM has stepped entirely through the computation radius of a line, that particular line is dropped from the second list as well.

For each line in the second list, the abundance of the ion in question and the level population for that particular transition are computed using the Saha and Boltzmann equatons. The broadening parameter is then computed; broadening mechanisms include natural, van der Waals (using the new treatment by Barklem et al. for neutral species - see MNRAS 296, 1057 and earlier papers in the series) and quadratic Stark broadening (see, however, hydrogen and helium lines below). The line opacity at that point (for each of the levels in the atmosphere) is then computed using the Voigt function. The line opacity, line optical depth, continuum opacity and continuum optical depth are then included in a "line contribution" calculation which, when ratioed with the continuum flux, leads to the calculation of the normalized residual intensity at that spectral point. SPECTRUM calculates in its default mode the disk-integrated spectrum. This quantity, along with the wavelength is then written to the output file.

The hydrogen lines are computed by a routine adopted from Deane Peterson, which includes Stark and resonance broadening and fine structure in the core. To save time, the full calculation of the hydrogen-line opacity is performed only at 1A intervals, except within 5A of the line core. The line opacity at intermediate spectral points is then obtained by 4 point interpolation (performed at each of the layers in the atmosphere). Hydrogen lines are included in the line opacity calculation for all points nominally within 2000A of the line center (although this is modified in a complicated sort of way for the crowded lines in the vicinity of the Balmer jump to avoid spurious line opacity in that region). The code for SPECTRUM includes 17 Lyman lines, 250 Balmer lines and 246 Paschen lines. The computation for the Balmer jump is quite complex and includes computation of the lowering of the ionization energy using the Debye approximation, overlap of energy levels near to the continuum, etc. This more correct computation of the Balmer jump is also applied to the Paschen convergence, but not yet to Lyman convergence.

The He I lines are computed on the basis of new line profile calculations of Beauchamp et al (private communication).  These line profiles yield very accurate reproductions of the He I lines, including forbidden components. Helium II lines are currently not included in SPECTRUM. Helium lines are computed only for models with Teff > 8500K. We note that certain helium lines in the red - especially 5875 and 6678 - are strongly affected by non-LTE and are thus not well reproduced by SPECTRUM.

Certain very strong lines (such as the Ca II K and H lines), and a handful of lines for which SPECTRUM's 'calculation radius' is not adequate are not included in the luke.lst file, as they are calculated in a special routine. This routine allows a larger computation radius for these lines.  This routine for strong lines might include, in the future, individualized source functions for certain strong lines, or even a more sophisticated calculation based on a multi-level atom.

G) Other considerations:

SPECTRUM computes synthetic spectra under the assumption of LTE, and treats each line as a pure absorption line (source function = Planck function). These are clear limitations, and the user should be aware of them at all times. For instance, SPECTRUM will not compute adequate O star spectra where NLTE effects are important. In addition, SPECTRUM will not compute adequate spectra for stars in which a significant part of the line formation occurs in the chromosphere - and this begins to be true for solar and cooler stars.  In the blue-violet region, an important unknown source of continuous opacity is missing from SPECTRUM (and every other spectral synthesis code) and thus this part of the spectrum is not well reproduced for effective temperatures lower than 4500K.  However, SPECTRUM does give reasonable spectra in the red and infrared for lower effective temperatures than this.  SPECTRUM does not yet contain some of the sources of continuous opacity important in the infrared for M dwarf stars, nor can SPECTRUM yet compute triatomic molecules, such as H2O.  However, the code has been written for the inclusion of H2O into SPECTRUM.  This will be included in a later version once I have had the chance to test it completely.

The microturbulent velocity you enter when you begin SPECTRUM should be consistent with the microturbulence of the model you are using. For instance, if you using a model computed with a microturbulence of 2.0 km/s, it is really inconsistent to use anything but 2.0km/sec in the computation of the synthetic spectrum. (The magnitude of the microturbulence affects the line opacity, which affects the structure of the stellar atmosphere). However, minor departures from the model microturbulence are probably okay. Kurucz has informed me that the microturbulent velocities used in his models are really partially 'fudge factors' which make up for a number of things - in particular missing lines. He tells me that it is not inconsistent, for instance, to use 1.0 km/sec in the computation of the synthetic spectrum of the sun, even though the model sun.dat was computed with a microturbulent velocity of 1.5 km/s. Kurucz has released a set of CD-ROMs with solar-abundance models with microturbulent velocities from 0 to 8 km/s.