Documentation for SPFIT and SPCAT

Last local (HSPM) modification: May 2, 2001
Notes, hints, and special considerations are highlighted.

These programs use subroutines in SPINV.C to calculate energies and intensities for asymmetric rotors and linear molecules with up to 99 vibrational states and up to 9 spins. No distinction is made between electronic states and vibrational states, or between electronic and nuclear spins. SPFIT is used for fitting transitions and term values, with no requirement that the transitions obey any particular selection rules. SPFIT takes input files with extensions par and lin, copies the par file to a bak file, creates new text output files with extensions par, fit, var, and creates a binary file with extension unf which is redundant with the var file but carries more precision for use in SPCAT. (Note: The unf file has been omitted in the more recent versions !) The par and var files follow essentially the same format and contain fitting parameters and optionally correlation information. The fit file contains the results of the fit. SPCAT is used for predicting line positions and strengths. It takes the var and unf files as input along with an int file that specifies limits for the calculation and contains the transition dipoles. The main output files for SPCAT use extensions out and cat, which are for general information and for the catalog output format, respectively. The cat file follows the format of the JPL catalog, but does not have experimental data flagged. Auxiliary output files with extensions egy and str can also be requested. The egy file can contain energies, derivatives with respect to the parameters, eigenvalues, and the undiagonalized Hamiltonian. The str file contains a list of all transition dipole moments. The file names for SPFIT and SPCAT can be specified as command line arguments in any order. The first file name is used as the base file name for any files not explicitly specified. If no command line arguments are specified the program will give a prompt for the file names.

Some of the details of the program are described in

Quantum numbers which are used in the files can be given in several formats:

The field QNFMT in the cat file can be regarded as having 3 sub-fields:
QNFMT = Q*100 + H*10 + NQN, in which NQN is the number of quanta per state, H is a binary code to indicate which of the last three quantum numbers are half integer quanta (1 indicates that F is half integer), and Q is the number in square brackets in the table below. The least significant bit of H refers to the F quantum number and is 1 if F is half integer.

Qmod5 gives the number of principal quantum numbers, i.e. without those designating spin quanta. Thus it is 0 for atoms, 1 for linear molecules in S states, 2 for symmetric rotors and linear molecules in states other than S, and 3 for asymmetric rotors.
Add 11 if several states are fit together. These can be vibrational or electronic states, different isotopomers etc.
Add 20 if two spins are coupled to Itot.
Add 40 if aggregate spin number n is used because the number of quantum numbers needed otherwise exceeds 6.

Examples for Q:

Linear Sigma States: [Q]
N v J F1 F2 F [12]
N J F1 F2 F3 F [01]
N v J F1 Itot F [32]
N J F1 F2 Itot F [21]
N v n F - - [52]
Symmetric Tops: [Q]
N K v J F1 F [13]
N K J F1 F2 F [02]
N K v J Itot F [33]
N K J F1 Itot F [22]
N K v n F - [53]
N K n F - - [42]
Asymmetric Tops: [Q]
N Ka Kc v J F [14]
N Ka Kc J F1 F [03]
N Ka Kc J Itot F [23]
N Ka Kc v n F [54]
N Ka Kc n F - [43]

In most cases, the spin coupling scheme is N + S = J, J + I1 = F1,…, Fn-1 + In = F, but an alternative that can be selected is the scheme …, In-1 + In = Itot, Fn-2 + Itot = F. The quantum number n is an aggregate spin quantum number which is used when the number of quantum numbers would otherwise be greater than 6. Half integer spins are rounded up to the next integer. The sign of K for symmetric top notation designates parity under rotation about the b axis. When the vibronic wave function is even with respect to reflection in the ac plane, then the sign of K will also indicate the parity with respect to inversion. The symmetric top notation can also be used equivalently for linear molecules with orbital or vibrational angular momentum (lambda not zero). If the number of vibrations is one, then v is not included. The sequence J, F1 … F can be replaced with F1, F2 … F if no electronic spin is present. The length of the quantum number list is determined by the number of spins requested. The factoring of the Hamiltonian is determined by the parameter set.

