hdiff output

r31632/commons.f90 2017-01-21 10:38:34.961266059 +0000 r31631/commons.f90 2017-01-21 10:38:37.545467600 +0000
  3:       INTEGER NMINA, NMINB, NMIN, NTS, SAVELENGTH, NPFOLD, PFOLDINT, NRWBINS, NUSEPAIRS, &  3:       INTEGER NMINA, NMINB, NMIN, NTS, SAVELENGTH, NPFOLD, PFOLDINT, NRWBINS, NUSEPAIRS, &
  4:      &        NATOMS, MAXLENGTH, CONNECTIONS, HORDER, ERROR, MINSEP, NRWREACTANT, &  4:      &        NATOMS, MAXLENGTH, CONNECTIONS, HORDER, ERROR, MINSEP, NRWREACTANT, &
  5:      &        NATTEMPT, NNEW, NTOTAL, NEXCLUDE, NPERMGROUP, BHSTEPS, NGTSIZE,  &  5:      &        NATTEMPT, NNEW, NTOTAL, NEXCLUDE, NPERMGROUP, BHSTEPS, NGTSIZE,  &
  6:      &        MAXCONN, KAPPA, ISEED, NTAG, NDIHE, NCPU, GTINT, NCONNMAX, BESTPATHLENGTH, NGLY, &  6:      &        MAXCONN, KAPPA, ISEED, NTAG, NDIHE, NCPU, GTINT, NCONNMAX, BESTPATHLENGTH, NGLY, &
  7:      &        STARTMINA, STARTMINB, WHICHMIN, SECONDMIN, WHICHTS, MAXATTEMPT, COSTFUNCTIONPOWER, &  7:      &        STARTMINA, STARTMINB, WHICHMIN, SECONDMIN, WHICHTS, MAXATTEMPT, COSTFUNCTIONPOWER, &
  8:      &        NPAIRDONE, NMINDONE, NPAIRFRQ, CHECKSPS, CHECKSPF, &  8:      &        NPAIRDONE, NMINDONE, NPAIRFRQ, CHECKSPS, CHECKSPF, &
  9:      &        BISECTSTEPS, BISECTMAXATTEMPTS, NDIAGEIG, QRELONE, QRELTWO, MAXTSATTEMPTS, &  9:      &        BISECTSTEPS, BISECTMAXATTEMPTS, NDIAGEIG, QRELONE, QRELTWO, MAXTSATTEMPTS, &
 10:      &        INTCONSEP, INTREPSEP, PAIRDISTMAX, PAIRDIST1, PAIRDIST2, PATOM1, PATOM2, NRANROT, & 10:      &        INTCONSEP, INTREPSEP, PAIRDISTMAX, PAIRDIST1, PAIRDIST2, PATOM1, PATOM2, NRANROT, &
 11:      &        NMINADDXYZ, LOCALPERMNEIGH, NRATESCYCLETEMPS, RATESUNIT, CONNMINSTART, DISTANCETO, & 11:      &        NMINADDXYZ, LOCALPERMNEIGH, NRATESCYCLETEMPS, RATESUNIT, CONNMINSTART, DISTANCETO, &
 12:      &        DISTANCETO1, DISTANCETO2, OSTART, OFINISH, PTSTART, PTFINISH, RFMULTIN, RFUNIT, & 12:      &        DISTANCETO1, DISTANCETO2, OSTART, OFINISH, PTSTART, PTFINISH, RFMULTIN, RFUNIT, &
 13:      &        RFKMCN, RFKMCSTEPS, NPEQ, MLPIN, MLPSTART, MLPOUT, MLPHIDDEN, NMLP, NOPT, CVSTARTMIN, CVENDMIN, CVINCMIN, & 13:      &        RFKMCN, RFKMCSTEPS, NPEQ, MLPIN, MLPSTART, MLPOUT, MLPHIDDEN, NMLP, NOPT, CVSTARTMIN, CVENDMIN, CVINCMIN
 14:      &        CONNECTMIN2F 
 15:  14: 
 16:       INTEGER, ALLOCATABLE :: LOCATIONA(:), LOCATIONB(:) 15:       INTEGER, ALLOCATABLE :: LOCATIONA(:), LOCATIONB(:)
 17:       INTEGER, ALLOCATABLE :: NCONN(:)     ! reallocate MAXMIN when used 16:       INTEGER, ALLOCATABLE :: NCONN(:)     ! reallocate MAXMIN when used
 18:       INTEGER, ALLOCATABLE :: BESTPATH(:)   17:       INTEGER, ALLOCATABLE :: BESTPATH(:)  
 19:       INTEGER, ALLOCATABLE :: USEPAIRSMIN(:) 18:       INTEGER, ALLOCATABLE :: USEPAIRSMIN(:)
 20: ! 19: !
 21: ! I/O unit numbers 20: ! I/O unit numbers
 22: ! 21: !
 23:       INTEGER, PARAMETER :: UMINDATA=11, UTSDATA=12, UMIN=13, UTS=15 22:       INTEGER, PARAMETER :: UMINDATA=11, UTSDATA=12, UMIN=13, UTS=15
 24:  23: 


r31632/connectd.f90 2017-01-21 10:38:35.245288286 +0000 r31631/connectd.f90 2017-01-21 10:38:37.797487167 +0000
 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 18: ! 18: !
 19:  19: 
 20: ! 20: !
 21: !  Subroutine to provide candidate pairs of minima based on distance analysis 21: !  Subroutine to provide candidate pairs of minima based on distance analysis
 22: !  for pairs of minima. 22: !  for pairs of minima.
 23: ! 23: !
 24: SUBROUTINE CONNECTD(NAVAIL) 24: SUBROUTINE CONNECTD(NAVAIL)
 25: USE COMMONS, ONLY: NATOMS, UMIN, CONNECTMIN1, CONNECTMIN2, CONNECTDIST, DMIN1, DMIN2, TCONNECTDIST, TOPPOINTER, POINTERP, & 25: USE COMMONS, ONLY: NATOMS, UMIN, CONNECTMIN1, CONNECTMIN2, CONNECTDIST, DMIN1, DMIN2, TCONNECTDIST, TOPPOINTER, POINTERP, &
 26:   &               POINTERM, NMIN, PLUS, MINUS, BULKT, TWOD, DMINMAX, DEBUG, PERMDIST, BOXLX, BOXLY, BOXLZ, RIGIDBODY, & 26:   &               POINTERM, NMIN, PLUS, MINUS, BULKT, TWOD, DMINMAX, DEBUG, PERMDIST, BOXLX, BOXLY, BOXLZ, RIGIDBODY, &
 27:   &               ANGLEAXIS, PAIR1, PAIR2, NPAIRDONE, INTERPCOSTFUNCTION, CONNECTREGIONT, NOPT, CONNECTMIN2F, NCPU 27:   &               ANGLEAXIS, PAIR1, PAIR2, NPAIRDONE, INTERPCOSTFUNCTION, CONNECTREGIONT, NOPT
 28: IMPLICIT NONE 28: IMPLICIT NONE
 29: INTEGER NUSED, MINS, MINF, NAVAIL, J1, J2, J3, LOOP2END 29: INTEGER NUSED, MINS, MINF, NAVAIL, J1, J2, J3
 30: INTEGER, ALLOCATABLE :: VINT(:) 30: INTEGER, ALLOCATABLE :: VINT(:)
 31: DOUBLE PRECISION SPOINTS(NOPT), FPOINTS(NOPT), ELAPSED, TNEW, DISTANCE, RMAT(3,3), DIST2 31: DOUBLE PRECISION SPOINTS(NOPT), FPOINTS(NOPT), ELAPSED, TNEW, DISTANCE, RMAT(3,3), DIST2
 32:  32: 
 33: CALL CPU_TIME(ELAPSED) 33: CALL CPU_TIME(ELAPSED)
 34: ALLOCATE(VINT(DMINMAX)) 34: ALLOCATE(VINT(DMINMAX))
 35:  35: 
 36: NAVAIL=0 36: NAVAIL=0
 37: LOOP2END=CONNECTMIN2F 
 38: IF (CONNECTMIN2F.EQ.-1) LOOP2END=NMIN 
 39: DO J1=CONNECTMIN1,NMIN 37: DO J1=CONNECTMIN1,NMIN
 40:    READ(UMIN,REC=J1) SPOINTS(1:NOPT) 38:    READ(UMIN,REC=J1) SPOINTS(1:NOPT)
 41:    loop2: DO J2=CONNECTMIN2,MIN(LOOP2END,NMIN) 39:    loop2: DO J2=MAX(CONNECTMIN2,J1+1),NMIN
 42: !  loop2: DO J2=MAX(CONNECTMIN2,J1+1),NMIN 
 43: ! 40: !
 44: ! For a connectregion run allow connection attempts for local minima 41: ! For a connectregion run allow connection attempts for local minima
 45: ! that already have a direct connection. Otherwise we might miss 42: ! that already have a direct connection. Otherwise we might miss
 46: ! a lower path. 43: ! a lower path.
 47: ! 44: !
 48: !     IF (.NOT.CONNECTREGIONT) THEN 45: !     IF (.NOT.CONNECTREGIONT) THEN
 49:          J3=TOPPOINTER(J2)  !  sets J3 to the ts connected to minimum J2 with the highest value 46:          J3=TOPPOINTER(J2)  !  sets J3 to the ts connected to minimum J2 with the highest value
 50:          IF (J3.LE.0) GOTO 555  47:          IF (J3.LE.0) GOTO 555 
 51: 11       IF (PLUS(J3).EQ.J2) THEN 48: 11       IF (PLUS(J3).EQ.J2) THEN
 52:             IF (MINUS(J3).EQ.J1) CYCLE loop2 ! they are already connected 49:             IF (MINUS(J3).EQ.J1) CYCLE loop2 ! they are already connected
 82:             DEALLOCATE(DMIN2) 79:             DEALLOCATE(DMIN2)
 83:             ALLOCATE(DMIN2(2*DMINMAX)) 80:             ALLOCATE(DMIN2(2*DMINMAX))
 84:             DMIN2(1:DMINMAX)=VINT(1:DMINMAX) 81:             DMIN2(1:DMINMAX)=VINT(1:DMINMAX)
 85:             DMINMAX=2*DMINMAX 82:             DMINMAX=2*DMINMAX
 86:             DEALLOCATE(VINT) 83:             DEALLOCATE(VINT)
 87:             ALLOCATE(VINT(DMINMAX)) 84:             ALLOCATE(VINT(DMINMAX))
 88:          ENDIF 85:          ENDIF
 89:          DMIN1(NAVAIL)=J1 86:          DMIN1(NAVAIL)=J1
 90:          DMIN2(NAVAIL)=J2 87:          DMIN2(NAVAIL)=J2
 91:          IF (DEBUG) PRINT '(3(A,I8),A,G20.10)','connectd> connection ',NAVAIL,' pair ',J1,' and ',J2,' distance=',DISTANCE 88:          IF (DEBUG) PRINT '(3(A,I8),A,G20.10)','connectd> connection ',NAVAIL,' pair ',J1,' and ',J2,' distance=',DISTANCE
 92:          IF (DMINMAX.GT.NCPU) THEN ! set a maximum number of candidates for each call to CONNECTDIST 89:          IF (DMINMAX.GT.1000) THEN ! set a maximum number of candidates for each call to CONNECTDIST
 93:             CONNECTMIN1=J1 90:             CONNECTMIN1=J1
 94:             CONNECTMIN2=J2+1 91:             CONNECTMIN2=J2+1
 95:             GOTO 777 92:             GOTO 777
 96:          ENDIF 93:          ENDIF
 97:       ENDIF 94:       ENDIF
 98:    ENDDO loop2 95:    ENDDO loop2
 99: !  CONNECTMIN2=0 ! this is only to allow an efficient restart 96:    CONNECTMIN2=0 ! this is only to allow an efficient restart
