hdiff output

r29793/commons.f90 2016-07-06 15:39:27.338358052 +0100 r29792/commons.f90 2016-07-06 15:39:32.802431879 +0100
  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, MLPOUT, MLPHIDDEN, NMLP, NOPT 13:      &        RFKMCN, RFKMCSTEPS, NPEQ
 14:       14:      
 15:       INTEGER, ALLOCATABLE :: LOCATIONA(:), LOCATIONB(:) 15:       INTEGER, ALLOCATABLE :: LOCATIONA(:), LOCATIONB(:)
 16:       INTEGER, ALLOCATABLE :: NCONN(:)     ! reallocate MAXMIN when used 16:       INTEGER, ALLOCATABLE :: NCONN(:)     ! reallocate MAXMIN when used
 17:       INTEGER, ALLOCATABLE :: BESTPATH(:)   17:       INTEGER, ALLOCATABLE :: BESTPATH(:)  
 18:       INTEGER, ALLOCATABLE :: USEPAIRSMIN(:) 18:       INTEGER, ALLOCATABLE :: USEPAIRSMIN(:)
 19: ! 19: !
 20: ! I/O unit numbers 20: ! I/O unit numbers
 21: ! 21: !
 22:       INTEGER, PARAMETER :: UMINDATA=11, UTSDATA=12, UMIN=13, UTS=15 22:       INTEGER, PARAMETER :: UMINDATA=11, UTSDATA=12, UMIN=13, UTS=15
 23:  23: 
 98:      &        BARRIERSHORT, FREEZE, RATESHORT, DUMMYRUNT, REWEIGHTT, REGROUPFREET, RFMULTIT, REGROUPFREEABT, READMINT, & 98:      &        BARRIERSHORT, FREEZE, RATESHORT, DUMMYRUNT, REWEIGHTT, REGROUPFREET, RFMULTIT, REGROUPFREEABT, READMINT, &
 99:      &        DUMPGROUPST, FREEPAIRT, KSHORTESTPATHST, KSHORT_FULL_PRINTT, DIJINITFLYT, BHINTERPT, ICINTERPT, & 99:      &        DUMPGROUPST, FREEPAIRT, KSHORTESTPATHST, KSHORT_FULL_PRINTT, DIJINITFLYT, BHINTERPT, ICINTERPT, &
100:      &        DUMMYTST, DOCKT, DSTAGE(6), USEPAIRST, LOWESTFRQT, BISECTT, NGTDISCONNECTALL, ANGLEAXIS2, TFOLDT, &100:      &        DUMMYTST, DOCKT, DSTAGE(6), USEPAIRST, LOWESTFRQT, BISECTT, NGTDISCONNECTALL, ANGLEAXIS2, TFOLDT, &
101:      &        SLURMT, INDEXCOSTFUNCTION, CVT, DOST, IMFRQT, CLOSEFILEST, PULLT, FRICTIONT, ATOMMATCHFULL, &101:      &        SLURMT, INDEXCOSTFUNCTION, CVT, DOST, IMFRQT, CLOSEFILEST, PULLT, FRICTIONT, ATOMMATCHFULL, &
102:      &        INTCONSTRAINTT, CHECKCONINT, INTLJT, INTERPCOSTFUNCTION, REMOVEUNCONNECTEDT, ATOMMATCHDIST, &102:      &        INTCONSTRAINTT, CHECKCONINT, INTLJT, INTERPCOSTFUNCTION, REMOVEUNCONNECTEDT, ATOMMATCHDIST, &
103:      &        DBPT, DBPTDT, DMBLPYT, EFIELDT, MSSTOCKT, NTIPT, PAHAT, PAPT, PATCHYDT, STOCKAAT, RBAAT, RBSYMT, TRAPT, SILANET, &103:      &        DBPT, DBPTDT, DMBLPYT, EFIELDT, MSSTOCKT, NTIPT, PAHAT, PAPT, PATCHYDT, STOCKAAT, RBAAT, RBSYMT, TRAPT, SILANET, &
104:      &        OHCELLT, INTFREEZET, LPERMDIST, PBST, RANDOMMETRICT, SSHT, ALLTST, USERPOTT, CHECKMINT, &104:      &        OHCELLT, INTFREEZET, LPERMDIST, PBST, RANDOMMETRICT, SSHT, ALLTST, USERPOTT, CHECKMINT, &
105:      &        CHECKTST, CHECKSPT, FROMLOWESTT, ADDMINXYZT, MACHINE, RATESCYCLET, NOINVERSION, NEWCONNECTIONST, NIMET, NIHEAM7T, &105:      &        CHECKTST, CHECKSPT, FROMLOWESTT, ADDMINXYZT, MACHINE, RATESCYCLET, NOINVERSION, NEWCONNECTIONST, NIMET, NIHEAM7T, &
106:      &        NIH2LEPST, DISTANCET, RATETARGETT, TARGETHIT, ALLOWABT, MICROTHERMT, RFKMCT, REGROUPKMCT, ONEREGROUPT, PHI4MODT, &106:      &        NIH2LEPST, DISTANCET, RATETARGETT, TARGETHIT, ALLOWABT, MICROTHERMT, RFKMCT, REGROUPKMCT, ONEREGROUPT, PHI4MODT, &
107:      &        PERSISTT, REGROUPPERSISTT, NOLABELST, SHANNONT, MAKEPAIRS, SKIPPAIRST, PERSISTAPPROXT, ALLCOMPONENTST, &107:      &        PERSISTT, REGROUPPERSISTT, NOLABELST, SHANNONT, MAKEPAIRS, SKIPPAIRST, PERSISTAPPROXT, ALLCOMPONENTST, &
108:      &        SHANNONRT, SHANNONZT, CUDAT, MLLJAT3, MLP3T, DIJPRUNET, PRINTSUMMARYT108:      &        SHANNONRT, SHANNONZT, CUDAT, DIJPRUNET, PRINTSUMMARYT
109: 109: 
110:       LOGICAL, ALLOCATABLE :: SHIFTABLE(:)110:       LOGICAL, ALLOCATABLE :: SHIFTABLE(:)
111:       CHARACTER(LEN=80) COORDSLIGANDSTR, COORDSCOMPLEXSTR, COORDSPROTEINSTR111:       CHARACTER(LEN=80) COORDSLIGANDSTR, COORDSCOMPLEXSTR, COORDSPROTEINSTR
112:       CHARACTER(LEN=80) EXEC,EXECGMIN112:       CHARACTER(LEN=80) EXEC,EXECGMIN
113:       CHARACTER(LEN=80) PATHNAME, MINNAME, ADDMINXYZNAME, ALLCOMPS113:       CHARACTER(LEN=80) PATHNAME, MINNAME, ADDMINXYZNAME, ALLCOMPS
114:       CHARACTER(LEN=150) COPYFILES114:       CHARACTER(LEN=150) COPYFILES
115:       CHARACTER(LEN=80) USEPAIRSFILE115:       CHARACTER(LEN=80) USEPAIRSFILE
116:       CHARACTER(LEN=80) MAKEPAIRSFILE116:       CHARACTER(LEN=80) MAKEPAIRSFILE
117:       CHARACTER(LEN=2) DIRECTION117:       CHARACTER(LEN=2) DIRECTION
118:       CHARACTER(LEN=5) UNCONNECTEDS118:       CHARACTER(LEN=5) UNCONNECTEDS


r29793/connectd.f90 2016-07-06 15:39:27.674362593 +0100 r29792/connectd.f90 2016-07-06 15:39:33.194437206 +0100
 16: !   along with this program; if not, write to the Free Software 16: !   along with this program; if not, write to the Free Software
 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, ZSYM, DMINMAX, DEBUG, PERMDIST, BOXLX, BOXLY, BOXLZ, RIGIDBODY, &
 27:   &               ANGLEAXIS, PAIR1, PAIR2, NPAIRDONE, INTERPCOSTFUNCTION, CONNECTREGIONT, NOPT 27:   &               ANGLEAXIS, PAIR1, PAIR2, NPAIRDONE, INTERPCOSTFUNCTION, CONNECTREGIONT
 28: IMPLICIT NONE 28: IMPLICIT NONE
 29: INTEGER NUSED, MINS, MINF, NAVAIL, J1, J2, J3 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(3*NATOMS), FPOINTS(3*NATOMS), 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: DO J1=CONNECTMIN1,NMIN 37: DO J1=CONNECTMIN1,NMIN
 38:    READ(UMIN,REC=J1) SPOINTS(1:NOPT) 38:    READ(UMIN,REC=J1) SPOINTS(1:3*NATOMS)
 39:    loop2: DO J2=MAX(CONNECTMIN2,J1+1),NMIN 39:    loop2: DO J2=MAX(CONNECTMIN2,J1+1),NMIN
 40: ! 40: !
 41: ! For a connectregion run allow connection attempts for local minima 41: ! For a connectregion run allow connection attempts for local minima
 42: ! that already have a direct connection. Otherwise we might miss 42: ! that already have a direct connection. Otherwise we might miss
 43: ! a lower path. 43: ! a lower path.
 44: ! 44: !
 45: !     IF (.NOT.CONNECTREGIONT) THEN 45: !     IF (.NOT.CONNECTREGIONT) THEN
 46:          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
 47:          IF (J3.LE.0) GOTO 555  47:          IF (J3.LE.0) GOTO 555 
 48: 11       IF (PLUS(J3).EQ.J2) THEN 48: 11       IF (PLUS(J3).EQ.J2) THEN
 53:             J3=POINTERM(J3) 53:             J3=POINTERM(J3)
 54:          ENDIF 54:          ENDIF
 55:          IF (J3.GT.0) GOTO 11 ! check the next ts connected to minimum J2 55:          IF (J3.GT.0) GOTO 11 ! check the next ts connected to minimum J2
 56: 555      CONTINUE 56: 555      CONTINUE
 57:          DO J3=1,NPAIRDONE 57:          DO J3=1,NPAIRDONE
 58:             IF ((PAIR1(J3).EQ.J1).AND.(PAIR2(J3).EQ.J2)) CYCLE loop2 ! do not repeat searches! 58:             IF ((PAIR1(J3).EQ.J1).AND.(PAIR2(J3).EQ.J2)) CYCLE loop2 ! do not repeat searches!
 59:             IF ((PAIR1(J3).EQ.J2).AND.(PAIR2(J3).EQ.J1)) CYCLE loop2 ! do not repeat searches! 59:             IF ((PAIR1(J3).EQ.J2).AND.(PAIR2(J3).EQ.J1)) CYCLE loop2 ! do not repeat searches!
 60:          ENDDO 60:          ENDDO
 61: !     ENDIF 61: !     ENDIF
 62:     62:    
 63:          READ(UMIN,REC=J2) FPOINTS(1:NOPT) 63:          READ(UMIN,REC=J2) FPOINTS(1:3*NATOMS)
 64:       64:      
 65:          CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,RMAT,.FALSE.) 65:          CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,RMAT,.FALSE.)
 66:       IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2, & 66:       IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2, &
 67:   &                                            RIGIDBODY,RMAT,INTERPCOSTFUNCTION) 67:   &                                            RIGIDBODY,RMAT,INTERPCOSTFUNCTION)
 68:  68: 
 69:       IF (DISTANCE.LE.CONNECTDIST) THEN 69:       IF (DISTANCE.LE.CONNECTDIST) THEN
 70:  70: 
 71:          NAVAIL=NAVAIL+1 71:          NAVAIL=NAVAIL+1
 72:          IF (NAVAIL.GT.DMINMAX) THEN 72:          IF (NAVAIL.GT.DMINMAX) THEN
 73:             VINT(1:DMINMAX)=DMIN1(1:DMINMAX) 73:             VINT(1:DMINMAX)=DMIN1(1:DMINMAX)


r29793/connectodata.f 2016-07-06 15:39:27.998366972 +0100 r29792/connectodata.f 2016-07-06 15:39:33.538441850 +0100
 19:  19: 
 20: C 20: C
 21: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 21: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 22: C 22: C
 23: C  Make an odata connect file for the minima in LOCALPOINTS1 and LOCALPOINTS2. 23: C  Make an odata connect file for the minima in LOCALPOINTS1 and LOCALPOINTS2.
 24: C 24: C
 25:       SUBROUTINE CONNECTODATA(CONNID,LOCALPOINTS1,LOCALPOINTS2) 25:       SUBROUTINE CONNECTODATA(CONNID,LOCALPOINTS1,LOCALPOINTS2)
 26:       USE COMMONS 26:       USE COMMONS
 27:       IMPLICIT NONE 27:       IMPLICIT NONE
 28:       INTEGER J2, CONNID, STATUS 28:       INTEGER J2, CONNID, STATUS
 29:       DOUBLE PRECISION DISTANCE, LOCALPOINTS1(NOPT), LOCALPOINTS2(NOPT), SAVEPOINTS(NOPT),  29:       DOUBLE PRECISION DISTANCE, LOCALPOINTS1(3*NATOMS), LOCALPOINTS2(3*NATOMS), SAVEPOINTS(3*NATOMS), 
 30:      &                 RMAT(3,3), DIST2 30:      &                 RMAT(3,3), DIST2
 31:       DOUBLE PRECISION DUMMY 31:       DOUBLE PRECISION DUMMY
 32:       CHARACTER(LEN=20) UNSTRING 32:       CHARACTER(LEN=20) UNSTRING
 33:       CHARACTER(LEN=10) CONNSTR 33:       CHARACTER(LEN=10) CONNSTR
 34:       CHARACTER(LEN=80) FPOO 34:       CHARACTER(LEN=80) FPOO
 35:       CHARACTER(LEN=80) BHSTRING1,BHSTRING2 35:       CHARACTER(LEN=80) BHSTRING1,BHSTRING2
 36:  36: 
 37:       WRITE(CONNSTR,'(I10)') CONNID 37:       WRITE(CONNSTR,'(I10)') CONNID
 38: ! 38: !
 39: ! DISTANCE is only used with BHINTERPT - don't really need to calculate it here otherwise? 39: ! DISTANCE is only used with BHINTERPT - don't really need to calculate it here otherwise?
165: 165: 
166:          FPOO='start.'//TRIM(ADJUSTL(CONNSTR)) ! 166:          FPOO='start.'//TRIM(ADJUSTL(CONNSTR)) ! 
167:          OPEN(2,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')167:          OPEN(2,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')
168:          WRITE(2,'(3G25.15)') LOCALPOINTS1(1:3*NATOMS)168:          WRITE(2,'(3G25.15)') LOCALPOINTS1(1:3*NATOMS)
169:          CLOSE(2)169:          CLOSE(2)
170: 170: 
171:          FPOO='finish.'//TRIM(ADJUSTL(CONNSTR))171:          FPOO='finish.'//TRIM(ADJUSTL(CONNSTR))
172:          OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')172:          OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')
173:          WRITE(1,'(3G25.15)') LOCALPOINTS2(1:3*NATOMS)173:          WRITE(1,'(3G25.15)') LOCALPOINTS2(1:3*NATOMS)
174:          CLOSE(1)174:          CLOSE(1)
175:       ELSE IF (MLP3T) THEN 
176:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR))  
177:          OPEN(2,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND') 
178:          WRITE(2,'(A2,2X,F20.10)') (ZSYMBOL(J2),LOCALPOINTS1(J2),J2=1,NOPT) 
179:          CLOSE(2) 
180:          FPOO='finish.'//TRIM(ADJUSTL(CONNSTR)) 
181:          OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN') 
182:          WRITE(1,'(F20.10)') (LOCALPOINTS2(J2),J2=1,NOPT) 
183:          CLOSE(1) 
184: 175: 
185:       ELSE176:       ELSE
186:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR)) ! workaround for Sun compiler bug177:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR)) ! workaround for Sun compiler bug
187:          OPEN(2,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND')178:          OPEN(2,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND')
188:          WRITE(2,'(A2,2X,3F20.10)') (ZSYMBOL(J2),LOCALPOINTS1(3*(J2-1)+1),LOCALPOINTS1(3*(J2-1)+2),179:          WRITE(2,'(A2,2X,3F20.10)') (ZSYMBOL(J2),LOCALPOINTS1(3*(J2-1)+1),LOCALPOINTS1(3*(J2-1)+2),
189:      1                               LOCALPOINTS1(3*(J2-1)+3),J2=1,NATOMS)180:      1                               LOCALPOINTS1(3*(J2-1)+3),J2=1,NATOMS)
190:          CLOSE(2)181:          CLOSE(2)
191:          FPOO='finish.'//TRIM(ADJUSTL(CONNSTR))182:          FPOO='finish.'//TRIM(ADJUSTL(CONNSTR))
192:          OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')183:          OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')
193:          WRITE(1,'(3F20.10)') (LOCALPOINTS2(3*(J2-1)+1),LOCALPOINTS2(3*(J2-1)+2),LOCALPOINTS2(3*(J2-1)+3),J2=1,NATOMS)184:          WRITE(1,'(3F20.10)') (LOCALPOINTS2(3*(J2-1)+1),LOCALPOINTS2(3*(J2-1)+2),LOCALPOINTS2(3*(J2-1)+3),J2=1,NATOMS)