line 1-NLINE [12|3, freeform]: QN, FREQ, ERR, WT

QN = 12 integer field of quantum numbers. Interpreted in a multiple I3 format as the quantum numbers for the line (upper quanta first, followed immediately by lower quanta). Unused fields can be used for annotation. The entire field is printed in

FREQ = frequency in MHz or cm-1
ERR = experimental error.
WT = relative weight of line within a blend (normalized to unity by program). Not needed for unblended lines. If WT is not specifically given in the line file, 1/n will be used by the program if n is the number of blended lines at the same frequency and following successively.

The freeform input begins in column 37 and extends to the end of the line. See the notes at the end of the next section for more on the freeform input.

line 1: title


NPAR = maximum number of parameters
NLINE = maximum number of lines
NITR = maximum number of iterations
NXPAR = number of parameters to exclude from end of list when fitting special lines (with negative F quantum number)
THRESH = initial Marquardt-Levenburg parameter
ERRTST = maximum [(obs-calc)/error]
FRAC = fractional importance of variance
CAL = scaling for infrared line frequencies (only NPAR used by SPCAT)

Option information beginning on line 3: CHR, SPIND, NVIB, KNMIN, KNMAX, IXX, IAX, WTPL, WTMN, VSYM, EWT, DIAG

CHR: character to modify parameter names file (must be in first column) sping.nam , default is g. a is used for Watson A set, s is used for Watson S set. Other character replaces the g in the name 'sping'. Only used to label the .fit output file. (Ignored on all but first option line.) SPFIT looks for the nam files in the current directory and then in the path given by the SPECNAME environment variable. (i.e. put something like SET SPECNAME=C:\SPECTRA\ in AUTOEXEC.BAT for Windows or setenv SPECNAME /spectra/ for unix). The trailing path delimiter is required.

sign SPIND: If negative, use symmetric rotor quanta. If positive, use asymmetric rotor quanta (Sign ignored on all but first option line.)

mag SPIND = degeneracy of spins, first spin degeneracy in units digit, second in tens digit, etc. (If last digit is zero, spin degeneracies occupy two decimal digits and the zero is ignored.)

sign NVIB: positive means Ir representation (z = a, x = b, y = c), usually used for prolate rotors; negative means IIIl representation (z = c, x = b, y = a), usually used for oblate rotors. (Sign ignored on all but first option line.)

mag NVIB = number of states (e. g. vibronic; also possible: isotopomers etc.; counted from zero !) on the first option line, identity of the vibronic state on all but the first option line. (max. value = 99)

KNMIN,KNMAX = minimum and maximum K values. If both = 0, then linear molecule is selected.

IXX: binary flag for inclusion of interactions: 1 means no delta N, 2 means no delta J, 4 means no delta F1 ,etc. [default = 0 includes all interactions] (Ignored on all but first option line.)

sign IAX: If negative, use Itot basis in which the last two spins are summed to give > > Itot, which is then combined with the other spins to give F (Sign ignored on all but first option line.)

WTPL,WTMN = statistical weights for even and odd state
mag IAX = axis for statistical weight ( 1=a, 2=b, 3=c, add 3 if K-odd are excluded, add 6 if K-even are excluded)

VSYM: If positive, vibronic symmetry coded as decimal digits (odd digit means reverse WTPL with WTMN) example: 10 = ( v=0 even, v=1 odd) (Only works for the first nine states) (Value ignored on all but first option line.) If negative, signal that the next line is also an option line.

EWT = EWT0 + EWT1*100 = weight for states with 3-fold E symmetry. Ignore if EWT is negative (default) (WTPL and WTMN apply to A1 and A2 symmetry)

  For D3 symmetry (e.g. ND3), for bosons:

WTPL = (2I+1)(2I+3)(I+1)/3
WTMN = (2I+1)(2I–1)(I)/3
EWT0 = (2I+1)(I+1)(2I)/3
[For fermions WTPL and WTMN are reversed] for I=1/2, when WTMN=0, multiply EWT0 by 2 because only half the E states are calculated

For C3 symmetry (e.g. CH3F ):