100: ENDDO 97: ENDDO
101: ! JMC commenting out the line below and the CONNECTMIN2=0 after loop2 (above) so that ALL possible new pairs will be  98: ! JMC commenting out the line below and the CONNECTMIN2=0 after loop2 (above) so that ALL possible new pairs will be 
102: ! considered next time this double loop is executed. pairs.data will make sure that each pair is only tried once.  99: ! considered next time this double loop is executed. pairs.data will make sure that each pair is only tried once. 
103: ! CONNECTMIN1=NMIN+1100: ! CONNECTMIN1=NMIN+1
104: 777 CONTINUE101: 777 CONTINUE
105: PRINT '(A,I8)','connectd> Number of available connection pairs to try=',NAVAIL102: PRINT '(A,I8)','connectd> Number of available connection pairs to try=',NAVAIL
106: 103: 
107: CALL CPU_TIME(TNEW)104: CALL CPU_TIME(TNEW)
108: TCONNECTDIST=TCONNECTDIST+TNEW-ELAPSED105: TCONNECTDIST=TCONNECTDIST+TNEW-ELAPSED
109: DEALLOCATE(VINT)106: DEALLOCATE(VINT)


r31632/getallpaths.f 2017-01-21 10:38:35.561313007 +0000 r31631/getallpaths.f 2017-01-21 10:38:38.149514454 +0000
 30:       IMPLICIT NONE 30:       IMPLICIT NONE
 31:  31: 
 32:       INTEGER J1, J2, ISTAT, NMINOLD, TSNUMBER, J3, NCOUNT, NMINSAVE, NTSSAVE, J4, J5, LUNIT, PLUSMIN 32:       INTEGER J1, J2, ISTAT, NMINOLD, TSNUMBER, J3, NCOUNT, NMINSAVE, NTSSAVE, J4, J5, LUNIT, PLUSMIN
 33:       DOUBLE PRECISION LOCALPOINTS(NOPT), ENERGY, NEWEMIN, NEWETS, DISTANCE, RMAT(3,3), 33:       DOUBLE PRECISION LOCALPOINTS(NOPT), ENERGY, NEWEMIN, NEWETS, DISTANCE, RMAT(3,3),
 34:      1                 LPOINTSTS(NOPT), LPLUS(NOPT), LMINUS(NOPT), LOCALPOINTS2(NOPT) 34:      1                 LPOINTSTS(NOPT), LPLUS(NOPT), LMINUS(NOPT), LOCALPOINTS2(NOPT)
 35:       DOUBLE PRECISION DUMMY, DIST2, ELAPSED, TNEW 35:       DOUBLE PRECISION DUMMY, DIST2, ELAPSED, TNEW
 36:       DOUBLE PRECISION NEWFVIBMIN, NEWFVIBTS, NEWNEGEIG, NEWPOINTSMIN(NOPT), NEWPOINTSMINPLUS(NOPT), EPLUS, 36:       DOUBLE PRECISION NEWFVIBMIN, NEWFVIBTS, NEWNEGEIG, NEWPOINTSMIN(NOPT), NEWPOINTSMINPLUS(NOPT), EPLUS,
 37:      1                 NEWPOINTSTS(NOPT), NEWIXMIN,  NEWIYMIN, NEWIZMIN, IXPLUS, IYPLUS, IZPLUS, 37:      1                 NEWPOINTSTS(NOPT), NEWIXMIN,  NEWIYMIN, NEWIZMIN, IXPLUS, IYPLUS, IZPLUS,
 38:      2                 NEWIXTS,  NEWIYTS, NEWIZTS, IXMINUS, IYMINUS, IZMINUS, FRICTIONFAC, TEMPD(PAIRDISTMAX) 38:      2                 NEWIXTS,  NEWIYTS, NEWIZTS, IXMINUS, IYMINUS, IZMINUS, FRICTIONFAC, TEMPD(PAIRDISTMAX)
 39:       INTEGER NEWHORDERMIN, NEWHORDERTS, NEWMIN, NEWTS, NTRIPLES, TEMPL(PAIRDISTMAX), NFRQS, NVARS 39:       INTEGER NEWHORDERMIN, NEWHORDERTS, NEWMIN, NEWTS, NTRIPLES, TEMPL(PAIRDISTMAX), NFRQS, NVARS
 40:       LOGICAL TSISOLD, FAILED, MINPOLD, MINMOLD, BADTRIPLE, TESTOP, TESTNAME 40:       LOGICAL TSISOLD, FAILED, MINPOLD, MINMOLD, BADTRIPLE
 41:       CHARACTER(LEN=1) DUMMYSTRING 41:       CHARACTER(LEN=1) DUMMYSTRING
 42:  42: 
 43:       NMINOLD=NMIN 43:       NMINOLD=NMIN
 44:       IF (MACHINE) THEN 44:       IF (MACHINE) THEN
 45:            OPEN(1,FILE='path.info',STATUS='OLD',form='unformatted') 45:            OPEN(1,FILE='path.info',STATUS='OLD',form='unformatted')
 46:       ELSE 46:       ELSE
 47:            OPEN(1,FILE='path.info',STATUS='OLD') 47:            OPEN(1,FILE='path.info',STATUS='OLD')
 48:       ENDIF 48:       ENDIF
 49:       NFRQS=3*(NATOMS-NGLY) 49:       NFRQS=3*(NATOMS-NGLY)
 50:       NVARS=NOPT 50:       NVARS=NOPT