r29793/Cv.f 2016-07-06 15:39:27.010353618 +0100 r29792/Cv.f 2016-07-06 15:39:32.458427258 +0100
  6:   6: 
  7:   7: 
  8:       PRINT '(A,2F15.5,A,F20.10)','Cv> Calculating Cv for temperature range ',CVTMIN,CVTMAX,' increment ',CVTINC  8:       PRINT '(A,2F15.5,A,F20.10)','Cv> Calculating Cv for temperature range ',CVTMIN,CVTMAX,' increment ',CVTINC
  9:       NUMIN=1.0D100  9:       NUMIN=1.0D100
 10:       DO J1=1,NMIN 10:       DO J1=1,NMIN
 11:          IF (FVIBMIN(J1).LT.NUMIN) NUMIN=FVIBMIN(J1) 11:          IF (FVIBMIN(J1).LT.NUMIN) NUMIN=FVIBMIN(J1)
 12:       ENDDO 12:       ENDDO
 13:  13: 
 14:       CVTEMP=CVTMIN 14:       CVTEMP=CVTMIN
 15:       OPEN(UNIT=1,FILE='Cv.out',STATUS='UNKNOWN') 15:       OPEN(UNIT=1,FILE='Cv.out',STATUS='UNKNOWN')
 16:       OPEN(UNIT=2,FILE='Cv.config.out',STATUS='UNKNOWN') 
 17: 20    CONTINUE      16: 20    CONTINUE     
 18:       Z0=0.0D0 17:       Z0=0.0D0
 19:       Z1=0.0D0 18:       Z1=0.0D0
 20:       Z2=0.0D0 19:       Z2=0.0D0
 21:       Z0R=0.0D0 20:       Z0R=0.0D0
 22:       Z1R=0.0D0 21:       Z1R=0.0D0
 23:       Z2R=0.0D0 22:       Z2R=0.0D0
 24:       DO J1=1,NMIN 23:       DO J1=1,NMIN
 25:          DUMMY=EXP(-(EMIN(J1)-EMIN(1))/CVTEMP+(NUMIN-FVIBMIN(J1))/2)/HORDERMIN(J1) 24:          DUMMY=EXP(-(EMIN(J1)-EMIN(1))/CVTEMP+(NUMIN-FVIBMIN(J1))/2)/HORDERMIN(J1)
 26:          Z0=Z0+DUMMY 25:          Z0=Z0+DUMMY
 27:          Z1=Z1+EMIN(J1)*DUMMY 26:          Z1=Z1+EMIN(J1)*DUMMY
 28:          Z2=Z2+EMIN(J1)**2*DUMMY 27:          Z2=Z2+EMIN(J1)**2*DUMMY
 29:          DUMMY=DUMMY/SQRT(IXMIN(J1)*IYMIN(J1)*IZMIN(J1)) 28:          DUMMY=DUMMY/SQRT(IXMIN(J1)*IYMIN(J1)*IZMIN(J1))
 30:          Z0R=Z0R+DUMMY 29:          Z0R=Z0R+DUMMY
 31:          Z1R=Z1R+EMIN(J1)*DUMMY 30:          Z1R=Z1R+EMIN(J1)*DUMMY
 32:          Z2R=Z2R+EMIN(J1)**2*DUMMY 31:          Z2R=Z2R+EMIN(J1)**2*DUMMY
 33:       ENDDO 32:       ENDDO
 34:       WRITE(1,'(3G20.10)') CVTEMP,KAPPA-Z1**2/(CVTEMP*Z0)**2+Z2/(Z0*CVTEMP**2), 33:       WRITE(1,'(3G20.10)') CVTEMP,KAPPA-Z1**2/(CVTEMP*Z0)**2+Z2/(Z0*CVTEMP**2),
 35:      &                            KAPPA-Z1R**2/(CVTEMP*Z0R)**2+Z2R/(Z0R*CVTEMP**2)    34:      &                            KAPPA-Z1R**2/(CVTEMP*Z0R)**2+Z2R/(Z0R*CVTEMP**2)   
 36:       WRITE(2,'(3G20.10)') CVTEMP,KAPPA/2.0D0-Z1**2/(CVTEMP*Z0)**2+Z2/(Z0*CVTEMP**2), 
 37:      &                            KAPPA/2.0D0-Z1R**2/(CVTEMP*Z0R)**2+Z2R/(Z0R*CVTEMP**2)    
 38:   35:  
 39:       CVTEMP=CVTEMP+CVTINC 36:       CVTEMP=CVTEMP+CVTINC
 40:       IF (CVTEMP.GT.CVTMAX) THEN 37:       IF (CVTEMP.GT.CVTMAX) THEN
 41:          CLOSE(1) 38:          CLOSE(1)
 42:          CLOSE(2) 
 43:          STOP 39:          STOP
 44:       ENDIF 40:       ENDIF
 45:       GOTO 20 41:       GOTO 20
 46:      42:     
 47:       RETURN 43:       RETURN
 48:       END 44:       END


r29793/cycle2.f90 2016-07-06 15:39:28.666376001 +0100 r29792/cycle2.f90 2016-07-06 15:39:34.194450720 +0100
266:       PRINT '(A)','cycle2> No more candidates to run'266:       PRINT '(A)','cycle2> No more candidates to run'
267:       STOP267:       STOP
268:    ENDIF268:    ENDIF
269: 113 CONTINUE269: 113 CONTINUE
270:    CALL WAIT_SUBR(PIDDONE,STATUS)270:    CALL WAIT_SUBR(PIDDONE,STATUS)
271: 11 CONTINUE271: 11 CONTINUE
272: !  PRINT '(A,5I8)','cycle2> PIDDONE,STATUS,PID=',PIDDONE,STATUS,PID(1:NCPU)272: !  PRINT '(A,5I8)','cycle2> PIDDONE,STATUS,PID=',PIDDONE,STATUS,PID(1:NCPU)
273:    CALL FLUSH(6) ! the child process may duplicate output without this line!273:    CALL FLUSH(6) ! the child process may duplicate output without this line!
274:    IF (PIDDONE.GT.0) THEN274:    IF (PIDDONE.GT.0) THEN
275:       IF (DEBUG) PRINT '(A,I8,A,I6)','cycle2> PID ',PIDDONE,' has finished with exit status ',STATUS275:       IF (DEBUG) PRINT '(A,I8,A,I6)','cycle2> PID ',PIDDONE,' has finished with exit status ',STATUS
276:       PRINT '(A,I8,A,I6)','cycle2> PID ',PIDDONE,' has finished with exit status ',STATUS 
277:       DO J2=1,NCPU276:       DO J2=1,NCPU
278:          IF (PIDDONE.EQ.PID(J2)) THEN277:          IF (PIDDONE.EQ.PID(J2)) THEN
279:             IF (STATUS.NE.0) KILLED=.TRUE. ! INCOMPLETE OPTIM JOBS WOULD IDEALLY RETURN A NON-ZERO EXIT CODE 278:             IF (STATUS.NE.0) KILLED=.TRUE. ! INCOMPLETE OPTIM JOBS WOULD IDEALLY RETURN A NON-ZERO EXIT CODE 
280:             NEWJOB=J2279:             NEWJOB=J2
281:             IF (DEBUG) PRINT '(2(A,I8))','cycle2> PID ',PIDDONE,' has finished on cpu ',J2280:             IF (DEBUG) PRINT '(2(A,I8))','cycle2> PID ',PIDDONE,' has finished on cpu ',J2
282:             PRINT '(2(A,I8))','cycle2> PID ',PIDDONE,' has finished on cpu ',J2 
283:             GOTO 10281:             GOTO 10
284:          ENDIF282:          ENDIF
285:       ENDDO283:       ENDDO
286:       PRINT*,'ERROR - PID of completed child process not recognised: ',PIDDONE284:       PRINT*,'ERROR - PID of completed child process not recognised: ',PIDDONE
287:       CALL MYSYSTEM(STATUS,DEBUG,' ls -lrt path.info*')285:       STOP
288:       GOTO 10    
289: !     STOP 
290:    ELSE286:    ELSE
291: 112   CALL FLUSH(6) ! the child process may duplicate output without this line!287: 112   CALL FLUSH(6) ! the child process may duplicate output without this line!
292:       PRINT '(A,I20)','cycle2> WARNING - WAIT returned system error code ',-PIDDONE288:       PRINT '(A,I20)','cycle2> WARNING - WAIT returned system error code ',-PIDDONE
293: !289: !
294: ! Try calling wait again to see if this fixes things. 290: ! Try calling wait again to see if this fixes things. 
295: ! For very short OPTIM jobs WAIT may have trouble keeping up!291: ! For very short OPTIM jobs WAIT may have trouble keeping up!
296: !292: !
297:       CALL MYSYSTEM(STATUS,DEBUG,' sleep 1')293:       CALL MYSYSTEM(STATUS,DEBUG,' sleep 1')
298:       IF (CHECKSPT.OR.ADDMINXYZT) THEN294:       IF (CHECKSPT.OR.ADDMINXYZT) THEN
299:          DO J2=1,NCPU295:          DO J2=1,NCPU


r29793/cycle.f90 2016-07-06 15:39:28.338371567 +0100 r29792/cycle.f90 2016-07-06 15:39:33.866446286 +0100
 94: ! 94: !
 95:       IF (EXP(-(DISTANCE-DSCALE)/DSCALE).LT.RANDOM) THEN 95:       IF (EXP(-(DISTANCE-DSCALE)/DSCALE).LT.RANDOM) THEN
 96:          IF (NREJ.LT.1000000) THEN 96:          IF (NREJ.LT.1000000) THEN
 97: !           IF (DEBUG) PRINT '(A,2I6,A,G20.10,A,G20.10)','rejected pair ',MINS(J3),MINF(J3),' distance=', & 97: !           IF (DEBUG) PRINT '(A,2I6,A,G20.10,A,G20.10)','rejected pair ',MINS(J3),MINF(J3),' distance=', &
 98: ! &                     DISTANCE,' exponent=',EXP(-(DISTANCE-DSCALE)/DSCALE) 98: ! &                     DISTANCE,' exponent=',EXP(-(DISTANCE-DSCALE)/DSCALE)
 99:             GOTO 20 99:             GOTO 20
100:          ENDIF100:          ENDIF
101:       ENDIF101:       ENDIF
102: 102: 
103:       CALL CONNECTODATA(J3,SPOINTS,FPOINTS)103:       CALL CONNECTODATA(J3,SPOINTS,FPOINTS)
104: !104:       WRITE(*,'(2(A,I6),A,F12.1,A,F12.3,A,I8)') 'cycle> connecting between minima ',MINS(J3),' and ', &
105: ! Printing PFOLD makes no sense, sincw PFOLD isn't being calculated.105:   &      MINF(J3), ' distance=',DISTANCE,' |Pfold diff|=',ABS(GPFOLD(MINS(J3))-GPFOLD(MINF(J3))),' rejects=',NREJ
106: ! 
107: !     WRITE(*,'(2(A,I6),A,F12.1,A,F12.3,A,I8)') 'cycle> connecting between minima ',MINS(J3),' and ', & 
108: ! &      MINF(J3), ' distance=',DISTANCE,' |Pfold diff|=',ABS(GPFOLD(MINS(J3))-GPFOLD(MINF(J3))),' rejects=',NREJ 
109:       WRITE(*,'(2(A,I6),A,F12.1,A,I8)') 'cycle> connecting between minima ',MINS(J3),' and ', & 
110:   &      MINF(J3), ' distance=',DISTANCE,' rejects=',NREJ 
111:       NOJOB(J3)=.FALSE.106:       NOJOB(J3)=.FALSE.
112: !107: !
113: !  Don;t bother to check whether we already have a single ts that does this connection.108: !  Don;t bother to check whether we already have a single ts that does this connection.
114: !109: !
115:       CALL FLUSH(6) ! the child process may duplicate output without this line!110:       CALL FLUSH(6) ! the child process may duplicate output without this line!
116:       call fork_subr(PID(J3))111:       call fork_subr(PID(J3))
117: !     IF (DEBUG.AND.(PID(J3).NE.0)) WRITE(*,'(A,I8)') 'forked connect run process id=',PID(J3)112: !     IF (DEBUG.AND.(PID(J3).NE.0)) WRITE(*,'(A,I8)') 'forked connect run process id=',PID(J3)
118: !     IF (PID(J3).NE.0) WRITE(*,'(A,I8)') 'forked connect run process id=',PID(J3)113: !     IF (PID(J3).NE.0) WRITE(*,'(A,I8)') 'forked connect run process id=',PID(J3)
119: !     IF (PID(J3).EQ.0) WRITE(*,'(A,I8)') 'I am the child! PID=',PID(J3)114: !     IF (PID(J3).EQ.0) WRITE(*,'(A,I8)') 'I am the child! PID=',PID(J3)
120:       IF (PID(J3).EQ.0) CALL SUBMITOPTIMJOB(J3,CHARMMT,UNRST,J3,EXEC,DEBUG,'OPTIM.connect.')115:       IF (PID(J3).EQ.0) CALL SUBMITOPTIMJOB(J3,CHARMMT,UNRST,J3,EXEC,DEBUG,'OPTIM.connect.')


r29793/getallpaths.f 2016-07-06 15:39:29.002380551 +0100 r29792/getallpaths.f 2016-07-06 15:39:34.554455586 +0100
 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=3*NATOMS 50:       NVARS=3*NATOMS
 51:       IF (PHI4MODT) NFRQS=NATOMS 51:       IF (PHI4MODT) NFRQS=NATOMS
 52:       IF (PHI4MODT) NVARS=NATOMS 52:       IF (PHI4MODT) NVARS=NATOMS
 53:       IF (MLP3T) NFRQS=NATOMS 
 54:       IF (MLP3T) NVARS=NATOMS 
 55: C 53: C
 56: C  Nasty things can happen if an OPTIM job crashes and leaves a path.info file incomplete. 54: C  Nasty things can happen if an OPTIM job crashes and leaves a path.info file incomplete.
 57: C  A transition state could be written without the necessary minima.  55: C  A transition state could be written without the necessary minima. 
 58: C  To avoid this problem, we now parse the path.info file first and only read in complete triples. 56: C  To avoid this problem, we now parse the path.info file first and only read in complete triples.
 59: C 57: C
 60: C  To avoid non-Morse points and higher index saddles getting into the database we now skip 58: C  To avoid non-Morse points and higher index saddles getting into the database we now skip
 61: C  a triple where any stationary point has an inappropriate normal mode frequency. 59: C  a triple where any stationary point has an inappropriate normal mode frequency.
 62: C  We must therefore avoid writing to the open min.data and ts.data files until we 60: C  We must therefore avoid writing to the open min.data and ts.data files until we
 63: C  have parsed the data! 61: C  have parsed the data!
 64: C 62: C
 65:       NCOUNT=0 63:       NCOUNT=0
 66:       DO 64:       DO
 67:          READ(1,*,END=123) DUMMYSTRING 65:          READ(1,*,END=123) DUMMYSTRING
 68:          NCOUNT=NCOUNT+1 66:          NCOUNT=NCOUNT+1
 69:       ENDDO 67:       ENDDO
 70: 123   REWIND(1) 68: 123   REWIND(1)
 71:       IF (NOFRQS) THEN 69:       IF (NOFRQS) THEN
 72:          NTRIPLES=NCOUNT/(3*(NATOMS+2)) 70:          NTRIPLES=NCOUNT/(3*(NATOMS+2))
 73:          J1=NTRIPLES*3*(NATOMS+2) 71:          J1=NTRIPLES*3*(NATOMS+2)
 74:          IF (DEBUG) PRINT '(2(A,I8))','getallpaths> number of triples=',NTRIPLES,' number of trailing lines=',NCOUNT-J1 72:          IF (DEBUG) PRINT '(2(A,I8))','getallpaths> number of triples=',NTRIPLES,' number of trailing lines=',NCOUNT-J1
 75:       ELSEIF (PHI4MODT.OR.MLP3T) THEN 73:       ELSEIF (PHI4MODT) THEN
 76:          IF (MOD(NATOMS,3).EQ.0) THEN 74:          IF (MOD(NATOMS,3).EQ.0) THEN
 77:             NTRIPLES=NCOUNT/(3*(2*(NATOMS/3)+2)) 75:             NTRIPLES=NCOUNT/(3*(2*(NATOMS/3)+2))
 78:             J1=NTRIPLES*(3*(2*(NATOMS/3)+2)) 76:             J1=NTRIPLES*(3*(2*(NATOMS/3)+2))
 79:          ELSE 77:          ELSE
 80:             NTRIPLES=NCOUNT/(3*(2*(NATOMS/3+1)+2)) 78:             NTRIPLES=NCOUNT/(3*(2*(NATOMS/3+1)+2))
 81:             J1=NTRIPLES*(3*(2*(NATOMS/3+1)+2)) 79:             J1=NTRIPLES*(3*(2*(NATOMS/3+1)+2))
 82:          ENDIF 80:          ENDIF
 83:          IF (DEBUG) PRINT '(2(A,I8))','getallpaths> number of triples=',NTRIPLES,' number of trailing lines=',NCOUNT-J1 81:          IF (DEBUG) PRINT '(2(A,I8))','getallpaths> number of triples=',NTRIPLES,' number of trailing lines=',NCOUNT-J1
 84: ! hk286 82: ! hk286
 85:       ELSEIF ( (.NOT. NOFRQS) .AND. RIGIDINIT) THEN 83:       ELSEIF ( (.NOT. NOFRQS) .AND. RIGIDINIT) THEN
267:             ENDIF265:             ENDIF
268:          ENDIF266:          ENDIF
269: C267: C
270: C  Now we store the transition state coordinates.268: C  Now we store the transition state coordinates.
271: C269: C
272:          IF (MACHINE) THEN270:          IF (MACHINE) THEN
273:             READ(1) (NEWPOINTSTS(J2),J2=1,NVARS)  271:             READ(1) (NEWPOINTSTS(J2),J2=1,NVARS)  
274:          ELSE272:          ELSE
275:             READ(1,*) (NEWPOINTSTS(J2),J2=1,NVARS)273:             READ(1,*) (NEWPOINTSTS(J2),J2=1,NVARS)
276:          ENDIF274:          ENDIF
277:          LOCALPOINTS(1:NVARS)=NEWPOINTSTS(1:NVARS)275:          LOCALPOINTS(1:3*NATOMS)=NEWPOINTSTS(1:NVARS)
278:          CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,ANGLEAXIS,NEWIXTS,NEWIYTS,NEWIZTS)276:          CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,ANGLEAXIS,NEWIXTS,NEWIYTS,NEWIZTS)
279:          NEWFVIBTS=DUMMY277:          NEWFVIBTS=DUMMY
280:          NEWHORDERTS=HORDER278:          NEWHORDERTS=HORDER
281: 279: 
282:          IF (NEWETS.LT.NEWEMIN) PRINT '(2(A,G20.10),A)', 'getallpaths> WARNING *** New TS (energy = ',NEWETS,') is lower in energy 280:          IF (NEWETS.LT.NEWEMIN) PRINT '(2(A,G20.10),A)', 'getallpaths> WARNING *** New TS (energy = ',NEWETS,') is lower in energy 
283:      &than connected minimum (energy = ',NEWEMIN,')'281:      &than connected minimum (energy = ',NEWEMIN,')'
284: C282: C
285: C  Now check for new transition states.283: C  Now check for new transition states.
286: C284: C
287:          TSISOLD=.FALSE.285:          TSISOLD=.FALSE.
375:          NEWHORDERMIN=HORDER373:          NEWHORDERMIN=HORDER
376:          NEWFVIBMIN=DUMMY374:          NEWFVIBMIN=DUMMY
377:          IF (NEWETS.LT.NEWEMIN) PRINT '(2(A,G20.10),A)', 'getallpaths> WARNING *** New TS (energy = ',NEWETS,') is lower in energy 375:          IF (NEWETS.LT.NEWEMIN) PRINT '(2(A,G20.10),A)', 'getallpaths> WARNING *** New TS (energy = ',NEWETS,') is lower in energy 
378:      &than connected minimum (energy = ',NEWEMIN,')'376:      &than connected minimum (energy = ',NEWEMIN,')'
379: 377: 
380:          IF (MACHINE) THEN378:          IF (MACHINE) THEN
381:               READ(1) (NEWPOINTSMIN(J2),J2=1,NVARS)  379:               READ(1) (NEWPOINTSMIN(J2),J2=1,NVARS)  
382:          ELSE380:          ELSE
383:               READ(1,*) (NEWPOINTSMIN(J2),J2=1,NVARS)  381:               READ(1,*) (NEWPOINTSMIN(J2),J2=1,NVARS)  
384:          ENDIF382:          ENDIF
385:          LOCALPOINTS(1:NVARS)=NEWPOINTSMIN(1:NVARS)383:          LOCALPOINTS(1:3*NATOMS)=NEWPOINTSMIN(1:NVARS)
386:          CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,NEWIXMIN,NEWIYMIN,NEWIZMIN)384:          CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,NEWIXMIN,NEWIYMIN,NEWIZMIN)
387:          MINMOLD=.TRUE.385:          MINMOLD=.TRUE.
388:          DO J2=1,NMIN386:          DO J2=1,NMIN
389:             DISTANCE=1.0D100387:             DISTANCE=1.0D100
390:             IF (ABS(NEWEMIN-EMIN(J2)).LT.EDIFFTOL) THEN388:             IF (ABS(NEWEMIN-EMIN(J2)).LT.EDIFFTOL) THEN
391:                READ(UMIN,REC=J2) (LOCALPOINTS2(J3),J3=1,NVARS)389:                READ(UMIN,REC=J2) (LOCALPOINTS2(J3),J3=1,NVARS)
392:                CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY, 390:                CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY, 
393:      &                          RMAT,.FALSE.)391:      &                          RMAT,.FALSE.)
394:             ENDIF392:             ENDIF
395: 393: 


