hdiff output

r29898/key.f90 2016-02-04 11:30:12.324472779 +0000 r29897/key.f90 2016-02-04 11:30:12.900480376 +0000
 44:      &        CHECKCONINT, ATOMMATCHFULL, NIH2LEPST,NIHEAM7T,NIHLEPST, NIHPAIRONLYT, & 44:      &        CHECKCONINT, ATOMMATCHFULL, NIH2LEPST,NIHEAM7T,NIHLEPST, NIHPAIRONLYT, &
 45:      &        QSPCFWT, QTIP4PFT, CFUSIONT, DUMPINTXYZ, DUMPINTEOS, INTLJT, INTTST, EYTRAPT, OHCELLT, MKTRAPT, & 45:      &        QSPCFWT, QTIP4PFT, CFUSIONT, DUMPINTXYZ, DUMPINTEOS, INTLJT, INTTST, EYTRAPT, OHCELLT, MKTRAPT, &
 46:      &        INTFREEZET, LPERMDIST, CHECKNEGATIVET, CHECKOVERLAPT, ACK1, ACK2, CONDATT, USERPOTT, & 46:      &        INTFREEZET, LPERMDIST, CHECKNEGATIVET, CHECKOVERLAPT, ACK1, ACK2, CONDATT, USERPOTT, &
 47:      &        CONCUTFRACT, CONCUTABST, ENDNUMHESS2, CHARMMDFTBT, PAIRCOLOURT, REVERSEUPHILLT, WHOLEDNEB, & 47:      &        CONCUTFRACT, CONCUTABST, ENDNUMHESS2, CHARMMDFTBT, PAIRCOLOURT, REVERSEUPHILLT, WHOLEDNEB, &
 48:      &        NONEBMAX, READMASST, ONEDAPBCT, ONEDPBCT, INVTONEDPBCT, INVTTWODPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, & 48:      &        NONEBMAX, READMASST, ONEDAPBCT, ONEDPBCT, INVTONEDPBCT, INVTTWODPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, &
 49:      &        THREEDPBCT, FOURDAPBCT, FOURDPBCT, MODEDOWNT, CHEMSHIFT, TTM3T, & 49:      &        THREEDPBCT, FOURDAPBCT, FOURDPBCT, MODEDOWNT, CHEMSHIFT, TTM3T, &
 50:      &        NOINVERSION, INVERTPT, KNOWVECS, PMPATHT, AAORIENTT, MULTIJOBT, QUIPARGSTRT, QUIPPARAMST, HESSDUMPT, & 50:      &        NOINVERSION, INVERTPT, KNOWVECS, PMPATHT, AAORIENTT, MULTIJOBT, QUIPARGSTRT, QUIPPARAMST, HESSDUMPT, &
 51:      &        CLASSICALRATEST, TSPLITTINGT, HESSREADT, INSTANTONOPTT,INSTANTONSTARTDUMPT,VARSTEPOPTT, MOLPRO, REAXFFT, & 51:      &        CLASSICALRATEST, TSPLITTINGT, HESSREADT, INSTANTONOPTT,INSTANTONSTARTDUMPT,VARSTEPOPTT, MOLPRO, REAXFFT, &
 52:      &        EIGENONLY,OVERCONV, GLJT,CLSTRINGT,CLSTRINGTST, PHI4MODT, EX1DT, MCPATHT, MCBIAST, RPHT, TWISTT, MCPATH2T, & 52:      &        EIGENONLY,OVERCONV, GLJT,CLSTRINGT,CLSTRINGTST, PHI4MODT, EX1DT, MCPATHT, MCBIAST, RPHT, TWISTT, MCPATH2T, &
 53:      &        PBST, SSHT, GAUSSIAN03, CPPNEBT, CUDAT, CUDATIMET, TRUSTMODET,MODELOST, METRICTENSOR, INTSPRINGACTIVET, & 53:      &        PBST, SSHT, GAUSSIAN03, CPPNEBT, CUDAT, CUDATIMET, TRUSTMODET,MODELOST, METRICTENSOR, INTSPRINGACTIVET, &
 54:      &        PERMGUESS, QCIPERMCHECK, DUMPFRQST, MULTIPOTT, MLP3T, MLPB3T, DUMPBESTPATH, ALIGNRBST, AVOID_COLLISIONS 54:      &        PERMGUESS, QCIPERMCHECK, DUMPFRQST, MULTIPOTT, MLP3T, MLPB3T, DUMPBESTPATH, ALIGNRBST
 55:  55: 
 56: ! bf269 > polymer in a pore (non-bonding (LJ) energy from neighbours is not subtracted) 56: ! bf269 > polymer in a pore (non-bonding (LJ) energy from neighbours is not subtracted)
 57:       LOGICAL :: PORE8T = .FALSE. ! add 8th power cylindrical pore to the potential? 57:       LOGICAL :: PORE8T = .FALSE. ! add 8th power cylindrical pore to the potential?
 58:       INTEGER :: PORE8_AXIS = 3 ! principal axis of the cylindric pore (1:x, 2:y, 3:z) 58:       INTEGER :: PORE8_AXIS = 3 ! principal axis of the cylindric pore (1:x, 2:y, 3:z)
 59:       DOUBLE PRECISION :: PORE8_ENERGY = 1.0d1 ! energy of the pore when radius = 1 59:       DOUBLE PRECISION :: PORE8_ENERGY = 1.0d1 ! energy of the pore when radius = 1
 60:       LOGICAL :: HARMPOLYT = .FALSE. ! add harmonic bonds between the beads 60:       LOGICAL :: HARMPOLYT = .FALSE. ! add harmonic bonds between the beads
 61:       DOUBLE PRECISION :: HARMPOLY_BONLEN = 0.0d0 ! equilibrium length of springs between beads 61:       DOUBLE PRECISION :: HARMPOLY_BONLEN = 0.0d0 ! equilibrium length of springs between beads
 62:       DOUBLE PRECISION :: HARMPOLY_K = 1.0d2 ! force constant of the springs 62:       DOUBLE PRECISION :: HARMPOLY_K = 1.0d2 ! force constant of the springs
 63:  63: 
 64: ! hk286 > generalised THOMSON problem 64: ! hk286 > generalised THOMSON problem
 90:      &        BISECTMAXENERGY, BISECTMINDIST, BLFACTOR, NEBRESEEDEMAX, NEBRESEEDBMAX, NEBRESEEDDEL1, & 90:      &        BISECTMAXENERGY, BISECTMINDIST, BLFACTOR, NEBRESEEDEMAX, NEBRESEEDBMAX, NEBRESEEDDEL1, &
 91:      &        NEBRESEEDDEL2, INTCONSTRAINTTOL, INTCONSTRAINTDEL, RBCUTOFF, INTCONSTRAINTREP, INTCONSTRAINREPCUT, & 91:      &        NEBRESEEDDEL2, INTCONSTRAINTTOL, INTCONSTRAINTDEL, RBCUTOFF, INTCONSTRAINTREP, INTCONSTRAINREPCUT, &
 92:      &        REDOK, REDOFRAC, D1INIT, D2INIT, REDOE1, REDOE2, RPBETA, REPCON, PFORCE, & 92:      &        REDOK, REDOFRAC, D1INIT, D2INIT, REDOE1, REDOE2, RPBETA, REPCON, PFORCE, &
 93:      &        CPCONSTRAINTTOL, CPCONSTRAINTDEL, CPCONSTRAINTREP, CPCONSTRAINREPCUT, CPCONFRAC, & 93:      &        CPCONSTRAINTTOL, CPCONSTRAINTDEL, CPCONSTRAINTREP, CPCONSTRAINREPCUT, CPCONFRAC, &
 94:      &        INTLJTOL, INTLJDEL, INTLJEPS, IMSEPMIN, IMSEPMAX, TRAPK, MINOVERLAP, & 94:      &        INTLJTOL, INTLJDEL, INTLJEPS, IMSEPMIN, IMSEPMAX, TRAPK, MINOVERLAP, &
 95:      &        INTFREEZETOL, LOCALPERMCUT, LOCALPERMCUT2, LOCALPERMCUTINC, CHECKREPCUTOFF, CONCUTABS, & 95:      &        INTFREEZETOL, LOCALPERMCUT, LOCALPERMCUT2, LOCALPERMCUTINC, CHECKREPCUTOFF, CONCUTABS, &
 96:      &        CONCUTFRAC, ENDNUMHESSDELTA, DNEBEFRAC, QCHEMSCALE, KAA, SIGMAAA, QUIPATOMMASS, TEMPERATURE1, & 96:      &        CONCUTFRAC, ENDNUMHESSDELTA, DNEBEFRAC, QCHEMSCALE, KAA, SIGMAAA, QUIPATOMMASS, TEMPERATURE1, &
 97:      &        DISTORTINST,DELTAINST,MOLPROSCALE,COVER,STTSRMSCONV,LAN_DIST,LANCONV,LANFACTOR, & 97:      &        DISTORTINST,DELTAINST,MOLPROSCALE,COVER,STTSRMSCONV,LAN_DIST,LANCONV,LANFACTOR, &
 98:      &        STOCKEXP, JPARAM, MCPATHTEMP, MCPATHDMAX, MCPATHSTEP, MCPATHACCRATIO, BIASFAC, & 98:      &        STOCKEXP, JPARAM, MCPATHTEMP, MCPATHDMAX, MCPATHSTEP, MCPATHACCRATIO, BIASFAC, &
 99:      &        MCADDDEV, MCPATHQMIN, MCPATHQMAX, RPHQMIN, RPHQMAX, RPHTEMP, TWISTF, TWISTREF, MCPATHADDREF, & 99:      &        MCADDDEV, MCPATHQMIN, MCPATHQMAX, RPHQMIN, RPHQMAX, RPHTEMP, TWISTF, TWISTREF, MCPATHADDREF, &
