CONVENTIONS FOR MOLECULE-SPECIFIC SUBROUTINES: CALFIT and CALCAT There are a number of molecule specific subroutines. The generic programs CALFIT and CALCAT convert quantum numbers into an internal numbering scheme for each independent block of the Hamiltonian and for each index within a block. It is assumed that there is a principal quantum number, F, and that there are a maximum number of blocks per F, called NBLKPF. It is further assumed that the blocks may be subdivided into asymmtric rotor Wang symmetry sub-blocks. The molecule specific subroutine calling conventions and functions are: SETOPT(CARD,IQNFMT,ITD,NAMFIL) SETBLK(LU,IDPAR,NBLKPF,NDM) GETQN(IBLK,INDX,IQN,NDGN,NCOD) GETQN(IBLK, 0 ,IQN,NSIZ,NCOD) HAMX(IBLK,NSIZ,IDPAR,PAR,EGY,T,DEDP,IFDUMP) INTENS(IBLK,ISIZ,JBLK,JSIZ,IDIPX,DIPX,S,NDM) SETINT(IFDIAG,NSAV,IDIP) SETOPT(CARD,IQNFMT,ITD,NAMFIL) sets up options for the energy calculation and does general initialization. CARD is a character*80 string which is the option card. SETOPT sets IQNFMT to the JPL catalog quantum number format, ITD to 2 or 3 for the number of rotational degrees of freedom. In addition, NAMFIL is set to a file name where names of parameters can be found in a (I10,A10) format. SETBLK(LU,IDPAR,NBLKPF,NDM) sets up the block structure based on the options and on the parameters. On input IDPAR is a long integer vector in which IDPAR(0) contains the number of parameters and the succeeding elements contain the parameter id codes. The parameter codes may be signed but only the magintude should be used. On input NBLKPF is set to the maximum F value, or zero. SETBLK sets NBLKPF to the maximum number of blocks per F, and prints out information about the options to file number LU. On input, NDM is preset to the maximum dimension possible for the Hamiltonian. SETBLK can revise this downward if there are restrictions due to dimensions in local storage within HAMX, INTENS, etc. SETBLK returns an integer which is the size of the vibrational field. GETQN(IBLK,INDX,IQN,NDGN,NCOD) has two forms of its call. In the first, the input parameters are the block number, IBLK, and its index, INDX. Up to 6 quantum numbers are returned as integers in the vector IQN, and the degeneracy of the state is returned in NDGN. In addition, NCOD may be set to the size of the Wang sub-block in which INDX is located. If an oblate basis is used, then the size is negated. NCOD is used to speed maping of quantum numbers into blocks and indices. NCOD=1 should be used otherwise. In the second form of the call, INDX is zero, and only the total size of the block IBLK is returned. HAMX(IBLK,NSIZ,IDPAR,PAR,EGY,T,DEDP,IFDUMP) sets up the Hamiltonian and diagonalizes. IBLK and NSIZ are preset to the block number and dimension of the Hamiltonian. IDPAR is a long integer vector in which IDPAR(0) contains the number of parameters and the succeeding elements contain the parameter id codes. Only the magnitude of the parameter id should have significance. PAR contains the parameters. On exit EGY should contain the energies, T the eigenvectors, and DEDP should contain the derivative of energy with respect to the parameters. All should have a column dimension of NSIZ. If integer IDUMP is not zero, No diagonalization should be done, T should contain the Hamiltonian in its lower triangle, and E should contain the diagonal elements of T. INTENS(IBLK,ISIZ,JBLK,JSIZ,IDIPX,DIPX,S,NDM) is a integer function, by which calculation of a dipole matrix is requested. IBLK is the block number for the column indices, and JBLK is the correspinding quantity for the row indices. ISIZ is the block size for the column indices, and JSIZ is the correspinding quantity for the row indices. IDIPX is an integer vector in which IDIP(0) contains the number of dipoles and the succeeding elements contain the dipole id codes. DIPX contains the corresponding dipoles. S should contain the reduced matrix elements of the transition dipole moments in the original basis. NDM is the dimension of S. Similarity transformation is done in the calling program if IFDIAG is not 0 ( see below ). On exit INTENS = 0 if no matrix elements were calculated, otherwise INTENS should be set to the statistical weight. SETINT(IFDIAG,NSAV,IDIP) allows initialization to be performed related to intensities. IFDIAG is a flag indicating that eigenvectors will be needed to transform the dipole matrix ( if not 0). NSAV indicates how many blocks must be saved to calculate intensities. IDIP is an integer vector in which IDIP(0) contains the number of dipoles and the succeeding elements contain the dipole id codes.