r29793/getpair.f90 2016-07-06 15:39:29.342385142 +0100 r29792/getpair.f90 2016-07-06 15:39:34.910460400 +0100
 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 the difference in Pfold values 21: !  Subroutine to provide candidate pairs of minima based on the difference in Pfold values
 22: !  and their distances.  22: !  and their distances. 
 23: ! 23: !
 24: SUBROUTINE GETPAIR(NAVAIL,NUSED,MINS,MINF,SPOINTS,FPOINTS) 24: SUBROUTINE GETPAIR(NAVAIL,NUSED,MINS,MINF,SPOINTS,FPOINTS)
 25: USE COMMONS, ONLY: UMIN, NATOMS, DMIN1, DMIN2, DIJINITT, NATTEMPT, NCPU, PSCALE, DSCALE, BULKT, TWOD, ZSYM, DEBUG, GPFOLD, NMIN, & 25: USE COMMONS, ONLY: UMIN, NATOMS, DMIN1, DMIN2, DIJINITT, NATTEMPT, NCPU, PSCALE, DSCALE, BULKT, TWOD, ZSYM, DEBUG, GPFOLD, NMIN, &
 26:   &               NPAIRFRQ, PAIR1, PAIR2, NPAIRFRQ, NPAIRDONE, MAXPAIRS, PERMDIST, BOXLX, BOXLY, BOXLZ, RIGIDBODY, ANGLEAXIS, & 26:   &               NPAIRFRQ, PAIR1, PAIR2, NPAIRFRQ, NPAIRDONE, MAXPAIRS, PERMDIST, BOXLX, BOXLY, BOXLZ, RIGIDBODY, ANGLEAXIS, &
 27:   &               INTERPCOSTFUNCTION, NOPT 27:   &               INTERPCOSTFUNCTION
 28: USE PORFUNCS 28: USE PORFUNCS
 29: IMPLICIT NONE 29: IMPLICIT NONE
 30: INTEGER NUSED, MINS, MINF, NAVAIL, PAIRSTODO, J1, NSTEPS, MAXSTEPS, NDUMMY, J2, J3, J4 30: INTEGER NUSED, MINS, MINF, NAVAIL, PAIRSTODO, J1, NSTEPS, MAXSTEPS, NDUMMY, J2, J3, J4
 31: DOUBLE PRECISION, ALLOCATABLE :: DISTLIST(:), PDIFFLIST(:) 31: DOUBLE PRECISION, ALLOCATABLE :: DISTLIST(:), PDIFFLIST(:)
 32: DOUBLE PRECISION SPOINTS(NOPT), FPOINTS(NOPT), DISTANCE, RMAT(3,3), DIST2 32: DOUBLE PRECISION SPOINTS(3*NATOMS), FPOINTS(3*NATOMS), DISTANCE, RMAT(3,3), DIST2
 33:  33: 
 34: 10 CONTINUE 34: 10 CONTINUE
 35: IF (NAVAIL.EQ.0) THEN 35: IF (NAVAIL.EQ.0) THEN
 36:    PAIRSTODO=NCPU*NPAIRFRQ 36:    PAIRSTODO=NCPU*NPAIRFRQ
 37:    IF (NPAIRFRQ.LT.1) PAIRSTODO=NATTEMPT*NCPU ! just one set of pairs unless we run out 37:    IF (NPAIRFRQ.LT.1) PAIRSTODO=NATTEMPT*NCPU ! just one set of pairs unless we run out
 38:    IF (ALLOCATED(DMIN1)) DEALLOCATE(DMIN1,DMIN2) 38:    IF (ALLOCATED(DMIN1)) DEALLOCATE(DMIN1,DMIN2)
 39:    ALLOCATE(DMIN1(PAIRSTODO),DMIN2(PAIRSTODO),DISTLIST(PAIRSTODO),PDIFFLIST(PAIRSTODO)) 39:    ALLOCATE(DMIN1(PAIRSTODO),DMIN2(PAIRSTODO),DISTLIST(PAIRSTODO),PDIFFLIST(PAIRSTODO))
 40:    DISTLIST(1:PAIRSTODO)=1.0D100 40:    DISTLIST(1:PAIRSTODO)=1.0D100
 41:    DO J1=1,NMIN 41:    DO J1=1,NMIN
 42: !     IF (GPFOLD(J1).EQ.0.0D0) CYCLE 42: !     IF (GPFOLD(J1).EQ.0.0D0) CYCLE
 43:       READ(UMIN,REC=J1) (SPOINTS(J2),J2=1,NOPT) 43:       READ(UMIN,REC=J1) (SPOINTS(J2),J2=1,3*NATOMS)
 44:       min2: DO J2=J1+1,NMIN 44:       min2: DO J2=J1+1,NMIN
 45: !        IF (GPFOLD(J2).EQ.0.0D0) CYCLE 45: !        IF (GPFOLD(J2).EQ.0.0D0) CYCLE
 46: !        IF (ABS(GPFOLD(J1)-GPFOLD(J2)).LT.PSCALE) CYCLE 46: !        IF (ABS(GPFOLD(J1)-GPFOLD(J2)).LT.PSCALE) CYCLE
 47:          DO J3=1,NPAIRDONE 47:          DO J3=1,NPAIRDONE
 48:             IF ((PAIR1(J3).EQ.J1).AND.(PAIR2(J3).EQ.J2)) CYCLE min2 ! do not repeat searches 48:             IF ((PAIR1(J3).EQ.J1).AND.(PAIR2(J3).EQ.J2)) CYCLE min2 ! do not repeat searches
 49:             IF ((PAIR1(J3).EQ.J2).AND.(PAIR2(J3).EQ.J1)) CYCLE min2 ! do not repeat searches 49:             IF ((PAIR1(J3).EQ.J2).AND.(PAIR2(J3).EQ.J1)) CYCLE min2 ! do not repeat searches
 50:          ENDDO 50:          ENDDO
 51:          READ(UMIN,REC=J2) (FPOINTS(J3),J3=1,NOPT) 51:          READ(UMIN,REC=J2) (FPOINTS(J3),J3=1,3*NATOMS)
 52:          CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY, & 52:          CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY, &
 53:   &                       RMAT,.FALSE.) 53:   &                       RMAT,.FALSE.)
 54:          IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE, & 54:          IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(SPOINTS,FPOINTS,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE, &
 55:   &                                               DIST2,RIGIDBODY, & 55:   &                                               DIST2,RIGIDBODY, &
 56:   &                       RMAT,INTERPCOSTFUNCTION) 56:   &                       RMAT,INTERPCOSTFUNCTION)
 57:          NAVAIL=NAVAIL+1 57:          NAVAIL=NAVAIL+1
 58:          sortloop: DO J3=1,MIN(NAVAIL,PAIRSTODO) ! sort the shortest PAIRSTODO values 58:          sortloop: DO J3=1,MIN(NAVAIL,PAIRSTODO) ! sort the shortest PAIRSTODO values
 59:             IF (DISTANCE.LT.DISTLIST(J3)) THEN 59:             IF (DISTANCE.LT.DISTLIST(J3)) THEN
 60:                DO J4=MIN(NAVAIL,PAIRSTODO),J3+1,-1 60:                DO J4=MIN(NAVAIL,PAIRSTODO),J3+1,-1
 61:                   DMIN1(J4)=DMIN1(J4-1) 61:                   DMIN1(J4)=DMIN1(J4-1)
 71:             ENDIF 71:             ENDIF
 72:          ENDDO sortloop 72:          ENDDO sortloop
 73:          IF (DEBUG) PRINT '(3(A,I8),2(A,G20.10))','getpair> connection ',NAVAIL,' pair ',J1,' and ',J2,' diff=', & 73:          IF (DEBUG) PRINT '(3(A,I8),2(A,G20.10))','getpair> connection ',NAVAIL,' pair ',J1,' and ',J2,' diff=', &
 74:   &                                            ABS(GPFOLD(J2)-GPFOLD(J1)),' distance=',DISTANCE 74:   &                                            ABS(GPFOLD(J2)-GPFOLD(J1)),' distance=',DISTANCE
 75:       ENDDO min2 75:       ENDDO min2
 76:    ENDDO 76:    ENDDO
 77:    NAVAIL=MIN(NAVAIL,PAIRSTODO)  77:    NAVAIL=MIN(NAVAIL,PAIRSTODO) 
 78:    PRINT '(A,I8,A)','getpair> sorted list of ',NAVAIL,' pairs' 78:    PRINT '(A,I8,A)','getpair> sorted list of ',NAVAIL,' pairs'
 79:    PRINT '(2I8,2G20.10)',(DMIN1(J1),DMIN2(J1),PDIFFLIST(J1),DISTLIST(J1),J1=1,NAVAIL) 79:    PRINT '(2I8,2G20.10)',(DMIN1(J1),DMIN2(J1),PDIFFLIST(J1),DISTLIST(J1),J1=1,NAVAIL)
 80:    DEALLOCATE(DISTLIST,PDIFFLIST) 80:    DEALLOCATE(DISTLIST,PDIFFLIST)
 81:    IF (NAVAIL.LE.0) THEN 81:    IF (NAVAIL.EQ.0) THEN
 82:       PRINT '(A)','getpair> No more candidate pairs of minima in getpair - quit' 82:       PRINT '(A)','getpair> No more candidate pairs of minima in getpair - quit'
 83: !     STOP 83: !     STOP
 84:    ENDIF 84:    ENDIF
 85:    NUSED=0 85:    NUSED=0
 86: ENDIF 86: ENDIF
 87: NUSED=NUSED+1 87: NUSED=NUSED+1
 88: NAVAIL=NAVAIL-1 88: NAVAIL=NAVAIL-1
 89: MINS=DMIN1(NUSED) 89: MINS=DMIN1(NUSED)
 90: MINF=DMIN2(NUSED) 90: MINF=DMIN2(NUSED)
 91: WRITE(*,'(5(A,I8))') 'getpair> connecting minima ',MINS,' and ',MINF, ' pairs used=',  & 91: WRITE(*,'(5(A,I8))') 'getpair> connecting minima ',MINS,' and ',MINF, ' pairs used=',  &
 92:   &    NUSED,' remaining=',NAVAIL,' total pairs=',NPAIRDONE 92:   &    NUSED,' remaining=',NAVAIL,' total pairs=',NPAIRDONE
 93: CALL FLUSH(6) 93: CALL FLUSH(6)
 94: NPAIRDONE=NPAIRDONE+1 94: NPAIRDONE=NPAIRDONE+1
 95: IF (NPAIRDONE.GT.MAXPAIRS) CALL PAIRDOUBLE 95: IF (NPAIRDONE.GT.MAXPAIRS) CALL PAIRDOUBLE
 96: PAIR1(NPAIRDONE)=DMIN1(NUSED) 96: PAIR1(NPAIRDONE)=DMIN1(NUSED)
 97: PAIR2(NPAIRDONE)=DMIN2(NUSED) 97: PAIR2(NPAIRDONE)=DMIN2(NUSED)
 98: READ(UMIN,REC=MINS) SPOINTS(1:NOPT) 98: READ(UMIN,REC=MINS) SPOINTS(1:3*NATOMS)
 99: READ(UMIN,REC=MINF) FPOINTS(1:NOPT) 99: READ(UMIN,REC=MINF) FPOINTS(1:3*NATOMS)
100: 100: 
101: END SUBROUTINE GETPAIR101: END SUBROUTINE GETPAIR


r29793/getrpair.f90 2016-07-06 15:39:29.682389740 +0100 r29792/getrpair.f90 2016-07-06 15:39:35.630470140 +0100
 15: !   You should have received a copy of the GNU General Public License 15: !   You should have received a copy of the GNU General Public License
 16: !   along with this program; if not, write to the Free Software 16: !   along with this program; if not, write to the Free Software
 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 GETRPAIR(NAVAIL,NUSED,MINS,MINF,SPOINTS,FPOINTS) 24: SUBROUTINE GETRPAIR(NAVAIL,NUSED,MINS,MINF,SPOINTS,FPOINTS)
 25: USE COMMONS, ONLY: UMIN, NATOMS, DMIN1, DMIN2, DIJINITT, NPAIRDONE, MAXPAIRS, PAIR1, PAIR2, NOPT 25: USE COMMONS, ONLY: UMIN, NATOMS, DMIN1, DMIN2, DIJINITT, NPAIRDONE, MAXPAIRS, PAIR1, PAIR2
 26: IMPLICIT NONE 26: IMPLICIT NONE
 27: INTEGER NUSED, MINS, MINF, NAVAIL 27: INTEGER NUSED, MINS, MINF, NAVAIL
 28: DOUBLE PRECISION SPOINTS(NOPT), FPOINTS(NOPT) 28: DOUBLE PRECISION SPOINTS(3*NATOMS), FPOINTS(3*NATOMS)
 29:  29: 
 30: 10 CONTINUE 30: 10 CONTINUE
 31: IF (NAVAIL.EQ.0) THEN 31: IF (NAVAIL.EQ.0) THEN
 32:    CALL CONNECTD(NAVAIL) 32:    CALL CONNECTD(NAVAIL)
 33:    IF (NAVAIL.EQ.0) THEN 33:    IF (NAVAIL.EQ.0) THEN
 34:       PRINT '(A)','getrpair> No more candidate pairs of minima in getrpair - quit' 34:       PRINT '(A)','getrpair> No more candidate pairs of minima in getrpair - quit'
 35:       STOP 35:       STOP
 36:    ENDIF 36:    ENDIF
 37:    NUSED=0 37:    NUSED=0
 38: ENDIF 38: ENDIF
 39: NUSED=NUSED+1 39: NUSED=NUSED+1
 40: NAVAIL=NAVAIL-1 40: NAVAIL=NAVAIL-1
 41: MINS=DMIN1(NUSED) 41: MINS=DMIN1(NUSED)
 42: MINF=DMIN2(NUSED) 42: MINF=DMIN2(NUSED)
 43: WRITE(*,'(5(A,I8))') 'getrpair> connecting minima ',MINS,' and ',MINF, ' pairs used=',  & 43: WRITE(*,'(5(A,I8))') 'getrpair> connecting minima ',MINS,' and ',MINF, ' pairs used=',  &
 44:   &  NUSED,' remaining=',NAVAIL,' total pairs=',NPAIRDONE 44:   &  NUSED,' remaining=',NAVAIL,' total pairs=',NPAIRDONE
 45: NPAIRDONE=NPAIRDONE+1 45: NPAIRDONE=NPAIRDONE+1
 46: IF (NPAIRDONE.GT.MAXPAIRS) CALL PAIRDOUBLE 46: IF (NPAIRDONE.GT.MAXPAIRS) CALL PAIRDOUBLE
 47: PAIR1(NPAIRDONE)=DMIN1(NUSED) 47: PAIR1(NPAIRDONE)=DMIN1(NUSED)
 48: PAIR2(NPAIRDONE)=DMIN2(NUSED) 48: PAIR2(NPAIRDONE)=DMIN2(NUSED)
 49: READ(UMIN,REC=MINS) SPOINTS(1:NOPT) 49: READ(UMIN,REC=MINS) SPOINTS(1:3*NATOMS)
 50: READ(UMIN,REC=MINF) FPOINTS(1:NOPT) 50: READ(UMIN,REC=MINF) FPOINTS(1:3*NATOMS)
 51:  51: 
 52: END SUBROUTINE GETRPAIR 52: END SUBROUTINE GETRPAIR