100:      &        MCPATHGWS, MCPATHGWQ, MCPATHNEGLECT, MCPATHTOL, FRAMESDIFF,TMRATIO, INTMINFAC, MLPLAMBDA, COLL_TOL100:      &        MCPATHGWS, MCPATHGWQ, MCPATHNEGLECT, MCPATHTOL, FRAMESDIFF,TMRATIO, INTMINFAC, MLPLAMBDA
101: 101: 
102: !     sf344102: !     sf344
103:       DOUBLE PRECISION :: PCUTOFF,PYA11(3),PYA21(3),PYA12(3),PYA22(3),PEPSILON1(3),PSCALEFAC1(2),PSCALEFAC2(2), &103:       DOUBLE PRECISION :: PCUTOFF,PYA11(3),PYA21(3),PYA12(3),PYA22(3),PEPSILON1(3),PSCALEFAC1(2),PSCALEFAC2(2), &
104:      &                     PEPSILONATTR(2),PSIGMAATTR(2), PYOVERLAPTHRESH, LJSITECOORDS(3), LJGSITESIGMA, LJGSITEEPS, &104:      &                     PEPSILONATTR(2),PSIGMAATTR(2), PYOVERLAPTHRESH, LJSITECOORDS(3), LJGSITESIGMA, LJGSITEEPS, &
105:      &                     PYLOCALSTEP(2)105:      &                     PYLOCALSTEP(2)
106:  106:  
107:       DOUBLE PRECISION, ALLOCATABLE :: POINTSDECA(:), POINTSICOS(:)107:       DOUBLE PRECISION, ALLOCATABLE :: POINTSDECA(:), POINTSICOS(:)
108:       DOUBLE PRECISION, ALLOCATABLE :: VT(:), pya1bin(:,:),pya2bin(:,:)108:       DOUBLE PRECISION, ALLOCATABLE :: VT(:), pya1bin(:,:),pya2bin(:,:)
109:       LOGICAL          :: LJSITE,BLJSITE,LJSITEATTR,PYBINARYT,PARAMONOVPBCX,PARAMONOVPBCY,PARAMONOVPBCZ,PARAMONOVCUTOFF109:       LOGICAL          :: LJSITE,BLJSITE,LJSITEATTR,PYBINARYT,PARAMONOVPBCX,PARAMONOVPBCY,PARAMONOVPBCZ,PARAMONOVCUTOFF
110:       LOGICAL          :: PYGPERIODICT,ELLIPSOIDT,LJSITECOORDST,REALIGNXYZ,MULTISITEPYT,LJGSITET,NORMALMODET110:       LOGICAL          :: PYGPERIODICT,ELLIPSOIDT,LJSITECOORDST,REALIGNXYZ,MULTISITEPYT,LJGSITET,NORMALMODET


