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 GF-matrix Wilson method. To my knowledge, NCA is most commonly
done by running well-known 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 so-called Z-matrix which combines f_k 's to give
[NOTE: - please, do not confuse the NCA Z-matrix with the "ab initio"
Z-matrix (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 Z-matrix (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 non-zero elements of Z-matrix in format (3I3,F9.6). The input
is terminated by a sequence -1 0 0 0.000000. User can combine several blocks
of symmetrized Z-matrix, 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 group-theoretical value.
To calculate the rank of the G-matrix (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 non-zero elements of G-matrix 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 G-matrix (file *.RAOUTG).
To calculate rank of F-matrix (or its symmetry block) user should input: the
actual number of force constants, specify corresponding Z-matrix input file
(*.ZMAT), and specify the file containing force constants (extension *.FI).
The F-matrix is then calculated by the program. The format of Z-matrix 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 F-matrix and its
singular values (file *.RAOUTF).
Please, report bugs to email@example.com (Robert Fraczkiewicz)
The programs and examples are available from Computational Chemistry List
archives on www.ccl.net in directory
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 60-atom molecule:
(One symmetry block A2G, dimension=20, number of force constants=99)
Z-matrix input file : a2g.zmat
G-matrix input file : a2g.gmat
Force constant file : a2g.fi
Examples of output files:
RANKZ output : a2g.raout
RANKFG outputs : a2g.raoutg and a2g.raoutf
Department of Chemistry
University of Houston