r29793/keywords.f 2016-07-06 15:39:30.010394175 +0100 r29792/keywords.f 2016-07-06 15:39:35.974474779 +0100
332: !332: !
333: ! Optional UNTRAP argument333: ! Optional UNTRAP argument
334: !334: !
335:       EDELTAMIN=TINY(1.0D0)335:       EDELTAMIN=TINY(1.0D0)
336:       ELOWBAR=TINY(1.0D0)336:       ELOWBAR=TINY(1.0D0)
337:       EHIGHBAR=HUGE(1.0D0)337:       EHIGHBAR=HUGE(1.0D0)
338:       BAILDIST=TINY(1.0D0)338:       BAILDIST=TINY(1.0D0)
339: !339: !
340: ! To document...340: ! To document...
341: !341: !
342: ! 
343: ! Neural network potential 
344: ! 
345:       MLP3T=.FALSE. 
346:  
347:       PHI4MODT=.FALSE.342:       PHI4MODT=.FALSE.
348:       MLLJAT3=.FALSE. 
349:       RELATIVEET=.FALSE.343:       RELATIVEET=.FALSE.
350:       RATETARGETT=.FALSE.344:       RATETARGETT=.FALSE.
351:       RATETARGETAB=HUGE(1.0)345:       RATETARGETAB=HUGE(1.0)
352:       RATETARGETBA=HUGE(1.0)346:       RATETARGETBA=HUGE(1.0)
353:       TARGETHIT=.FALSE.347:       TARGETHIT=.FALSE.
354:       NRANROT=0348:       NRANROT=0
355:       CHECKSPT=.FALSE.349:       CHECKSPT=.FALSE.
356:       CHECKMINT=.FALSE.350:       CHECKMINT=.FALSE.
357:       CHECKTST=.FALSE.351:       CHECKTST=.FALSE.
358:       CHECKSPS=-1352:       CHECKSPS=-1
1357:          CALL READI(NCONNMIN)1351:          CALL READI(NCONNMIN)
1358:          IF (NITEMS.GT.3) THEN 1352:          IF (NITEMS.GT.3) THEN 
1359:             CALL READA(LOYNO)1353:             CALL READA(LOYNO)
1360:             IF (LOYNO == 'T') KSHORT_FULL_PRINTT = .TRUE.1354:             IF (LOYNO == 'T') KSHORT_FULL_PRINTT = .TRUE.
1361:          ENDIF1355:          ENDIF
1362: C1356: C
1363: C  Whether to read extra curvatures from min.data.info files in DUMMYTS runs1357: C  Whether to read extra curvatures from min.data.info files in DUMMYTS runs
1364: C1358: C
1365:       ELSE IF (WORD.EQ.'LOWESTFRQ') THEN1359:       ELSE IF (WORD.EQ.'LOWESTFRQ') THEN
1366:          LOWESTFRQT=.TRUE.1360:          LOWESTFRQT=.TRUE.
1367: !1361: 
1368: ! MLLJAT3 for ML LJAT3 time series landscapes 
1369: ! 
1370:       ELSE IF (WORD.EQ.'MLLJAT3') THEN 
1371:          MLLJAT3=.TRUE. 
1372: ! 
1373: ! Three layer neural network (multilayer perceptron) with 
1374: ! MLPIN inputs (columns per data item) 
1375: ! MLPOUT outputs 
1376: ! MLPHIDDEN hidden nodes 
1377: ! MLPDATA data lines in MLPdata file (last column MLPIN+1 for correct outputs, numbered one to MLPOUT) 
1378: ! MLPLAMBDA coefficient for regularisation 
1379: ! 
1380:       ELSE IF (WORD.EQ.'MLP3') THEN 
1381:          MLP3T=.TRUE. 
1382:          ZSYM='  ' 
1383:          CALL READI(MLPIN) 
1384:          CALL READI(MLPHIDDEN) 
1385:          CALL READI(MLPOUT) 
1386: !        CALL READI(MLPDATA) 
1387: !        IF (NITEMS.GT.5) CALL READF(MLPLAMBDA) 
1388:          WRITE(*,'(A,4I8,G20.10)') 'MLP3 potential with Nin, Nhidden, Nout=', 
1389:      &                                   MLPIN,MLPHIDDEN,MLPOUT 
1390:          NMLP=MLPHIDDEN*(MLPIN+MLPOUT) 
1391:          NATOMS=NMLP 
1392:          NOPT=NMLP 
1393:       ELSE IF (WORD.EQ.'MACHINE') THEN1362:       ELSE IF (WORD.EQ.'MACHINE') THEN
1394:          MACHINE=.TRUE.1363:          MACHINE=.TRUE.
1395: C1364: C
1396: C Macrocycle1365: C Macrocycle
1397: C This adds cyclic isomers to the MINPERMDIST1366: C This adds cyclic isomers to the MINPERMDIST
1398: C Used for cyclic peptides with repeating sequences (e.g. cyclo-[GlyProGlyPro])1367: C Used for cyclic peptides with repeating sequences (e.g. cyclo-[GlyProGlyPro])
1399: C1368: C
1400:       ELSE IF (WORD.EQ.'MACROCYCLE') THEN1369:       ELSE IF (WORD.EQ.'MACROCYCLE') THEN
1401:          MACROCYCLET=.TRUE.1370:          MACROCYCLET=.TRUE.
1402:          IF (NITEMS.GT.1) THEN1371:          IF (NITEMS.GT.1) THEN
1478:          MSSTOCKT = .TRUE.1447:          MSSTOCKT = .TRUE.
1479:          CALL READI(NRBSITES)1448:          CALL READI(NRBSITES)
1480:          ALLOCATE(RBSITE(NRBSITES,3))1449:          ALLOCATE(RBSITE(NRBSITES,3))
1481:          CALL DEFMULTSTOCK()1450:          CALL DEFMULTSTOCK()
1482: 1451: 
1483: C1452: C
1484: C  Number of atoms - essential unless RIGIDBODIES/RBAA keyword is present.1453: C  Number of atoms - essential unless RIGIDBODIES/RBAA keyword is present.
1485: C1454: C
1486:       ELSE IF (WORD.EQ.'NATOMS') THEN1455:       ELSE IF (WORD.EQ.'NATOMS') THEN
1487:          CALL READI(NATOMS)1456:          CALL READI(NATOMS)
1488:          NOPT=3*NATOMS 
1489: C1457: C
1490: C  Semen Trygubenko, Thu Mar 15 16:21:41 GMT 20071458: C  Semen Trygubenko, Thu Mar 15 16:21:41 GMT 2007
1491: C  Minimum number of connections a minimum ought to have to be included in the1459: C  Minimum number of connections a minimum ought to have to be included in the
1492: C  rate calculation or regrouping schemes. Can be set directly for some1460: C  rate calculation or regrouping schemes. Can be set directly for some
1493: C  keywords, but not others, so this keyword is provided just to make sure1461: C  keywords, but not others, so this keyword is provided just to make sure
1494: C  it casn be set for all methods.1462: C  it casn be set for all methods.
1495: C1463: C
1496:       ELSE IF (WORD.EQ.'NCONNMIN') THEN1464:       ELSE IF (WORD.EQ.'NCONNMIN') THEN
1497:          if (NITEMS.GT.1) then1465:          if (NITEMS.GT.1) then
1498:               CALL READI(NCONNMIN)1466:               CALL READI(NCONNMIN)
1952:          DO J1=1,NRATESCYCLETEMPS1920:          DO J1=1,NRATESCYCLETEMPS
1953:             CALL READF(RATESCYCLETEMPS(J1))1921:             CALL READF(RATESCYCLETEMPS(J1))
1954:          ENDDO1922:          ENDDO
1955:          PRINT '(A)','keyword> Rate constants will be calculated each cycle for temperatures:'1923:          PRINT '(A)','keyword> Rate constants will be calculated each cycle for temperatures:'
1956:          PRINT '(6F15.5)',RATESCYCLETEMPS(1:NRATESCYCLETEMPS)1924:          PRINT '(6F15.5)',RATESCYCLETEMPS(1:NRATESCYCLETEMPS)
1957: 1925: 
1958:       ELSE IF (WORD.EQ.'RBAA') THEN1926:       ELSE IF (WORD.EQ.'RBAA') THEN
1959:          CALL READI(NATOMS)1927:          CALL READI(NATOMS)
1960:          NTSITES  = NATOMS*NRBSITES1928:          NTSITES  = NATOMS*NRBSITES
1961:          NATOMS=NATOMS*21929:          NATOMS=NATOMS*2
1962:          NOPT=3*NATOMS 
1963:          IF (DBPTDT) NTSITES = (NATOMS/2-1)*NRBSITES + 41930:          IF (DBPTDT) NTSITES = (NATOMS/2-1)*NRBSITES + 4
1964:          IF (NRBSITES == 0) THEN1931:          IF (NRBSITES == 0) THEN
1965:             PRINT *, 'NRBSITES not yet defined'1932:             PRINT *, 'NRBSITES not yet defined'
1966:             STOP1933:             STOP
1967:          ENDIF1934:          ENDIF
1968:          RBAAT = .TRUE.1935:          RBAAT = .TRUE.
1969:       ELSE IF (WORD.EQ.'RBSYM') THEN1936:       ELSE IF (WORD.EQ.'RBSYM') THEN
1970:          RBSYMT=.TRUE.1937:          RBSYMT=.TRUE.
1971:          INQUIRE(FILE='rbsymops',EXIST=RBSYMTEST)1938:          INQUIRE(FILE='rbsymops',EXIST=RBSYMTEST)
1972:          IF (RBSYMTEST) THEN1939:          IF (RBSYMTEST) THEN
2150:             PRINT '(A,G20.10)','keyword> sum of probabilities=',DUMMY2117:             PRINT '(A,G20.10)','keyword> sum of probabilities=',DUMMY
2151:          ENDIF2118:          ENDIF
2152: C2119: C
2153: C  Number of rigid bodies - essential unless NATOMS keyword is present.2120: C  Number of rigid bodies - essential unless NATOMS keyword is present.
2154: C  All we should have to do is then set NATOMS equal to twice the number2121: C  All we should have to do is then set NATOMS equal to twice the number
2155: C  of rigid bodies to get all the dimensions right.2122: C  of rigid bodies to get all the dimensions right.
2156: C2123: C
2157:       ELSE IF (WORD.EQ.'RIGIDBODIES') THEN2124:       ELSE IF (WORD.EQ.'RIGIDBODIES') THEN
2158:          CALL READI(NATOMS)2125:          CALL READI(NATOMS)
2159:          NATOMS=NATOMS*22126:          NATOMS=NATOMS*2
2160:          NOPT=3*NATOMS 
2161: 2127: 
2162: ! hk2862128: ! hk286
2163:       ELSE IF (WORD.EQ.'RIGIDINIT') THEN2129:       ELSE IF (WORD.EQ.'RIGIDINIT') THEN
2164:          IF (NITEMS.EQ.1) THEN2130:          IF (NITEMS.EQ.1) THEN
2165:             PRINT '(A)'," keyword> ERROR: you must specify the number of degrees of freedom as an argument to RIGIDINIT"    2131:             PRINT '(A)'," keyword> ERROR: you must specify the number of degrees of freedom as an argument to RIGIDINIT"    
2166:             STOP2132:             STOP
2167:          ELSE2133:          ELSE
2168:             RIGIDINIT = .TRUE.         2134:             RIGIDINIT = .TRUE.         
2169:             PRINT '(A)'," keyword> the generalised rigid body framework is being used"2135:             PRINT '(A)'," keyword> the generalised rigid body framework is being used"
2170:             CALL READI(DEGFREEDOMS) 2136:             CALL READI(DEGFREEDOMS) 


r29793/main.F 2016-07-06 15:39:30.370399041 +0100 r29792/main.F 2016-07-06 15:39:36.322479482 +0100
174:          KAPPA=2*NATOMS-3174:          KAPPA=2*NATOMS-3
175:          IF (BULKT) THEN175:          IF (BULKT) THEN
176:             NFSTART=1176:             NFSTART=1
177:             NFFINISH=2*NATOMS-2177:             NFFINISH=2*NATOMS-2
178:             KAPPA=2*NATOMS-2178:             KAPPA=2*NATOMS-2
179:          ENDIF179:          ENDIF
180:       ELSE IF (GTHOMSONT) THEN180:       ELSE IF (GTHOMSONT) THEN
181:         NFSTART = 1181:         NFSTART = 1
182:         NFFINISH = 3*NATOMS - 3182:         NFFINISH = 3*NATOMS - 3
183:         KAPPA = 3*NATOMS - 3183:         KAPPA = 3*NATOMS - 3
184:       ELSE IF (MLP3T) THEN 
185:          NFSTART=1 
186:          NFFINISH=NATOMS 
187: ! 
188: ! This choice for kappa just gives the additive half kT per non-zero vibrational 
189: ! frequency for the configurational part of the heat capacity. This will be the  
190: ! high T limit. 
191: ! 
192:          KAPPA=NATOMS-1 
193:       ELSE IF (MLLJAT3) THEN 
194:          NFSTART=1 
195:          NFFINISH=NATOMS 
196: ! 
197: ! This choice for kappa just gives the additive half kT per non-zero vibrational 
198: ! frequency for the configurational part of the heat capacity. This will be the  
199: ! high T limit.  
200: ! 
201:          KAPPA=NATOMS 
202:       ELSE IF (PHI4MODT) THEN184:       ELSE IF (PHI4MODT) THEN
203:          NFSTART=1185:          NFSTART=1
204:          NFFINISH=NATOMS186:          NFFINISH=NATOMS
205:          KAPPA=NATOMS187:          KAPPA=NATOMS
206:       ELSE IF (PULLT) THEN188:       ELSE IF (PULLT) THEN
207:          NFFINISH=3*NATOMS-4189:          NFFINISH=3*NATOMS-4
208:          KAPPA=3*NATOMS-4190:          KAPPA=3*NATOMS-4
209:       ELSE IF (BULKT) THEN191:       ELSE IF (BULKT) THEN
210:          NFFINISH=3*NATOMS-3192:          NFFINISH=3*NATOMS-3
211:          KAPPA=3*NATOMS-3193:          KAPPA=3*NATOMS-3


r29793/minpermdist.f90 2016-07-06 15:39:30.722403791 +0100 r29792/minpermdist.f90 2016-07-06 15:39:37.382492359 +0100
 49: !  +/- RMATCUMUL ROTA (COORDSA - CMA) = permutation(DUMMYA) 49: !  +/- RMATCUMUL ROTA (COORDSA - CMA) = permutation(DUMMYA)
 50: !  where +/- is given by the value of INVERT. 50: !  where +/- is given by the value of INVERT.
 51: !  The centres of coordinates for COORDSA and COORDSB can be anywhere. On return, the 51: !  The centres of coordinates for COORDSA and COORDSB can be anywhere. On return, the
 52: !  centre of coordinates of COORDSA will be the same as for COORDSB, unless we 52: !  centre of coordinates of COORDSA will be the same as for COORDSB, unless we
 53: !  are doing an ion trap potential. 53: !  are doing an ion trap potential.
 54: ! 54: !
 55: SUBROUTINE MINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST,USEINT) 55: SUBROUTINE MINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST,USEINT)
 56: USE COMMONS,ONLY : NPERMGROUP, NPERMSIZE, PERMGROUP, NSETS, SETS, GEOMDIFFTOL, AMBERT, NFREEZE, CHARMMT, RBAAT, PULLT, & 56: USE COMMONS,ONLY : NPERMGROUP, NPERMSIZE, PERMGROUP, NSETS, SETS, GEOMDIFFTOL, AMBERT, NFREEZE, CHARMMT, RBAAT, PULLT, &
 57:   &               ANGLEAXIS, PERMISOMER, PERMDIST, ZSYM, INTCONSTRAINTT, INTLJT, OHCELLT, ATOMMATCHDIST, LPERMDIST, & 57:   &               ANGLEAXIS, PERMISOMER, PERMDIST, ZSYM, INTCONSTRAINTT, INTLJT, OHCELLT, ATOMMATCHDIST, LPERMDIST, &
 58:   &               TRAPT, NRANROT, MACROCYCLET, MCYCLEPERIOD, MCYCLEREPEATS, NOINVERSION, GTHOMSONT, & 58:   &               TRAPT, NRANROT, MACROCYCLET, MCYCLEPERIOD, MCYCLEREPEATS, NOINVERSION, GTHOMSONT, &
 59:   &               RATETARGETT, MLP3T, NOPT 59:   &               RATETARGETT
 60: USE PORFUNCS  60: USE PORFUNCS 
 61: USE UTILS,ONLY : GETUNIT 61: USE UTILS,ONLY : GETUNIT
 62:  62: 
 63: IMPLICIT NONE 63: IMPLICIT NONE
 64:  64: 
 65: INTEGER :: MAXIMUMTRIES=10 65: INTEGER :: MAXIMUMTRIES=10
 66: INTEGER NATOMS, NPERM, PATOMS, NTRIES, BESTINVERT, I, LUNIT 66: INTEGER NATOMS, NPERM, PATOMS, NTRIES, BESTINVERT, I, LUNIT
 67: INTEGER INVERT, NORBIT1, NORBIT2, NCHOOSE2, NDUMMY, LPERM(NATOMS), J1, J2, NCHOOSE1, OPNUM, J3, NROTDONE 67: INTEGER INVERT, NORBIT1, NORBIT2, NCHOOSE2, NDUMMY, LPERM(NATOMS), J1, J2, NCHOOSE1, OPNUM, J3, NROTDONE
 68: INTEGER NORBITB1, NORBITB2, NCHOOSEB1, NCHOOSEB2 68: INTEGER NORBITB1, NORBITB2, NCHOOSEB1, NCHOOSEB2
 69:  69: 
 79: LOGICAL, INTENT(IN) :: USEINT 79: LOGICAL, INTENT(IN) :: USEINT
 80: DOUBLE PRECISION PDUMMYA(3*NATOMS), PDUMMYB(3*NATOMS), LDISTANCE, DUMMYC(3*NATOMS), XDUMMY 80: DOUBLE PRECISION PDUMMYA(3*NATOMS), PDUMMYB(3*NATOMS), LDISTANCE, DUMMYC(3*NATOMS), XDUMMY
 81: INTEGER NEWPERM(NATOMS), ALLPERM(NATOMS), SAVEPERM(NATOMS), NMAXINT, NMININT, BESTPERM(NATOMS) 81: INTEGER NEWPERM(NATOMS), ALLPERM(NATOMS), SAVEPERM(NATOMS), NMAXINT, NMININT, BESTPERM(NATOMS)
 82: DOUBLE PRECISION CONSTRAINTE, XYZLOCAL(6*NATOMS), LMINCOORDS(2,3*NATOMS) 82: DOUBLE PRECISION CONSTRAINTE, XYZLOCAL(6*NATOMS), LMINCOORDS(2,3*NATOMS)
 83: INTEGER :: MCYCLESTEP =1,MCYCLESHIFT 83: INTEGER :: MCYCLESTEP =1,MCYCLESHIFT
 84:  84: 
 85: ! hk286 85: ! hk286
 86: IF (GTHOMSONT) THEN 86: IF (GTHOMSONT) THEN
 87:    CALL GTHOMSONMINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST,USEINT) 87:    CALL GTHOMSONMINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST,USEINT)
 88:    RETURN 88:    RETURN
 89: ELSEIF (MLP3T) THEN 
 90:    DISTANCE=0.0D0 
 91:    DO J1=1,NOPT 
 92:       DISTANCE=DISTANCE+(COORDSA(J1)-COORDSB(J1))**2 
 93:    ENDDO 
 94:    DISTANCE=SQRT(DISTANCE) 
 95:    RETURN 
 96: ENDIF 89: ENDIF
 97:  90: 
 98: NROTDONE=-1 91: NROTDONE=-1
 99: MAXIMUMTRIES=MAX(MAXIMUMTRIES,NRANROT+1) 92: MAXIMUMTRIES=MAX(MAXIMUMTRIES,NRANROT+1)
100: IF (RATETARGETT) CALL SDPRND(0) ! to make demos deterministic 93: IF (RATETARGETT) CALL SDPRND(0) ! to make demos deterministic
101:  94: 
102: BMTEST=.FALSE. 95: BMTEST=.FALSE.
103: IF (ATOMMATCHDIST) BMTEST=.TRUE.  96: IF (ATOMMATCHDIST) BMTEST=.TRUE. 
104: IF (BMTEST) THEN  97: IF (BMTEST) THEN 
105:  ALLOCATE(BMCOORDS(3*NATOMS)) 98:  ALLOCATE(BMCOORDS(3*NATOMS))


r29793/newconnodata.f 2016-07-06 15:39:31.050408224 +0100 r29792/newconnodata.f 2016-07-06 15:39:37.734498568 +0100
 62:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN') 62:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')
 63:          WRITE(LUNIT,'(3F20.10)') (LOCALPOINTS1(3*(J2-1)+1),LOCALPOINTS1(3*(J2-1)+2), 63:          WRITE(LUNIT,'(3F20.10)') (LOCALPOINTS1(3*(J2-1)+1),LOCALPOINTS1(3*(J2-1)+2),
 64:      &                               LOCALPOINTS1(3*(J2-1)+3),J2=1,NATOMS) 64:      &                               LOCALPOINTS1(3*(J2-1)+3),J2=1,NATOMS)
 65:          CLOSE(LUNIT) 65:          CLOSE(LUNIT)
 66:       ELSE IF (AMHT) THEN 66:       ELSE IF (AMHT) THEN
 67:          FPOO='start.'//TRIM(ADJUSTL(CONNSTR)) !  67:          FPOO='start.'//TRIM(ADJUSTL(CONNSTR)) ! 
 68:          LUNIT=GETUNIT() 68:          LUNIT=GETUNIT()
 69:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN') 69:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN')
 70:          WRITE(LUNIT,'(3G25.15)') LOCALPOINTS1(1:3*NATOMS) 70:          WRITE(LUNIT,'(3G25.15)') LOCALPOINTS1(1:3*NATOMS)
 71:          CLOSE(LUNIT) 71:          CLOSE(LUNIT)
 72:       ELSE IF (MLP3T) THEN 
 73:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR))  
 74:          LUNIT=GETUNIT() 
 75:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND') 
 76:          WRITE(LUNIT,'(A2,2X,F20.10)') ('  ',LOCALPOINTS1(J2),J2=1,NOPT) 
 77:          CLOSE(LUNIT) 
 78:       ELSE IF (PHI4MODT) THEN 72:       ELSE IF (PHI4MODT) THEN
 79:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR)) ! workaround for Sun compiler bug 73:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR)) ! workaround for Sun compiler bug
 80:          LUNIT=GETUNIT() 74:          LUNIT=GETUNIT()
 81:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND') 75:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND')
 82:          WRITE(LUNIT,'(A2,2X,F20.10)') ('  ',LOCALPOINTS1(J2),J2=1,NATOMS) 76:          WRITE(LUNIT,'(A2,2X,F20.10)') ('  ',LOCALPOINTS1(J2),J2=1,NATOMS)
 83:          CLOSE(LUNIT) 77:          CLOSE(LUNIT)
 84:       ELSE 78:       ELSE
 85:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR)) ! workaround for Sun compiler bug 79:          FPOO='odata.'//TRIM(ADJUSTL(CONNSTR)) ! workaround for Sun compiler bug
 86:          LUNIT=GETUNIT() 80:          LUNIT=GETUNIT()
 87:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND') 81:          OPEN(LUNIT,FILE=TRIM(ADJUSTL(FPOO)),STATUS='UNKNOWN',POSITION='APPEND')


