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.