195:          IF (DEBUG) WRITE(*,'(A,I6,A)') 'getallpaths> new minimum ',NMIN195:          IF (DEBUG) WRITE(*,'(A,I6,A)') 'getallpaths> new minimum ',NMIN
196:          TOPPOINTER(NMIN)=0196:          TOPPOINTER(NMIN)=0
197: !        KSUM(NMIN)=0.0D0197: !        KSUM(NMIN)=0.0D0
198: C198: C
199: C  We must delay this write until we know that all the stationary points are OK.199: C  We must delay this write until we know that all the stationary points are OK.
200: C  Writing the points to points.min doesn't matter - this is a direct access file!200: C  Writing the points to points.min doesn't matter - this is a direct access file!
201: C201: C
202: C        WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(NMIN), FVIBMIN(NMIN), HORDERMIN(NMIN), IXMIN(NMIN), IYMIN(NMIN), IZMIN(NMIN)202: C        WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(NMIN), FVIBMIN(NMIN), HORDERMIN(NMIN), IXMIN(NMIN), IYMIN(NMIN), IZMIN(NMIN)
203: C        CALL FLUSH(UMINDATA)203: C        CALL FLUSH(UMINDATA)
204: C204: C
205:  
206: !     INQUIRE(UNIT=UMIN,OPENED=TESTOP,NAMED=TESTNAME) 
207: !     PRINT *,'UNIT UMIN is ',UMIN 
208: !     PRINT *,'opened is ',TESTOP 
209: !     PRINT *,'named is ',TESTNAME 
210:  
211:          WRITE(UMIN,REC=NMIN) (NEWPOINTSMIN(J2),J2=1,NVARS)205:          WRITE(UMIN,REC=NMIN) (NEWPOINTSMIN(J2),J2=1,NVARS)
212: !        PRINT *,'getallpaths>  calling flush for UMIN' 
213:          CALL FLUSH(UMIN)206:          CALL FLUSH(UMIN)
214: 207: 
215: 130      CONTINUE208: 130      CONTINUE
216:          PLUSMIN=NEWMIN ! save in case we need it for a duplicate transition state209:          PLUSMIN=NEWMIN ! save in case we need it for a duplicate transition state
217:          NEWPOINTSMINPLUS(1:NVARS)=NEWPOINTSMIN(1:NVARS)210:          NEWPOINTSMINPLUS(1:NVARS)=NEWPOINTSMIN(1:NVARS)
218:          EPLUS=NEWEMIN211:          EPLUS=NEWEMIN
219: C212: C
220: C  Read TS data.213: C  Read TS data.
221: C214: C
222:          IF (MACHINE) THEN215:          IF (MACHINE) THEN
335:          HORDERTS(NTS)=NEWHORDERTS328:          HORDERTS(NTS)=NEWHORDERTS
336:          IXTS(NTS)=NEWIXTS329:          IXTS(NTS)=NEWIXTS
337:          IYTS(NTS)=NEWIYTS330:          IYTS(NTS)=NEWIYTS
338:          IZTS(NTS)=NEWIZTS331:          IZTS(NTS)=NEWIZTS
339:          NEGEIG(NTS)=NEWNEGEIG332:          NEGEIG(NTS)=NEWNEGEIG
340:          IF (DIJKSTRAT .OR. KSHORTESTPATHST) TSATTEMPT(NTS)=0333:          IF (DIJKSTRAT .OR. KSHORTESTPATHST) TSATTEMPT(NTS)=0
341:          IF (DEBUG) THEN334:          IF (DEBUG) THEN
342:             WRITE(*,'(A,I6,A)') 'getallpaths> new intermediate ts ',NTS335:             WRITE(*,'(A,I6,A)') 'getallpaths> new intermediate ts ',NTS
343:          ENDIF336:          ENDIF
344:          PLUS(NTS)=NEWMIN337:          PLUS(NTS)=NEWMIN
345:  
346: !     INQUIRE(UNIT=UTS,OPENED=TESTOP,NAMED=TESTNAME) 
347: !     PRINT *,'UNIT UTS is ',UTS 
348: !     PRINT *,'opened is ',TESTOP 
349: !     PRINT *,'named is ',TESTNAME 
350:  
351:          WRITE(UTS,REC=NTS) (NEWPOINTSTS(J2),J2=1,NVARS)338:          WRITE(UTS,REC=NTS) (NEWPOINTSTS(J2),J2=1,NVARS)
352:          CALL FLUSH(UTS)339:          CALL FLUSH(UTS)
353: 120      CONTINUE340: 120      CONTINUE
354: C341: C
355: C  Read data for minus minimum.342: C  Read data for minus minimum.
356: C343: C
357:          IF (MACHINE) THEN344:          IF (MACHINE) THEN
358:               READ(1) ENERGY345:               READ(1) ENERGY
359:               READ(1) HORDER346:               READ(1) HORDER
360:          ELSE347:          ELSE
447:          TOPPOINTER(NMIN)=0434:          TOPPOINTER(NMIN)=0
448: !        KSUM(NMIN)=0.0D0435: !        KSUM(NMIN)=0.0D0
449: C436: C
450: C  Delay writing data for new minimum until transition state threshold check is passed.437: C  Delay writing data for new minimum until transition state threshold check is passed.
451: C  It is OK to write points data to the direct access file.438: C  It is OK to write points data to the direct access file.
452: C439: C
453: C        WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(NMIN), FVIBMIN(NMIN), HORDERMIN(NMIN), IXMIN(NMIN), IYMIN(NMIN), IZMIN(NMIN)440: C        WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(NMIN), FVIBMIN(NMIN), HORDERMIN(NMIN), IXMIN(NMIN), IYMIN(NMIN), IZMIN(NMIN)
454: C        CALL FLUSH(UMINDATA)441: C        CALL FLUSH(UMINDATA)
455: C442: C
456:          WRITE(UMIN,REC=NMIN) (NEWPOINTSMIN(J2),J2=1,NVARS)443:          WRITE(UMIN,REC=NMIN) (NEWPOINTSMIN(J2),J2=1,NVARS)
457: !        PRINT *,'getallpaths>  calling flush for UMIN' 
458:          CALL FLUSH(UMIN)444:          CALL FLUSH(UMIN)
459: 445: 
460: 140      CONTINUE446: 140      CONTINUE
461: C447: C
462: C  Now we know the id of the MINUS minimum we can finish the bookkeeping for this ts.448: C  Now we know the id of the MINUS minimum we can finish the bookkeeping for this ts.
463: C449: C
464:          IF (TSISOLD) THEN450:          IF (TSISOLD) THEN
465:             IF (TSNUMBER.GT.0) THEN451:             IF (TSNUMBER.GT.0) THEN
466:                FAILED=.FALSE.452:                FAILED=.FALSE.
467: C453: C