r29793/setup.f 2016-07-06 15:39:31.778418279 +0100 r29792/setup.f 2016-07-06 15:39:38.106503592 +0100
 25: C 25: C
 26: C  We need pre-existing databases to specify which minima are A and which are B. 26: C  We need pre-existing databases to specify which minima are A and which are B.
 27: C 27: C
 28:       SUBROUTINE SETUP 28:       SUBROUTINE SETUP
 29:       USE PORFUNCS 29:       USE PORFUNCS
 30:       USE UTILS 30:       USE UTILS
 31:       USE COMMONS 31:       USE COMMONS
 32:       IMPLICIT NONE 32:       IMPLICIT NONE
 33:       INTEGER J1, J2, STATUS, J3, NDUMMY, NRANDOM, NCOUNT, NMINREMOVE, NTSREMOVE, NMINRETAIN,  33:       INTEGER J1, J2, STATUS, J3, NDUMMY, NRANDOM, NCOUNT, NMINREMOVE, NTSREMOVE, NMINRETAIN, 
 34:      &        J4, NTSRETAIN, ISTAT, LUNIT, LUNIT2 34:      &        J4, NTSRETAIN, ISTAT, LUNIT, LUNIT2
 35:       DOUBLE PRECISION LOCALPOINTS(NOPT), IXM, IYM, IZM, LOCALPOINTS2(NOPT), DISTANCE, RMAT(3,3), DIST2, DPRAND 35:       DOUBLE PRECISION LOCALPOINTS(3*NATOMS), IXM, IYM, IZM, LOCALPOINTS2(3*NATOMS), DISTANCE, RMAT(3,3), DIST2, DPRAND
 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 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*3*NATOMS) 
 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*3*NATOMS) 
 54:  54: 
 55:       IF (FROMLOWESTT) THEN 55:       IF (FROMLOWESTT) THEN
 56:          IF (.NOT.NOFRQS) THEN 56:          IF (.NOT.NOFRQS) THEN
 57:             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'
 58:             STOP 58:             STOP
 59:          ENDIF 59:          ENDIF
 60:          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'
 61:          OPEN(UNIT=1,FILE='lowest',STATUS='UNKNOWN') 61:          OPEN(UNIT=1,FILE='lowest',STATUS='UNKNOWN')
 62:          LUNIT=GETUNIT() 62:          LUNIT=GETUNIT()
 63:          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*3*NATOMS)
 64:          LUNIT2=GETUNIT() 64:          LUNIT2=GETUNIT()
 65:          OPEN(UNIT=LUNIT2,FILE='min.data.new',STATUS='UNKNOWN') 65:          OPEN(UNIT=LUNIT2,FILE='min.data.new',STATUS='UNKNOWN')
 66:          NDUMMY=0 66:          NDUMMY=0
 67: !         FVIBMIN(1)=4.6757541330 67: !         FVIBMIN(1)=4.6757541330
 68:          FVIBMIN(1)=1.000000000000000 68:          FVIBMIN(1)=1.000000000000000
 69:          HORDERMIN(1)=1 69:          HORDERMIN(1)=1
 70:          DO 70:          DO
 71:             NDUMMY=NDUMMY+1 71:             NDUMMY=NDUMMY+1
 72:             READ(1,*,END=776) 72:             READ(1,*,END=776)
 73: ! csw34> The GMIN lowest file usually includes atom names. If for any reason it does not, 73: ! csw34> The GMIN lowest file usually includes atom names. If for any reason it does not,
 74: !        the 'NOLABELS' option can be used to read just the coordinates 74: !        the 'NOLABELS' option can be used to read just the coordinates
 75:             IF (NOLABELST) THEN 75:             IF (NOLABELST) THEN
 76:                READ(1,'(A25,F20.10),A71') CDUMMY,EMIN(1) 76:                READ(1,'(A25,F20.10),A71') CDUMMY,EMIN(1)
 77:                READ(1,*) (LOCALPOINTS(J2),J2=1,NOPT) 77:                READ(1,*) (LOCALPOINTS(J2),J2=1,3*NATOMS)
 78:             ELSE 78:             ELSE
 79:                READ(1,'(A25,F20.10,A71)') CDUMMY,EMIN(1),CDUMMY 79:                READ(1,'(A25,F20.10,A71)') CDUMMY,EMIN(1),CDUMMY
 80:                DO J1=1,NATOMS 80:                DO J1=1,NATOMS
 81:                   READ(1,*) CDUMMY,LOCALPOINTS(3*J1-2),LOCALPOINTS(3*J1-1),LOCALPOINTS(3*J1) 81:                   READ(1,*) CDUMMY,LOCALPOINTS(3*J1-2),LOCALPOINTS(3*J1-1),LOCALPOINTS(3*J1)
 82:                ENDDO 82:                ENDDO
 83:             ENDIF 83:             ENDIF
 84:             CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,IXM,IYM,IZM) 84:             CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,IXM,IYM,IZM)
 85:             WRITE(LUNIT,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,NOPT) 85:             WRITE(LUNIT,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,3*NATOMS)
 86:             WRITE(LUNIT2,'(2F25.15,I6,3F20.10)') EMIN(1), FVIBMIN(1), HORDERMIN(1),IXM,IYM,IZM 86:             WRITE(LUNIT2,'(2F25.15,I6,3F20.10)') EMIN(1), FVIBMIN(1), HORDERMIN(1),IXM,IYM,IZM
 87:          ENDDO 87:          ENDDO
 88: 776      NDUMMY=NDUMMY-1 88: 776      NDUMMY=NDUMMY-1
 89:          WRITE(*,'(A,I10)')'setup> number of minima written=',NDUMMY 89:          WRITE(*,'(A,I10)')'setup> number of minima written=',NDUMMY
 90:          CLOSE(LUNIT) 90:          CLOSE(LUNIT)
 91:          CLOSE(LUNIT2) 91:          CLOSE(LUNIT2)
 92:          CLOSE(1) 92:          CLOSE(1)
 93:          STOP 93:          STOP
 94:       ENDIF 94:       ENDIF
 95:  95: 
 96:       IF (EXTRACTMINT) THEN 96:       IF (EXTRACTMINT) THEN
 97:          OPEN(UNIT=1,FILE='extractedmin', STATUS='UNKNOWN') 97:          OPEN(UNIT=1,FILE='extractedmin', STATUS='UNKNOWN')
 98:          IF (WHICHMIN.EQ.-123) THEN 98:          IF (WHICHMIN.EQ.-123) THEN
 99:             NDUMMY=0 99:             NDUMMY=0
