TST

advertisement
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
Download