program boltzmann parameter (np0=1000) character*80 fn,st,fb(np0) logical*4 lex dimension e(np0),a(10) c write(6,*)'Vibrations from ensemble of gaussian outputs' write(6,*)'PES.TXT ... list of files' inquire(file='PES.TXT',exist=lex) if(.not.lex)then write(6,*)'PES.TXT does not exist' stop endif write(6,*)' Temperature (K):' read(5,*)t rt=8.314*t/4184.0 n=0 emin=999999.9 imin=0 open(45,file='PES.TXT') 1 read(45,4500,end=999,err=999)fn 4500 format(a80) n=n+1 if(n.gt.np0)then write(6,*)'too many points' stop endif fb(n)=fn c open(46,file=fn) 2 read(46,4500,end=888,err=888)st if(st(1:10).eq.' SCF Done:')then l0=len(st) do 24 n1=1,l0 24 if(st(n1:n1).eq.'=')goto 3 3 open(47,file='scr') write(47,*)st(n1+1:n1+16) rewind 47 read(47,*)e(n) close(47) if(e(n).lt.emin)then emin=e(n) imin=n endif write(6,800)n,e(n) 800 format(i4,f15.6) goto 888 endif goto 2 888 close(46) goto 1 999 close(45) write(6,603)imin,emin,fb(imin),rt 603 format('Minimal energy: point ',i4,': ',f15.6,/,a80,/, 1'kt = ',f12.4,' kcal/mol') qe=0.00 do 7 i=1,n e(i)=(e(i)-emin)*627.5 7 qe=qe+exp(-e(i)/rt) c open(45,file='PES.TXT') open(46,file='PES.TAB') open(47,file='PESROA.TAB') write(46,101)n write(47,101)n 101 format('PES ',/,i5,' points',/,'---------------') n=0 11 read(45,4500,end=99,err=99)fn n=n+1 w=exp(-e(n)/rt)/qe write(6,601)n,e(n),w*100.0 601 format(i4,2f12.5,' %') c leading and terminal spaces l0=len(fn) do 21 n1=1,l0 21 if(fn(n1:n1).ne.' ')goto 31 31 do 4 n2=l0,n1,-1 4 if(fn(n2:n2).ne.' ')goto 5 5 open(48,file= fn(n1:n2-4)//'.tab') read(48,*) read(48,*) read(48,*) 6 read(48,4500)st if(st(1:2).ne.'--')then backspace(48) read(48,*)ic,(a(i),i=1,5) do 9 i=2,5 9 a(i)=a(i)*w write(46,102)ic,(a(i),i=1,5) 102 format(i4,5g15.6) goto 6 endif close(48) open(48,file=fn(n1:n2-4)//'ram.tab') read(48,*) read(48,*) read(48,*) 8 read(48,4500)st if(st(1:2).ne.'--')then backspace(48) read(48,*)ic,(a(i),i=1,10) do 71 i=2,8 71 a(i)=a(i)*w a(10)=a(10)*w a(9)=a(9)*w write(47,103)ic,(a(i),i=1,10) 103 format(i4,f9.2,6f12.2,f6.3,2f12.2) goto 8 endif close(48) goto 11 99 close(45) write(46,104) write(47,104) 104 format('-----------------------------------') close(46) close(47) stop end