r31632/keywords.f 2017-01-21 10:38:35.853335848 +0000 r31631/keywords.f 2017-01-21 10:38:38.453537970 +0000
207:       NTFOLD=1.0D4 ! real not integer !207:       NTFOLD=1.0D4 ! real not integer !
208:       TOMEGA=1.0D0208:       TOMEGA=1.0D0
209:       TFOLDTHRESH=1.0D-3209:       TFOLDTHRESH=1.0D-3
210:       MAXATTEMPT=1210:       MAXATTEMPT=1
211:       CALCORDERT=.FALSE.211:       CALCORDERT=.FALSE.
212:       OSTART=1212:       OSTART=1
213:       OFINISH=1213:       OFINISH=1
214:       CONNECTREGIONT=.FALSE.214:       CONNECTREGIONT=.FALSE.
215:       CONNECTMIN1=1215:       CONNECTMIN1=1
216:       CONNECTMIN2=1216:       CONNECTMIN2=1
217:       CONNECTMIN2F=-1 
218:       CONNECTDIST=1.0D10217:       CONNECTDIST=1.0D10
219:       SHORTCUTT=.FALSE.218:       SHORTCUTT=.FALSE.
220: !     PTAUT=.FALSE.219: !     PTAUT=.FALSE.
221:       NPAIRFRQ=0220:       NPAIRFRQ=0
222:       MERGEDBT=.FALSE.221:       MERGEDBT=.FALSE.
223:       PERSISTT=.FALSE.222:       PERSISTT=.FALSE.
224:       PEQTHRESH=1.0D-100223:       PEQTHRESH=1.0D-100
225:       PERTHRESH=0.0D0224:       PERTHRESH=0.0D0
226:       PERSISTAPPROXT=.TRUE.225:       PERSISTAPPROXT=.TRUE.
227:       ALLCOMPONENTST=.FALSE.226:       ALLCOMPONENTST=.FALSE.
766:          IF (NITEMS.GT.2) CALL READI(MAXTSATTEMPTS)765:          IF (NITEMS.GT.2) CALL READI(MAXTSATTEMPTS)
767: C766: C
768: C  Specify that the database is grown by attempting all connections between767: C  Specify that the database is grown by attempting all connections between
769: C  known minima within a distance cutoff.768: C  known minima within a distance cutoff.
770: C769: C
771:       ELSE IF (WORD.EQ.'CONNECTREGION') THEN770:       ELSE IF (WORD.EQ.'CONNECTREGION') THEN
772:          CONNECTREGIONT=.TRUE.771:          CONNECTREGIONT=.TRUE.
773:          IF (NITEMS.GT.1) CALL READI(CONNECTMIN1)772:          IF (NITEMS.GT.1) CALL READI(CONNECTMIN1)
774:          IF (NITEMS.GT.2) CALL READI(CONNECTMIN2)773:          IF (NITEMS.GT.2) CALL READI(CONNECTMIN2)
775:          IF (NITEMS.GT.3) CALL READF(CONNECTDIST)774:          IF (NITEMS.GT.3) CALL READF(CONNECTDIST)
776:          IF (NITEMS.GT.5) CALL READI(CONNECTMIN2F) 
777: 775: 
778: C776: C
779: C Connect unceonnected minima to AB set using either the lowest energy minima777: C Connect unceonnected minima to AB set using either the lowest energy minima
780: C or the minima closest in energy or distance to a reference778: C or the minima closest in energy or distance to a reference
781: C779: C
782:       780:       
783:       ELSE IF (WORD.EQ.'CONNECTUNC') THEN781:       ELSE IF (WORD.EQ.'CONNECTUNC') THEN
784:          CONUNCONT=.TRUE.782:          CONUNCONT=.TRUE.
785:          PRINT '(A)',' keywords> Attempt to connect unconnected minima'783:          PRINT '(A)',' keywords> Attempt to connect unconnected minima'
786:          CALL READU(WW)784:          CALL READU(WW)


r31632/main.F 2017-01-21 10:38:36.189362077 +0000 r31631/main.F 2017-01-21 10:38:38.701557154 +0000
406:          WRITE(*,'(A)') 'Reading initial pathway from ' // TRIM(ADJUSTL(PATHNAME)) //' in min-sad-min format'406:          WRITE(*,'(A)') 'Reading initial pathway from ' // TRIM(ADJUSTL(PATHNAME)) //' in min-sad-min format'
407:          PRINT '(2(A,I8))','The A minimum is number ',STARTMINA,' and the B minimum is ',STARTMINB407:          PRINT '(2(A,I8))','The A minimum is number ',STARTMINA,' and the B minimum is ',STARTMINB
408:       ENDIF408:       ENDIF
409:       IF (ADDPATH) THEN409:       IF (ADDPATH) THEN
410:          WRITE(*,'(A)') 'Adding stationary points from ' // TRIM(ADJUSTL(PATHNAME)) //' in min-sad-min format'410:          WRITE(*,'(A)') 'Adding stationary points from ' // TRIM(ADJUSTL(PATHNAME)) //' in min-sad-min format'
411:       ENDIF411:       ENDIF
412:       WRITE(*,'(A)') 'path.info files will be read as min-sad-min triples'412:       WRITE(*,'(A)') 'path.info files will be read as min-sad-min triples'
413:       IF (CONNECTREGIONT) THEN413:       IF (CONNECTREGIONT) THEN
414:          PRINT '(A,G12.3,A,2I8)','Pairs of minima will be chosen based upon pairs separated by less than ',  414:          PRINT '(A,G12.3,A,2I8)','Pairs of minima will be chosen based upon pairs separated by less than ',  
415:      &               CONNECTDIST,' starting from minima ',CONNECTMIN1,CONNECTMIN2415:      &               CONNECTDIST,' starting from minima ',CONNECTMIN1,CONNECTMIN2
416:          IF (CONNECTMIN2F.GT.-1) PRINT '(A,I8)','Loop over second minimum will end at minimum ',CONNECTMIN2F 
417:       ELSEIF (DIJINITT) THEN416:       ELSEIF (DIJINITT) THEN
418:          WRITE(*,'(A)') 'Performing Dijkstra analysis to perform initial connection'417:          WRITE(*,'(A)') 'Performing Dijkstra analysis to perform initial connection'
419:          IF (INDEXCOSTFUNCTION) THEN418:          IF (INDEXCOSTFUNCTION) THEN
420:             WRITE(*,'(A)') 'Using index of minima for edge weights'419:             WRITE(*,'(A)') 'Using index of minima for edge weights'
421:          ELSEIF (EXPCOSTFUNCTION) THEN420:          ELSEIF (EXPCOSTFUNCTION) THEN
422:             WRITE(*,'(A)') 'Using exponential distance for edge weights'421:             WRITE(*,'(A)') 'Using exponential distance for edge weights'
423:          ELSEIF (.NOT.INTCONSTRAINTT) THEN422:          ELSEIF (.NOT.INTCONSTRAINTT) THEN
424:             WRITE(*,'(A,I4,A)') 'Using distance to the power ',CostFunctionPower,' for edge weights'423:             WRITE(*,'(A,I4,A)') 'Using distance to the power ',CostFunctionPower,' for edge weights'
425:          ENDIF424:          ENDIF
426:          WRITE(*,'(A,G20.10)') 'Transition states will be rejected above threshold energy ',TSTHRESH425:          WRITE(*,'(A,G20.10)') 'Transition states will be rejected above threshold energy ',TSTHRESH


r31632/minpermdist.f90 2017-01-21 10:38:36.497386079 +0000 r31631/minpermdist.f90 2017-01-21 10:38:38.945576032 +0000
594:       IF (PULLT.OR.TWOD) THEN ! reflect in xz plane rather than invert!594:       IF (PULLT.OR.TWOD) THEN ! reflect in xz plane rather than invert!
595:          RMATBEST(1:3,1:3)=MATMUL(RMATBEST,REFXZ)595:          RMATBEST(1:3,1:3)=MATMUL(RMATBEST,REFXZ)
596:       ELSE596:       ELSE
597:          RMATBEST(1:3,1:3)=-RMATBEST(1:3,1:3)597:          RMATBEST(1:3,1:3)=-RMATBEST(1:3,1:3)
598:       ENDIF598:       ENDIF
599:    ENDIF599:    ENDIF
600: ENDIF600: ENDIF
601: !601: !
602: ! If GEOMDIFFTOL is set too large we could miss the best solution by exiting prematurely.602: ! If GEOMDIFFTOL is set too large we could miss the best solution by exiting prematurely.
603: ! Turn off the next line?!603: ! Turn off the next line?!
604: ! This greatly increases the time taken to parse path.info files - not recommended! 
605: ! 604: ! 
606: IF (SQRT(DBEST).LT.GEOMDIFFTOL) GOTO 50605: ! IF (SQRT(DBEST).LT.GEOMDIFFTOL) GOTO 50
607: !606: !
608: !IF(BULKT) GOTO 50 ! sn402607: !IF(BULKT) GOTO 50 ! sn402
609: 608: 
610: IF (OHCELLT.AND.(OPNUM.LT.48)) GOTO 25609: IF (OHCELLT.AND.(OPNUM.LT.48)) GOTO 25
611: IF (NCHOOSE2.LT.NORBIT2) GOTO 30610: IF (NCHOOSE2.LT.NORBIT2) GOTO 30
612: IF (NCHOOSE1.LT.NORBIT1) GOTO 65611: IF (NCHOOSE1.LT.NORBIT1) GOTO 65
613: IF (NCHOOSEB2.LT.NORBITB2) GOTO 31612: IF (NCHOOSEB2.LT.NORBITB2) GOTO 31
614: IF (NCHOOSEB1.LT.NORBITB1) GOTO 66613: IF (NCHOOSEB1.LT.NORBITB1) GOTO 66
615: !614: !
616: !  Now try the enantiomer (or xz reflected structure for PULLT.OR.EFIELDT.OR.TWOD).615: !  Now try the enantiomer (or xz reflected structure for PULLT.OR.EFIELDT.OR.TWOD).