WTPL = WTMN = (2I+1)(4I*I+4I+3)/3
EWT0 = (2I+1)(I+1)(4I)/3
  –1 for no diagonalization\\
  0 for energy ordering within Wang sub-blocks\\
  1 for full projection assignment\\
  2 for energy ordering within Wang sub-blocks which follows order of diagonal elements of Hamiltonian\\
  3 for energy ordering within vibration and spin sub-block set

Coding of the Parameters

where IDPAR is a parameter identifier, PAR is the parameter value,  ERRPAR is the parameter uncertainty, LABEL is a parameter label (10 characters are used) that is delimited by /.  If the sign of IDPAR is negative, SPFIT constrains the ratio of this parameter to the previous parameter to a fixed value during the fit.

PARAMETER identifiers (IDPAR) are coded in decimal digitform in the order

NFF, I2, I1, NS, TYP, KSQ, NSQ, V2, V1

for NVIB < 10 each element occupies one digit except TYP which occupies two digits, i.e.

for NVIB > 9: each element occupies one digit except TYP, V1, and V2 which occupy two digits, i.e.
  • NFF = Fourier flag (used for internal rotation) If NFF < 11, basic operator is multiplied by cos (NFF * 2p Kavgr / 3) else operator multiplied by sin ( (NFF-10) * 2p Kavgr / 3) where r is coded by the absoulte value of parameter ID=9100vv. See further discussion below.
  • I2,I1 = spin identifiers [I1 >= I2], I1=0 or I2=0 means N.
  • NS = power of  N· S where S is the first spin If NS > 4, subtract 5 and add SzNz operator
  • TYP = projection type
    • 0 = scalar
    • 1 = NaNa
    • 2 = NbNb
    • 3 = NcNc
    • 3+n = N+2n + N2n , n = 1 … 8 (L = 2n, DK = 2n)
    • 11+n = “x” symmetry, n = 1 … 8 (L = 2n + 1, DK = 2n)
    • 20+n = off-diagonal “a” symmetry, n = 0 … 19 (for prolate basis: L = n + 1, DK = 0, 2, 2, 4, 4, …)
    • 20 = Na
    • 21 = Nb Nc + Nc Nb
    • 40+n = off-diagonal “b” symmetry, n = 0 … 19 (L = n + 1, DK = 1, 1, 3, 3, …)
    • 40 = Nb
    • 41 = Na Nc + Nc Na
    • 60+n = off-diagonal “c” symmetry, n = 0 … 19 (for prolate basis: L = n + 1, DK = 1, 1, 3, 3, …)
    • 60 = Nc
    • 61 = Na Nb + Nb Na
    • 80+n = unique contribution for K' = K“ = n*10+KSQ
    • 90+2n = Euler series multiplying N+2n + N2n
    • 91+2n = constants for Euler and Fourier series
    • 91 = r for Fourier series if KSQ = 0, NSQ1 = 0, and V1=V2.  Only the absolute value is used for  r, and the value is used to designate a special symmetry.
  • KSQ = power of Nz2
  • NSQ = power of N*(N+1)
  • V1,V2 = vibrational identifier, [V1 >= V2] For NVIB < 10: V1 = V2 = 9 matches all V1 = V2. For NVIB > 9: V1 = V2 = 99 matches all V1 = V2.

line (n+1)-end [8F10.6]: ((V(i,j), j = i, … ,NPAR), i = 1, … ,NPAR)

V = Choleski decomposition of the correlation matrix, optional for file.par

Special lines to which NXPAR applies are lines in which the F quantum number is negative. In the quantum number assignment process in the program, the line is flagged and F is set to an appropriate value. When derivatives are accumulated, the last NXPAR derivatives are ignored, and the energies are corrected by subtracting the first order contribution of these parameters. If F < –1, the absolute value of F is used in the energy calculation. If F = –1, the F used is as close to the previous spin quantum number as angular momentum addition rules allow. The value selected will be shown in the fit file line listing in place of the –1.

If IDPAR is less than zero the magnitude is taken. In SPFIT, the parameter value will be constrained to be a constant ratio of the preceding parameter value. In this way linear combinations of parameters can be fit as a unit.

