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