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