line 1: title

line 2 [freeform]: FLAGS, TAG, QROT, FBGN, FEND, STR0, STR1, FQLIM, TEMP

IRFLG = 1 if constants are in cm–1
IRFLG = 0 if constants are in MHz
OUTFLG = 0 for a short form of file.out (recommended)
OUTFLG = 1 for a long form of file.out
STRFLG > 0 to enable the output of file.str (recommended: = 0)
STRFLG = 2 to enable separate entries for each dipole component in file.str
EGYFLG > 0 to enable in file.egy the energy listing
EGYFLG = 2, 4 to enable in file.egy the derivative listing
EGYFLG = 3, 4 to enable in file.egy the eigenvector listing
EGYFLG > 4 to dump Hamiltonian with no diagonalization
TAG = catalog species tag (integer)
QROT = partition function for TEMP
FBGN = beginning integer F quantum (round up)
FEND = ending integer F quantum (round up)
STR0,STR1 = log strength cutoffs
FQLIM = frequency limit in GHz
TEMP = temperature for intensity calculation in degrees K (default is 300K)

line 3-end [freeform]: IDIP,DIPOLE

IDIP = dipole identifier (see below)
DIPOLE = dipole value
IDIP is coded in decimal digit form according to the format (for NVIB < 10):
(((TYP*10 + I1)*10 + V2)*10 + V1)*10 + SYM, or (for NVIB > 9):\\
(((TYP*10 + I1)*100 + V2)*100+ V1)*10 + SYM, with
TYP = dipole type
I1 = spin identifier [ I1 = 0 means N or null ]
V1,V2 = vibrational states [ V1 >= V2 ]
SYM = symmetry [0 = magnetic, 1 = a, 2 = b 3 = c]
0 0 magnetic dipole [ N, S, I ]
0 1 a dipole, fa if I1 = 0, else fa´ I
0 2 b dipole, fb if I1 = 0, else fb´ I
0 3 c dipole, fc if I1 = 0, else fc´ I
1 0 i (2fzNz – fxNx – fyNy)/2 or i (2fzIz – fx Ix – fy Iy)/2
1 1 i {fb, Nc}/2 +  i {fc, Nb}/2 or  i {fb, Ic}/2 +  i {fc, Ib}/2
1 2 i {fa, Nc}/2 +  i {fc, Na}/2 or  i {fa, Ic}/2 + i {fc, Ia}/2
1 3 i {fa, Nb}/2 +  i {fb, Na}/2 or  i {fa, Ib}/2 +  i {fb, Ia}/2
2 0 i (fx Nx – fyNy) or  i (fxIx – fyIy)
2 1-3same as TYP = 1
3 any{N2, TYP = 0}/2
4 any{Nz2 , TYP = 0}/2 
1-3[N2 , TYP = 0] / 2
6 0 L = 3, DK = 2
6 1 L = 3, DK = 2 if prolate basis
6 2,3L = 3, DK = 3 if prolate basis
7 anyTYP=0 * cos(I1*2p Kavg r / 3)
anyTYP=0 * i sin(I1*2p Kavg r / 3) or cos(20p Kavg r / 3)  if I1 = 0
any{N4, TYP = 0}/2
10 any[N2, [N2, TYP = 0]]/4
11 any[N2 , TYP = 2] / 2
12 anyi {Nz , TYP=2}/2

[F13.4, 2F8.4, I2, F10.4, I3, I7, I4, 12I2]: FREQ, ERR, LGINT, DR, ELO, GUP, TAG, QNFMT, QN

FREQ = Frequency of the line
ERR = Estimated or experimental error (999.9999 indicates error is larger)
LGINT = Base 10 logarithm of the integrated intensity in units of nm2 MHz
DR = Degrees of freedom in the rotational partition function (0 for atoms, 2 for linear molecules, and 3 for nonlinear molecules)

ELO = Lower state energy in cm–1
GUP = Upper state degeneracy
TAG = Species tag or molecular identifier. A negative value flags that the line frequency has been measured in the laboratory. The absolute value of TAG is then the species tag (as given in line 2 of above) and ERR is the reported experimental error.