r29898/keywords.f 2016-02-04 11:30:12.516475310 +0000 r29897/keywords.f 2016-02-04 11:30:13.096482959 +0000
165:          !165:          !
166:          ! hk286 - initialise to stationary frame166:          ! hk286 - initialise to stationary frame
167:          RBAANORMALMODET = .FALSE.167:          RBAANORMALMODET = .FALSE.
168:          ! generalised rigid body168:          ! generalised rigid body
169:          ATOMRIGIDCOORDT = .TRUE.169:          ATOMRIGIDCOORDT = .TRUE.
170:          RIGIDINIT = .FALSE.170:          RIGIDINIT = .FALSE.
171:          AACONVERGENCET = .FALSE.171:          AACONVERGENCET = .FALSE.
172: 172: 
173:          ALIGNRBST = .FALSE.173:          ALIGNRBST = .FALSE.
174: 174: 
175:          AVOID_COLLISIONS = .FALSE. 
176:          COLL_TOL = 0.0D0 
177:  
178:          ! Multiple potential scheme175:          ! Multiple potential scheme
179:          MULTIPOTT= .FALSE.176:          MULTIPOTT= .FALSE.
180: 177: 
181:          ! Thomson problem178:          ! Thomson problem
182:          GTHOMSONT = .FALSE.179:          GTHOMSONT = .FALSE.
183:          GTHOMPOT = 1180:          GTHOMPOT = 1
184: 181: 
185:          DESMAXEJUMP = HUGE(1.0D0)182:          DESMAXEJUMP = HUGE(1.0D0)
186:          DESMAXAVGE = HUGE(1.0D0)183:          DESMAXAVGE = HUGE(1.0D0)
187:          UNSTRING='UNDEFINED'184:          UNSTRING='UNDEFINED'
978:             CALL READI(NADM)975:             CALL READI(NADM)
979: 976: 
980: 977: 
981: ! Keyword for use with RIGIDINIT instructing minpermdist to perform a global alignment978: ! Keyword for use with RIGIDINIT instructing minpermdist to perform a global alignment
982: ! based only on aligning the specified rigid bodies. This was designed for the plate folding 979: ! based only on aligning the specified rigid bodies. This was designed for the plate folding 
983: ! potential, and is unlikely to be very useful for systems which aren't composed mostly of980: ! potential, and is unlikely to be very useful for systems which aren't composed mostly of
984: ! large rigid bodies that are strongly bonded together.981: ! large rigid bodies that are strongly bonded together.
985: 982: 
986:         ELSE IF (WORD .EQ. 'ALIGNRBS') THEN983:         ELSE IF (WORD .EQ. 'ALIGNRBS') THEN
987:             ALIGNRBST = .TRUE.984:             ALIGNRBST = .TRUE.
988:             N_TO_ALIGN = NITEMS-1985:             N_TO_ALIGN = NITEMS
989:             ALLOCATE(TO_ALIGN(N_TO_ALIGN))986:             ALLOCATE(TO_ALIGN(N_TO_ALIGN))
990:             DO J1 = 1, N_TO_ALIGN987:             DO J1 = 1, N_TO_ALIGN
991:                 CALL READI(TO_ALIGN(J1))988:                 CALL READI(TO_ALIGN(J1))
992:             ENDDO989:             ENDDO
993: 990: 
994: ! Keywork ALPHA enables exponent values to be set for the averaged991: ! Keywork ALPHA enables exponent values to be set for the averaged
995: ! Gaussian and Morse potentials. All defaults = 6.992: ! Gaussian and Morse potentials. All defaults = 6.
996: ! 993: ! 
997:          ELSE IF (WORD.EQ.'ALPHA') THEN994:          ELSE IF (WORD.EQ.'ALPHA') THEN
998:             CALL READF(GALPHA)995:             CALL READF(GALPHA)
1293: ! Distinguish between old C of M/Euler and new angle/axis coordinates for1290: ! Distinguish between old C of M/Euler and new angle/axis coordinates for
1294: ! rigid body TIP potentials1291: ! rigid body TIP potentials
1295: ! 1292: ! 
1296:          ELSE IF (WORD.EQ.'ANGLEAXIS') THEN1293:          ELSE IF (WORD.EQ.'ANGLEAXIS') THEN
1297:             ANGLEAXIS=.TRUE.1294:             ANGLEAXIS=.TRUE.
1298: ! 1295: ! 
1299: ! Growing string arc tolerance.1296: ! Growing string arc tolerance.
1300: ! 1297: ! 
1301:          ELSE IF (WORD.EQ.'ARCTOL') THEN1298:          ELSE IF (WORD.EQ.'ARCTOL') THEN
1302:             CALL READF(ARCTOL)1299:             CALL READF(ARCTOL)
1303: ! 
1304: ! Instructs the NEB interpolation scheme to check for rigid bodies which might be colliding and to  
1305: ! attempt to fix this by re-interpolating problematic bodies with the sense of rotation reversed 
1306: ! 
1307:          ELSE IF (WORD.EQ.'AVOIDCOLLISIONS') THEN 
1308:             AVOID_COLLISIONS = .TRUE. 
1309:             CALL READF(COLL_TOL) 
1310:  
1311: ! 1300: ! 
1312: ! Specifies the highest symmetry axis to search for in routine {\bf symmetry}; default is six.1301: ! Specifies the highest symmetry axis to search for in routine {\bf symmetry}; default is six.
1313: ! 1302: ! 
1314:          ELSE IF (WORD .EQ. 'AXIS') THEN1303:          ELSE IF (WORD .EQ. 'AXIS') THEN
1315:             CALL READI(NHCHECK)1304:             CALL READI(NHCHECK)
1316: ! 1305: ! 
1317: ! BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB1306: ! BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
1318:          ELSE IF (WORD.EQ.'BBCART') THEN1307:          ELSE IF (WORD.EQ.'BBCART') THEN
1319:             BBCART = .TRUE. ! use cartesians for backbone1308:             BBCART = .TRUE. ! use cartesians for backbone
1320: 1309: 


