The Quantum Mechanics in Chemistry (QMIC) programs
whose source and executable versions are provided
here are designed to be pedagogical in nature;
therefore they are not designed with optimization
in mind, and could certainly be improved by
interested students or instructors. Moreover,
they are designed to run in very limited
environments (e.g. memory, disk, and CPU power).
With the exception of "integral.f" all are
written in single precision and use minimal memory
(less than 640K) in most instances. The programs
are designed for simple systems e.g., only a few
atoms (usually less than 8) and small basis sets.
They do not use group symmetry, and they use
simple Slater determinants rather than spin-
adapted configuration state functions to perform
the CI. The programs were all originally developed
and run on an IBM RISC System 6000 using AIX v3.2
and Fortran compilers xlf v2 and v3. All routines
compile untouched with gnu compilers and utilities
for workstations and PCs. The gnu utilities
were obtained from the ftp server: ftp.coast.net
in directory: simtel/vendors/gnu. Except for very
minor modifications all run untouched when
compiled using Language Systems Fortran for the
Macintosh. The intrinsics "and", "xor", and
"rshift" have to be replace by their counterparts
"iand", "ixor", and "ishft". These intrinsic
functions are only used in program hamilton.f
and their replacement functions are detailed and
commented in the hamilton program source. No
floating point unit has been turned on in the
compilation. Because of this, systems with lots
of functions on an old Mac SE can be tiring
(the N^5 processes like the transformation can
take as long as a half hour on these systems).
Needless to say all of these run in less than a
minute on the fancier workstations. Special
thanks goes to Martin Feyereisen (Cray Research)
for supplying us with very compact subroutines
which evaluate one- and two-electron integrals in
a very simple and straight forward manner.
Brief descriptions of each of the programs in
QMIC follow:
********** Current QMIC program limits **********
Maximum number of atoms: 8
Maximum number of orbitals: 26
Maximum number of shells: 20
Maximum number of primitives per shell: 7
Maximum orbital angular momentum: 1
Maximum number of active orbitals in the CI: 15
Maximum number of determinants: 350
Maximum matrix size (row or column): 350
*************************************************
**************** Program INTEGRAL ****************
This program is designed to calculate one- and
two-electron AO integrals and to write them out to
disk in canonical order (in Dirac <12|12>
convention). It is designed to handle only S and P
orbitals.
integral -- memory usage in bytes: 542776
**************************************************
**************** Program MOCOEFS *****************
This program is designed to read in (from the
keyboard) the LCAO-MO coefficient matrix and write
it out to disk. Alternatively, you can choose to
have a unit matrix (as your initial guess) put out
to disk.
mocoefs -- memory usage in bytes: 2744
**************************************************
**************** Program FNCT_MAT ***************
This program is designed to read in a real square
matrix, perform a function on it, and return this
new array. Possible functions, using X as the
input matrix, are:
(1) X^(-1/2), NOTE: X must be real symmetric,
and positive definite.
(2) X^(+1/2), NOTE: X must be real symmetric,
and positive definite.
(3) X^(-1), NOTE: X must be real symmetric,
and have non-zero eigenvalues.
(4) a power series expansion of a matrix
to find the transformation matrix:
U = exp(X) = 1 + X + X**2/2! + X**3/3! +
... + X**N/N! + ...
fnct_mat -- memory usage in bytes: 1960040
**************************************************
****************** Program FOCK ******************
This program is designed to read in the LCAO-MO
coefficient matrix, the one- and two-electron AO
integrals and to form a CLOSED SHELL Fock matrix
(i.e., a Fock matrix for species with all doubly
occupied orbitals).
fock -- memory usage in bytes: 255256
**************************************************
***************** Program UTMATU *****************
This program is designed to read in a real matrix,
A, a real transformation matrix, B, perform the
transformation:
X = B(transpose) * A * B,
and output the result.
utmatu -- memory usage in bytes: 1960040
**************************************************
****************** Program DIAG ******************
This program is designed to read in a real
symmetric matrix (but as a square matrix on
disk), diagonalize it, and return all
eigenvalues and corresponding eigenvectors.
diag -- memory usage in bytes: 738540
**************************************************
***************** Program MATXMAT ****************
This program is designed to read in two real
matrices; A and B, and to multiply them together:
AB = A * B,
and output the result.
matxmat -- memory usage in bytes: 1470040
**************************************************
**************** Program FENERGY *****************
This program is designed to read in the LCAO-MO
coefficient matrix, the one- and two-electron AO
integrals (in Dirac <12|12> convention), and the
Fock orbital energies. Upon transformation of the
one- and two-electron integrals from the AO to the
MO basis, the closed shell Hartree - Fock energy
is calculated in two ways. First, the energy is
calculated with the MO integrals,
Sum(k) 2* + Sum(k,l) (2* -
) + ZuZv/Ruv.
Secondly, the energy is calculated with the Fock
orbital energies and one electron energies in the
MO basis,
Sum(k) (eps(k) + ) + ZuZv/Ruv.
fenergy -- memory usage in bytes: 1905060
**************************************************
****************** Program TRANS *****************
This program is designed to read in the LCAO-MO
coefficient matrix, the one- and two-electron AO
integrals (in Dirac <12|12> convention), and to
transform the integrals from the AO to the MO
basis, and write these MO integrals to a file.
trans -- memory usage in bytes: 1905060
**************************************************
****************** Program SCF *******************
This program is designed to read in the LCAO-MO
coefficient matrix (or generate one), the one-
and two-electron AO integrals and form a CLOSED
SHELL Fock matrix (i.e., a Fock matrix for species
with all doubly occupied orbitals). It then solves
the Fock equations; iterating until convergence to
six significant figures in the energy expression.
A modified damping algorithm is used to insure
convergence.
scf -- memory usage in bytes: 259780
**************************************************
****************** Program MP2 *******************
This program is designed to read in the
transformed one- and two-electron integrals and
the Fock orbital energies after which it will
compute the second order Moller Plesset
perturbation theory energy (MP2).
mp2 -- memory usage in bytes: 250056
**************************************************
**************** Program HAMILTON ****************
This program is designed to generate or read in a
list of determinants. You can generate
determinants for a CAS (Complete Active Space) of
orbitals or you can input your own list of
determinants. Next, if you wish, you may read in
the the one- and two-electron MO integrals and
form a Hamiltonian matrix over the determinants.
Finally, if you wish, you may diagonalize the
Hamiltonian matrix constructed over the
determinants generated.
hamilton -- memory usage in bytes: 988784
**************************************************
**************** Program RW_INTS *****************
This program is designed to read the one- and two-
electron AO integrals (in Dirac <12|12>
convention) from user input and put them out to
disk in canonical order.
rw_ints -- no memory required.
**************************************************
****************** Program QMLIB *****************
This is a library of subroutines and functions
which are used by the QMIC programs.
qmlib -- no memory required.
**************************************************
************** "limits.h" include file ***********
This is an include file containing ALL the
parameters which detemine memory requirments
for the QMIC programs.
limits -- no memory required.
**************************************************
********************** Makefile ******************
There are a few versions of Makefiles available:
a generic Makefile (Makefile.gnu) which works with
Gnu make on a unix box, a Makefile (Makefile.486)
which was used to make the programs on a 486 PC
using other Gnu utilities like "f2c", "gcc", etc.
and a Makefile (Makefile.mac) which was used on
the Macintosh.
Makefile -- no memory required.
**************************************************
******************* BasisLib *********************
This is a library file which contains gaussian
atomic orbital basis sets for Hydrogen - Neon.
The basis sets available to choose from are:
1.) STO3G by Hehre, Stewart, and Pople
JCP, 51, 2657 (1969)
2.) 3-21G by Brinkley, Pople, and Hehre
JACS, 102, 939 (1980)
3.) [3s2p] by Dunning and Hay in:
Modern Theoretical Chemistry Vol 3.
Henry F. Schaefer III, Editor
1977, Plenum Press, NY
BasisLib -- no memory required.
**************************************************
Copyright (C) 1992 Jeff Nichols and Jack Simons