QNFMT = Identifies the format of the quantum numbers given in the field QN.
QN(12) = Quantum numbers coded according to QNFMT. Upper state quanta start in character 1. Lower state quanta start in character 14. Unused quanta are blank, quanta whose magnitude is larger than 99 or smaller than –9 are shown with alphabetic characters or **. Quanta between –10 and –19 are shown as a0 through a9. Similarly, –20 is b0, etc., up to –259, which is shown as z9. Quanta between 100 and 109 are shown as A0 through A9. Similarly, 110 is B0, etc., up to 359, which is shown as Z9.

[F15.4, E15.6, I5, 1X, 24A, I5]: FREQ, DIPOLE, QNFMT, QN, ITEM

FREQ = Frequency of the line
DIPOLE = Reduced matrix element of the transition dipole
QNFMT = Identifies the format of the quantum numbers given in the field QN.
QN(12) = Quantum numbers coded according to QNFMT. Upper state quanta start in character 1. Lower state quanta start in character 14. Unused quanta are blank, quanta whose magnitude is larger than 99 or smaller than –9 are shown with alphabetic characters or **. Quanta between –10 and –19 are shown as a0 through a9. Similarly, –20 is b0, etc., up to –259, which is shown as z9. Quanta between 100 and 109 are shown as A0 through A9. Similarly, 110 is B0, etc., up to 359, which is shown as Z9.

ITEM = identifies number of dipole

energy output [2I5, 3F18.6, 6I3]: IBLK, INDX, EGY, PMIX, ERR, QN

IBLK = Internal Hamiltonian block number
INDX = Internal index Hamiltonian block
EGY = Energy in cm–1
ERR = Expected error of the energy in cm–1
PMIX = mixing coefficient
QN(6) = Quantum numbers for the state

Special Considerations for Linear Molecules

This program set will calculate a variety of interactions and transitions within a Hund's case(b) basis, including spin orbit interactions which change spin multiplicity.  The operator Na in the asymmetric rotor becomes lambda for the linear molecule. N is the sum of rotational and electronic orbital angular momenta. For linear molecules, it is convenient (but not essential) to think of the angular momentum along the bond as being purely electronic in nature. In the asymmetric rotor language of this program, the first-order spin orbit interaction takes the operator form of a vector dot product of a direction cosine with the spin vector.  It can have two distinct symmetries: S·fa connects states of the same lambda, while S·fb and S·fc conect states where lambda differs by one. For S·fb or S·fc , the Lb or Lc operator is implicitly included in the parameter. When the spin orbit operator connects different spin multiplicity, the reduced matrix value of <S||S||S'> is set to unity.

Use of the symmetries in this program takes some care, particularly for linear molecules where it may not be immediately obvious whether to use the b or the c axis to designate perpendicular operators. For consistency with the parity designation for the symmetric top quanta, the vibronic wave function should be chosen so that it is symmetric with respect to the ab plane. Then the b axis can be used for the inversion defining axis (i.e. IAX = 2 in the option lines of the .par and .var files can be used to define selection rules under inversion).  With this choice, the symmetry of rotation lines in the D2 group are:

A even N for S and all N for all other even l (even parity l doublet)
B(a)odd N for S and all N for all other even l (odd parity l doublet)
B(b)all N for all odd l (even parity l doublet)
all N for all odd l (odd parity l doublet)

For S+ states, the parity is odd for odd N, while for S- states the parity is odd for even N. This means that the Hamiltonian can couple S+ with S via an operator of  B(a) symmetry or B© symmetry. An example is an operator like 10200001, which is the S·fa spin orbit interaction operator between state v = 0 and v = 1.  For normal coupling not involving S- states (or for coupling between S- states) the operators should have A or B(b) symmetry.  Similarly, electric dipole transitions with  Dl even should have B(a) symmetry, and transitions with  Dl odd should have B© symmetry so that the parity changes sign with the transition. Magnetic dipole transitions should follow the Hamiltonian symmetry.