r29898/nnutils.f90 2016-02-04 11:30:12.132470248 +0000 r29897/nnutils.f90 2016-02-04 11:30:12.708477849 +0000
109:           AVDEV     = SUM(DEVIATION)/(NIMAGE+1)109:           AVDEV     = SUM(DEVIATION)/(NIMAGE+1)
110:      END SUBROUTINE INTERNALIMAGEDISTRIBUTION110:      END SUBROUTINE INTERNALIMAGEDISTRIBUTION
111: 111: 
112: !--------------------------------------------------------------------------------------------------------112: !--------------------------------------------------------------------------------------------------------
113: 113: 
114:      SUBROUTINE MAKEIMAGE(EINITIAL,EFINAL,QQ,FINFIN) ! INTERPOLATES THE BAND114:      SUBROUTINE MAKEIMAGE(EINITIAL,EFINAL,QQ,FINFIN) ! INTERPOLATES THE BAND
115:           USE NEBDATA115:           USE NEBDATA
116:           USE SPFUNCTS116:           USE SPFUNCTS
117: !          USE KEYNEB,ONLY: NIMAGE117: !          USE KEYNEB,ONLY: NIMAGE
118:           USE KEY,ONLY: MORPHT, MSTEPS, GREATCIRCLET, GCIMAGE, GCCONV, GCUPDATE, GCSTEPS, INTEPSILON, &118:           USE KEY,ONLY: MORPHT, MSTEPS, GREATCIRCLET, GCIMAGE, GCCONV, GCUPDATE, GCSTEPS, INTEPSILON, &
119:                         BULKT, RBAAT, NTSITES, AMBERT, LOCALPERMDIST, NRBGROUP, RBGROUP, RBNINGROUP, NRBTRIES, NABT,TWOD, &119:                         BULKT, RBAAT, NTSITES, AMBERT, LOCALPERMDIST, NRBGROUP, RBGROUP, RBNINGROUP, NRBTRIES, NABT,TWOD, RIGIDBODY
120:                         RIGIDBODY, AVOID_COLLISIONS, COLL_TOL 
121:           USE INTCOMMONS, ONLY : NNZ, KD, NINTC, DESMINT, DIHINFO, PREVDIH, BACKTCUTOFF, INTERPBACKTCUT, MINBACKTCUT, &120:           USE INTCOMMONS, ONLY : NNZ, KD, NINTC, DESMINT, DIHINFO, PREVDIH, BACKTCUTOFF, INTERPBACKTCUT, MINBACKTCUT, &
122:                                  CHICDNEB121:                                  CHICDNEB
123:           USE COMMONS, ONLY : ZSYM, PARAM1,PARAM2,PARAM3, NRBSITES, DEBUG122:           USE COMMONS, ONLY : ZSYM, PARAM1,PARAM2,PARAM3, NRBSITES, DEBUG
124:           USE MODCHARMM, ONLY : CHRMMT, ICINTERPT123:           USE MODCHARMM, ONLY : CHRMMT, ICINTERPT
125:           USE MODAMBER9, ONLY: AMBERICT, AMBICDNEBT, NICTOT124:           USE MODAMBER9, ONLY: AMBERICT, AMBICDNEBT, NICTOT
126:           USE PORFUNCS 125:           USE PORFUNCS 
127:           USE KEYNEB,ONLY: NIMAGE,XYZFILE,RBXYZFILE126:           USE KEYNEB,ONLY: NIMAGE,XYZFILE,RBXYZFILE
128:           USE KEY, ONLY: FILTH,FILTHSTR, MULTISITEPYT, ALIGNRBST, N_TO_ALIGN, TO_ALIGN !sn402127:           USE KEY, ONLY: FILTH,FILTHSTR, MULTISITEPYT !sn402
129:           USE GENRIGID, ONLY: RIGIDMOLECULEST, DEGFREEDOMS, NRIGIDBODY, GENRIGID_IMAGE_CTORIGID, GENRIGID_IMAGE_RIGIDTOC !sn402128:           USE GENRIGID, ONLY: RIGIDMOLECULEST, DEGFREEDOMS, NRIGIDBODY !sn402
130:           IMPLICIT NONE129:           IMPLICIT NONE
131:           INTEGER :: I, J1, ITDONE, INTERVAL, NDONE, J2, J, K, ISTAT, J3, J4, J5, NDUMMY, J6, J7, JWORST2, JWORST3130:           INTEGER :: I, J1, ITDONE, INTERVAL, NDONE, J2, J, K, ISTAT, J3, J4, J5, NDUMMY, J6, J7, JWORST2, JWORST3
132:           DOUBLE PRECISION,ALLOCATABLE :: DELTAX(:)131:           DOUBLE PRECISION,ALLOCATABLE :: DELTAX(:)
133: !          DOUBLE PRECISION, ALLOCATABLE :: QTN(:,:), PTN(:,:)132: !          DOUBLE PRECISION, ALLOCATABLE :: QTN(:,:), PTN(:,:)
134:           DOUBLE PRECISION DPRAND, SHIFT(NOPT), DUMMY, DLENGTH, DUMMY2, ENERGY, VNEW(NOPT), LRMS, &133:           DOUBLE PRECISION DPRAND, SHIFT(NOPT), DUMMY, DLENGTH, DUMMY2, ENERGY, VNEW(NOPT), LRMS, &
135:    &                       QS(NOPT), QF(NOPT), EINITIAL, EFINAL, COORDS(NOPT), SFRAC134:    &                       QS(NOPT), QF(NOPT), EINITIAL, EFINAL, COORDS(NOPT), SFRAC
136: !          DOUBLE PRECISION THETAH, ST, CT, P(3), FCT135: !          DOUBLE PRECISION THETAH, ST, CT, P(3), FCT
137:           DOUBLE PRECISION THETA, XSHIFT, YSHIFT, ZSHIFT, EWORST, EWORST_NEW136:           DOUBLE PRECISION THETA, XSHIFT, YSHIFT, ZSHIFT, EWORST
138:           DOUBLE PRECISION, ALLOCATABLE :: XINITIAL(:), XIMAGE(:,:), SAVE_BAND(:)137:           DOUBLE PRECISION, ALLOCATABLE :: XINITIAL(:), XIMAGE(:,:)
139:                     DOUBLE PRECISION,DIMENSION(:)         :: QQ,FINFIN138:                     DOUBLE PRECISION,DIMENSION(:)         :: QQ,FINFIN
140:           LOGICAL KNOWE, KNOWG, KNOWH, MFLAG, ALIGNCOMMON, ALIGNEDBEFORE(NATOMS)139:           LOGICAL KNOWE, KNOWG, KNOWH, MFLAG, ALIGNCOMMON, ALIGNEDBEFORE(NATOMS)
141:           COMMON /KNOWN/ KNOWE, KNOWG, KNOWH140:           COMMON /KNOWN/ KNOWE, KNOWG, KNOWH
142:           INTEGER NRBSET, NRBTOTAL, NRUNNING, NTRIES, JWORST, ALIGNATOM(NATOMS), NALIGNATOM141:           INTEGER NRBSET, NRBTOTAL, NRUNNING, NTRIES, JWORST, ALIGNATOM(NATOMS), NALIGNATOM
143:           DOUBLE PRECISION CMXS, CMYS, CMZS, CMXF, CMYF, CMZF, LSTART(3*NATOMS), LFINISH(3*NATOMS), &142:           DOUBLE PRECISION CMXS, CMYS, CMZS, CMXF, CMYF, CMZF, LSTART(3*NATOMS), LFINISH(3*NATOMS), &
144:   &                        RBANGLE, E1, E2, LTEMP(3*NATOMS), LEIMAGE(NIMAGE), LEIMAGE2(NIMAGE), LEIMAGE3(NIMAGE), &143:   &                        RBANGLE, E1, E2, LTEMP(3*NATOMS), LEIMAGE(NIMAGE), LEIMAGE2(NIMAGE), LEIMAGE3(NIMAGE), &
145:   &                        LPRED(3*NATOMS), THETA1, THETA2, LX(3), LV(3), DBEST, TBEST, LVBEST(3), LGDUMMY(3*NATOMS), RMSDUMMY, &144:   &                        LPRED(3*NATOMS), THETA1, THETA2, LX(3), LV(3), DBEST, TBEST, LVBEST(3), LGDUMMY(3*NATOMS), RMSDUMMY, &
146:   &                        QS2(3*NATOMS), QF2(3*NATOMS), D, EWORST2, EWORST3145:   &                        QS2(3*NATOMS), QF2(3*NATOMS), D, EWORST2, EWORST3
147: 146: 
148:           DOUBLE PRECISION :: STXYZ(3*NTSITES)  147:           DOUBLE PRECISION :: STXYZ(3*NTSITES)  
281:                 IF(RIGIDMOLECULEST) THEN280:                 IF(RIGIDMOLECULEST) THEN
282:                     XYZ(J+1:J+3*NRIGIDBODY) = XYZ(1:3*NRIGIDBODY) + DELTAX(1:3*NRIGIDBODY)*(I-1)281:                     XYZ(J+1:J+3*NRIGIDBODY) = XYZ(1:3*NRIGIDBODY) + DELTAX(1:3*NRIGIDBODY)*(I-1)
283:                 ELSE282:                 ELSE
284:                     XYZ(J+1:J+NOPT/2) = XYZ(1:NOPT/2) + DELTAX(1:NOPT/2)*(I-1)283:                     XYZ(J+1:J+NOPT/2) = XYZ(1:NOPT/2) + DELTAX(1:NOPT/2)*(I-1)
285: !                   PRINT *, I, XYZ(J+9), XYZ(J+9) - XYZ(J+9-NOPT)284: !                   PRINT *, I, XYZ(J+9), XYZ(J+9) - XYZ(J+9-NOPT)
286:                 ENDIF285:                 ENDIF
287:              ENDDO286:              ENDDO
288:             ! Interpolate the angle-axis vector components287:             ! Interpolate the angle-axis vector components
289:             IF(RIGIDMOLECULEST) THEN288:             IF(RIGIDMOLECULEST) THEN
290:                 DO J1 = 1, NRIGIDBODY289:                 DO J1 = 1, NRIGIDBODY
291:                     ! Interpolate AA vector for body J1 along the shortest path between the endpoints290:                     CALL iSLERP(J1, 3*NRIGIDBODY)
292:                     CALL iSLERP(J1, .FALSE., 3*NRIGIDBODY) 
293:                 ENDDO291:                 ENDDO
294:             ELSE  ! i.e. RBAAT292:             ELSE  ! i.e. RBAAT
295:             ! Recall, NATOMS is 1/3*(length of the coords array), i.e. NATOMS = 2*(no. of rigid bodies).293:             ! Recall, NATOMS is 1/3*(length of the coords array), i.e. NATOMS = 2*(no. of rigid bodies).
296:                 DO J1 = 1, NATOMS/2294:                 DO J1 = 1, NATOMS/2
297:                     CALL iSLERP(J1, .FALSE., NOPT/2)295:                     CALL iSLERP(J1, NOPT/2)
298:                 ENDDO296:                 ENDDO
299:             ENDIF297:             ENDIF
300: 298: 
301:  
302:             IF(RIGIDMOLECULEST) THEN299:             IF(RIGIDMOLECULEST) THEN
303:             ! Deal with any loose atoms (normal linear interpolation)300:             ! Deal with any loose atoms (normal linear interpolation)
304:                 DO I=2, NIMAGE+1301:                 DO I=2, NIMAGE+1
305:                     J = NOPT*(I-1)302:                     J = NOPT*(I-1)
306:                     XYZ(J+6*NRIGIDBODY+1:J+DEGFREEDOMS) = XYZ(6*NRIGIDBODY+1:DEGFREEDOMS) + &303:                     XYZ(J+6*NRIGIDBODY+1:J+DEGFREEDOMS) = XYZ(6*NRIGIDBODY+1:DEGFREEDOMS) + &
307:                                                             & DELTAX(6*NRIGIDBODY+1:DEGFREEDOMS)*(I-1)304:                                                             & DELTAX(6*NRIGIDBODY+1:DEGFREEDOMS)*(I-1)
308:                 ENDDO305:                 ENDDO
309:             ENDIF306:             ENDIF
310: 307: 
311:             IF (RIGIDMOLECULEST .AND. AVOID_COLLISIONS) THEN 
312:             ! Test to see if the interpolation has given us a bad path in which two rigid bodies collide, 
313:             ! and if so we reinterpolate this rigid body with the rotation in the opposite sense. 
314:             ! This section is currently coded only for RIGIDMOLECULEST (i.e. GENRIGID) 
315:  
316:                 ! Compute EWORST, the energy of the highest-energy image 
317:                 CALL COMPUTE_HIGHEST_IMAGE(XYZ, EWORST, NDUMMY) 
318:  
319:                 IF (EWORST .GT. COLL_TOL) THEN 
320:  
321:                     IF(DEBUG) WRITE(*,*) "makeimage> Bad interpolation; suspect two rigid bodies have collided" 
322:                     DO J1 = 1, NRIGIDBODY 
323:  
324:                         IF (ALIGNRBST) THEN ! May wish to avoid reinterpolating in some circumstances 
325:                             IF ((N_TO_ALIGN .EQ. 1) .AND. (TO_ALIGN(1).EQ.J1)) THEN 
326:                                 ! In this (very) special case we don't want to reinterpolate because the specified plate 
327:                                 ! should be fixed in both endpoints; there's no point in moving it (which reinterpolation 
328:                                 ! will cause to happen) 
329:                                 IF(DEBUG) WRITE(*,*) "Skipping reinterpolation of RB", J1, "due to ALIGNRBST" 
330:                                 CYCLE 
331:                             ENDIF 
332:                         ENDIF 
333:  
334:                         IF(DEBUG) WRITE(*,*) "Trying long-way-round interpolation for RB", J1 
335:  
336:                         ! Save the band in case we later want to reverse the reinterpolation. 
337:                         IF (.NOT. ALLOCATED(SAVE_BAND)) ALLOCATE(SAVE_BAND(NOPT*(NIMAGE+2)))                         
338:                         SAVE_BAND = XYZ 
339:  
340:                         ! Reinterpolate this rigid body, this time rotating the long way round. 
341:                         CALL iSLERP(J1,.TRUE.,3*NRIGIDBODY)  
342:  
343:                         CALL COMPUTE_HIGHEST_IMAGE(XYZ, EWORST_NEW, NDUMMY) 
344:  
345:                         IF (EWORST_NEW.GT.EWORST) THEN  
346:                             ! Probably both interpolations are bad and the connect run will fail,  
347:                             ! but we may as well use the better of the two. 
348:                             IF(DEBUG) WRITE(*,*) "Energy got worse. Resetting band" 
349:                             XYZ = SAVE_BAND 
350:                         ELSE 
351:                             IF(DEBUG) WRITE(*,*) "Energy improved after reinterpolation. Keeping new band" 
352:                             IF (EWORST_NEW.LT.COLL_TOL) THEN 
353:                                 IF(DEBUG) WRITE(*,*) "Energy has fallen below tolerance. Hopefully all collisions have been averted" 
354:                                 EXIT 
355:                             ENDIF 
356:                         ENDIF 
357:                     ENDDO 
358:                 ENDIF  ! End of IF (EWORST .GT. COLL_TOL) 
359:             ENDIF  ! End of IF (AVOID_COLLISIONS) 
360:  
361:  
362:  
363: ! sf344> now we have the interpolated coordinates. For MULTISITEPY, check for overlap308: ! sf344> now we have the interpolated coordinates. For MULTISITEPY, check for overlap
364: !        and if there's any (very likely), move the offending bodies randomly around. 309: !        and if there's any (very likely), move the offending bodies randomly around. 
365:             IF(MULTISITEPYT) THEN    ! sn402 : added this IF statement310:             IF(MULTISITEPYT) THEN    ! sn402 : added this IF statement
366:                  DO I = 2, NIMAGE+1311:                  DO I = 2, NIMAGE+1
367:                     J = NOPT*(I-1)312:                     J = NOPT*(I-1)
368:                     CALL TAKESTEPMULTISITEPY(XYZ(J+1:J+NOPT))313:                     CALL TAKESTEPMULTISITEPY(XYZ(J+1:J+NOPT))
369:                  ENDDO314:                  ENDDO
370:             ENDIF315:             ENDIF
371: 316: 
372:             DEALLOCATE(DELTAX)317:             DEALLOCATE(DELTAX)
919:               ENDDO alignloop864:               ENDDO alignloop
920:            ENDDO grouploop865:            ENDDO grouploop
921:            IF (NTRIES.LT.NRBTRIES) GOTO 11 ! do it again! DJW866:            IF (NTRIES.LT.NRBTRIES) GOTO 11 ! do it again! DJW
922:         ENDIF867:         ENDIF
923:      ENDIF868:      ENDIF
924: 869: 
925:      END SUBROUTINE MAKEIMAGE870:      END SUBROUTINE MAKEIMAGE
926: 871: 
927: ! ------------------------------------------------------------------------------------------------------872: ! ------------------------------------------------------------------------------------------------------
928: ! sn402: moved this into a separate subroutine for cleanliness873: ! sn402: moved this into a separate subroutine for cleanliness
929:     SUBROUTINE iSLERP(J1, LONG_WAY, RBOFFSET)874:     SUBROUTINE iSLERP(J1, RBOFFSET)
930:     ! Subroutine to interpolate the angle-axis vector of a rigid body along the NEB path (XYZ)875:     ! Subroutine to interpolate the angle-axis vector of a rigid body along the NEB path (XYZ)
931:         USE KEYNEB,ONLY: NIMAGE876:         USE KEYNEB,ONLY: NIMAGE
932:         USE NEBDATA,ONLY: NOPT, XYZ ! The path, consisting of (NIMAGE+2)*NOPT sets of coordinates. The first877:         USE NEBDATA,ONLY: NOPT, XYZ ! The path, consisting of (NIMAGE+2)*NOPT sets of coordinates. The first
933:         ! and last of these sets correspond to the start and endpoints, and the sets inbetween correspond878:         ! and last of these sets correspond to the start and endpoints, and the sets inbetween correspond
934:         ! to the images.879:         ! to the images.
935: 880: 
936:         IMPLICIT NONE881:         IMPLICIT NONE
937: 882: 
938:         LOGICAL, INTENT(IN) :: LONG_WAY 
939:         DOUBLE PRECISION,ALLOCATABLE :: QTN(:,:), PTN(:,:)883:         DOUBLE PRECISION,ALLOCATABLE :: QTN(:,:), PTN(:,:)
940:         DOUBLE PRECISION THETA, THETAH, ST, CT, P(3), FCT884:         DOUBLE PRECISION THETA, THETAH, ST, CT, P(3), FCT
941:         ! J1 is the index of the rigid body we are interested in. RBOFFSET is the point within the list885:         ! J1 is the index of the rigid body we are interested in. RBOFFSET is the point within the list
942:         ! of coordinates for this image at which the angle-axis components begin to be listed.886:         ! of coordinates for this image at which the angle-axis components begin to be listed.
943:         ! RBOFFSET is different depending on which rigid-body representation is being used (GENRIGID or887:         ! RBOFFSET is different depending on which rigid-body representation is being used (GENRIGID or
944:         ! RBAA) so must be passed as a parameter.888:         ! RBAA) so must be passed as a parameter.
945:         INTEGER J1, K, J, I, RBOFFSET889:         INTEGER J1, K, J, I, RBOFFSET
946: 890: 
947:         ! Lists of parallel and perpendicular quaternions for body J1 in all the images.891:         ! Lists of parallel and perpendicular quaternions for body J1 in all the images.
948:         ALLOCATE(QTN(NIMAGE+2,4))892:         ALLOCATE(QTN(NIMAGE+2,4))
973: 917: 
974: !     NOW THETA = \ALPHA (WHICH IS THE ANGLE BETWEEN THE TWO END-QUATERNIONS)918: !     NOW THETA = \ALPHA (WHICH IS THE ANGLE BETWEEN THE TWO END-QUATERNIONS)
975:          ! cos(\alpha) is the dot product between the angle-axis vectors corresponding919:          ! cos(\alpha) is the dot product between the angle-axis vectors corresponding
976:          ! to rigid body J1 in the initial and final structures920:          ! to rigid body J1 in the initial and final structures
977:          ! (because the AA vectors are normalised)921:          ! (because the AA vectors are normalised)
978:          CT       = DOT_PRODUCT(QTN(1,:),QTN(NIMAGE+2,:))922:          CT       = DOT_PRODUCT(QTN(1,:),QTN(NIMAGE+2,:))
979:          IF (CT < 0.D0) THEN923:          IF (CT < 0.D0) THEN
980:            CT =-CT924:            CT =-CT
981:            QTN(NIMAGE+2,:) =-QTN(NIMAGE+2,:)925:            QTN(NIMAGE+2,:) =-QTN(NIMAGE+2,:)
982:          ENDIF926:          ENDIF
983: 927:          THETA    = ACOS(CT)
984:         ! We may sometimes wish to interpolate around the longer of the two angles, for example to 
985:         ! avoid clash of two rigid bodies. Inverting the final quarternion causes iSLERP to 
986:         ! interpolate in the other direction, so this is what we do here. 
987:          IF (LONG_WAY) THEN 
988:            QTN(NIMAGE+2,:) =-QTN(NIMAGE+2,:) 
989:            CT =-CT  ! Inverting the quarternion obviously inverts the inner product 
990:          ENDIF 
991:   
992:         THETA    = ACOS(CT) 
993:          ST       = SIN(THETA)928:          ST       = SIN(THETA)
994: !     INCREMENTAL APPROACH: TANGENT QUATERNION929: !     INCREMENTAL APPROACH: TANGENT QUATERNION
995:          ! The tangent quaternion PTN is a unit quaternion perpendicular to the930:          ! The tangent quaternion PTN is a unit quaternion perpendicular to the
996:          ! interpolated quaternion931:          ! interpolated quaternion
997:          PTN(1,:) = (QTN(NIMAGE+2,:) - CT*QTN(1,:))/ST932:          PTN(1,:) = (QTN(NIMAGE+2,:) - CT*QTN(1,:))/ST
998: !     NOW THETA = \BETA = \ALPHA/(NIMAGE+1)933: !     NOW THETA = \BETA = \ALPHA/(NIMAGE+1)
999:          ! We redefine theta at this point.934:          ! We redefine theta at this point.
1000:          ! \beta is the separation in angle between the evenly-spaced consecutive images.935:          ! \beta is the separation in angle between the evenly-spaced consecutive images.
1001:          THETA    = THETA/(NIMAGE+1)936:          THETA    = THETA/(NIMAGE+1)
1002:          ST       = SIN(THETA)937:          ST       = SIN(THETA)
1018:                  XYZ(J+1:J+3) = THETA*QTN(I,2:4)/FCT953:                  XYZ(J+1:J+3) = THETA*QTN(I,2:4)/FCT
1019:              ENDIF954:              ENDIF
1020: 955: 
1021:          ENDDO956:          ENDDO
1022: 957: 
1023:          DEALLOCATE(QTN)958:          DEALLOCATE(QTN)
1024:          DEALLOCATE(PTN)959:          DEALLOCATE(PTN)
1025: 960: 
1026:     END SUBROUTINE iSLERP961:     END SUBROUTINE iSLERP
1027: ! ------------------------------------------------------------------------------------------------------962: ! ------------------------------------------------------------------------------------------------------
1028:     ! Extract the index and energy of the highest-energy image in an array of images (BAND) 
1029:     ! Normally, BAND would be XYZ from NEBDATA, but we sometimes want to find the highest image in a reduced band 
1030:     ! (either using a subset of the images or a subset of the system in each image) 
1031:     SUBROUTINE COMPUTE_HIGHEST_IMAGE(BAND, EWORST, JWORST) 
1032:     USE COMMONS, ONLY: DEBUG, NOPT 
1033:     USE KEYNEB, ONLY: NIMAGE 
1034:     IMPLICIT NONE 
1035:     DOUBLE PRECISION, INTENT(IN) :: BAND(:) 
1036:     DOUBLE PRECISION, INTENT(OUT) :: EWORST 
1037:     INTEGER, INTENT(OUT) :: JWORST ! Energy and index of the highest-energy index, respectively 
1038:     INTEGER :: J1 
1039:     DOUBLE PRECISION :: E1, RMSDUMMY, LGDUMMY(NOPT), COORDS(NOPT) 
1040:  
1041:     EWORST=-HUGE(1.0D0) 
1042:      
1043:     DO J1=1,NIMAGE 
1044:  
1045:         COORDS = BAND(NOPT*J1+1:NOPT*(J1+1)) 
1046:  
1047:         ! Determine the energy of this image 
1048:         CALL POTENTIAL(COORDS,E1,LGDUMMY,.FALSE.,.FALSE.,RMSDUMMY,.FALSE.,.FALSE.) 
1049:  
1050:         IF (E1.GT.EWORST) THEN 
1051:             JWORST=J1 
1052:             EWORST=E1 
1053:         ENDIF 
1054:         IF (DEBUG) PRINT '(A,I6,A,G20.10)',' nnutils> image ',J1,' energy=',E1 
1055:     ENDDO 
1056:     IF (DEBUG) PRINT '(A,I6,A,G20.10)',' nnutils> highest image is ',JWORST,' with energy=',EWORST  
1057: 963: 
1058:     END SUBROUTINE COMPUTE_HIGHEST_IMAGE 
1059: ! ------------------------------------------------------------------------------------------------------ 
1060:      SUBROUTINE PRINTSUMMARY964:      SUBROUTINE PRINTSUMMARY
1061:           USE NEBDATA965:           USE NEBDATA
1062:           USE KEYNEB,ONLY: MOREPRINTING,NITERMAX966:           USE KEYNEB,ONLY: MOREPRINTING,NITERMAX
1063:           USE CHARUTILS967:           USE CHARUTILS
1064:           IMPLICIT NONE968:           IMPLICIT NONE
1065:           DOUBLE PRECISION :: TOTAL969:           DOUBLE PRECISION :: TOTAL
1066:           970:           
1067:           TOTAL = ENDTIME-STARTTIME971:           TOTAL = ENDTIME-STARTTIME
1068:           IF (MOREPRINTING) THEN972:           IF (MOREPRINTING) THEN
1069:                SELECT CASE (EXITSTATUS)973:                SELECT CASE (EXITSTATUS)


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0