r31632/nodes.f90 2017-01-21 10:38:36.809410395 +0000 r31631/nodes.f90 2017-01-21 10:38:39.237598552 +0000
364: ! (7) submit the job for real364: ! (7) submit the job for real
365: ! Commands for srun written into this script365: ! Commands for srun written into this script
366:           OPEN(UNIT=225,FILE='submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',STATUS='UNKNOWN')366:           OPEN(UNIT=225,FILE='submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',STATUS='UNKNOWN')
367:           WRITE(225,'(A)') '#!/bin/bash'367:           WRITE(225,'(A)') '#!/bin/bash'
368:           WRITE(225,'(A)') TRIM(ADJUSTL(TOTALJOBSTRING))368:           WRITE(225,'(A)') TRIM(ADJUSTL(TOTALJOBSTRING))
369:           CLOSE(225)369:           CLOSE(225)
370:           CALL MYSYSTEM(MYSTAT,LDEBUG,'chmod +x submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh')370:           CALL MYSYSTEM(MYSTAT,LDEBUG,'chmod +x submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh')
371:           IF (CUDAT) THEN371:           IF (CUDAT) THEN
372:              CALL SYSTEM_SUBR('srun -n1 -N1 -l --gres=gpu:1 submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS)372:              CALL SYSTEM_SUBR('srun -n1 -N1 -l --gres=gpu:1 submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS)
373:           ELSE373:           ELSE
374: !            CALL SYSTEM_SUBR('srun -n1 -N1 -l submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS)374:              CALL SYSTEM_SUBR('srun -n1 -N1 -l submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS)
375:              CALL SYSTEM_SUBR('srun -n1 -N1 --exclusive submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS) 
376:           END IF375:           END IF
377: ! Remove srun script after completion376: ! Remove srun script after completion
378:           CALL MYSYSTEM(MYSTAT,LDEBUG,'rm -rf submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh')377:           CALL MYSYSTEM(MYSTAT,LDEBUG,'rm -rf submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh')
379:           STAT=MYSTATUS378:           STAT=MYSTATUS
380: 379: 
381:      END SUBROUTINE SLURMSUBMIT380:      END SUBROUTINE SLURMSUBMIT
382: 381: 
383: END MODULE NODES382: END MODULE NODES


r31632/setup.f 2017-01-21 10:38:37.149436850 +0000 r31631/setup.f 2017-01-21 10:38:39.561623522 +0000
 36:       DOUBLE PRECISION PFNORM1, PFNORM2 36:       DOUBLE PRECISION PFNORM1, PFNORM2
 37:       DOUBLE PRECISION, ALLOCATABLE :: NEWPFMIN(:) 37:       DOUBLE PRECISION, ALLOCATABLE :: NEWPFMIN(:)
 38:       INTEGER, ALLOCATABLE :: CANDIDATES(:), MINPREV(:), MINREMOVE(:), TSREMOVE(:), MINRETAIN(:), TSRETAIN(:) 38:       INTEGER, ALLOCATABLE :: CANDIDATES(:), MINPREV(:), MINREMOVE(:), TSREMOVE(:), MINRETAIN(:), TSRETAIN(:)
 39:       DOUBLE PRECISION NEWEMIN, NEWIXMIN, NEWIYMIN, NEWIZMIN, NEWFVIBMIN, TSEGUESS, NEWMINCURVE, NEWMINFRQ2, 39:       DOUBLE PRECISION NEWEMIN, NEWIXMIN, NEWIYMIN, NEWIZMIN, NEWFVIBMIN, TSEGUESS, NEWMINCURVE, NEWMINFRQ2,
 40:      &                 TSFVIBGUESS, DUMMY, FRICTIONFAC, GLOBALMIN 40:      &                 TSFVIBGUESS, DUMMY, FRICTIONFAC, GLOBALMIN
 41:       DOUBLE PRECISION :: CUT_UNDERFLOW=-300.0D0 41:       DOUBLE PRECISION :: CUT_UNDERFLOW=-300.0D0
 42:       LOGICAL DEADTS 42:       LOGICAL DEADTS
 43:       CHARACTER(LEN=80) S1, S2, FNAME 43:       CHARACTER(LEN=80) S1, S2, FNAME
 44:       CHARACTER :: CDUMMY 44:       CHARACTER :: CDUMMY
 45:       INTEGER NEWHORDERMIN 45:       INTEGER NEWHORDERMIN
 46:       LOGICAL DUPLICATES_CHECK, TESTOP, TESTNAME 46:       LOGICAL DUPLICATES_CHECK
 47:       INTEGER :: LINECOUNT = 1 ! For writing pairfiles with MAKEPAIRS 47:       INTEGER :: LINECOUNT = 1 ! For writing pairfiles with MAKEPAIRS
 48:       INTEGER :: LASTMIN = -1  ! For writing pairfiles with MAKEPAIRS 48:       INTEGER :: LASTMIN = -1  ! For writing pairfiles with MAKEPAIRS
 49:  49: 
 50:       IF (CHARMMT.and..not.machine) CALL READREF('input.crd') 50:       IF (CHARMMT.and..not.machine) CALL READREF('input.crd')
 51:  51: 
 52:       OPEN(UNIT=UMIN,FILE='points.min',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)  52:       OPEN(UNIT=UMIN,FILE='points.min',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT) 
 53:       OPEN(UNIT=UTS,FILE='points.ts',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)  53:       OPEN(UNIT=UTS,FILE='points.ts',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT) 
 54:  54: 
 55: !     INQUIRE(UNIT=UMIN,OPENED=TESTOP,NAMED=TESTNAME) 
 56: !     PRINT *,'UNIT UMIN is ',UMIN 
 57: !     PRINT *,'opened is ',TESTOP 
 58: !     PRINT *,'named is ',TESTNAME 
 59:  
 60: !     INQUIRE(UNIT=UTS,OPENED=TESTOP,NAMED=TESTNAME) 
 61: !     PRINT *,'UNIT UTS is ',UTS 
 62: !     PRINT *,'opened is ',TESTOP 
 63: !     PRINT *,'named is ',TESTNAME 
 64:  
 65:       IF (FROMLOWESTT) THEN 55:       IF (FROMLOWESTT) THEN
 66:          IF (.NOT.NOFRQS) THEN 56:          IF (.NOT.NOFRQS) THEN
 67:             WRITE(*,'(A)')'setup> FROMLOWEST does not calculate frequencies; only use with NOFRQS' 57:             WRITE(*,'(A)')'setup> FROMLOWEST does not calculate frequencies; only use with NOFRQS'
 68:             STOP 58:             STOP
 69:          ENDIF 59:          ENDIF
 70:          WRITE(*,'(A)')'setup> writing points.min file and min.data from lowest file' 60:          WRITE(*,'(A)')'setup> writing points.min file and min.data from lowest file'
 71:          OPEN(UNIT=1,FILE='lowest',STATUS='UNKNOWN') 61:          OPEN(UNIT=1,FILE='lowest',STATUS='UNKNOWN')
 72:          LUNIT=GETUNIT() 62:          LUNIT=GETUNIT()
 73:          OPEN(UNIT=LUNIT,FILE='points.min.new',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT) 63:          OPEN(UNIT=LUNIT,FILE='points.min.new',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)
 74:          LUNIT2=GETUNIT() 64:          LUNIT2=GETUNIT()
592: C582: C
593: C  Check that the necessary coordinates are in fact present. 583: C  Check that the necessary coordinates are in fact present. 
594: C584: C
595:       IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0)) THEN585:       IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0)) THEN
596:           IF (AMHT) THEN586:           IF (AMHT) THEN
597:             WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'587:             WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'
598:           ELSE588:           ELSE
599:            DO J1=1,NMIN589:            DO J1=1,NMIN
600:             READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)590:             READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)
601:             CALL INERTIAWRAPPER(LOCALPOINTS,NOPT,angleAxis,IXM,IYM,IZM)591:             CALL INERTIAWRAPPER(LOCALPOINTS,NOPT,angleAxis,IXM,IYM,IZM)
602: !           IF (DEBUG) WRITE(*,'(2F20.10,I6,3F20.10)') EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXM,IYM,IZM592:             IF (DEBUG) WRITE(*,'(2F20.10,I6,3F20.10)') EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXM,IYM,IZM
603:             IF ((ABS(IXM-IXMIN(J1)).GT.IDIFFTOL).OR.593:             IF ((ABS(IXM-IXMIN(J1)).GT.IDIFFTOL).OR.
604:      1          (ABS(IYM-IYMIN(J1)).GT.IDIFFTOL).OR.594:      1          (ABS(IYM-IYMIN(J1)).GT.IDIFFTOL).OR.
605:      1          (ABS(IZM-IZMIN(J1)).GT.IDIFFTOL)) THEN595:      1          (ABS(IZM-IZMIN(J1)).GT.IDIFFTOL)) THEN
606:                WRITE(*,'(A,I10)') 'setup> WARNING - principal moments of inertia do not agree with input for minimum ',J1596:                WRITE(*,'(A,I10)') 'setup> WARNING - principal moments of inertia do not agree with input for minimum ',J1
607:                WRITE(*,'(A,3F20.10)') 'setup> values from coordinates: ',IXM,IYM,IZM597:                WRITE(*,'(A,3F20.10)') 'setup> values from coordinates: ',IXM,IYM,IZM
608:                WRITE(*,'(A,2F20.10,I6,3F20.10)') 'setup> values from min.data: ', 598:                WRITE(*,'(A,2F20.10,I6,3F20.10)') 'setup> values from min.data: ', 
609:      &                     EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXMIN(J1),IYMIN(J1),IZMIN(J1)599:      &                     EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXMIN(J1),IYMIN(J1),IZMIN(J1)
610:                IXMIN(J1)=IXM600:                IXMIN(J1)=IXM
611:                IYMIN(J1)=IYM601:                IYMIN(J1)=IYM
612:                IZMIN(J1)=IZM602:                IZMIN(J1)=IZM
759:                PFNORM2=PFNORM2+EXP(PFMIN(J1)-PFMIN(1))749:                PFNORM2=PFNORM2+EXP(PFMIN(J1)-PFMIN(1))
760:                IF (PFMIN(J1).GT.PFMEAN) PFMEAN=PFMIN(J1)750:                IF (PFMIN(J1).GT.PFMEAN) PFMEAN=PFMIN(J1)
761:             ELSE751:             ELSE
762:                PFMIN(J1) = -1.0D250752:                PFMIN(J1) = -1.0D250
763:             ENDIF753:             ENDIF
764:          ENDDO754:          ENDDO
765:       ELSE755:       ELSE
766:          PRINT*,'ERROR, ENSEMBLE must be set to T or E'756:          PRINT*,'ERROR, ENSEMBLE must be set to T or E'
767:          STOP757:          STOP
768:       ENDIF758:       ENDIF
769: !     IF (DEBUG) THEN759:       IF (DEBUG) THEN
770: !        WRITE(*,'(A,3G20.10)') 'setup> largest ln Z,PFNORM1,PFNORM2=',PFMEAN,PFNORM1,PFNORM2760:          WRITE(*,'(A,3G20.10)') 'setup> largest ln Z,PFNORM1,PFNORM2=',PFMEAN,PFNORM1,PFNORM2
771: !        WRITE(*,'(A)') '        V-V_min    pg order     high T/E prob       Peq'761:          WRITE(*,'(A)') '        V-V_min    pg order     high T/E prob       Peq'
772: !        DO J1=1,NMIN762:          DO J1=1,NMIN
773: !           WRITE(*,'(F20.10,I6,2G20.10)') EMIN(J1),HORDERMIN(J1), 763:             WRITE(*,'(F20.10,I6,2G20.10)') EMIN(J1),HORDERMIN(J1), 
774: !    &                    EXP(-FVIBMIN(J1)/2.0D0-LOG(1.0D0*HORDERMIN(J1))-LOG(PFNORM1)+ FVIBMIN(1)/2.0D0 + LOG(1.0D0*HORDERMIN(1))), 764:      &                    EXP(-FVIBMIN(J1)/2.0D0-LOG(1.0D0*HORDERMIN(J1))-LOG(PFNORM1)+ FVIBMIN(1)/2.0D0 + LOG(1.0D0*HORDERMIN(1))), 
775: !    &                    EXP(PFMIN(J1)-PFMIN(1)-LOG(PFNORM2))765:      &                    EXP(PFMIN(J1)-PFMIN(1)-LOG(PFNORM2))
776: !        ENDDO766:          ENDDO
777: !     ENDIF767:       ENDIF
778: !     DO J1=1,NMIN768: !     DO J1=1,NMIN
779: !        PFMIN(J1) = PFMIN(J1) - PFMEAN769: !        PFMIN(J1) = PFMIN(J1) - PFMEAN
780: !     ENDDO770: !     ENDDO
781: 771: 
782:       PFTOTALB=0.0D0772:       PFTOTALB=0.0D0
783:       DO J1=1,NMINB773:       DO J1=1,NMINB
784:          PFTOTALB=PFTOTALB+EXP(PFMIN(LOCATIONB(J1))-PFMIN(LOCATIONB(1)))774:          PFTOTALB=PFTOTALB+EXP(PFMIN(LOCATIONB(J1))-PFMIN(LOCATIONB(1)))
785:       ENDDO775:       ENDDO
786:       IF (NMINB.GT.0.0D0) PFTOTALB=LOG(PFTOTALB)+PFMIN(LOCATIONB(1))776:       IF (NMINB.GT.0.0D0) PFTOTALB=LOG(PFTOTALB)+PFMIN(LOCATIONB(1))
787: 777: 
942:                J2=0932:                J2=0
943:                DO J1=1,NTS933:                DO J1=1,NTS
944:                   READ(1,'(I8)',END=51) TSATTEMPT(J1)934:                   READ(1,'(I8)',END=51) TSATTEMPT(J1)
945:                   J2=J2+1935:                   J2=J2+1
946:                ENDDO936:                ENDDO
947: 51             CLOSE(1)937: 51             CLOSE(1)
948:                IF (J2.LT.NTS) PRINT '(A)','setup> WARNING - end of file ts.attempts, remaining attempts set to zero'938:                IF (J2.LT.NTS) PRINT '(A)','setup> WARNING - end of file ts.attempts, remaining attempts set to zero'
949:             ENDIF939:             ENDIF
950:          ENDIF940:          ENDIF
951: 941: 
952:          PRINT '(A)','setup> Setting up ts pointers' 
953:          DO J1=1,NTS942:          DO J1=1,NTS
954:             POINTERP(J1)=-1943:             POINTERP(J1)=-1
955:             POINTERM(J1)=-1944:             POINTERM(J1)=-1
956:          ENDDO945:          ENDDO
957:          DO J1=NTS,1,-1946:          DO J1=NTS,1,-1
958:             IF (J1.GT.TOPPOINTER(PLUS(J1)))  TOPPOINTER(PLUS(J1))=J1947:             IF (J1.GT.TOPPOINTER(PLUS(J1)))  TOPPOINTER(PLUS(J1))=J1
959:             IF (J1.GT.TOPPOINTER(MINUS(J1))) TOPPOINTER(MINUS(J1))=J1948:             IF (J1.GT.TOPPOINTER(MINUS(J1))) TOPPOINTER(MINUS(J1))=J1
960:             DO J2=J1-1,1,-1949:             DO J2=J1-1,1,-1
961:                IF (PLUS(J2).EQ.PLUS(J1)) THEN950:                IF (PLUS(J2).EQ.PLUS(J1)) THEN
962:                   POINTERP(J1)=J2951:                   POINTERP(J1)=J2
981: !        IF (DEBUG) THEN970: !        IF (DEBUG) THEN
982: !           DO J1=1,NMIN971: !           DO J1=1,NMIN
983: !              WRITE(*,'(A,I10,A,I10)') 'setup> for minimum ',J1,' last occurrence is for ts number ',TOPPOINTER(J1)972: !              WRITE(*,'(A,I10,A,I10)') 'setup> for minimum ',J1,' last occurrence is for ts number ',TOPPOINTER(J1)
984: !           ENDDO973: !           ENDDO
985: !           DO J1=1,NTS974: !           DO J1=1,NTS
986: !              WRITE(*,'(A,I10,A,4I10)') 'setup> for ts ',J1,' +,-,p+,p-:',PLUS(J1),MINUS(J1),POINTERP(J1),POINTERM(J1)975: !              WRITE(*,'(A,I10,A,4I10)') 'setup> for ts ',J1,' +,-,p+,p-:',PLUS(J1),MINUS(J1),POINTERP(J1),POINTERM(J1)
987: !           ENDDO976: !           ENDDO
988: !        ENDIF977: !        ENDIF
989:     978:     
990:          IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0).AND.(.NOT.DUMMYTST)) THEN979:          IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0).AND.(.NOT.DUMMYTST)) THEN
991:             PRINT '(A)','setup> Checking ts moments of inertia' 
992:             IF (AMHT) THEN980:             IF (AMHT) THEN
993:               WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'981:               WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'
994:             ELSE982:             ELSE
995:                DO J1=1,NTS983:                DO J1=1,NTS
996:                   READ(UTS,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)984:                   READ(UTS,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)
997:                   CALL INERTIAWRAPPER(LOCALPOINTS,NOPT,angleAxis,IXM,IYM,IZM)985:                   CALL INERTIAWRAPPER(LOCALPOINTS,NOPT,angleAxis,IXM,IYM,IZM)
998: !                 IF (DEBUG) WRITE(*,'(A,I10,2F17.7,3I6,3F15.5)') 'setup> ',J1,ETS(J1),FVIBTS(J1),HORDERTS(J1),986: !                 IF (DEBUG) WRITE(*,'(A,I10,2F17.7,3I6,3F15.5)') 'setup> ',J1,ETS(J1),FVIBTS(J1),HORDERTS(J1),
999: !    1                                                            PLUS(J1),MINUS(J1),IXM,IYM,IZM987: !    1                                                            PLUS(J1),MINUS(J1),IXM,IYM,IZM
1000:                   IF ((ABS(IXM-IXTS(J1)).GT.IDIFFTOL).OR.988:                   IF ((ABS(IXM-IXTS(J1)).GT.IDIFFTOL).OR.
1001:      1                (ABS(IYM-IYTS(J1)).GT.IDIFFTOL).OR.989:      1                (ABS(IYM-IYTS(J1)).GT.IDIFFTOL).OR.
1323:             PRINT '(A,I8)','setup> removing ts ',J11311:             PRINT '(A,I8)','setup> removing ts ',J1
1324:          ENDDO tsloop21312:          ENDDO tsloop2
1325:          CLOSE(3); CLOSE(5)1313:          CLOSE(3); CLOSE(5)
1326:          PRINT '(A,I8,A)','setup> ',NDUMMY,' transition states retained'1314:          PRINT '(A,I8,A)','setup> ',NDUMMY,' transition states retained'
1327:          STOP1315:          STOP
1328:       ENDIF1316:       ENDIF
1329: C1317: C
1330: C  Rate constants.1318: C  Rate constants.
1331: C1319: C
1332: !     KMEAN=0.0D01320: !     KMEAN=0.0D0
1333:       PRINT '(A)','setup> Calculating rate constants' 
1334:       IF (ENSEMBLE.EQ.'T') THEN1321:       IF (ENSEMBLE.EQ.'T') THEN
1335:          DO J1=1,NTS1322:          DO J1=1,NTS
1336:             KPLUS(J1)  = LOG(1.0D0 * HORDERMIN(PLUS(J1))  / (2.0D0 * PI*HORDERTS(J1))) +1323:             KPLUS(J1)  = LOG(1.0D0 * HORDERMIN(PLUS(J1))  / (2.0D0 * PI*HORDERTS(J1))) +
1337:      1             (FVIBMIN(PLUS(J1))  - FVIBTS(J1)) / 2.0D0 - (ETS(J1) - EMIN(PLUS(J1)) )/TEMPERATURE1324:      1             (FVIBMIN(PLUS(J1))  - FVIBTS(J1)) / 2.0D0 - (ETS(J1) - EMIN(PLUS(J1)) )/TEMPERATURE
1338:             IF (FRICTIONT) KPLUS(J1)=KPLUS(J1)+LOG(FRICTIONFAC(NEGEIG(J1)))1325:             IF (FRICTIONT) KPLUS(J1)=KPLUS(J1)+LOG(FRICTIONFAC(NEGEIG(J1)))
1339:             KMINUS(J1) = LOG(1.0D0 * HORDERMIN(MINUS(J1)) / (2.0D0 * PI*HORDERTS(J1))) +1326:             KMINUS(J1) = LOG(1.0D0 * HORDERMIN(MINUS(J1)) / (2.0D0 * PI*HORDERTS(J1))) +
1340:      1             (FVIBMIN(MINUS(J1)) - FVIBTS(J1)) / 2.0D0 - (ETS(J1) - EMIN(MINUS(J1)))/TEMPERATURE1327:      1             (FVIBMIN(MINUS(J1)) - FVIBTS(J1)) / 2.0D0 - (ETS(J1) - EMIN(MINUS(J1)))/TEMPERATURE
1341:             IF (FRICTIONT) KMINUS(J1)=KMINUS(J1)+LOG(FRICTIONFAC(NEGEIG(J1)))1328:             IF (FRICTIONT) KMINUS(J1)=KMINUS(J1)+LOG(FRICTIONFAC(NEGEIG(J1)))
1342:             IF (ZSYM(1:2).EQ.'CA') KPLUS(J1)=KPLUS(J1)+30.66356D01329:             IF (ZSYM(1:2).EQ.'CA') KPLUS(J1)=KPLUS(J1)+30.66356D0
1343:             IF (ZSYM(1:2).EQ.'CA') KMINUS(J1)=KMINUS(J1)+30.66356D01330:             IF (ZSYM(1:2).EQ.'CA') KMINUS(J1)=KMINUS(J1)+30.66356D0
1344:             IF (PLUS(J1).EQ.MINUS(J1)) KPLUS(J1)=KPLUS(J1)+LOG(2.0D0)1331:             IF (PLUS(J1).EQ.MINUS(J1)) KPLUS(J1)=KPLUS(J1)+LOG(2.0D0)
1345:             IF (PLUS(J1).EQ.MINUS(J1)) KMINUS(J1)=KMINUS(J1)+LOG(2.0D0)1332:             IF (PLUS(J1).EQ.MINUS(J1)) KMINUS(J1)=KMINUS(J1)+LOG(2.0D0)
1346: !           KMEAN=KMEAN+KPLUS(J1)+KMINUS(J1)1333: !           KMEAN=KMEAN+KPLUS(J1)+KMINUS(J1)
1347: !           IF (DEBUG) WRITE(*,'(A,3I10,5G20.10,3G20.10)') 'setup> J1,PLUS,MINUS,Ets,E+,E-,k+,k-=',J1,PLUS(J1),MINUS(J1),1334:             IF (DEBUG) WRITE(*,'(A,3I10,5G20.10,3G20.10)') 'setup> J1,PLUS,MINUS,Ets,E+,E-,k+,k-=',J1,PLUS(J1),MINUS(J1),
1348: !    1                                            ETS(J1),EMIN(PLUS(J1)),EMIN(MINUS(J1)),KPLUS(J1),KMINUS(J1)1335:      1                                            ETS(J1),EMIN(PLUS(J1)),EMIN(MINUS(J1)),KPLUS(J1),KMINUS(J1)
1349:          ENDDO1336:          ENDDO
1350:       ELSE1337:       ELSE
1351:          DO J1=1,NTS1338:          DO J1=1,NTS
1352:             IF (TOTALE.GT.ETS(J1)) THEN1339:             IF (TOTALE.GT.ETS(J1)) THEN
1353:                KPLUS(J1)  = LOG(1.0D0 * HORDERMIN(PLUS(J1))  / (2*PI*HORDERTS(J1))) +1340:                KPLUS(J1)  = LOG(1.0D0 * HORDERMIN(PLUS(J1))  / (2*PI*HORDERTS(J1))) +
1354:      1                   (FVIBMIN(PLUS(J1))  - FVIBTS(J1))/2 + (KAPPA-1)*LOG((TOTALE-ETS(J1))/(TOTALE-EMIN(PLUS(J1))))1341:      1                   (FVIBMIN(PLUS(J1))  - FVIBTS(J1))/2 + (KAPPA-1)*LOG((TOTALE-ETS(J1))/(TOTALE-EMIN(PLUS(J1))))
1355:                KMINUS(J1) = LOG(1.0D0 * HORDERMIN(MINUS(J1)) / (2*PI*HORDERTS(J1))) +1342:                KMINUS(J1) = LOG(1.0D0 * HORDERMIN(MINUS(J1)) / (2*PI*HORDERTS(J1))) +
1356:      1                   (FVIBMIN(MINUS(J1)) - FVIBTS(J1))/2 + (KAPPA-1)*LOG((TOTALE-ETS(J1))/(TOTALE-EMIN(MINUS(J1))))1343:      1                   (FVIBMIN(MINUS(J1)) - FVIBTS(J1))/2 + (KAPPA-1)*LOG((TOTALE-ETS(J1))/(TOTALE-EMIN(MINUS(J1))))
1357:                IF (ZSYM(1:2).EQ.'CA') KPLUS(J1)=KPLUS(J1)+30.66356D01344:                IF (ZSYM(1:2).EQ.'CA') KPLUS(J1)=KPLUS(J1)+30.66356D0
1358:                IF (ZSYM(1:2).EQ.'CA') KMINUS(J1)=KMINUS(J1)+30.66356D01345:                IF (ZSYM(1:2).EQ.'CA') KMINUS(J1)=KMINUS(J1)+30.66356D0
1427: !           PRINT '(6G20.10)',GPFOLD(1:NMIN)1414: !           PRINT '(6G20.10)',GPFOLD(1:NMIN)
1428:          ENDIF1415:          ENDIF
1429:       ENDIF1416:       ENDIF
1430: C1417: C
1431: C  Read in the pairs of minima previously searched in pairs.data exists.1418: C  Read in the pairs of minima previously searched in pairs.data exists.
1432: C1419: C
1433:       ALLOCATE(PAIR1(MAXPAIRS),PAIR2(MAXPAIRS))1420:       ALLOCATE(PAIR1(MAXPAIRS),PAIR2(MAXPAIRS))
1434:       INQUIRE(FILE='pairs.data',EXIST=YESNO)1421:       INQUIRE(FILE='pairs.data',EXIST=YESNO)
1435:       NPAIRDONE=01422:       NPAIRDONE=0
1436:       IF (YESNO) THEN1423:       IF (YESNO) THEN
1437:          PRINT '(A)','setup> Reading pairs.data' 
1438:          OPEN(UNIT=1,FILE='pairs.data',STATUS='OLD')1424:          OPEN(UNIT=1,FILE='pairs.data',STATUS='OLD')
1439:          DO 1425:          DO 
1440:             NPAIRDONE=NPAIRDONE+11426:             NPAIRDONE=NPAIRDONE+1
1441:             IF (NPAIRDONE.GT.MAXPAIRS) CALL PAIRDOUBLE1427:             IF (NPAIRDONE.GT.MAXPAIRS) CALL PAIRDOUBLE
1442:             READ(1,*,END=120) PAIR1(NPAIRDONE), PAIR2(NPAIRDONE)1428:             READ(1,*,END=120) PAIR1(NPAIRDONE), PAIR2(NPAIRDONE)
1443:             IF (DEBUG) PRINT '(A,I8,A,2I8)','setup > previously searched pair number ',1429:             IF (DEBUG) PRINT '(A,I8,A,2I8)','setup > previously searched pair number ',
1444:      &                                      NPAIRDONE,' is ',PAIR1(NPAIRDONE), PAIR2(NPAIRDONE)1430:      &                                      NPAIRDONE,' is ',PAIR1(NPAIRDONE), PAIR2(NPAIRDONE)
1445:             IF ((PAIR1(NPAIRDONE).GT.NMIN).OR.(PAIR2(NPAIRDONE).GT.NMIN)) THEN1431:             IF ((PAIR1(NPAIRDONE).GT.NMIN).OR.(PAIR2(NPAIRDONE).GT.NMIN)) THEN
1446:                PRINT '(A)','setup> ERROR *** minima specified in pairs.data do not exist in min.data'1432:                PRINT '(A)','setup> ERROR *** minima specified in pairs.data do not exist in min.data'
1447:                STOP1433:                STOP
1451:          NPAIRDONE=NPAIRDONE-11437:          NPAIRDONE=NPAIRDONE-1
1452:          PRINT '(A,I8,A)','setup> ',NPAIRDONE,' pairs of minima already searched read from pairs.data'1438:          PRINT '(A,I8,A)','setup> ',NPAIRDONE,' pairs of minima already searched read from pairs.data'
1453:       ENDIF1439:       ENDIF
1454: C1440: C
1455: C  Read in the minima previously searched in UNTRAP runs.1441: C  Read in the minima previously searched in UNTRAP runs.
1456: C1442: C
1457:       ALLOCATE(MINDONE(MAXDONE))1443:       ALLOCATE(MINDONE(MAXDONE))
1458:       INQUIRE(FILE='min.done',EXIST=YESNO)1444:       INQUIRE(FILE='min.done',EXIST=YESNO)
1459:       NMINDONE=01445:       NMINDONE=0
1460:       IF (YESNO) THEN1446:       IF (YESNO) THEN
1461:          PRINT '(A)','setup> Reading min.done' 
1462:          OPEN(UNIT=1,FILE='min.done',STATUS='OLD')1447:          OPEN(UNIT=1,FILE='min.done',STATUS='OLD')
1463:          DO 1448:          DO 
1464:             NMINDONE=NMINDONE+11449:             NMINDONE=NMINDONE+1
1465:             IF (NMINDONE.GT.MAXDONE) CALL DONEDOUBLE1450:             IF (NMINDONE.GT.MAXDONE) CALL DONEDOUBLE
1466:             READ(1,*,END=121) MINDONE(NMINDONE)1451:             READ(1,*,END=121) MINDONE(NMINDONE)
1467:             IF (DEBUG) PRINT '(A,I8,A,2I8)','setup > previously searched minimum ',1452:             IF (DEBUG) PRINT '(A,I8,A,2I8)','setup > previously searched minimum ',
1468:      &                                      NMINDONE,' is ',MINDONE(NMINDONE)1453:      &                                      NMINDONE,' is ',MINDONE(NMINDONE)
1469:          ENDDO1454:          ENDDO
1470: 121      CLOSE(1)1455: 121      CLOSE(1)
1471:          NMINDONE=NMINDONE-11456:          NMINDONE=NMINDONE-1
1642:       IF (MICROTHERMT) CALL MICROTHERM1627:       IF (MICROTHERMT) CALL MICROTHERM
1643: 1628: 
1644:       IF ((CONNECTIONS.GT.1).AND.(CHECKCONNECTIONST)) THEN1629:       IF ((CONNECTIONS.GT.1).AND.(CHECKCONNECTIONST)) THEN
1645:          WRITE(*,'(A,I6,A)') 'setup> checking for at least ',CONNECTIONS,' connections per minimum'1630:          WRITE(*,'(A,I6,A)') 'setup> checking for at least ',CONNECTIONS,' connections per minimum'
1646:          WRITE(*,'(A,I6,A)') 'setup> WARNING *** use the NEWCONNECTIONS keyword to use more than one core'1631:          WRITE(*,'(A,I6,A)') 'setup> WARNING *** use the NEWCONNECTIONS keyword to use more than one core'
1647:          DO J1=1,NMIN1632:          DO J1=1,NMIN
1648:             CALL TSSEARCH(J1,0)1633:             CALL TSSEARCH(J1,0)
1649:          ENDDO1634:          ENDDO
1650:       ENDIF1635:       ENDIF
1651: 1636: 
1652: !     INQUIRE(UNIT=UMIN,OPENED=TESTOP,NAMED=TESTNAME) 
1653: !     PRINT *,'UNIT UMIN is ',UMIN 
1654: !     PRINT *,'opened is ',TESTOP 
1655: !     PRINT *,'named is ',TESTNAME 
1656:  
1657: !     INQUIRE(UNIT=UTS,OPENED=TESTOP,NAMED=TESTNAME) 
1658: !     PRINT *,'UNIT UTS is ',UTS 
1659: !     PRINT *,'opened is ',TESTOP 
1660: !     PRINT *,'named is ',TESTNAME 
1661:        
1662:  
1663:       RETURN 1637:       RETURN 
1664:       END1638:       END
1665: 1639: 
1666:       DOUBLE PRECISION FUNCTION TSEGUESS(E1,E2,C1,C2,DISTANCE)1640:       DOUBLE PRECISION FUNCTION TSEGUESS(E1,E2,C1,C2,DISTANCE)
1667:       IMPLICIT NONE1641:       IMPLICIT NONE
1668:       DOUBLE PRECISION E1, E2, DISTANCE, C1, C2, ARGUMENT1642:       DOUBLE PRECISION E1, E2, DISTANCE, C1, C2, ARGUMENT
1669: C1643: C
1670: C     ARGUMENT=c1*c2*distance**2 - 6*(c1 - c2)*(e1 - e2)1644: C     ARGUMENT=c1*c2*distance**2 - 6*(c1 - c2)*(e1 - e2)
1671: C     IF (ARGUMENT.LT.0.0D0) ARGUMENT=0.0D01645: C     IF (ARGUMENT.LT.0.0D0) ARGUMENT=0.0D0
1672: C     IF (C1.EQ.C2) THEN1646: C     IF (C1.EQ.C2) THEN


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0