Dear Netters,
Some time ago I wrote two short FORTRAN programs: RANKZ and RANKFG. They
can serve as handy tools for dealing with the normal coordinate analysis (NCA)
using the GFmatrix Wilson method. To my knowledge, NCA is most commonly
done by running wellknown 1963 Schachtschneider & Mortimer programs
(or their modifications). The basic idea is still the same:
1) Generate inverse of the kinetic energy matrix G
2) Generate the force constant matrix F_ij = sum_k (Z_ijk*f_k)
(where f_k denotes the set of independent force constants,
Z_ijk is the socalled Zmatrix which combines f_k 's to give
Fmatrix)
[NOTE:  please, do not confuse the NCA Zmatrix with the "ab initio"
Zmatrix (providing molecular geometry in internal coordinates) !!!]
3) Symmetrize matrices G and F (via Z)
4) Solve GF secular equation to obtain frequencies and normal eigenvectors.
Generating good input for large molecules is still an art rather than routine,
especially for beginners (like me). It is not easy to define sufficiently good
set of internal coordinates and independent force constants. Moreover,
globally independent force constants may become dependent within one symmetry
block (after symmetrization of G and Z matrices). RANKZ and RANKFG programs
test how good is the NCA input.
RANKZ calculates rank of the combined Zmatrix (one or several combined
symmetry blocks or unsymmetrized) using Gauss elimination. The input file(s)
(with extension .ZMAT  though it may be changed if needed)
contain(s) the nonzero elements of Zmatrix in format (3I3,F9.6). The input
is terminated by a sequence 1 0 0 0.000000. User can combine several blocks
of symmetrized Zmatrix, each in separate '*.ZMAT' file, by answering 'N' when
program asks 'END OF DATA ?' . The output file (extension '*.RAOUT')
produced by the program contains a list of offending force constants which are
either dependent or missing.
RANKFG uses singular value decomposition to calculate the rank of the real
symmetric matrix. It can be therefore used to test either G or F matrices.
The rank of these matrices tells the number of frequencies from NCA
calculations which will result in reasonable values within each of the symmetry
blocks (this number depends on the redundancy of internal coordinates). The
number can be then compared with the grouptheoretical value.
To calculate the rank of the Gmatrix (or its symmetry block) the user should
input '0' as a 'number of force constants'. The input file in this case should
have an extension '*.GMAT' and should contain nonzero elements of Gmatrix in
the format (2I3,F12.6). The terminating sequence which markes the end of the
list is 1 0 0.000000. The output produced by the program consists of the
rank and the singular values of Gmatrix (file *.RAOUTG).
To calculate rank of Fmatrix (or its symmetry block) user should input: the
actual number of force constants, specify corresponding Zmatrix input file
(*.ZMAT), and specify the file containing force constants (extension *.FI).
The Fmatrix is then calculated by the program. The format of Zmatrix file is
the same as that of RANKZ input file. The force constant file *.FI has a free
input format. In the output program gives the rank of the Fmatrix and its
singular values (file *.RAOUTF).
Please, report bugs to chem86@jetson.uh.edu (Robert Fraczkiewicz)

The programs and examples are available from Computational Chemistry List
archives on www.ccl.net in directory
pub/chemistry/software/normal_coor_anal.
The files are:
This file: readme
Source code of the RANKZ program: rankz.f
Source code of the RANKFG program: rankfg.f
Examples of input files for some 60atom molecule:
(One symmetry block A2G, dimension=20, number of force constants=99)
Zmatrix input file : a2g.zmat
Gmatrix input file : a2g.gmat
Force constant file : a2g.fi
Examples of output files:
RANKZ output : a2g.raout
RANKFG outputs : a2g.raoutg and a2g.raoutf
Robert Fraczkiewicz
Department of Chemistry
University of Houston
CHEM86@jetson.uh.edu
