program qmic
implicit real(a-h,o-z)
include "limits.h"
write(*,*)' '
write(*,*)' ***************** QMIC program ******************* '
write(*,*)' '
write(*,*)' This module can generate the following bits of '
write(*,*)' infomation: '
write(*,*)' '
write(*,*)' (1) Describe QMIC program: available modules, '
write(*,*)' current limits, and memory usage. '
write(*,*)' (2) Tabulate and show current program limitations '
write(*,*)' and memory usage only. '
write(*,*)' (3) Generate up-to-date README file (ASCII file '
write(*,*)' of (1) above) - pipe standard out to README. '
write(*,*)' '
write(*,*)' Which would you like <1, 2, or 3>? '
read(*,*)iwant
if(iwant.ne.2)then
write(*,*)' The Quantum Mechanics in Chemistry (QMIC) programs '
write(*,*)' whose source and executable versions are provided '
write(*,*)' here are designed to be pedagogical in nature; '
write(*,*)' therefore they are not designed with optimization '
write(*,*)' in mind, and could certainly be improved by '
write(*,*)' interested students or instructors. Moreover, '
write(*,*)' they are designed to run in very limited '
write(*,*)' environments (e.g. memory, disk, and CPU power). '
write(*,*)' With the exception of "integral.f" all are '
write(*,*)' written in single precision and use minimal memory '
write(*,*)' (less than 640K) in most instances. The programs '
write(*,*)' are designed for simple systems e.g., only a few '
write(*,*)' atoms (usually less than 8) and small basis sets.'
write(*,*)' They do not use group symmetry, and they use '
write(*,*)' simple Slater determinants rather than spin- '
write(*,*)' adapted configuration state functions to perform '
write(*,*)' the CI. The programs were all originally developed '
write(*,*)' and run on an IBM RISC System 6000 using AIX v3.2 '
write(*,*)' and Fortran compilers xlf v2 and v3. All routines '
write(*,*)' compile untouched with gnu compilers and utilities '
write(*,*)' for workstations and PCs. The gnu utilities '
if(iwant.eq.1)call goon
write(*,*)' were obtained from the ftp server: ftp.coast.net '
write(*,*)' in directory: simtel/vendors/gnu. Except for very '
write(*,*)' minor modifications all run untouched when '
write(*,*)' compiled using Language Systems Fortran for the '
write(*,*)' Macintosh. The intrinsics "and", "xor", and '
write(*,*)' "rshift" have to be replace by their counterparts '
write(*,*)' "iand", "ixor", and "ishft". These intrinsic '
write(*,*)' functions are only used in program hamilton.f '
write(*,*)' and their replacement functions are detailed and '
write(*,*)' commented in the hamilton program source. No '
write(*,*)' floating point unit has been turned on in the '
write(*,*)' compilation. Because of this, systems with lots '
write(*,*)' of functions on an old Mac SE can be tiring '
write(*,*)' (the N^5 processes like the transformation can '
write(*,*)' take as long as a half hour on these systems). '
write(*,*)' Needless to say all of these run in less than a '
write(*,*)' minute on the fancier workstations. Special '
write(*,*)' thanks goes to Martin Feyereisen (Cray Research) '
write(*,*)' for supplying us with very compact subroutines '
write(*,*)' which evaluate one- and two-electron integrals in '
write(*,*)' a very simple and straight forward manner. '
write(*,*)' Brief descriptions of each of the programs in '
write(*,*)' QMIC follow: '
if(iwant.eq.1)call goon
endif
call shwlim
if(iwant.eq.1)call goon
c
c integral.f
c
itotal = (nht+1*((nht+1)*(nht+2))/2*3) +
&nsh*nprim*2 + nsh*nprim*2 +
&nsh + nsh + 3*nsh*2 +
&4 + 4*2 + 3*4*2 + ntlp1**4*2 +
&nsh + ntlp1**4*2 +
&natoms*2 + 3*natoms*2 +
&nprim*nprim*2 +
&nprim*2 + nprim*2 +
&mxo2*2 + mxo2*2 +
&mxo2*2 + mxo2*2 +
&mxo4*2 +
&natoms + natoms +
& 38*2 + 3*2 + 3*3*(nht+1)*(nht+1)*(nht*2+1)*2 +3*5*5*5*2
if(iwant.ne.2)call modinfo('integral ')
call shwmem('integral ',itotal)
if(iwant.eq.1)call goon
c
c mocoefs.f
c
itotal = maxorb**2 + 10
if(iwant.ne.2)call modinfo('mocoefs ')
call shwmem('mocoefs ',itotal)
if(iwant.eq.1)call goon
c
c fnct_mat.f
c
itotal = 4*mmax**2 + 10
if(iwant.ne.2)call modinfo('fnct_mat ')
call shwmem('fnct_mat ',itotal)
if(iwant.eq.1)call goon
c
c fock.f
c
itotal = 3*mxosq + mxo4 + 10
if(iwant.ne.2)call modinfo('fock ')
call shwmem('fock ',itotal)
if(iwant.eq.1)call goon
c
c utmatu.f
c
itotal = 4*maxrow*maxcol + 10
if(iwant.ne.2)call modinfo('utmatu ')
call shwmem('utmatu ',itotal)
if(iwant.eq.1)call goon
c
c diag.f
c
itotal = mmax*mmax + mmax*(mmax+1)/2 + 2*mmax + 10
if(iwant.ne.2)call modinfo('diag ')
call shwmem('diag ',itotal)
if(iwant.eq.1)call goon
c
c matxmat.f
c
itotal = 3*maxrow*maxcol + 10
if(iwant.ne.2)call modinfo('matxmat ')
call shwmem('matxmat ',itotal)
if(iwant.eq.1)call goon
c
c fenergy.f
c
itotal = 2*mxosq + mxo2 + 2*mxosq*mxo2 + 10
if(iwant.ne.2)call modinfo('fenergy ')
call shwmem('fenergy ',itotal)
if(iwant.eq.1)call goon
c
c trans.f
c
itotal = 2*mxosq + mxo2 + 2*mxosq*mxo2 + 10
if(iwant.ne.2)call modinfo('trans ')
call shwmem('trans ',itotal)
if(iwant.eq.1)call goon
c
c scf.f
c
itotal = 4*mxosq + mxo2 + 4*maxorb + mxo4 + 10
if(iwant.ne.2)call modinfo('scf ')
call shwmem('scf ',itotal)
if(iwant.eq.1)call goon
c
c mp2.f
c
itotal = 2*mxo2 + mxo4 + maxorb + 10
if(iwant.ne.2)call modinfo('mp2 ')
call shwmem('mp2 ',itotal)
if(iwant.eq.1)call goon
c
c hamilton.f
c
itotal = mxo2 + mxo4 + mxdet2 + 3*maxdet + maxdet**2 + 2*maxorb
& + nbits + 10
if(iwant.ne.2)call modinfo('hamilton ')
call shwmem('hamilton ',itotal)
if(iwant.eq.1)call goon
c
c rw_ints.f
c
itotal=0
if(iwant.ne.2)call modinfo('rw_ints ')
call shwmem('rw_ints ',itotal)
if(iwant.eq.1)call goon
c
c qmlib.f
c
itotal=0
if(iwant.ne.2)call modinfo('qmlib ')
call shwmem('qmlib ',itotal)
if(iwant.eq.1)call goon
c
c limits.h
c
itotal=0
if(iwant.ne.2)call modinfo('limits ')
call shwmem('limits ',itotal)
if(iwant.eq.1)call goon
c
c Makefile
c
itotal=0
if(iwant.ne.2)call modinfo('Makefile ')
call shwmem('Makefile ',itotal)
if(iwant.eq.1)call goon
c
c BasisLib
c
itotal=0
if(iwant.ne.2)call modinfo('BasisLib ')
call shwmem('BasisLib ',itotal)
if(iwant.eq.1)call goon
call qmexit
stop
end