100:             PRINT '(A)', 'setup> rewriting binary points.min file from extractedmin file'100:             PRINT '(A)', 'setup> rewriting binary points.min file from extractedmin file'
101:             LUNIT=GETUNIT()101:             LUNIT=GETUNIT()
102:             OPEN(UNIT=LUNIT,FILE='points.min.new',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT) 102:             OPEN(UNIT=LUNIT,FILE='points.min.new',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*3*NATOMS) 
103:             DO 103:             DO 
104:                NDUMMY=NDUMMY+1104:                NDUMMY=NDUMMY+1
105:                READ(1,*,END=777) (LOCALPOINTS(J2),J2=1,NOPT)105:                READ(1,*,END=777) (LOCALPOINTS(J2),J2=1,3*NATOMS)
106:                WRITE(LUNIT,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,NOPT)106:                WRITE(LUNIT,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,3*NATOMS)
107:             ENDDO107:             ENDDO
108: 777         NDUMMY=NDUMMY-1108: 777         NDUMMY=NDUMMY-1
109:             PRINT '(A,I10)','setup> number of minima extracted=',NDUMMY109:             PRINT '(A,I10)','setup> number of minima extracted=',NDUMMY
110:             CLOSE(LUNIT)110:             CLOSE(LUNIT)
111:          ELSEIF (WHICHMIN.LE.0) THEN111:          ELSEIF (WHICHMIN.LE.0) THEN
112:             NDUMMY=0112:             NDUMMY=0
113:             PRINT '(A)', 'setup> extracting all minima '113:             PRINT '(A)', 'setup> extracting all minima '
114:             DO 114:             DO 
115:                NDUMMY=NDUMMY+1115:                NDUMMY=NDUMMY+1
116:                READ(UMIN,REC=NDUMMY,ERR=877) (LOCALPOINTS(J2),J2=1,NOPT)116:                READ(UMIN,REC=NDUMMY,ERR=877) (LOCALPOINTS(J2),J2=1,3*NATOMS)
117:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,NOPT)117:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,3*NATOMS)
118:             ENDDO118:             ENDDO
119: 877         NDUMMY=NDUMMY-1119: 877         NDUMMY=NDUMMY-1
120:             PRINT '(A,I10)','setup> number of minima extracted=',NDUMMY120:             PRINT '(A,I10)','setup> number of minima extracted=',NDUMMY
121:          ELSE121:          ELSE
122:             PRINT '(A,I10)', 'setup> extracting minimum ',WHICHMIN122:             PRINT '(A,I10)', 'setup> extracting minimum ',WHICHMIN
123:             READ(UMIN,REC=WHICHMIN) (LOCALPOINTS(J2),J2=1,NOPT)123:             READ(UMIN,REC=WHICHMIN) (LOCALPOINTS(J2),J2=1,3*NATOMS)
124: 124: 
125:            IF (AMHT) THEN125:            IF (AMHT) THEN
126:               CALL AMHDUMP(LOCALPOINTS,'amhmin.pdb')126:               CALL AMHDUMP(LOCALPOINTS,'amhmin.pdb')
127:   127:   
128:               IF (AMHQT)THEN128:               IF (AMHQT)THEN
129:                  CALL AMHQ(WHICHMIN)129:                  CALL AMHQ(WHICHMIN)
130:               ENDIF130:               ENDIF
131:   131:   
132:               IF (AMHQENGMINT)THEN132:               IF (AMHQENGMINT)THEN
133:                  CALL AMHQENGMIN(WHICHMIN)133:                  CALL AMHQENGMIN(WHICHMIN)
149:                 CALL AMH_RELCO(WHICHMIN, RELCOCUT)149:                 CALL AMH_RELCO(WHICHMIN, RELCOCUT)
150:               ENDIF150:               ENDIF
151:   151:   
152:               IF (AMHALLATOMMINT)THEN152:               IF (AMHALLATOMMINT)THEN
153:                  CALL AMHALLATOMMIN153:                  CALL AMHALLATOMMIN
154:              ENDIF154:              ENDIF
155:            ELSE155:            ELSE
156: !156: !
157: ! Write the extractedmin file to UNIT=1157: ! Write the extractedmin file to UNIT=1
158: !158: !
159:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,NOPT)159:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,3*NATOMS)
160: !160: !
161: ! Write the extractedmin.crd file if using CHARMM161: ! Write the extractedmin.crd file if using CHARMM
162: !162: !
163:                IF (CHARMMT) CALL CHARMMDUMP(LOCALPOINTS,'extractedmin.crd')163:                IF (CHARMMT) CALL CHARMMDUMP(LOCALPOINTS,'extractedmin.crd')
164: !164: !
165: ! csw34> Write the extractedmin.rst file if using AMBER/NAB165: ! csw34> Write the extractedmin.rst file if using AMBER/NAB
166: !166: !
167:                IF (AMBERT) THEN167:                IF (AMBERT) THEN
168:                   OPEN(UNIT=10,FILE='extractedmin.rst', STATUS='UNKNOWN')168:                   OPEN(UNIT=10,FILE='extractedmin.rst', STATUS='UNKNOWN')
169:                   WRITE(10,'(20A4)') 'MOL'169:                   WRITE(10,'(20A4)') 'MOL'
170: ! Formats used come from the AMBER routine minrit170: ! Formats used come from the AMBER routine minrit
171:                   IF (NATOMS.GT.100000) THEN171:                   IF (NATOMS.GT.100000) THEN
172:                      WRITE(10,'(I10)') NATOMS172:                      WRITE(10,'(I10)') NATOMS
173:                   ELSE173:                   ELSE
174:                      WRITE(10,'(I5)') NATOMS174:                      WRITE(10,'(I5)') NATOMS
175:                   ENDIF175:                   ENDIF
176:                   WRITE(10,'(6f12.7)') (LOCALPOINTS(J2),J2=1,NOPT)176:                   WRITE(10,'(6f12.7)') (LOCALPOINTS(J2),J2=1,3*NATOMS)
177:                   CLOSE(10)177:                   CLOSE(10)
178:                ENDIF178:                ENDIF
179: 179: 
180:            ENDIF180:            ENDIF
181: 181: 
182:          ENDIF182:          ENDIF
183:          CLOSE(1)183:          CLOSE(1)
184:          STOP184:          STOP
185:       ENDIF185:       ENDIF
186: 186: 
187:       IF (EXTRACTTST) THEN187:       IF (EXTRACTTST) THEN
188:          OPEN(UNIT=1,FILE='extractedts', STATUS='UNKNOWN')188:          OPEN(UNIT=1,FILE='extractedts', STATUS='UNKNOWN')
189:          IF (WHICHTS.EQ.-123) THEN189:          IF (WHICHTS.EQ.-123) THEN
190:             NDUMMY=0190:             NDUMMY=0
191:             PRINT '(A)', 'setup> rewriting binary points.ts file from extractedts file'191:             PRINT '(A)', 'setup> rewriting binary points.ts file from extractedts file'
192:             LUNIT=GETUNIT()192:             LUNIT=GETUNIT()
193:             OPEN(UNIT=LUNIT,FILE='points.ts.new',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT) 193:             OPEN(UNIT=LUNIT,FILE='points.ts.new',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*3*NATOMS) 
194:             DO194:             DO
195:                NDUMMY=NDUMMY+1195:                NDUMMY=NDUMMY+1
196:                READ(1,*,END=778) (LOCALPOINTS(J2),J2=1,NOPT)196:                READ(1,*,END=778) (LOCALPOINTS(J2),J2=1,3*NATOMS)
197:                WRITE(LUNIT,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,NOPT)197:                WRITE(LUNIT,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,3*NATOMS)
198:             ENDDO198:             ENDDO
199: 778         NDUMMY=NDUMMY-1199: 778         NDUMMY=NDUMMY-1
200:             CLOSE(LUNIT)200:             CLOSE(LUNIT)
201:             PRINT '(A,I10)','setup> number of ts extracted=',NDUMMY201:             PRINT '(A,I10)','setup> number of ts extracted=',NDUMMY
202:          ELSEIF (WHICHTS.LE.0) THEN202:          ELSEIF (WHICHTS.LE.0) THEN
203:             NDUMMY=0203:             NDUMMY=0
204:             PRINT '(A)', 'setup> extracting all ts '204:             PRINT '(A)', 'setup> extracting all ts '
205:             DO205:             DO
206:                NDUMMY=NDUMMY+1206:                NDUMMY=NDUMMY+1
207:                READ(UTS,REC=NDUMMY,ERR=878) (LOCALPOINTS(J2),J2=1,NOPT)207:                READ(UTS,REC=NDUMMY,ERR=878) (LOCALPOINTS(J2),J2=1,3*NATOMS)
208:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,NOPT)208:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,3*NATOMS)
209:             ENDDO209:             ENDDO
210: 878         NDUMMY=NDUMMY-1210: 878         NDUMMY=NDUMMY-1
211:             PRINT '(A,I10)','setup> number of ts extracted=',NDUMMY211:             PRINT '(A,I10)','setup> number of ts extracted=',NDUMMY
212:          ELSE212:          ELSE
213:             PRINT '(A,I10)', 'setup> extracting ts ',WHICHTS213:             PRINT '(A,I10)', 'setup> extracting ts ',WHICHTS
214:             READ(UTS,REC=WHICHTS) (LOCALPOINTS(J2),J2=1,NOPT)214:             READ(UTS,REC=WHICHTS) (LOCALPOINTS(J2),J2=1,3*NATOMS)
215: 215: 
216: !           IF (AMHT) THEN216: !           IF (AMHT) THEN
217: !              CALL AMHDUMP(LOCALPOINTS,'amhts.pdb')217: !              CALL AMHDUMP(LOCALPOINTS,'amhts.pdb')
218: !           ELSE218: !           ELSE
219: !219: !
220: ! Write the extractedmin file to UNIT=1220: ! Write the extractedmin file to UNIT=1
221: !221: !
222:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,NOPT)222:                WRITE(1,'(3F25.15)') (LOCALPOINTS(J2),J2=1,3*NATOMS)
223: !223: !
224: ! Write the extractedmin.crd file when using CHARMM224: ! Write the extractedmin.crd file when using CHARMM
225: !225: !
226:                IF (CHARMMT) CALL CHARMMDUMP(LOCALPOINTS,'extractedts.crd')226:                IF (CHARMMT) CALL CHARMMDUMP(LOCALPOINTS,'extractedts.crd')
227: !227: !
228: ! csw34> Write the extractedts.rst file if using AMBER/NAB228: ! csw34> Write the extractedts.rst file if using AMBER/NAB
229: !229: !
230:                IF (AMBERT) THEN230:                IF (AMBERT) THEN
231:                   OPEN(UNIT=10,FILE='extractedts.rst', STATUS='UNKNOWN')231:                   OPEN(UNIT=10,FILE='extractedts.rst', STATUS='UNKNOWN')
232:                   WRITE(10,'(20A4)') 'MOL'232:                   WRITE(10,'(20A4)') 'MOL'
233: ! Formats used come from the AMBER routine minrit233: ! Formats used come from the AMBER routine minrit
234:                   IF (NATOMS.GT.100000) THEN234:                   IF (NATOMS.GT.100000) THEN
235:                      WRITE(10,'(I10)') NATOMS235:                      WRITE(10,'(I10)') NATOMS
236:                   ELSE236:                   ELSE
237:                      WRITE(10,'(I5)') NATOMS237:                      WRITE(10,'(I5)') NATOMS
238:                   ENDIF238:                   ENDIF
239:                   WRITE(10,'(6f12.7)') (LOCALPOINTS(J2),J2=1,NOPT)239:                   WRITE(10,'(6f12.7)') (LOCALPOINTS(J2),J2=1,3*NATOMS)
240:                   CLOSE(10)240:                   CLOSE(10)
241:                ENDIF241:                ENDIF
242: !          ENDIF242: !          ENDIF
243:          ENDIF243:          ENDIF
244:          CLOSE(1)244:          CLOSE(1)
245:          STOP245:          STOP
246:       ENDIF246:       ENDIF
247: !247: !
248: !  In this case we try to connect two minima, whose coordinates are in248: !  In this case we try to connect two minima, whose coordinates are in
249: !  files odata.start and odata.finish for a DIJINITSTARTT run. We set up min.data as 249: !  files odata.start and odata.finish for a DIJINITSTARTT run. We set up min.data as 
282:             IF (YESNO) THEN282:             IF (YESNO) THEN
283:                OPEN(UNIT=1,FILE='min.data.info.1',STATUS='OLD')283:                OPEN(UNIT=1,FILE='min.data.info.1',STATUS='OLD')
284:                IF (DUMMYTST.AND.LOWESTFRQT) THEN284:                IF (DUMMYTST.AND.LOWESTFRQT) THEN
285:                   READ(1,*) EMIN(1),FVIBMIN(1),HORDERMIN(1),IXMIN(1),IYMIN(1),IZMIN(1),MINCURVE(1),MINFRQ2(1)285:                   READ(1,*) EMIN(1),FVIBMIN(1),HORDERMIN(1),IXMIN(1),IYMIN(1),IZMIN(1),MINCURVE(1),MINFRQ2(1)
286:                   WRITE(UMINDATA,'(2F25.15,I6,5F20.10)') EMIN(1), FVIBMIN(1), HORDERMIN(1),IXMIN(1),286:                   WRITE(UMINDATA,'(2F25.15,I6,5F20.10)') EMIN(1), FVIBMIN(1), HORDERMIN(1),IXMIN(1),
287:      &                                                      IYMIN(1),IZMIN(1),MINCURVE(1),MINFRQ2(1)287:      &                                                      IYMIN(1),IZMIN(1),MINCURVE(1),MINFRQ2(1)
288:                ELSE288:                ELSE
289:                   READ(1,*) EMIN(1),FVIBMIN(1),HORDERMIN(1),IXMIN(1),IYMIN(1),IZMIN(1)289:                   READ(1,*) EMIN(1),FVIBMIN(1),HORDERMIN(1),IXMIN(1),IYMIN(1),IZMIN(1)
290:                   WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(1), FVIBMIN(1), HORDERMIN(1),IXMIN(1), IYMIN(1), IZMIN(1)290:                   WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(1), FVIBMIN(1), HORDERMIN(1),IXMIN(1), IYMIN(1), IZMIN(1)
291:                ENDIF291:                ENDIF
292:                READ(1,*) (LOCALPOINTS(J2),J2=1,NOPT)292:                READ(1,*) (LOCALPOINTS(J2),J2=1,3*NATOMS)
293:                WRITE(UMIN,REC=1) (LOCALPOINTS(J2),J2=1,NOPT)293:                WRITE(UMIN,REC=1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
294:                CLOSE(1)294:                CLOSE(1)
295:             ELSE295:             ELSE
296:                PRINT *, 'setup> ERROR - no min.data.info.1 found - check OPTIM output in output.start'296:                PRINT *, 'setup> ERROR - no min.data.info.1 found - check OPTIM output in output.start'
297:                STOP        297:                STOP        
298:             ENDIF298:             ENDIF
299:             INQUIRE(FILE='min.data.info.2',EXIST=YESNO)299:             INQUIRE(FILE='min.data.info.2',EXIST=YESNO)
300:             IF (YESNO) CALL MYSYSTEM(STATUS,DEBUG,'rm min.data.info.2')300:             IF (YESNO) CALL MYSYSTEM(STATUS,DEBUG,'rm min.data.info.2')
301:             CALL MYSYSTEM(STATUS,DEBUG,'cp odata.finish odata.2')301:             CALL MYSYSTEM(STATUS,DEBUG,'cp odata.finish odata.2')
302:             IF (CHARMMT) CALL MYSYSTEM(STATUS,DEBUG,'cp finish.crd input.crd.2')302:             IF (CHARMMT) CALL MYSYSTEM(STATUS,DEBUG,'cp finish.crd input.crd.2')
303:             IF (AMHT) CALL MYSYSTEM(STATUS,DEBUG,'cp AMHfinish start.2')303:             IF (AMHT) CALL MYSYSTEM(STATUS,DEBUG,'cp AMHfinish start.2')
307:                OPEN(UNIT=1,FILE='min.data.info.2',STATUS='OLD')307:                OPEN(UNIT=1,FILE='min.data.info.2',STATUS='OLD')
308:                IF (DUMMYTST.AND.LOWESTFRQT) THEN308:                IF (DUMMYTST.AND.LOWESTFRQT) THEN
309:                   READ(1,*) EMIN(2),FVIBMIN(2),HORDERMIN(2),IXMIN(2),IYMIN(2),IZMIN(2),MINCURVE(2),MINFRQ2(2)309:                   READ(1,*) EMIN(2),FVIBMIN(2),HORDERMIN(2),IXMIN(2),IYMIN(2),IZMIN(2),MINCURVE(2),MINFRQ2(2)
310:                   WRITE(UMINDATA,'(2F25.15,I6,5F20.10)') EMIN(2), FVIBMIN(2), HORDERMIN(2),IXMIN(2), 310:                   WRITE(UMINDATA,'(2F25.15,I6,5F20.10)') EMIN(2), FVIBMIN(2), HORDERMIN(2),IXMIN(2), 
311:      &                                                   IYMIN(2),IZMIN(2),MINCURVE(2),MINFRQ2(2)311:      &                                                   IYMIN(2),IZMIN(2),MINCURVE(2),MINFRQ2(2)
312:                ELSE312:                ELSE
313:                   READ(1,*) EMIN(2),FVIBMIN(2),HORDERMIN(2),IXMIN(2),IYMIN(2),IZMIN(2)313:                   READ(1,*) EMIN(2),FVIBMIN(2),HORDERMIN(2),IXMIN(2),IYMIN(2),IZMIN(2)
314:                   WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(2), FVIBMIN(2), HORDERMIN(2),IXMIN(2), IYMIN(2), IZMIN(2)314:                   WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(2), FVIBMIN(2), HORDERMIN(2),IXMIN(2), IYMIN(2), IZMIN(2)
315:                ENDIF315:                ENDIF
316:                CLOSE(UMINDATA)316:                CLOSE(UMINDATA)
317:                READ(1,*) (LOCALPOINTS(J2),J2=1,NOPT)317:                READ(1,*) (LOCALPOINTS(J2),J2=1,3*NATOMS)
318:                WRITE(UMIN,REC=2) (LOCALPOINTS(J2),J2=1,NOPT)318:                WRITE(UMIN,REC=2) (LOCALPOINTS(J2),J2=1,3*NATOMS)
319:                CLOSE(1)319:                CLOSE(1)
320:             ELSE320:             ELSE
321:                PRINT *, 'setup> ERROR - no min.data.info.2 found - check OPTIM output in output.finish'321:                PRINT *, 'setup> ERROR - no min.data.info.2 found - check OPTIM output in output.finish'
322:                STOP322:                STOP
323:             ENDIF323:             ENDIF
324:             INQUIRE(FILE='min.A',EXIST=YESNO)324:             INQUIRE(FILE='min.A',EXIST=YESNO)
325:             IF (DIJINITSTARTT) THEN325:             IF (DIJINITSTARTT) THEN
326:                IF (YESNO) CALL MYSYSTEM(STATUS,DEBUG,'cp min.A min.A.save')326:                IF (YESNO) CALL MYSYSTEM(STATUS,DEBUG,'cp min.A min.A.save')
327:                PRINT '(A)','setup> Creating new min.A file'327:                PRINT '(A)','setup> Creating new min.A file'
328:             ELSEIF (DIJINITCONTT) THEN328:             ELSEIF (DIJINITCONTT) THEN
344:                   PRINT '(A)','setup> ERROR - min.B must exist for a DIJINIT continuation run'344:                   PRINT '(A)','setup> ERROR - min.B must exist for a DIJINIT continuation run'
345:                   STOP345:                   STOP
346:                ENDIF346:                ENDIF
347:             ENDIF347:             ENDIF
348:             OPEN(1,FILE='min.B',STATUS='UNKNOWN')348:             OPEN(1,FILE='min.B',STATUS='UNKNOWN')
349:             WRITE(1,'(I10)') 1349:             WRITE(1,'(I10)') 1
350:             WRITE(1,'(I10)') 2350:             WRITE(1,'(I10)') 2
351:             CLOSE(1)351:             CLOSE(1)
352:             PRINT '(A)','setup> initial OPTIM jobs run for odata.start and odata.finish'352:             PRINT '(A)','setup> initial OPTIM jobs run for odata.start and odata.finish'
353:             IF (DUMMYTST) THEN353:             IF (DUMMYTST) THEN
354:                READ(UMIN,REC=1) (LOCALPOINTS(J2),J2=1,NOPT)354:                READ(UMIN,REC=1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
355:                READ(UMIN,REC=2) (LOCALPOINTS2(J3),J3=1,NOPT)355:                READ(UMIN,REC=2) (LOCALPOINTS2(J3),J3=1,3*NATOMS)
356:                CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,356:                CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,
357:      &                          RMAT,.FALSE.)357:      &                          RMAT,.FALSE.)
358:                IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD, 358:                IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD, 
359:      &                                                  DISTANCE,DIST2,RIGIDBODY,RMAT,INTERPCOSTFUNCTION)359:      &                                                  DISTANCE,DIST2,RIGIDBODY,RMAT,INTERPCOSTFUNCTION)
360:                MINDISTMIN(1)=DISTANCE360:                MINDISTMIN(1)=DISTANCE
361:                MINDISTMIN(2)=DISTANCE361:                MINDISTMIN(2)=DISTANCE
362: C362: C
363: C  Must create an entry in ts.data in this case.363: C  Must create an entry in ts.data in this case.
364: C  ETS,FVIBTS,HORDERTS,PLUS,MINUS,IXTS,IYTS,IZTS364: C  ETS,FVIBTS,HORDERTS,PLUS,MINUS,IXTS,IYTS,IZTS
365: C365: C
537:          OPEN(UNIT=UMINDATA,FILE='min.data',STATUS='UNKNOWN',POSITION="APPEND")537:          OPEN(UNIT=UMINDATA,FILE='min.data',STATUS='UNKNOWN',POSITION="APPEND")
538:       ENDIF538:       ENDIF
539: C539: C
540: C  Check that the necessary coordinates are in fact present. 540: C  Check that the necessary coordinates are in fact present. 
541: C541: C
542:       IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0)) THEN542:       IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0)) THEN
543:           IF (AMHT) THEN543:           IF (AMHT) THEN
544:             WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'544:             WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'
545:           ELSE545:           ELSE
546:            DO J1=1,NMIN546:            DO J1=1,NMIN
547:             READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)547:             READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
548:             CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,IXM,IYM,IZM)548:             CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,IXM,IYM,IZM)
549: C           IF (PRINTT) WRITE(*,'(2F20.10,I6,3F20.10)') EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXM,IYM,IZM549: C           IF (PRINTT) WRITE(*,'(2F20.10,I6,3F20.10)') EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXM,IYM,IZM
550:             IF ((ABS(IXM-IXMIN(J1)).GT.IDIFFTOL).OR.550:             IF ((ABS(IXM-IXMIN(J1)).GT.IDIFFTOL).OR.
551:      1          (ABS(IYM-IYMIN(J1)).GT.IDIFFTOL).OR.551:      1          (ABS(IYM-IYMIN(J1)).GT.IDIFFTOL).OR.
552:      1          (ABS(IZM-IZMIN(J1)).GT.IDIFFTOL)) THEN552:      1          (ABS(IZM-IZMIN(J1)).GT.IDIFFTOL)) THEN
553:                WRITE(*,'(A,I10)') 'setup> WARNING - principal moments of inertia do not agree with input for minimum ',J1553:                WRITE(*,'(A,I10)') 'setup> WARNING - principal moments of inertia do not agree with input for minimum ',J1
554:                WRITE(*,'(A,3F20.10)') 'setup> values from coordinates: ',IXM,IYM,IZM554:                WRITE(*,'(A,3F20.10)') 'setup> values from coordinates: ',IXM,IYM,IZM
555:                WRITE(*,'(A,2F20.10,I6,3F20.10)') 'setup> values from min.data: ', 555:                WRITE(*,'(A,2F20.10,I6,3F20.10)') 'setup> values from min.data: ', 
556:      &                     EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXMIN(J1),IYMIN(J1),IZMIN(J1)556:      &                     EMIN(J1),FVIBMIN(J1),HORDERMIN(J1),IXMIN(J1),IYMIN(J1),IZMIN(J1)
557:                PRINT '(A)','LOCALPOINTS:'557:                PRINT '(A)','LOCALPOINTS:'
558:                PRINT '(3G20.10)',LOCALPOINTS(1:NOPT)558:                PRINT '(3G20.10)',LOCALPOINTS(1:3*NATOMS)
559:                IXMIN(J1)=IXM559:                IXMIN(J1)=IXM
560:                IYMIN(J1)=IYM560:                IYMIN(J1)=IYM
561:                IZMIN(J1)=IZM561:                IZMIN(J1)=IZM
562: !              STOP  562: !              STOP  
563:             ENDIF563:             ENDIF
564:            ENDDO564:            ENDDO
565:           ENDIF565:           ENDIF
566:          IF (PRINTT) WRITE(*,'(A,I10,A)') 'setup> points for ',NMIN,' minima read from file points.min'566:          IF (PRINTT) WRITE(*,'(A,I10,A)') 'setup> points for ',NMIN,' minima read from file points.min'
567:       ENDIF567:       ENDIF
568: !568: !
572:          INQUIRE(FILE=TRIM(ADJUSTL(MINNAME)),EXIST=YESNO)572:          INQUIRE(FILE=TRIM(ADJUSTL(MINNAME)),EXIST=YESNO)
573:          IF (YESNO) THEN573:          IF (YESNO) THEN
574:             OPEN(UNIT=1,FILE=TRIM(ADJUSTL(MINNAME)),STATUS='OLD')574:             OPEN(UNIT=1,FILE=TRIM(ADJUSTL(MINNAME)),STATUS='OLD')
575:             IF(MAKEPAIRS) OPEN(UNIT=25,FILE=TRIM(ADJUSTL(MAKEPAIRSFILE)),STATUS='NEW')575:             IF(MAKEPAIRS) OPEN(UNIT=25,FILE=TRIM(ADJUSTL(MAKEPAIRSFILE)),STATUS='NEW')
576:             DO 576:             DO 
577:                IF (DUMMYTST.AND.LOWESTFRQT) THEN577:                IF (DUMMYTST.AND.LOWESTFRQT) THEN
578:                   READ(1,*,END=130) NEWEMIN,NEWFVIBMIN,NEWHORDERMIN,NEWIXMIN,NEWIYMIN,NEWIZMIN,NEWMINCURVE,NEWMINFRQ2578:                   READ(1,*,END=130) NEWEMIN,NEWFVIBMIN,NEWHORDERMIN,NEWIXMIN,NEWIYMIN,NEWIZMIN,NEWMINCURVE,NEWMINFRQ2
579:                ELSE579:                ELSE
580:                   READ(1,*,END=130) NEWEMIN,NEWFVIBMIN,NEWHORDERMIN,NEWIXMIN,NEWIYMIN,NEWIZMIN580:                   READ(1,*,END=130) NEWEMIN,NEWFVIBMIN,NEWHORDERMIN,NEWIXMIN,NEWIYMIN,NEWIZMIN
581:                ENDIF581:                ENDIF
582:                READ(1,*) (LOCALPOINTS(J2),J2=1,NOPT)582:                READ(1,*) (LOCALPOINTS(J2),J2=1,3*NATOMS)
583: !583: !
584: ! Must check it is not an old minimum!584: ! Must check it is not an old minimum!
585: !585: !
586:                DO J2=1,NMIN586:                DO J2=1,NMIN
587:                   DISTANCE=1.0D100587:                   DISTANCE=1.0D100
588:                   IF (ABS(NEWEMIN-EMIN(J2)).LT.EDIFFTOL) THEN588:                   IF (ABS(NEWEMIN-EMIN(J2)).LT.EDIFFTOL) THEN
589:                      READ(UMIN,REC=J2) (LOCALPOINTS2(J3),J3=1,NOPT)589:                      READ(UMIN,REC=J2) (LOCALPOINTS2(J3),J3=1,3*NATOMS)
590:                      CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE, 590:                      CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE, 
591:      &                                DIST2,RIGIDBODY,RMAT,.FALSE.)591:      &                                DIST2,RIGIDBODY,RMAT,.FALSE.)
592:                   ENDIF592:                   ENDIF
593:       593:       
594:                   IF ((ABS(NEWEMIN-EMIN(J2)).LT.EDIFFTOL).AND.(DISTANCE.LT.GEOMDIFFTOL)) THEN594:                   IF ((ABS(NEWEMIN-EMIN(J2)).LT.EDIFFTOL).AND.(DISTANCE.LT.GEOMDIFFTOL)) THEN
595:                      PRINT '(A,I10)','setup> minimum is database minimum ',J2595:                      PRINT '(A,I10)','setup> minimum is database minimum ',J2
596:                      IF (ABS(NEWFVIBMIN-FVIBMIN(J2))/FVIBMIN(J2).GT.1.0D-4) THEN596:                      IF (ABS(NEWFVIBMIN-FVIBMIN(J2))/FVIBMIN(J2).GT.1.0D-4) THEN
597:                         WRITE(*,'(A,F15.5,A,F15.5)') 'setup> WARNING, NEWFVIBMIN=',NEWFVIBMIN,' should be ',FVIBMIN(J2)597:                         WRITE(*,'(A,F15.5,A,F15.5)') 'setup> WARNING, NEWFVIBMIN=',NEWFVIBMIN,' should be ',FVIBMIN(J2)
598:                      ENDIF598:                      ENDIF
599:                      IF (NEWHORDERMIN.NE.HORDERMIN(J2)) THEN599:                      IF (NEWHORDERMIN.NE.HORDERMIN(J2)) THEN
631:                   WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(NMIN), FVIBMIN(NMIN), HORDERMIN(NMIN), 631:                   WRITE(UMINDATA,'(2F25.15,I6,3F20.10)') EMIN(NMIN), FVIBMIN(NMIN), HORDERMIN(NMIN), 
632:      &                                             IXMIN(NMIN), IYMIN(NMIN), IZMIN(NMIN)632:      &                                             IXMIN(NMIN), IYMIN(NMIN), IZMIN(NMIN)
633:                ENDIF633:                ENDIF
634:                IF (MAKEPAIRS) THEN634:                IF (MAKEPAIRS) THEN
635:                    WRITE(25,*) LINECOUNT, EMIN(NMIN), NMIN635:                    WRITE(25,*) LINECOUNT, EMIN(NMIN), NMIN
636:                    WRITE(25,*) LINECOUNT+1, "0.0 0.0"636:                    WRITE(25,*) LINECOUNT+1, "0.0 0.0"
637:                    LINECOUNT = LINECOUNT+2637:                    LINECOUNT = LINECOUNT+2
638:                    LASTMIN = NMIN638:                    LASTMIN = NMIN
639:                ENDIF639:                ENDIF
640:                CALL FLUSH(UMINDATA)640:                CALL FLUSH(UMINDATA)
641:                WRITE(UMIN,REC=NMIN) (LOCALPOINTS(J2),J2=1,NOPT)641:                WRITE(UMIN,REC=NMIN) (LOCALPOINTS(J2),J2=1,3*NATOMS)
642: 140            CONTINUE642: 140            CONTINUE
643:             ENDDO643:             ENDDO
644: 130         CLOSE(1)644: 130         CLOSE(1)
645:          ELSE645:          ELSE
646:             PRINT '(A)','setup> ERROR - no file ',TRIM(ADJUSTL(MINNAME))646:             PRINT '(A)','setup> ERROR - no file ',TRIM(ADJUSTL(MINNAME))
647:          ENDIF647:          ENDIF
648:       ENDIF648:       ENDIF
649: 649: 
650:       IF (CLOSEFILEST) CLOSE(UNIT=UMINDATA)650:       IF (CLOSEFILEST) CLOSE(UNIT=UMINDATA)
651:       IF (MAKEPAIRS) CLOSE(25)651:       IF (MAKEPAIRS) CLOSE(25)
855:             ELSE855:             ELSE
856:                READ(UTSDATA,*,END=40) ETS(J1),FVIBTS(J1),HORDERTS(J1),PLUS(J1),MINUS(J1),IXTS(J1),IYTS(J1),IZTS(J1)856:                READ(UTSDATA,*,END=40) ETS(J1),FVIBTS(J1),HORDERTS(J1),PLUS(J1),MINUS(J1),IXTS(J1),IYTS(J1),IZTS(J1)
857:             ENDIF857:             ENDIF
858:             IF ((PLUS(J1).GT.NMIN).OR.(MINUS(J1).GT.NMIN)) THEN858:             IF ((PLUS(J1).GT.NMIN).OR.(MINUS(J1).GT.NMIN)) THEN
859:                PRINT '(A,I10,A)','setup> ERROR - minima specified for ts ',J1,' lie beyond those specified in min.data'859:                PRINT '(A,I10,A)','setup> ERROR - minima specified for ts ',J1,' lie beyond those specified in min.data'
860:                PRINT '(A,2I10)','setup> plus and minus minima are ',PLUS(J1),MINUS(J1)860:                PRINT '(A,2I10)','setup> plus and minus minima are ',PLUS(J1),MINUS(J1)
861:                STOP861:                STOP
862:             ENDIF862:             ENDIF
863: 863: 
864:             IF (DUMMYTST.AND.(.NOT.NOPOINTS).AND.(NATTEMPT.GT.0)) THEN864:             IF (DUMMYTST.AND.(.NOT.NOPOINTS).AND.(NATTEMPT.GT.0)) THEN
865:                READ(UMIN,REC=PLUS(J1)) (LOCALPOINTS(J2),J2=1,NOPT)865:                READ(UMIN,REC=PLUS(J1)) (LOCALPOINTS(J2),J2=1,3*NATOMS)
866:                READ(UMIN,REC=MINUS(J1)) (LOCALPOINTS2(J3),J3=1,NOPT)866:                READ(UMIN,REC=MINUS(J1)) (LOCALPOINTS2(J3),J3=1,3*NATOMS)
867:                   CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,867:                   CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,
868:      &                             RMAT,.FALSE.)868:      &                             RMAT,.FALSE.)
869:                   IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD, 869:                   IF (INTERPCOSTFUNCTION) CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD, 
870:      &                                                     DISTANCE,DIST2,RIGIDBODY,RMAT,INTERPCOSTFUNCTION)870:      &                                                     DISTANCE,DIST2,RIGIDBODY,RMAT,INTERPCOSTFUNCTION)
871:                IF (DISTANCE.LT.MINDISTMIN(PLUS(J1))) MINDISTMIN(PLUS(J1))=DISTANCE871:                IF (DISTANCE.LT.MINDISTMIN(PLUS(J1))) MINDISTMIN(PLUS(J1))=DISTANCE
872:                IF (DISTANCE.LT.MINDISTMIN(MINUS(J1))) MINDISTMIN(MINUS(J1))=DISTANCE872:                IF (DISTANCE.LT.MINDISTMIN(MINUS(J1))) MINDISTMIN(MINUS(J1))=DISTANCE
873:             ENDIF873:             ENDIF
874:          ENDDO874:          ENDDO
875: 40       CLOSE(UTSDATA) ! SAT need to reopen this file875: 40       CLOSE(UTSDATA) ! SAT need to reopen this file
876:          OPEN(UNIT=UTSDATA,FILE='ts.data',STATUS='OLD',POSITION="APPEND",ACTION="READWRITE",FORM="FORMATTED") ! read used in Dijkstra876:          OPEN(UNIT=UTSDATA,FILE='ts.data',STATUS='OLD',POSITION="APPEND",ACTION="READWRITE",FORM="FORMATTED") ! read used in Dijkstra
933: !           DO J1=1,NTS933: !           DO J1=1,NTS
934: !              WRITE(*,'(A,I10,A,4I10)') 'setup> for ts ',J1,' +,-,p+,p-:',PLUS(J1),MINUS(J1),POINTERP(J1),POINTERM(J1)934: !              WRITE(*,'(A,I10,A,4I10)') 'setup> for ts ',J1,' +,-,p+,p-:',PLUS(J1),MINUS(J1),POINTERP(J1),POINTERM(J1)
935: !           ENDDO935: !           ENDDO
936: !        ENDIF936: !        ENDIF
937:     937:     
938:          IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0).AND.(.NOT.DUMMYTST)) THEN938:          IF ((.NOT.NOPOINTS).AND.(NATTEMPT.GT.0).AND.(.NOT.DUMMYTST)) THEN
939:             IF (AMHT) THEN939:             IF (AMHT) THEN
940:               WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'940:               WRITE(*,*) 'setup> AVOIDING MOMENT OF INITERIA CALC FOR AMH'
941:             ELSE941:             ELSE
942:                DO J1=1,NTS942:                DO J1=1,NTS
943:                   READ(UTS,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)943:                   READ(UTS,REC=J1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
944:                   CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,IXM,IYM,IZM)944:                   CALL INERTIAWRAPPER(LOCALPOINTS,NATOMS,angleAxis,IXM,IYM,IZM)
945: !                 IF (DEBUG) WRITE(*,'(A,I10,2F17.7,3I6,3F15.5)') 'setup> ',J1,ETS(J1),FVIBTS(J1),HORDERTS(J1),945: !                 IF (DEBUG) WRITE(*,'(A,I10,2F17.7,3I6,3F15.5)') 'setup> ',J1,ETS(J1),FVIBTS(J1),HORDERTS(J1),
946: !    1                                                            PLUS(J1),MINUS(J1),IXM,IYM,IZM946: !    1                                                            PLUS(J1),MINUS(J1),IXM,IYM,IZM
947:                   IF ((ABS(IXM-IXTS(J1)).GT.IDIFFTOL).OR.947:                   IF ((ABS(IXM-IXTS(J1)).GT.IDIFFTOL).OR.
948:      1                (ABS(IYM-IYTS(J1)).GT.IDIFFTOL).OR.948:      1                (ABS(IYM-IYTS(J1)).GT.IDIFFTOL).OR.
949:      1                (ABS(IZM-IZTS(J1)).GT.IDIFFTOL)) THEN949:      1                (ABS(IZM-IZTS(J1)).GT.IDIFFTOL)) THEN
950:                      WRITE(*,'(A,I10)') 'setup> WARNING - principal moments of inertia do not agree with input for ts ',J1950:                      WRITE(*,'(A,I10)') 'setup> WARNING - principal moments of inertia do not agree with input for ts ',J1
951:                      WRITE(*,'(A)') 'values in ts.data:'951:                      WRITE(*,'(A)') 'values in ts.data:'
952:                      WRITE(*,'(3F20.10)') IXTS(J1),IYTS(J1),IZTS(J1)952:                      WRITE(*,'(3F20.10)') IXTS(J1),IYTS(J1),IZTS(J1)
953:                      WRITE(*,'(A)') 'values recalculated from points.ts:'953:                      WRITE(*,'(A)') 'values recalculated from points.ts:'
968:          NTS=0968:          NTS=0
969:       ENDIF969:       ENDIF
970: C970: C
971: C  Create a ts entry for DUMMYTS runs if there are minima that seem to lack such entries.971: C  Create a ts entry for DUMMYTS runs if there are minima that seem to lack such entries.
972: C972: C
973:       IF (DUMMYTST) THEN973:       IF (DUMMYTST) THEN
974:          PRINT '(A)',' setup> shortest distances for local minima:'974:          PRINT '(A)',' setup> shortest distances for local minima:'
975:          DO J1=1,NMIN975:          DO J1=1,NMIN
976:             IF (MINDISTMIN(J1).GT.HUGE(1.0D0)/1.0D1) THEN976:             IF (MINDISTMIN(J1).GT.HUGE(1.0D0)/1.0D1) THEN
977:                PRINT '(A,I8,A,G20.10)',' setup> in setup, minimum ',J1,' shortest distance unassigned'977:                PRINT '(A,I8,A,G20.10)',' setup> in setup, minimum ',J1,' shortest distance unassigned'
978:                READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)978:                READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
979:                DO J3=1,NMIN979:                DO J3=1,NMIN
980:                   IF (J3.EQ.J1) CYCLE980:                   IF (J3.EQ.J1) CYCLE
981:                   READ(UMIN,REC=J3) (LOCALPOINTS2(J2),J2=1,NOPT)981:                   READ(UMIN,REC=J3) (LOCALPOINTS2(J2),J2=1,3*NATOMS)
982:                   CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,982:                   CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGIDBODY,
983:      &                             RMAT,.FALSE.)983:      &                             RMAT,.FALSE.)
984:                   IF ((DISTANCE.LT.MINDISTMIN(J1)).OR.(DISTANCE.LT.MINDISTMIN(J3))) THEN984:                   IF ((DISTANCE.LT.MINDISTMIN(J1)).OR.(DISTANCE.LT.MINDISTMIN(J3))) THEN
985:                      IF (DISTANCE.LT.MINDISTMIN(J1)) MINDISTMIN(J1)=DISTANCE985:                      IF (DISTANCE.LT.MINDISTMIN(J1)) MINDISTMIN(J1)=DISTANCE
986:                      IF (DISTANCE.LT.MINDISTMIN(J3)) MINDISTMIN(J3)=DISTANCE986:                      IF (DISTANCE.LT.MINDISTMIN(J3)) MINDISTMIN(J3)=DISTANCE
987: C987: C
988: C  Must create an entry in ts.data in this case.988: C  Must create an entry in ts.data in this case.
989: C  ETS,FVIBTS,HORDERTS,PLUS,MINUS,IXTS,IYTS,IZTS989: C  ETS,FVIBTS,HORDERTS,PLUS,MINUS,IXTS,IYTS,IZTS
990: C990: C
991:                      IF (IMFRQT) THEN991:                      IF (IMFRQT) THEN
1042:          READ(1,*) NMINREMOVE1042:          READ(1,*) NMINREMOVE
1043:          ALLOCATE(MINPREV(NMIN))1043:          ALLOCATE(MINPREV(NMIN))
1044:          IF (NMINREMOVE .GT. 0) THEN1044:          IF (NMINREMOVE .GT. 0) THEN
1045:             ALLOCATE(MINREMOVE(NMINREMOVE))1045:             ALLOCATE(MINREMOVE(NMINREMOVE))
1046:             READ(1,*) MINREMOVE(1:NMINREMOVE)1046:             READ(1,*) MINREMOVE(1:NMINREMOVE)
1047:             PRINT '(A)','setup> removing the following minima:'1047:             PRINT '(A)','setup> removing the following minima:'
1048:             PRINT '(10I8)',MINREMOVE(1:NMINREMOVE)1048:             PRINT '(10I8)',MINREMOVE(1:NMINREMOVE)
1049:          ENDIF1049:          ENDIF
1050:          CLOSE(1)1050:          CLOSE(1)
1051:          OPEN(UNIT=2,FILE='min.data.removed',STATUS='UNKNOWN')1051:          OPEN(UNIT=2,FILE='min.data.removed',STATUS='UNKNOWN')
1052:          OPEN(UNIT=4,FILE='points.min.removed',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)1052:          OPEN(UNIT=4,FILE='points.min.removed',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*3*NATOMS)
1053:          NDUMMY=01053:          NDUMMY=0
1054:          MINPREV(1:NMIN)=01054:          MINPREV(1:NMIN)=0
1055:          minloop: DO J1=1,NMIN1055:          minloop: DO J1=1,NMIN
1056:             DO J2=1,NMINREMOVE1056:             DO J2=1,NMINREMOVE
1057:                IF (MINREMOVE(J2).EQ.J1) THEN1057:                IF (MINREMOVE(J2).EQ.J1) THEN
1058:                   PRINT '(A,I8)','setup> removing minimum ',J11058:                   PRINT '(A,I8)','setup> removing minimum ',J1
1059:                   CYCLE minloop1059:                   CYCLE minloop
1060:                ENDIF1060:                ENDIF
1061:             ENDDO1061:             ENDDO
1062:             PRINT '(A,I8)','setup> not removing minimum ',J11062:             PRINT '(A,I8)','setup> not removing minimum ',J1
1063:             NDUMMY=NDUMMY+11063:             NDUMMY=NDUMMY+1
1064:             MINPREV(J1)=NDUMMY1064:             MINPREV(J1)=NDUMMY
1065:             WRITE(2,'(2F20.10,I6,3F20.10)') EMIN(J1), FVIBMIN(J1), HORDERMIN(J1), IXMIN(J1), IYMIN(J1), IZMIN(J1)1065:             WRITE(2,'(2F20.10,I6,3F20.10)') EMIN(J1), FVIBMIN(J1), HORDERMIN(J1), IXMIN(J1), IYMIN(J1), IZMIN(J1)
1066:             READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)1066:             READ(UMIN,REC=J1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
1067:             WRITE(4,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,NOPT)1067:             WRITE(4,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,3*NATOMS)
1068:          ENDDO minloop1068:          ENDDO minloop
1069:          CLOSE(2)1069:          CLOSE(2)
1070:          CLOSE(4)1070:          CLOSE(4)
1071: !1071: !
1072: ! rewrite min.A and min.B in min.A.removed and min.B.removed since numbering may change.1072: ! rewrite min.A and min.B in min.A.removed and min.B.removed since numbering may change.
1073: !1073: !
1074:          NDUMMY=01074:          NDUMMY=0
1075:          Aloop: DO J1=1,NMINA1075:          Aloop: DO J1=1,NMINA
1076:             DO J2=1,NMINREMOVE1076:             DO J2=1,NMINREMOVE
1077:                IF (MINREMOVE(J2).EQ.LOCATIONA(J1)) THEN1077:                IF (MINREMOVE(J2).EQ.LOCATIONA(J1)) THEN
1120:          OPEN(UNIT=1,FILE='ts.remove',STATUS='OLD')1120:          OPEN(UNIT=1,FILE='ts.remove',STATUS='OLD')
1121:          READ(1,*) NTSREMOVE1121:          READ(1,*) NTSREMOVE
1122:          IF (NTSREMOVE.LE.0) GOTO 4441122:          IF (NTSREMOVE.LE.0) GOTO 444
1123:          ALLOCATE(TSREMOVE(NTSREMOVE))1123:          ALLOCATE(TSREMOVE(NTSREMOVE))
1124:          READ(1,*) TSREMOVE(1:NTSREMOVE)1124:          READ(1,*) TSREMOVE(1:NTSREMOVE)
1125:          CLOSE(1)1125:          CLOSE(1)
1126:          PRINT '(A)','setup> removing the following transition states:'1126:          PRINT '(A)','setup> removing the following transition states:'
1127:          PRINT '(10I8)',TSREMOVE(1:NTSREMOVE)1127:          PRINT '(10I8)',TSREMOVE(1:NTSREMOVE)
1128: 444      CONTINUE1128: 444      CONTINUE
1129:          OPEN(UNIT=3,FILE='ts.data.removed',STATUS='UNKNOWN')1129:          OPEN(UNIT=3,FILE='ts.data.removed',STATUS='UNKNOWN')
1130:          OPEN(UNIT=5,FILE='points.ts.removed',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)1130:          OPEN(UNIT=5,FILE='points.ts.removed',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*3*NATOMS)
1131:          NDUMMY=01131:          NDUMMY=0
1132:          tsloop: DO J1=1,NTS1132:          tsloop: DO J1=1,NTS
1133:             DO J2=1,NTSREMOVE1133:             DO J2=1,NTSREMOVE
1134:                IF (TSREMOVE(J2).EQ.J1) CYCLE tsloop1134:                IF (TSREMOVE(J2).EQ.J1) CYCLE tsloop
1135:             ENDDO1135:             ENDDO
1136:             IF (MINPREV(PLUS(J1)).EQ.0) THEN1136:             IF (MINPREV(PLUS(J1)).EQ.0) THEN
1137:                PRINT '(A,I8,A,I8,A)','setup> possible ERROR - transition state ',J1,' links minimum ',PLUS(J1), 1137:                PRINT '(A,I8,A,I8,A)','setup> possible ERROR - transition state ',J1,' links minimum ',PLUS(J1), 
1138:      &                               ' which has been removed - removing this ts'1138:      &                               ' which has been removed - removing this ts'
1139:                CYCLE tsloop1139:                CYCLE tsloop
1140:             ENDIF1140:             ENDIF
1144:                CYCLE tsloop1144:                CYCLE tsloop
1145:             ENDIF1145:             ENDIF
1146:             NDUMMY=NDUMMY+11146:             NDUMMY=NDUMMY+1
1147:             IF (IMFRQT) THEN1147:             IF (IMFRQT) THEN
1148:                WRITE(3,'(2F20.10,3I10,4F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),1148:                WRITE(3,'(2F20.10,3I10,4F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),
1149:      &                                        IXTS(J1),IYTS(J1),IZTS(J1),NEGEIG(J1)1149:      &                                        IXTS(J1),IYTS(J1),IZTS(J1),NEGEIG(J1)
1150:             ELSE1150:             ELSE
1151:                WRITE(3,'(2F20.10,3I10,3F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),1151:                WRITE(3,'(2F20.10,3I10,3F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),
1152:      &                                        IXTS(J1),IYTS(J1),IZTS(J1)1152:      &                                        IXTS(J1),IYTS(J1),IZTS(J1)
1153:             ENDIF1153:             ENDIF
1154:             READ(UTS,REC=J1) (LOCALPOINTS(J2),J2=1,NOPT)1154:             READ(UTS,REC=J1) (LOCALPOINTS(J2),J2=1,3*NATOMS)
1155:             WRITE(5,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,NOPT)1155:             WRITE(5,REC=NDUMMY) (LOCALPOINTS(J2),J2=1,3*NATOMS)
1156:          ENDDO tsloop1156:          ENDDO tsloop
1157:          CLOSE(3); CLOSE(5)1157:          CLOSE(3); CLOSE(5)
1158:          STOP1158:          STOP
1159:       ENDIF1159:       ENDIF
1160: !1160: !
1161: !  Procedure to retain selected stationary points specified by min.retain.1161: !  Procedure to retain selected stationary points specified by min.retain.
1162: !  First line of each file gives the numbers of structures to retain.1162: !  First line of each file gives the numbers of structures to retain.
1163: !  All ts linking minima in the retain list are themselves retained.1163: !  All ts linking minima in the retain list are themselves retained.
1164: !1164: !
1165:       IF (RETAINSP) THEN1165:       IF (RETAINSP) THEN
1166:          OPEN(UNIT=1,FILE='min.retain',STATUS='OLD')1166:          OPEN(UNIT=1,FILE='min.retain',STATUS='OLD')
1167:          READ(1,*) NMINRETAIN1167:          READ(1,*) NMINRETAIN
1168:          ALLOCATE(MINRETAIN(NMINRETAIN),MINPREV(NMIN))1168:          ALLOCATE(MINRETAIN(NMINRETAIN),MINPREV(NMIN))
1169:          READ(1,*) MINRETAIN(1:NMINRETAIN)1169:          READ(1,*) MINRETAIN(1:NMINRETAIN)
1170:          CLOSE(1)1170:          CLOSE(1)
1171:          PRINT '(A)','setup> retaining the following minima:'1171:          PRINT '(A)','setup> retaining the following minima:'
1172:          PRINT '(10I8)',MINRETAIN(1:NMINRETAIN)1172:          PRINT '(10I8)',MINRETAIN(1:NMINRETAIN)
1173:          OPEN(UNIT=2,FILE='min.data.retained',STATUS='UNKNOWN')1173:          OPEN(UNIT=2,FILE='min.data.retained',STATUS='UNKNOWN')
1174:          OPEN(UNIT=4,FILE='points.min.retained',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)1174:          OPEN(UNIT=4,FILE='points.min.retained',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*3*NATOMS)
1175:          NDUMMY=01175:          NDUMMY=0
1176:          MINPREV(1:NMIN)=01176:          MINPREV(1:NMIN)=0
1177:          minloop2: DO J1=1,NMIN1177:          minloop2: DO J1=1,NMIN
1178:             DO J2=1,NMINRETAIN1178:             DO J2=1,NMINRETAIN
1179:                IF (MINRETAIN(J2).EQ.J1) THEN1179:                IF (MINRETAIN(J2).EQ.J1) THEN
1180:                   PRINT '(A,I8)','setup> retaining minimum ',J11180:                   PRINT '(A,I8)','setup> retaining minimum ',J1
1181:                   NDUMMY=NDUMMY+11181:                   NDUMMY=NDUMMY+1
1182:                   MINPREV(J1)=NDUMMY1182:                   MINPREV(J1)=NDUMMY
1183:                   WRITE(2,'(2F20.10,I6,3F20.10)') EMIN(J1), FVIBMIN(J1), HORDERMIN(J1), IXMIN(J1), IYMIN(J1), IZMIN(J1)1183:                   WRITE(2,'(2F20.10,I6,3F20.10)') EMIN(J1), FVIBMIN(J1), HORDERMIN(J1), IXMIN(J1), IYMIN(J1), IZMIN(J1)
1184:                   IF (.NOT. NOPOINTS) THEN1184:                   IF (.NOT. NOPOINTS) THEN
1185:                      READ(UMIN,REC=J1) (LOCALPOINTS(J3),J3=1,NOPT)1185:                      READ(UMIN,REC=J1) (LOCALPOINTS(J3),J3=1,3*NATOMS)
1186:                      WRITE(4,REC=NDUMMY) (LOCALPOINTS(J3),J3=1,NOPT)1186:                      WRITE(4,REC=NDUMMY) (LOCALPOINTS(J3),J3=1,3*NATOMS)
1187:                   ENDIF1187:                   ENDIF
1188:                   CYCLE minloop21188:                   CYCLE minloop2
1189:                ENDIF1189:                ENDIF
1190:             ENDDO1190:             ENDDO
1191:             PRINT '(A,I8)','setup> removing minimum ',J11191:             PRINT '(A,I8)','setup> removing minimum ',J1
1192:          ENDDO minloop21192:          ENDDO minloop2
1193:          CLOSE(2)1193:          CLOSE(2)
1194:          CLOSE(4)1194:          CLOSE(4)
1195: !1195: !
1196: ! rewrite min.A and min.B in min.A.retained and min.B.retained since numbering may change.1196: ! rewrite min.A and min.B in min.A.retained and min.B.retained since numbering may change.
1235:             STOP1235:             STOP
1236:          ENDIF1236:          ENDIF
1237:          DO J1=1,NMINB1237:          DO J1=1,NMINB
1238:             IF (MINPREV(LOCATIONB(J1)).NE.0) THEN1238:             IF (MINPREV(LOCATIONB(J1)).NE.0) THEN
1239:                WRITE(2,'(I8)') MINPREV(LOCATIONB(J1))1239:                WRITE(2,'(I8)') MINPREV(LOCATIONB(J1))
1240:             ENDIF1240:             ENDIF
1241:          ENDDO 1241:          ENDDO 
1242:          CLOSE(2)1242:          CLOSE(2)
1243: 1243: 
1244:          OPEN(UNIT=3,FILE='ts.data.retained',STATUS='UNKNOWN')1244:          OPEN(UNIT=3,FILE='ts.data.retained',STATUS='UNKNOWN')
1245:          OPEN(UNIT=5,FILE='points.ts.retained',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*NOPT)1245:          OPEN(UNIT=5,FILE='points.ts.retained',ACCESS='DIRECT',FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=8*3*NATOMS)
1246:          NDUMMY=01246:          NDUMMY=0
1247:          tsloop2: DO J1=1,NTS1247:          tsloop2: DO J1=1,NTS
1248:             DO J2=1,NMINRETAIN1248:             DO J2=1,NMINRETAIN
1249:                IF (MINRETAIN(J2).EQ.PLUS(J1)) THEN1249:                IF (MINRETAIN(J2).EQ.PLUS(J1)) THEN
1250:                   DO J3=1,NMINRETAIN1250:                   DO J3=1,NMINRETAIN
1251:                      IF (MINRETAIN(J3).EQ.MINUS(J1)) THEN1251:                      IF (MINRETAIN(J3).EQ.MINUS(J1)) THEN
1252:                         NDUMMY=NDUMMY+11252:                         NDUMMY=NDUMMY+1
1253:                         PRINT '(A,I8,A,2I8)','setup> retaining ts ',J1,' connected to retained minima ',PLUS(J1),MINUS(J1)1253:                         PRINT '(A,I8,A,2I8)','setup> retaining ts ',J1,' connected to retained minima ',PLUS(J1),MINUS(J1)
1254:                         IF (IMFRQT) THEN1254:                         IF (IMFRQT) THEN
1255:                            WRITE(3,'(2F20.10,3I10,4F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),1255:                            WRITE(3,'(2F20.10,3I10,4F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),
1256:      &                                        IXTS(J1),IYTS(J1),IZTS(J1),NEGEIG(J1)1256:      &                                        IXTS(J1),IYTS(J1),IZTS(J1),NEGEIG(J1)
1257:                         ELSE1257:                         ELSE
1258:                            WRITE(3,'(2F20.10,3I10,3F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),1258:                            WRITE(3,'(2F20.10,3I10,3F20.10)') ETS(J1),FVIBTS(J1),HORDERTS(J1),MINPREV(PLUS(J1)),MINPREV(MINUS(J1)),
1259:      &                                        IXTS(J1),IYTS(J1),IZTS(J1)1259:      &                                        IXTS(J1),IYTS(J1),IZTS(J1)
1260:                         ENDIF1260:                         ENDIF
1261:                         IF (.NOT. NOPOINTS) THEN1261:                         IF (.NOT. NOPOINTS) THEN
1262:                            READ(UTS,REC=J1) (LOCALPOINTS(J4),J4=1,NOPT)1262:                            READ(UTS,REC=J1) (LOCALPOINTS(J4),J4=1,3*NATOMS)
1263:                            WRITE(5,REC=NDUMMY) (LOCALPOINTS(J4),J4=1,NOPT)1263:                            WRITE(5,REC=NDUMMY) (LOCALPOINTS(J4),J4=1,3*NATOMS)
1264:                         ENDIF1264:                         ENDIF
1265:                         CYCLE tsloop21265:                         CYCLE tsloop2
1266:                      ENDIF1266:                      ENDIF
1267:                   ENDDO1267:                   ENDDO
1268:                ENDIF1268:                ENDIF
1269:             ENDDO1269:             ENDDO
1270:             PRINT '(A,I8)','setup> removing ts ',J11270:             PRINT '(A,I8)','setup> removing ts ',J1
1271:          ENDDO tsloop21271:          ENDDO tsloop2
1272:          CLOSE(3); CLOSE(5)1272:          CLOSE(3); CLOSE(5)
1273:          PRINT '(A,I8,A)','setup> ',NDUMMY,' transition states retained'1273:          PRINT '(A,I8,A)','setup> ',NDUMMY,' transition states retained'
1412:      &                                      NMINDONE,' is ',MINDONE(NMINDONE)1412:      &                                      NMINDONE,' is ',MINDONE(NMINDONE)
1413:          ENDDO1413:          ENDDO
1414: 121      CLOSE(1)1414: 121      CLOSE(1)
1415:          NMINDONE=NMINDONE-11415:          NMINDONE=NMINDONE-1
1416:          PRINT '(A,I8,A)','setup> ',NMINDONE,' minima already searched read from min.done'1416:          PRINT '(A,I8,A)','setup> ',NMINDONE,' minima already searched read from min.done'
1417:       ENDIF1417:       ENDIF
1418: C1418: C
1419: C Optimised distance calculation for target minimum and any range for the other minima.1419: C Optimised distance calculation for target minimum and any range for the other minima.
1420: C1420: C
1421:       IF (DISTANCET) THEN1421:       IF (DISTANCET) THEN
1422:          READ(UMIN,REC=DISTANCETO) (LOCALPOINTS(J2),J2=1,NOPT)1422:          READ(UMIN,REC=DISTANCETO) (LOCALPOINTS(J2),J2=1,3*NATOMS)
1423:          DO J1=DISTANCETO1,DISTANCETO21423:          DO J1=DISTANCETO1,DISTANCETO2
1424:             READ(UMIN,REC=J1) (LOCALPOINTS2(J2),J2=1,NOPT)1424:             READ(UMIN,REC=J1) (LOCALPOINTS2(J2),J2=1,3*NATOMS)
1425: 1425: 
1426:             CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE, 1426:             CALL MINPERMDIST(LOCALPOINTS,LOCALPOINTS2,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE, 
1427:      &                       DIST2,RIGIDBODY,RMAT,.FALSE.)1427:      &                       DIST2,RIGIDBODY,RMAT,.FALSE.)
1428:             PRINT '(I10,G20.5)',J1,DISTANCE1428:             PRINT '(I10,G20.5)',J1,DISTANCE
1429: !           PRINT '(I6,G20.10)',NATOMS1429: !           PRINT '(I6,G20.10)',NATOMS
1430: !           PRINT '(A)','reference geometry'1430: !           PRINT '(A)','reference geometry'
1431: !           DO J2=1,NATOMS1431: !           DO J2=1,NATOMS
1432: !              PRINT '(A2,1X,3G20.10)','AX',LOCALPOINTS(3*(J2-1)+1:3*(J2-1)+3)1432: !              PRINT '(A2,1X,3G20.10)','AX',LOCALPOINTS(3*(J2-1)+1:3*(J2-1)+3)
1433: !           ENDDO1433: !           ENDDO
1434: !           PRINT '(I6,G20.10)',NATOMS1434: !           PRINT '(I6,G20.10)',NATOMS
1600: C     ELSE1600: C     ELSE
1601: C        TSEGUESS=(c1*c2*(c1 + c2)*distance**2 - 2*c1*c2*distance*1601: C        TSEGUESS=(c1*c2*(c1 + c2)*distance**2 - 2*c1*c2*distance*
1602: C    &     Sqrt(ARGUMENT) + 2*(c1 - c2)*(-(c2*e1) + c1*e2))/(2.*(c1 - c2)**2)1602: C    &     Sqrt(ARGUMENT) + 2*(c1 - c2)*(-(c2*e1) + c1*e2))/(2.*(c1 - c2)**2)
1603: C     ENDIF1603: C     ENDIF
1604: 1604: 
1605:       TSEGUESS=MAX(E1,E2)+DISTANCE1605:       TSEGUESS=MAX(E1,E2)+DISTANCE
1606:       1606:       
1607:       END FUNCTION TSEGUESS1607:       END FUNCTION TSEGUESS
1608: 1608: 
1609:       DOUBLE PRECISION FUNCTION TSFVIBGUESS(E1,E2,FVIB1,FVIB2,MINF1,MINF2,NATOMS)1609:       DOUBLE PRECISION FUNCTION TSFVIBGUESS(E1,E2,FVIB1,FVIB2,MINF1,MINF2,NATOMS)
1610:       USE COMMONS,ONLY : NOPT 
1611:       IMPLICIT NONE1610:       IMPLICIT NONE
1612:       DOUBLE PRECISION E1, E2, FVIB1,FVIB2, MINF1, MINF21611:       DOUBLE PRECISION E1, E2, FVIB1,FVIB2, MINF1, MINF2
1613:       INTEGER NATOMS1612:       INTEGER NATOMS
1614: C1613: C
1615: C  The conversion factor for CHARMM and AMBER is included in the MINFRQ2 values read from min.data.info1614: C  The conversion factor for CHARMM and AMBER is included in the MINFRQ2 values read from min.data.info
1616: C  The MINFRQ2 values are read as the ln from min.data.info1615: C  The MINFRQ2 values are read as the ln from min.data.info
1617: C1616: C
1618: C     IF (E1.GT.E2) THEN1617: C     IF (E1.GT.E2) THEN
1619: C        TSFVIBGUESS=FVIB1-MINF11618: C        TSFVIBGUESS=FVIB1-MINF1
1620: C     ELSE1619: C     ELSE
1621: C        TSFVIBGUESS=FVIB2-MINF21620: C        TSFVIBGUESS=FVIB2-MINF2
1622: C     ENDIF1621: C     ENDIF
1623:       IF (E1.GT.E2) THEN1622:       IF (E1.GT.E2) THEN
1624:          TSFVIBGUESS=FVIB1*(NOPT-7)/(NOPT-6)1623:          TSFVIBGUESS=FVIB1*(3*NATOMS-7)/(3*NATOMS-6)
1625:       ELSE1624:       ELSE
1626:          TSFVIBGUESS=FVIB2*(NOPT-7)/(NOPT-6)1625:          TSFVIBGUESS=FVIB2*(3*NATOMS-7)/(3*NATOMS-6)
1627:       ENDIF1626:       ENDIF
1628: 1627: 
1629:       1628:       
1630:       END FUNCTION TSFVIBGUESS1629:       END FUNCTION TSFVIBGUESS
1631: 1630: 
1632:       FUNCTION DUPLICATES_CHECK(ILIST, N)1631:       FUNCTION DUPLICATES_CHECK(ILIST, N)
1633:          IMPLICIT NONE1632:          IMPLICIT NONE
1634:          INTEGER, INTENT(IN) :: N1633:          INTEGER, INTENT(IN) :: N
1635:          INTEGER, INTENT(IN) :: ILIST(N)1634:          INTEGER, INTENT(IN) :: ILIST(N)
1636:          LOGICAL DUPLICATES_CHECK1635:          LOGICAL DUPLICATES_CHECK


r29793/tssearch.f 2016-07-06 15:39:32.114422599 +0100 r29792/tssearch.f 2016-07-06 15:39:38.442508136 +0100
163:                      RANDOM=DPRAND()163:                      RANDOM=DPRAND()
164:                      RANARRAY(3*(L2-1)+2)=(RANDOM-0.5D0)*2.0D0*PERTVALUE164:                      RANARRAY(3*(L2-1)+2)=(RANDOM-0.5D0)*2.0D0*PERTVALUE
165:                      RANDOM=DPRAND()165:                      RANDOM=DPRAND()
166:                      RANARRAY(3*(L2-1)+3)=(RANDOM-0.5D0)*2.0D0*PERTVALUE166:                      RANARRAY(3*(L2-1)+3)=(RANDOM-0.5D0)*2.0D0*PERTVALUE
167:                   ENDIF167:                   ENDIF
168:                ENDDO168:                ENDDO
169:                WRITE(1,'(3F20.10)') (POINTS(3*(L2-1)+1)+RANARRAY(3*(L2-1)+1),169:                WRITE(1,'(3F20.10)') (POINTS(3*(L2-1)+1)+RANARRAY(3*(L2-1)+1),
170:      &                               POINTS(3*(L2-1)+2)+RANARRAY(3*(L2-1)+2),170:      &                               POINTS(3*(L2-1)+2)+RANARRAY(3*(L2-1)+2),
171:      &                               POINTS(3*(L2-1)+3)+RANARRAY(3*(L2-1)+3),L2=1,NATOMS)171:      &                               POINTS(3*(L2-1)+3)+RANARRAY(3*(L2-1)+3),L2=1,NATOMS)
172:                CLOSE(1)172:                CLOSE(1)
173:             ELSEIF (MLP3T) THEN 
174:                CALL MYSYSTEM(STATUS,DEBUG,'cp odata.tssearch odata.'//TRIM(ADJUSTL(J3STR))) 
175:                FPOO='odata.'//TRIM(ADJUSTL(J3STR)) ! this line works around a Sun compiler bug 
176:                OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='OLD',POSITION='APPEND') 
177:                WRITE(1,'(A)') 'VARIABLES' 
178:                DO L2=1,NOPT 
179:                   IF (FROZEN(L2)) THEN 
180:                      RANARRAY(L2)=0.0D0 
181:                   ELSE 
182:                      RANDOM=DPRAND() 
183:                      RANARRAY(L2)=(RANDOM-0.5D0)*2.0D0*PERTVALUE 
184:                   ENDIF 
185:                ENDDO 
186:                WRITE(1,'(A2,2X,F20.10)') (ZSYMBOL(L2),POINTS(L2)+RANARRAY(L2),L2=1,NOPT) 
187:                CLOSE(1) 
188:             ELSE173:             ELSE
189:                CALL MYSYSTEM(STATUS,DEBUG,'cp odata.tssearch odata.'//TRIM(ADJUSTL(J3STR)))174:                CALL MYSYSTEM(STATUS,DEBUG,'cp odata.tssearch odata.'//TRIM(ADJUSTL(J3STR)))
190:                FPOO='odata.'//TRIM(ADJUSTL(J3STR)) ! this line works around a Sun compiler bug175:                FPOO='odata.'//TRIM(ADJUSTL(J3STR)) ! this line works around a Sun compiler bug
191:                OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='OLD',POSITION='APPEND')176:                OPEN(1,FILE=TRIM(ADJUSTL(FPOO)),STATUS='OLD',POSITION='APPEND')
192: C              WRITE(1,'(A,F20.10)') 'FIXD  ',PERTVALUE177: C              WRITE(1,'(A,F20.10)') 'FIXD  ',PERTVALUE
193:                WRITE(1,'(A)') 'POINTS'178:                WRITE(1,'(A)') 'POINTS'
194: C              WRITE(1,'(A2,2X,3F20.10)') (ZSYMBOL(L2),POINTS(3*(L2-1)+1),POINTS(3*(L2-1)+2),POINTS(3*(L2-1)+3),L2=1,NATOMS)179: C              WRITE(1,'(A2,2X,3F20.10)') (ZSYMBOL(L2),POINTS(3*(L2-1)+1),POINTS(3*(L2-1)+2),POINTS(3*(L2-1)+3),L2=1,NATOMS)
195:                DO L2=1,NATOMS180:                DO L2=1,NATOMS
196:                   IF (FROZEN(L2)) THEN181:                   IF (FROZEN(L2)) THEN
197:                      RANARRAY(3*(L2-1)+1)=0.0D0182:                      RANARRAY(3*(L2-1)+1)=0.0D0


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0