The g, u symmetry for an electronic state is for the parity of the wave-function under inversion of the space fixed axes. The nuclear exchange symmetry, on the other hand, affects only the statistical weights and does not have any further impact on the factoring of the Hamiltonian. In general, if IAX = 2, WTPL will be the nuclear spin weight for the A and  B(b) states, while WTMN will be the weight for the other two symmetries. For S+g S-u and g states with other l, WTPL is the weight for even permutations, while for S-g S+u and u states with other l, WTPL is the weight for odd permutations. For example, in oxygen, S+g and Dg have WTPL = 1 and WTMN = 0, while S-g and Du have WTPL = 0 and WTNM = 1. The dipole types given above provide for both allowed and forbidden transitions. For transitions that owe their intensity to spin orbit interactions, the effective transition moment with be the product of the interaction and a transition moment to some intermediate state. Examples are a S-gD electric dipole code of 21vv'0 and a magnetic dipole code of 11vv'1. Electric dipole transitions between S+ and S- will use 11vv'0, while magnetic transitions will use 1vv'1. For transitions between S+ and S+ the roles of these operators are reversed. Note that for S S transitions, 11vv'0 has selection rules of DN = –2, 0, +2, while 1vv'1 has selection rules of DN = –1, +1.

The correlation between parity and e,f designations follow the recommendations of J. M. Brown et al., J. Mol. Spectrosc. 55, 500 (1975).

 odd spin multiplicity even spin multiplicity
ep = (–1)J–1/2p = (–1)J+1
fp = (–1)J+1/2p = (–1)

An example of .var file for oxygen like molecule:

mock oxygen states
-3 3 0 0 0 2 0 1 -1 /default for v=0 triplet Sigma-(g)
 1 1 2 2 0 2 1 0 -1 /v=1 is singlet Delta(g)
 1 2 0 0 0 2 1 0  0 /v=2 is singlet Sigma-(g)
       11  1e+7   0 /term value for v=1
       22  2e+7   0 /term value for v=2
110010000  1000.0 0 /spin-spin interaction for v=0
      199 10000.0 0 /B for all v

An example of .int file for oxygen like molecule:

mock oxygen rotational and electronic transitions
101 99000 200. 0 6 -80. -80. 99999999.
 1000 1. /magnetic moment v=0
 1110 1. /magnetic moment v=1
11011 1. /sigma - delta magnetic moment
 1021 1. /sigma - sigma magnetic moment

The quantum number correlations between Hund's case (b) and case (a) can be a bit confusing at first. For example in a doublet P state N=J-1/2 always correlates with W =3/2 and N=J+1/2 always correlates with W =1/2 on the basis of projection. For A < 0, e.g. OH, the projection-based correlation follows the energy ordering.  For A>0, the lower energy state is N=J+1/2 and W =3/2 as long as J+1/2 < sqrt(A/2B). Above this J,  N = J+1/2 and W =1/2 (based on projection) is higher in energy than and N=J-1/2 and W = 3/2.  Therefore quantum number assignments based on projections lead to different quanta than those based on energy.  For a triplet S state, N=J+1 correlates with S =0 based on projection, N=J correlates with an odd combination of S =1 and S =-1, and N=J-1 correlates with an even combination of S =1 and S =-1.

Since q multiplies the same operator as (B-C) / 2, it is possible to use the sign of q to determine whether there are more electrons in the ab plane (q > 0) or whether there are more electrons in the ac plane (q < 0).

Explicit approximate relationships for the parameters are:

100100vv' A
100101vv' 2 AJ
1vv' B
100400vv' –p/2
400vv' q/2
200100vv' a
1200000vv'b + c/3
1100100vv'4 l S (2S–1)

The extra factors of S in the definition of the spin-spin interaction parameter l,  i. e. a spin-spin interaction  2 l ( Sz2 – S 2 /  3), is a correction for the special normalization assumed for eQq.

Special Considerations for 'l'-doubled States

