1 SUBROUTINE PRTDRC(ESCF,DELTT,XPARAM,REF,EKIN,GTOT,ETOT,VELO0,NVAR)
2 IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3 DIMENSION XPARAM(*), VELO0(*), REF(*)
4 *********************************************************************
6 * PRTDRC PREPARES TO PRINT THE GEOMETRY ETC. FOR POINTS IN A DRC
9 * ON INPUT ESCF = HEAT OF FORMATION FOR THE CURRENT POINT
10 * DELTT = CHANGE IN TIME, PREVIOUS TO CURRENT POINT
11 * XPARAM = CURRENT CARTESIAN GEOMETRY
12 * EKIN = CURRENT KINETIC ENERGY
13 * GTOT = TOTAL GRADIENT NORM IN IRC CALC'N.
14 * VELO0 = CURRENT VELOCITY
15 * NVAR = NUMBER OF VARIABLES = 3 * NUMBER OF ATOMS.
17 ********************************************************************
19 COMMON /KEYWRD/ KEYWRD
20 COMMON /NUMCAL/ NUMCAL
21 COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM),
22 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA,
23 2 NCLOSE,NOPEN,NDUMY,XRACT
24 COMMON /GEOKST/ NATOMS,LABELS(NUMATM),
25 1 NA(NUMATM),NB(NUMATM),NC(NUMATM)
26 COMMON /DRCCOM/ MCOPRT(2,MAXPAR), NCOPRT, PARMAX
27 COMMON /CORE / CORE(107)
28 COMMON /ATMASS/ ATMASS(NUMATM)
29 COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK)
30 COMMON /FMATRX/ ALLXYZ(3,MAXPAR),ALLVEL(3,MAXPAR),PARREF(MAXPAR),
31 1XYZ3(3,MAXPAR),VEL3(3,MAXPAR), ALLGEO(3,MAXPAR), GEO3(3,MAXPAR),
32 2 DUMMY(MAXPAR**2+1-16*MAXPAR), IDUMY(4)
33 DIMENSION ESCF3(3),EKIN3(3), GTOT3(3), CHARGE(NUMATM), XOLD3(3),
34 1GEO(3*NUMATM), VREF(MAXPAR), VREF0(MAXPAR), TSTEPS(100), ETOT3(3),
37 LOGICAL TURN, PARMAX, LDRC, GOTURN
38 CHARACTER*241 KEYWRD, TEXT1*3, TEXT2*2, COTYPE(3)*2
41 DATA COTYPE/'BL','BA','DI'/
42 IF (ICALCN.NE.NUMCAL) THEN
45 10 PARREF(I)=XPARAM(I)
59 C DETERMINE TYPE OF PRINT: TIME, ENERGY OR GEOMETRY PRIORITY
65 IF(INDEX(KEYWRD,' T-PRIO').NE.0)THEN
66 IF(INDEX(KEYWRD,' T-PRIORITY=').NE.0)THEN
67 STEPT=READA(KEYWRD,INDEX(KEYWRD,'T-PRIO')+5)
72 WRITE(6,'(/,'' TIME PRIORITY, INTERVAL ='',F4.1,
73 1'' FEMTOSECONDS'',/)')STEPT
74 ELSEIF(INDEX(KEYWRD,' H-PRIO').NE.0)THEN
75 IF(INDEX(KEYWRD,' H-PRIORITY=').NE.0)THEN
76 STEPH=READA(KEYWRD,INDEX(KEYWRD,'H-PRIO')+5)
80 WRITE(6,'(/,'' KINETIC ENERGY PRIORITY, STEP ='',F5.2,
81 1'' KCAL/MOLE'',/)')STEPH
82 ELSEIF(INDEX(KEYWRD,' X-PRIO').NE.0)THEN
83 IF(INDEX(KEYWRD,' X-PRIORITY=').NE.0)THEN
84 STEPX=READA(KEYWRD,INDEX(KEYWRD,'X-PRIO')+5)
88 WRITE(6,'(/,'' GEOMETRY PRIORITY, STEP ='',F5.2,
89 1'' ANGSTROMS'',/)')STEPX
91 IF(INDEX(KEYWRD,' RESTART').NE.0.AND.INDEX(KEYWRD,'IRC=').EQ.0)
93 READ(9,*)(PARREF(I),I=1,NVAR)
94 READ(9,*)(REF(I),I=1,NVAR)
95 READ(9,*)(VREF0(I),I=1,NVAR)
96 READ(9,*)(VREF(I),I=1,NVAR)
97 READ(9,*)(ALLGEO(3,I),I=1,NVAR)
98 READ(9,*)(ALLGEO(2,I),I=1,NVAR)
99 READ(9,*)(ALLGEO(1,I),I=1,NVAR)
100 READ(9,*)(ALLVEL(3,I),I=1,NVAR)
101 READ(9,*)(ALLVEL(2,I),I=1,NVAR)
102 READ(9,*)(ALLVEL(1,I),I=1,NVAR)
103 READ(9,*)(ALLXYZ(3,I),I=1,NVAR)
104 READ(9,*)(ALLXYZ(2,I),I=1,NVAR)
105 READ(9,*)(ALLXYZ(1,I),I=1,NVAR)
106 READ(9,*)ILOOP,LDRC,IONE,ETOT1,ETOT0,ESCF1,ESCF0,EKIN1,EKIN0
107 1,TOLD2,TOLD1,GTOT1,GTOT0,XOLD2,XOLD1,XOLD0,TOTIME,JLOOP,ETOT,REFX
111 IF(ESCF.LT.-1.D8) THEN
112 WRITE(9,*)(PARREF(I),I=1,NVAR)
113 WRITE(9,*)(REF(I),I=1,NVAR)
114 WRITE(9,*)(VREF0(I),I=1,NVAR)
115 WRITE(9,*)(VREF(I),I=1,NVAR)
116 WRITE(9,*)(ALLGEO(3,I),I=1,NVAR)
117 WRITE(9,*)(ALLGEO(2,I),I=1,NVAR)
118 WRITE(9,*)(ALLGEO(1,I),I=1,NVAR)
119 WRITE(9,*)(ALLVEL(3,I),I=1,NVAR)
120 WRITE(9,*)(ALLVEL(2,I),I=1,NVAR)
121 WRITE(9,*)(ALLVEL(1,I),I=1,NVAR)
122 WRITE(9,*)(ALLXYZ(3,I),I=1,NVAR)
123 WRITE(9,*)(ALLXYZ(2,I),I=1,NVAR)
124 WRITE(9,*)(ALLXYZ(1,I),I=1,NVAR)
125 WRITE(9,*)ILOOP,LDRC,IONE,ETOT1,ETOT0,ESCF1,ESCF0,EKIN1,EKIN0,
126 1TOLD2,TOLD1,GTOT1,GTOT0,XOLD2,XOLD1,XOLD0,TOTIME,JLOOP,ETOT,REFX
133 30 CHARGE(I)=CORE(L) - CHARGE(I)
136 CALL XYZINT(XPARAM,NUMAT,NA,NB,NC,57.29577951D0,GEO)
149 ALLXYZ(J,I)=XPARAM(I)
150 40 ALLVEL(J,I)=VELO0(I)
153 ALLGEO(3,I)=ALLGEO(2,I)
154 ALLGEO(2,I)=ALLGEO(1,I)
156 ALLXYZ(3,I)=ALLXYZ(2,I)
157 ALLXYZ(2,I)=ALLXYZ(1,I)
158 ALLXYZ(1,I)=XPARAM(I)
159 ALLVEL(3,I)=ALLVEL(2,I)
160 ALLVEL(2,I)=ALLVEL(1,I)
161 50 ALLVEL(1,I)=VELO0(I)
164 C FORM QUADRATIC EXPRESSION FOR POSITION AND VELOCITY W.R.T. TIME.
167 T2=MAX(TOLD1,0.02D0)+T1
169 CALL QUADR(ALLGEO(3,I),ALLGEO(2,I),ALLGEO(1,I),T1,T2,
170 1GEO3(1,I),GEO3(2,I),GEO3(3,I))
172 ****************************************************
174 * QUADR CALCULATES THE A, B AND C IN THE EQUNS. *
177 * A + B.X0 + C.X0**2 = F1 *
178 * A + B.X2 + C.X2**2 = F2 *
179 * GIVEN THE ARGUMENT LIST (F0,F1,F2, X1,X2, A,B,C) *
181 ****************************************************
182 CALL QUADR(ALLXYZ(3,I),ALLXYZ(2,I),ALLXYZ(1,I),T1,T2,
183 1XYZ3(1,I),XYZ3(2,I),XYZ3(3,I))
184 CALL QUADR(ALLVEL(3,I),ALLVEL(2,I),ALLVEL(1,I),T1,T2,
185 1VEL3(1,I),VEL3(2,I),VEL3(3,I))
190 CALL QUADR(ETOT2,ETOT1,ETOT0,T1,T2,ETOT3(1),ETOT3(2),
195 CALL QUADR(EKIN2,EKIN1,EKIN0,T1,T2,EKIN3(1),EKIN3(2),
200 CALL QUADR(ESCF2,ESCF1,ESCF0,T1,T2,ESCF3(1),ESCF3(2),
205 CALL QUADR(GTOT2,GTOT1,GTOT0,T1,T2,GTOT3(1),GTOT3(2),
212 C CALCULATE CHANGE IN GEOMETRY
224 SUM1=SUM1+(ALLXYZ(1,L)-REF(L))**2
225 70 SUM=SUM+(ALLXYZ(2,L)-ALLXYZ(1,L))**2
226 XOLD0=XOLD0+SQRT(SUM)
227 80 XTOT0=XTOT0+SQRT(SUM1)
228 CALL QUADR(XTOT2,XTOT1,XTOT0,T1,T2,
229 1XTOT3(1),XTOT3(2),XTOT3(3))
230 CALL QUADR(XOLD2,XOLD2+XOLD1,XOLD2+XOLD1+XOLD0,T1,T2,
231 1XOLD3(1),XOLD3(2),XOLD3(3))
232 ***********************************************************************
233 * GO THROUGH THE CRITERIA FOR DECIDING WHETHER OR NOT TO PRINT THIS *
234 * POINT. IF YES, THEN ALSO CALCULATE THE EXACT POINT AS A FRACTION *
235 * BETWEEN THE LAST POINT AND THE CURRENT POINT *
236 ***********************************************************************
237 C NFRACT IS THE NUMBER OF POINTS TO BE PRINTED IN THE CURRENT DOMAIN
238 ***********************************************************************
239 IF(ILOOP.LT.3) GOTO 170
244 C CRITERION FOR PRINTING RESULTS IS A CHANGE IN HEAT OF FORMATION =
245 C -CHANGE IN KINETIC ENERGY
247 IF(REFSCF.EQ.0.D0) THEN
253 STEPH=SIGN(STEPH,ESCF1-REFSCF)
258 ************************************************
259 * PROGRAMMERS! - BE VERY CAREFUL IF YOU CHANGE *
260 * THIS FOLLOWING SECTION. THERE IS NUMERICAL *
261 * INSTABILITY IF ABS(BB/AA) IS VERY LARGE. NEAR*
262 * INFLECTION POINTS AA CHANGES SIGN. JJPS*
263 ************************************************
264 IF(ABS(BB/AA).GT.30)THEN
266 C USE LINEAR INTERPOLATION
269 90 TSTEPS(I)=-(CC-(REFSCF+I*STEPH))/BB
272 C USE QUADRATIC INTERPOLATION
275 C1=CC-(REFSCF+I*STEPH)
276 100 TSTEPS(I)=(-BB+SIGN(SQRT(BB*BB-4.D0*(AA*C1)),BB))/(2.D0*A
280 REFSCF=REFSCF+NFRACT*STEPH
282 ELSEIF(STEPT.NE.0.D0) THEN
284 C CRITERION FOR PRINTING RESULTS IS A CHANGE IN TIME.
286 IF(ABS(TOTIME+TOLD2-TREF).GT.STEPT)THEN
289 I=(TOLD2+TOTIME)/STEPT
294 110 TSTEPS(I)=FRACT+I*STEPT
295 TREF=TREF+NFRACT*STEPT
297 ELSEIF(STEPX.NE.0.D0) THEN
299 C CRITERION FOR PRINTING RESULTS IS A CHANGE IN GEOMETRY.
301 IF(XOLD2+XOLD1-REFX.GT.STEPX)THEN
302 NFRACT=(XOLD2+XOLD1-REFX)/STEPX
306 IF(ABS(BB/AA).GT.30)THEN
308 C USE LINEAR INTERPOLATION
311 120 TSTEPS(I)=-(CC-(REFX+I*STEPX))/BB
314 C USE QUADRATIC INTERPOLATION
318 130 TSTEPS(I)=(-BB+SIGN(SQRT(BB*BB-4.D0*(AA*C1)),BB))/(2.D0*A
321 REFX=REFX+NFRACT*STEPX
330 IF(FRACT.LT.-9.D0)GOTO 170
331 TURN=(TURN.OR.ABS(FRACT-1.D0).GT.1.D-6)
333 C LOOP OVER ALL POINTS IN CURRENT DOMAIN
335 IF(FRACT.EQ.0.D0.AND.NFRACT.EQ.1)THEN
339 CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TOTIME,ESCF3,EKIN3,
340 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,II,JLOOP)
346 IF(ABS(GEO3(3,L)).GT.1.D-20)FRACT=-GEO3(2,L)/(GEO3(3,L)*2.D0
348 IF(FRACT.GT.0.D0.AND.FRACT.LT.TOLD2) THEN
349 IF(GEO3(3,L).GT.0.D0)TEXT1='MIN'
350 IF(GEO3(3,L).LT.0.D0)TEXT1='MAX'
354 WRITE(6,'(/,20(''****''))')
357 CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3,
358 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,K,JLOOP)
361 IF(N.NE.0)WRITE(6,'(/,20(''****''))')
362 IF(ABS(ESCF3(3)).GT.1.D-20)FRACT=-ESCF3(2)/(ESCF3(3)*2.D0)
363 IF(.NOT.GOTURN.AND.FRACT.GT.0.D0.AND.FRACT.LT.TOLD2*1.04D0
367 IF(ESCF3(3).GT.0.D0) THEN
370 SUM=DOT(VELO0,VREF,NVAR)**2/(DOT(VELO0,VELO0,NVAR)*
371 1DOT(VREF,VREF,NVAR)+1.D-10)
372 SUM1=DOT(VELO0,VREF0,NVAR)**2/(DOT(VELO0,VELO0,NVAR)*
373 1DOT(VREF0,VREF0,NVAR)+1.D-10)
374 IF(SUM1.GT.0.1D0.AND.ABS(SUM1-1.D0).GT.1.D-6)
375 1WRITE(6,'(/,A,F8.5,A,F8.5,A,G12.3,A)')' COEF. OF V(0)
376 2=',SUM1,' LAST V(0)',SUM,' HALF-LIFE =',
377 3-0.6931472D0*TIME/LOG(SUM1),' FEMTOSECS'
379 WRITE(6,'(//,A,F11.3,A)')' HALF-CYCLE TIME ='
380 1,TIME-TLAST,' FEMTOSECONDS'
385 IF(ESCF3(3).LT.0.D0)TEXT1='MAX'
387 CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3,
388 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,0,JLOOP)
394 TIME=TOTIME+TSTEPS(I)
397 C# WRITE(6,'(A,4F12.4)')' KINETIC ENERGY, POINT',EKIN3,TSTEPS(
398 CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3,
399 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,TSTEPS(I),TEXT1,TEXT2,0,JLOOP)
404 C BUFFER TOTAL TIME TO 3 POINTS BACK!