c c c C C C C C C C C C C C c C C C C C C C C C C C C C 6 8 9 10 11 13 17 c c c This is a new version of Absolute Rate Theory (ART) program. Modified by Kihyung Song in July, 1999 N=1 Calculations for recombination reaction only N=2 CALCULATIONS FOR MOLECULE AND COMPLEX (DECOMPOSITION RATE) N=3 CALCULATES RECOMBINATION AND DECOMPOSITION RATES, BUT BOTH RADICALS ARE THE SAME. N=4 TWO RADICALS ARE DIFFERENT. TEMP=TEMPERATURE (0K) NWM=# FREQUENCIES FOR THE MOLECULE.(CM-1) NIRM=# INTERNAL ROTORS FOR THE MOLECULE. WTM=WEIGHT OF MOLECULE (AMU) SIGM=EXTERNAL SYMMETRY # FOR THE MOLECULE. TXM,TYM,TZM,=MOMENTS OF INERTIA IN THE X,Y, AND Z DIRECTIONS For linear molecules (2D-rotor) put tzm as 0.0 or less. For Surfaces, put txm=0 to avoid the rotational d.o.f. in k FOR THE MOLECULE. IN AMU-A2. WM(I)=FREQUENCIES FOR MOLECULE(CM-1) TRM(I)=REDUCED MOMENTS OF INERTIA FOR INTERNAL ROTORS IN THE MOLECULE(AMU-A2). SYMM(I)=SYMMETRY NUMBERS FOR THE INTERNAL ROTORS IN THE MOLECULE. THE SYMBOLS ARE THE SAME FOR THE COMPLEX AND RADICALS EXCEPT C, R1, AND R2 REPLACE M FOR THE COMPLEX, RADICAL1, AND RADICAL2, RESPECTIVELY. EOF= EZERO FOR DECOMPOSITION(KCAL/MOLE). EOR= EZERO FOR RECOMBINATION(KCAL/MOLE). A-FACTOR FOR THE FORWARD REACTION IS IN UNITS OF SEC-1 AND A-FACTOR FOR REVERSE REACTION IS IN LT./MOLE-SEC. implicit real*8(a-h,o-z) parameter(nvmax=1000) character*80 Title DIMENSION WM(nvmax),WC(nvmax),WR1(nvmax),WR2(nvmax),TRM(5), *SYMM(5),TRC(5),SYMC(5),TRR1(5),SYMR1(5),TRR2(5),SYMR2(5),temp(10) FORMAT(' NUMBER OF FREQUENCIES=',I5,6X,'NUMBER OF ROTORS=',I5,//) FORMAT(' MASS=',F7.2/' SIGMA=',F7.2/ * ' ELECTRONIC PARTITION FUNCTION=',F5.2,//) FORMAT(' IXX=',F7.2,6X,'IYY=',F7.2,6X,'IZZ=',F7.2,//) FORMAT(' FREQUENCIES IN WAVE NUMBERS ') FORMAT(8F15.1) FORMAT(' REDUCED MOMENT OF INERTIA=',F7.2,3X,'SYMMETRY NUMBER=',F5 *.1) format(a,1pe12.4) read(5,'(a)') Title Write(6,'(a)') Title Read the number of temperature to calculate and temperatures read(5,*) ntemp if(ntemp.gt.0.and.ntemp.le.10) then read(5,*)(temp(i),i=1,ntemp) else write(6,*)' ntemp needs to be 10 or less' stop endif read the energy difference between TS and reactants zero-point energies are included in the activation energies c c read(5,*)n if(n.lt.1.or.n.gt.4) then write(6,*)' n needs to be between 1 and 4' stop endif if(n.eq.1)then write(6,'(a)')' A + B -> C channel only' read(5,*)eor write(6,17)' Activation energy for A+B->C reaction =',eor else if(n.eq.2) then write(6,'(a)')' C -> A + B channel only' read(5,*)eof write(6,17)' Activation energy for C->A+B reaction =',eof else read(5,*)eof,eor if(n.eq.3) then write(6,'(a)')' A+A <-> C Both decompostion and recombination' write(6,17)' Activation energy for A+A->C reaction =',eor else write(6,'(a)')' A+B <-> C Both decompostion and recombination' write(6,17)' Activation energy for A+B->C reaction =',eor endif write(6,17)' Activation energy for C->A+B reaction =',eof endif if(n.ne.2) then Input for Fragment 1 (A) write(6,*)' **** Input data for Fragment 1 (A) ****' read(5,*)nwr1,nirr1 WRITE(6,6)nwr1,nirr1 read(5,*)wtr1,sigr1,qelr1 WRITE(6,8)wtr1,sigr1,qelr1 if(nwr1.gt.0)then read(5,*)txr1,tyr1,tzr1 WRITE(6,9)txr1,tyr1,tzr1 read(5,*)(wr1(i),i=1,nwr1) WRITE(6,10) WRITE(6,11)(wr1(i),i=1,nwr1) if(nirr1.gt.0)then WRITE(6,*)' Data for Internal Rotor' do i=1,nirr1 read(5,*)trr1(i),symr1(i) WRITE(6,13)trr1(i),symr1(i) enddo endif endif Input for Fragment 2 (B) if(n.ne.3) then write(6,*)' **** Input data for Fragment 2 (B) ****' read(5,*)nwr2,nirr2 WRITE(6,6)nwr2,nirr2 read(5,*)wtr2,sigr2,qelr2 WRITE(6,8)wtr2,sigr2,qelr2 if(nwr2.gt.0)then read(5,*)txr2,tyr2,tzr2 c c c c WRITE(6,9)txr2,tyr2,tzr2 read(5,*)(wr2(i),i=1,nwr2) WRITE(6,10) WRITE(6,11)(wr2(i),i=1,nwr2) if(nirr2.gt.0)then WRITE(6,*)' Data for Internal Rotor' do i=1,nirr2 read(5,*)trr2(i),symr2(i) WRITE(6,13)trr2(i),symr2(i) enddo endif endif endif endif Input for Complex This is common for all 4 cases write(6,*)' **** Input data for Complex (TS) ****' read(5,*)nwc,nirc WRITE(6,6)nwc,nirc read(5,*)wtc,sigc,qelc WRITE(6,8)wtc,sigc,qelc read(5,*)txc,tyc,tzc WRITE(6,9)txc,tyc,tzc read(5,*)(wc(i),i=1,nwc) WRITE(6,10) WRITE(6,11)(wc(i),i=1,nwc) if(nirc.gt.0)then WRITE(6,*)' Data for Internal Rotor' do i=1,nirc read(5,*)trc(i),symc(i) WRITE(6,13)trc(i),symc(i) enddo endif Input for Molecule (C) if(n.ne.1) then write(6,*)' **** Input data for Molecule (C) ****' read(5,*)nwm,nirm WRITE(6,6)nwm,nirm read(5,*)wtm,sigm,qelm WRITE(6,8)wtm,sigm,qelm read(5,*)txm,tym,tzm WRITE(6,9)txm,tym,tzm read(5,*)(wm(i),i=1,nwm) WRITE(6,10) WRITE(6,11)(wm(i),i=1,nwm) if(nirm.gt.0)then WRITE(6,*)' Data for Internal Rotor' do i=1,nirm read(5,*)trm(i),symm(i) WRITE(6,13)trm(i),symm(i) enddo endif endif Start loop for temperatures c c c c c c c c c do itemp=1,ntemp tk=temp(itemp) write(6,'(/////a,f8.1)')' --- Temperature =',tk This is for complex (TS) Write(6,*)' Enthalpy and Entropy for Complex' call sandh(tk,wtc,txc,tyc,tzc,sigc,qelc,nwc,wc,nirc,trc,symc, * sc,hc) This is for Fragment A if(n.ne.2) then write(6,*)' Enthalpy and Entropy for Fragment A' call sandh(tk,wtr1,txr1,tyr1,tzr1,sigr1,qelr1,nwr1,wr1, * nirr1,trr1,symr1,sr1,hr1) This is for Fragment B if(n.ne.3)then write(6,*)' Enthanlpy and Entropy for Fragment B' call sandh(tk,wtr2,txr2,tyr2,tzr2,sigr2,qelr2,nwr2,wr2, * nirr2,trr2,symr2,sr2,hr2) endif endif This is for Molecule (C) if(n.ne.1) then write(6,*)' Enthanlpy and Entropy for Molecule (C)' call sandh(tk,wtm,txm,tym,tzm,sigm,qelm,nwm,wm,nirm, * trm,symm,sm,hm) endif Calculate Rate Constants if(n.ne.2) then write(6,*)' *** Rate constant for A+B->C reaction' if(n.eq.3) then ds=sc-2.d0*sr1 dh=hc-2.d0*hr1 else ds=sc-sr1-sr2 dh=hc-hr1-hr2 endif ak=ratec(eor,tk,ds,dh,2) write(6,'(a,f8.1,1pe13.5,a)')' T, k(T)=',tk,ak,' Lt/mol-sec' endif if(n.ne.1) then write(6,*)' *** Rate constant for C->A+B reaction' ds=sc-sm dh=hc-hm ak=ratec(eof,tk,ds,dh,1) write(6,'(a,f8.1,1pe13.5,a///)')' T, k(T)=',tk,ak,' sec-1' endif enddo stop end This program calculates the enthalpies and entropies for translational, rotational, vibrational, electronic, and internal rotors, if present. The units are in cal/mol/K for entropy and kcal/mol for enthalpy. subroutine sandh(temp,wt,tx,ty,tz,sigma,qelec,nw,w,nir,tr,sym,s,h) implicit real*8(a-h,o-z) * c 14 15 parameter(c0=1.987d0,c1=0.5*c0,c2=1.5*c0,c3=2.5*c0,c4=7.2836, c5=0.014837d0,c6=0.041228d0,c7=0.3599d0,c8=1.4388d0) parameter(nvmax=1000) DIMENSION W(nvmax),TR(5),SYM(5) FORMAT('-TRANSLATIONAL S=',F9.3/' ROTATIONAL *' VIBRATIONAL S=',F9.3/' INTERNAL ROTATIONAL *' ELECTRONIC S=',F9.3/' TOTAL S=',F9.3//) FORMAT('-TRANSLATIONAL H=',F9.3/' ROTATIONAL *' VIBRATIONAL H=',F9.3/' INTERNAL ROTATIONAL *' TOTAL H=',F9.3//) c STRANS=c3+c2*LOG(WT)+c3*LOG(TEMP)-c4 HTRANS=c3*TEMP*1.d-3 SVIB=0.0 HVIB=0.0 SIR=0.0 HIR=0.0 SELEC=c0*log(QELEC) if(nw.le.0) then srot=0.d0 svib=0.d0 else if(tx.gt.0.d0) then IF(TZ.gt.0.d0) then QROT=c5*sqrt(TX*TY*TZ*TEMP**3)/SIGMA else QROT=c6*sqrt(TX*TY)*TEMP/SIGMA endif SROT=c0*log(QROT)+c2 HROT=c2*TEMP*1.d-3 endif DO I=1,NW U=c8*W(I)/TEMP cu=1.d0/(EXP(U)-1.d0) SVIB=SVIB+c0*(U*cu-log(1.d0-EXP(-U))) HVIB=HVIB+c0*U*TEMP*cu enddo hvib=hvib*1.d-3 IF(NIR.gt.0) then DO I=1,NIR QIR=c7*sqrt(TR(I)*TEMP)/SYM(I) SIR=SIR+c0*log(QIR)+c1 HIR=HIR+c1*TEMP enddo hir=hir*1.d-3 endif endif h=htrans+hrot+hvib+hir s=strans+srot+svib+sir+selec WRITE(6,14)strans,srot,svib,sir,selec,s WRITE(6,15)htrans,hrot,hvib,hir,h return end S=',F9.3/ S=',F9.3/ H=',F9.3/ H=',F9.3/ c c c c 20 21 This program calculates the rate constant using delta-S and delta-H for the reaction. The activation energy and temperature are also needed. n is number of reactants, for A+B->C: n=2, for C->A+B: n=1 real*8 function ratec(e0,temp,ds,dh,n) implicit real*8(a-h,o-z) parameter(c0=1.987d-3,c1=c0*2.d0) FORMAT(' DS+=',1pE12.5,/,' DH+=',e12.5,//) FORMAT(' A-FACTOR=',1pE12.5,/,' ACTIVATION ENERGY=',e12.5,/, * ' EZERO=',e12.5,//) if(n.eq.2)then ca=0.1263d11 else ca=0.5664d11 endif A=ca*TEMP**n*EXP(DS/1.987d0) EA=E0+DH+dble(n)*c0*TEMP ratec=A*EXP(-EA/(c0*TEMP)) WRITE(6,20)DS,DH WRITE(6,21)A,EA,E0 return end