The  l-doubled states must be specified in adjacent pairs. The EWT1 = 1 states are those with K l > 0, and EWT1 = 2 states are those with K  l ⇐ 0. The sign of K represents the parity, as in the non l-doubled states. Operators should be only specified between vibrational states with EWT1 = (0,0), (0,1), (1,0), (1,1), (1,2), and (2,1). Operators between vibrational states with EWT1 = (0,2), (2,0), and (2,2) are ignored. Operators connecting vibrational states with different 'l' obey the selection rule that 'K-l' can only change by multiples of 3. Operators diagonal in l have no 'K-l' selection rules. If EWT1 = 1 for both states and if the parameter would normally be implicitly imaginary (i.e. operators odd-order in angular momentum for the Hamiltonian, or even-order for the dipole moment), then the parameter is assumed to be real and the rotational operator is multiplied by the sign of 'lz'. DIAG = 0 is not recommended on the first option line in the par file, since the first-order energy is not likely to ordered with K.

The K quantum numbers for  l-doubled states are designated specially when asymmetric rotor quanta are used so that the lower K doublet is associated with the EWT1 = 1 state and the upper K doublet and K = 0 states are assiciated with EWT1 = 2.  In this way the degenerate states have the same quantum numbers.

Example of parameter types for asymmetric rotors (assuming < 10 vibronic states):

11 energy for v = 1
01 first order Fermi (F0) interaction between v = 0 and v = 1
10000 A00
10099 A (for all vibrational states)
20099 B (dito)
30099 C (dito)
40099 0.25*(B – C)  (if prolate basis selected)
299 –DJ
1199 –DJK
2000 –DK for v = 0
600001 i Nc interaction between v = 0 and v = 1
20000099 N·I for second spin
120010099Sa Ia
2200100991.5*czz for second spin
2200400990.25*(cxx–cyy) for second spin

Quadrupole and magnetic spin-spin interactions are defined to be traceless (i.e. cxx + cyy + czz = 0 or Txx + Tyy + Tzz = 0). Therefore, all three components cannot be fit simultaneously. The most efficient choice of parameters is shown in the table below. In cases where the user wants an alternative, it is possible to use constrained parameters. For example, to fit caa and ccc (with no multipliers):

 220010099   100.
–220020099  –100.
 220030099    50.
–220020099   –50.

specifies caa = 100, ccc = 50, and cbb = –150.

Installation Instructions

The Makefile shows how the various files are to be linked. The programs have been tested with Microsoft Visual C++ compiler and the gnu gcc compiler (which is freely available for unix and windows platforms). The programs should work without modification with any ANSI compliant 'c' compiler on any size computer. All arrays are allocated dynamically, and addressing or memory limits will place a practical limit on the size of matrices that can be used. For 16-bit computers the address limit is equivalent to a 90 X 90 double precision matrix, while for a 32-bit computer the adressing limit is 23170 X 23170. The program has been used on a 64-bit DEC alpha computer where the adressing limit is correspondingly larger. For both 32-bit and 64-bit computers, a more significant practical limit is usually given by the amount of memory or the amount of disk space available for virtual memory.

The identity of the files are:

  • calfit.c, calcat.c, and calmrg.c are the main programs.
  • subfit.c is supplementary to calfit.
  • ulib.c, blas.c, and cnjj.c are generic libraries.
  • calpgm.h, cnjj.h, and blas.h are required header files.
  • slibgcc.c contains system dependent fuctions.
  • spinv.c contains functions for spins and multiple vibrations. The executables using this library and calfit or calcat are called SPFIT and SPCAT respectively.
  • dpi.c is contains functions for doublet pi with a nuclear spin. The executables using this library and calfit or calcat are called DPFIT and DPCAT respectively.
  • *.nam are parameter name files for function getlbl in subfit. They are only used to label the output from calfit. The first default directory is the current directory. The second default directory is given in an environment variable named SPECNAME. Under Unix put a line like 'setenv SPECNAME /home/myname/' in one of your initialization files (e.g. .cshrc).
  • blas.c contains needed LINPACK double precision Basic Linear Algebra Subroutines (these may be available on some systems in a machine coded and/or vector processor form).
  • Makefile is the make file for the gcc compilation.
  • spinv.html is the specific documentation for the SPFIT and SPCAT and dpi.html is the specific documentation for the DPFIT and DPCAT.
  • general.txt
  • Last modified: 2023/11/07 12:40
  • by mueller