hdiff output

r31320/key.f90 2016-10-15 14:30:18.129161162 +0100 r31319/key.f90 2016-10-15 14:30:20.029186625 +0100
 16:      &        INTCONSEP, PATOM1, PATOM2, INTREPSEP, NCONSTRAINTON, CPREPSEP, CPCONSEP, NCONGEOM, & 16:      &        INTCONSEP, PATOM1, PATOM2, INTREPSEP, NCONSTRAINTON, CPREPSEP, CPCONSEP, NCONGEOM, &
 17:      &        NCPREPULSIVE, NCPCONSTRAINT, MAXCONUSE, INTCONSTEPS, INTRELSTEPS, INTSTEPS1, INTLJSTEPS, & 17:      &        NCPREPULSIVE, NCPCONSTRAINT, MAXCONUSE, INTCONSTEPS, INTRELSTEPS, INTSTEPS1, INTLJSTEPS, &
 18:      &        NTRAPPOW, MAXINTIMAGE, CHECKDID, CHECKREPINTERVAL, INTFREEZEMIN, INTNTRIESMAX, INTIMAGEINCR, & 18:      &        NTRAPPOW, MAXINTIMAGE, CHECKDID, CHECKREPINTERVAL, INTFREEZEMIN, INTNTRIESMAX, INTIMAGEINCR, &
 19:      &        NCONSTRAINTFIX, INTIMAGECHECK, NREPULSIVEFIX, NRANROT, NENDDUP, LOCALPERMNEIGH, & 19:      &        NCONSTRAINTFIX, INTIMAGECHECK, NREPULSIVEFIX, NRANROT, NENDDUP, LOCALPERMNEIGH, &
 20:      &        LOCALPERMMAXSEP, NONEDAPBC, STRUC, QCHEMESNAO, QCHEMESNMO, QCHEMESNZERO, QCHEMESNELEC, PMPATHINR, & 20:      &        LOCALPERMMAXSEP, NONEDAPBC, STRUC, QCHEMESNAO, QCHEMESNMO, QCHEMESNZERO, QCHEMESNELEC, PMPATHINR, &
 21:      &        MULTISUNIT, MULTIFUNIT,NIMAGEINST,NGLJ,ST_TSSTEP,LANSTEP,NONFREEZE, & 21:      &        MULTISUNIT, MULTIFUNIT,NIMAGEINST,NGLJ,ST_TSSTEP,LANSTEP,NONFREEZE, &
 22:      &        MCPATHBINS,MCPATHEQUIL,MCPATHSTEPS,MCPATHPRTFRQ,MCPATHTS,MCPATHSCHECK,RPHSLICES,RPHQBINS, & 22:      &        MCPATHBINS,MCPATHEQUIL,MCPATHSTEPS,MCPATHPRTFRQ,MCPATHTS,MCPATHSCHECK,RPHSLICES,RPHQBINS, &
 23:      &        ITWIST, JTWIST, KTWIST, LTWIST, MCPATHSTART, MCPATHBLOCK, MCPATHOVER, NCPU, MCPATHDOBLOCK, MCMERGES, MCMERGEQ, & 23:      &        ITWIST, JTWIST, KTWIST, LTWIST, MCPATHSTART, MCPATHBLOCK, MCPATHOVER, NCPU, MCPATHDOBLOCK, MCMERGES, MCMERGEQ, &
 24:      &        MCMERGEI,GAUSSIANCHARGE,GAUSSIANMULTI,ITG03, REDOTS, QCIPERMCHECKINT, & 24:      &        MCMERGEI,GAUSSIANCHARGE,GAUSSIANMULTI,ITG03, REDOTS, QCIPERMCHECKINT, &
 25:      &        MLPIN, MLPSTART, MLPOUT, MLPHIDDEN, MLPDATA, NMLP, N_TO_ALIGN, DJWRBID, STM, NHEXAMERS, & 25:      &        MLPIN, MLPSTART, MLPOUT, MLPHIDDEN, MLPDATA, NMLP, N_TO_ALIGN, DJWRBID, STM, NHEXAMERS, &
 26:      &        MLQIN, MLQSTART, MLQOUT, MLQDATA, NMLQ, & 
 27:      &        QCIADDREP, QCIBONDS, QCISECOND, MAXNACTIVE, QCIIMAGE 26:      &        QCIADDREP, QCIBONDS, QCISECOND, MAXNACTIVE, QCIIMAGE
 28:  27: 
 29:       LOGICAL :: DTEST, MASST, RTEST, EFSTEPST, VECTORST, SUMMARYT, DUMPV, DUMPMAG, FREEZE, FREEZERANGE, GRADSQ, & 28:       LOGICAL :: DTEST, MASST, RTEST, EFSTEPST, VECTORST, SUMMARYT, DUMPV, DUMPMAG, FREEZE, FREEZERANGE, GRADSQ, &
 30:      &        PGRAD, VALUEST, ADMT, BFGSMINT, BFGSTST, CHECKINDEX, TOSI, CONTAINER, & 29:      &        PGRAD, VALUEST, ADMT, BFGSMINT, BFGSTST, CHECKINDEX, TOSI, CONTAINER, &
 31:      &        GAUSSIAN, CADPAC, PRESSURE, FTEST, DCHECK, CP2K, DFTP, CPMD, CPMDC, FREEZERES, DF1T, & 30:      &        GAUSSIAN, CADPAC, PRESSURE, FTEST, DCHECK, CP2K, DFTP, CPMD, CPMDC, FREEZERES, DF1T, &
 32:      &        VARIABLES, FIELDT, OHT, IHT, TDT, D5HT, TWOENDS, PV, FRACTIONAL, BLNT, HYBRIDMINT, & 31:      &        VARIABLES, FIELDT, OHT, IHT, TDT, D5HT, TWOENDS, PV, FRACTIONAL, BLNT, HYBRIDMINT, &
 33:      &        INDEXT, LANCZOST, NOSHIFT, GAMESSUS, GAMESSUK, PVTS, RIGIDBODY, CASTEP, ONETEP, QCHEM, QCHEMES, VASP, & 32:      &        INDEXT, LANCZOST, NOSHIFT, GAMESSUS, GAMESSUK, PVTS, RIGIDBODY, CASTEP, ONETEP, QCHEM, QCHEMES, VASP, &
 34:      &        BFGSSTEP, BULKT, HUPDATE, NOHESS, READV, NOIT, THOMSONT, SIO2T, SIO2C6T, BISECTT, BISECTDEBUG, & 33:      &        BFGSSTEP, BULKT, HUPDATE, NOHESS, READV, NOIT, THOMSONT, SIO2T, SIO2C6T, BISECTT, BISECTDEBUG, &
 35:      &        TOSIC6, TOSIPOL, FIXIMAGE, DFTBT, CHECKCONT, CHECKDT, SHIFTED, READSP, DUMPSP, NOFRQS, & 34:      &        TOSIC6, TOSIPOL, FIXIMAGE, DFTBT, CHECKCONT, CHECKDT, SHIFTED, READSP, DUMPSP, NOFRQS, &
 36:      &        ALLSTEPS, ALLVECTORS, MWVECTORS, WELCH, BINARY, READHESS, MOVIE, NORESET, TWOD, & 35:      &        ALLSTEPS, ALLVECTORS, MWVECTORS, WELCH, BINARY, READHESS, MOVIE, NORESET, TWOD, &
 48:      &        INTFREEZET, LPERMDIST, CHECKNEGATIVET, CHECKOVERLAPT, ACK1, ACK2, CONDATT, USERPOTT, & 47:      &        INTFREEZET, LPERMDIST, CHECKNEGATIVET, CHECKOVERLAPT, ACK1, ACK2, CONDATT, USERPOTT, &
 49:      &        CONCUTFRACT, CONCUTABST, ENDNUMHESS2, CHARMMDFTBT, PAIRCOLOURT, REVERSEUPHILLT, WHOLEDNEB, & 48:      &        CONCUTFRACT, CONCUTABST, ENDNUMHESS2, CHARMMDFTBT, PAIRCOLOURT, REVERSEUPHILLT, WHOLEDNEB, &
 50:      &        NONEBMAX, READMASST, ONEDAPBCT, ONEDPBCT, INVTONEDPBCT, INVTTWODPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, & 49:      &        NONEBMAX, READMASST, ONEDAPBCT, ONEDPBCT, INVTONEDPBCT, INVTTWODPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, &
 51:      &        THREEDPBCT, FOURDAPBCT, FOURDPBCT, MODEDOWNT, CHEMSHIFT, TTM3T, & 50:      &        THREEDPBCT, FOURDAPBCT, FOURDPBCT, MODEDOWNT, CHEMSHIFT, TTM3T, &
 52:      &        NOINVERSION, INVERTPT, KNOWVECS, PMPATHT, AAORIENTT, MULTIJOBT, QUIPARGSTRT, QUIPPARAMST, HESSDUMPT, & 51:      &        NOINVERSION, INVERTPT, KNOWVECS, PMPATHT, AAORIENTT, MULTIJOBT, QUIPARGSTRT, QUIPPARAMST, HESSDUMPT, &
 53:      &        CLASSICALRATEST, TSPLITTINGT, HESSREADT, INSTANTONOPTT,INSTANTONSTARTDUMPT,VARSTEPOPTT, MOLPRO, REAXFFT, & 52:      &        CLASSICALRATEST, TSPLITTINGT, HESSREADT, INSTANTONOPTT,INSTANTONSTARTDUMPT,VARSTEPOPTT, MOLPRO, REAXFFT, &
 54:      &        EIGENONLY,OVERCONV, GLJT,CLSTRINGT,CLSTRINGTST, PHI4MODT, EX1DT, MCPATHT, MCBIAST, RPHT, TWISTT, MCPATH2T, & 53:      &        EIGENONLY,OVERCONV, GLJT,CLSTRINGT,CLSTRINGTST, PHI4MODT, EX1DT, MCPATHT, MCBIAST, RPHT, TWISTT, MCPATH2T, &
 55:      &        PBST, SSHT, GAUSSIAN03, CPPNEBT, CUDAT, CUDATIMET, TRUSTMODET,MODELOST, METRICTENSOR, INTSPRINGACTIVET, & 54:      &        PBST, SSHT, GAUSSIAN03, CPPNEBT, CUDAT, CUDATIMET, TRUSTMODET,MODELOST, METRICTENSOR, INTSPRINGACTIVET, &
 56:      &        PERMGUESS, QCIPERMCHECK, DUMPFRQST, MULTIPOTT, MLP3T, MLPB3T, DUMPBESTPATH, ALIGNRBST, AVOID_COLLISIONS, MLPPROB, & 55:      &        PERMGUESS, QCIPERMCHECK, DUMPFRQST, MULTIPOTT, MLP3T, MLPB3T, DUMPBESTPATH, ALIGNRBST, AVOID_COLLISIONS, MLPPROB, &
 57:      &        MALONALDEHYDE, MLPNEWREG, DJWRBT, STEALTHYT, STEALTV, LJADDT, MLPB3NEWT, & 56:      &        MALONALDEHYDE, MLPNEWREG, DJWRBT, STEALTHYT, STEALTV, LJADDT, MLPB3NEWT, &
 58:      &        QCIPOTT, QCIPOT2T, QCIRADSHIFTT, QCINOREPINT, QCIAMBERT, SLERPT, NOTRANSROTT, MAXGAPT, BULKBOXT, GDSQT, FLATTESTT, & 57:      &        QCIPOTT, QCIPOT2T, QCIRADSHIFTT, QCINOREPINT, QCIAMBERT, SLERPT, NOTRANSROTT, MAXGAPT, BULKBOXT, GDSQT, FLATTESTT
 59:      &        MLQT, MLQPROB 
 60:  58: 
 61: ! sy349 > for testing the flatpath after dneb 59: ! sy349 > for testing the flatpath after dneb
 62:       !LOGICAL, ALLOCATABLE :: FLATPATHT(:) 60:       !LOGICAL, ALLOCATABLE :: FLATPATHT(:)
 63:       LOGICAL FLATPATHT 61:       LOGICAL FLATPATHT
 64:  62: 
 65: ! bf269 > polymer in a pore (non-bonding (LJ) energy from neighbours is not subtracted) 63: ! bf269 > polymer in a pore (non-bonding (LJ) energy from neighbours is not subtracted)
 66:       LOGICAL :: PORE8T = .FALSE. ! add 8th power cylindrical pore to the potential? 64:       LOGICAL :: PORE8T = .FALSE. ! add 8th power cylindrical pore to the potential?
 67:       INTEGER :: PORE8_AXIS = 3 ! principal axis of the cylindric pore (1:x, 2:y, 3:z) 65:       INTEGER :: PORE8_AXIS = 3 ! principal axis of the cylindric pore (1:x, 2:y, 3:z)
 68:       DOUBLE PRECISION :: PORE8_ENERGY = 1.0d1 ! energy of the pore when radius = 1 66:       DOUBLE PRECISION :: PORE8_ENERGY = 1.0d1 ! energy of the pore when radius = 1
 69:       LOGICAL :: HARMPOLYT = .FALSE. ! add harmonic bonds between the beads 67:       LOGICAL :: HARMPOLYT = .FALSE. ! add harmonic bonds between the beads
100:      &        NEBRESEEDDEL2, INTCONSTRAINTTOL, INTCONSTRAINTDEL, RBCUTOFF, INTCONSTRAINTREP, INTCONSTRAINREPCUT, & 98:      &        NEBRESEEDDEL2, INTCONSTRAINTTOL, INTCONSTRAINTDEL, RBCUTOFF, INTCONSTRAINTREP, INTCONSTRAINREPCUT, &
101:      &        REDOK, REDOFRAC, D1INIT, D2INIT, REDOE1, REDOE2, RPBETA, REPCON, PFORCE, & 99:      &        REDOK, REDOFRAC, D1INIT, D2INIT, REDOE1, REDOE2, RPBETA, REPCON, PFORCE, &
102:      &        CPCONSTRAINTTOL, CPCONSTRAINTDEL, CPCONSTRAINTREP, CPCONSTRAINREPCUT, CPCONFRAC, &100:      &        CPCONSTRAINTTOL, CPCONSTRAINTDEL, CPCONSTRAINTREP, CPCONSTRAINREPCUT, CPCONFRAC, &
103:      &        INTLJTOL, INTLJDEL, INTLJEPS, IMSEPMIN, IMSEPMAX, TRAPK, MINOVERLAP, &101:      &        INTLJTOL, INTLJDEL, INTLJEPS, IMSEPMIN, IMSEPMAX, TRAPK, MINOVERLAP, &
104:      &        INTFREEZETOL, LOCALPERMCUT, LOCALPERMCUT2, LOCALPERMCUTINC, CHECKREPCUTOFF, CONCUTABS, &102:      &        INTFREEZETOL, LOCALPERMCUT, LOCALPERMCUT2, LOCALPERMCUTINC, CHECKREPCUTOFF, CONCUTABS, &
105:      &        CONCUTFRAC, ENDNUMHESSDELTA, DNEBEFRAC, QCHEMSCALE, KAA, SIGMAAA, QUIPATOMMASS, TEMPERATURE1, &103:      &        CONCUTFRAC, ENDNUMHESSDELTA, DNEBEFRAC, QCHEMSCALE, KAA, SIGMAAA, QUIPATOMMASS, TEMPERATURE1, &
106:      &        DISTORTINST,DELTAINST,MOLPROSCALE,COVER,STTSRMSCONV,LAN_DIST,LANCONV,LANFACTOR, &104:      &        DISTORTINST,DELTAINST,MOLPROSCALE,COVER,STTSRMSCONV,LAN_DIST,LANCONV,LANFACTOR, &
107:      &        STOCKEXP, JPARAM, MCPATHTEMP, MCPATHDMAX, MCPATHSTEP, MCPATHACCRATIO, BIASFAC, &105:      &        STOCKEXP, JPARAM, MCPATHTEMP, MCPATHDMAX, MCPATHSTEP, MCPATHACCRATIO, BIASFAC, &
108:      &        MCADDDEV, MCPATHQMIN, MCPATHQMAX, RPHQMIN, RPHQMAX, RPHTEMP, TWISTF, TWISTREF, MCPATHADDREF, &106:      &        MCADDDEV, MCPATHQMIN, MCPATHQMAX, RPHQMIN, RPHQMAX, RPHTEMP, TWISTF, TWISTREF, MCPATHADDREF, &
109:      &        MCPATHGWS, MCPATHGWQ, MCPATHNEGLECT, MCPATHTOL, FRAMESDIFF,TMRATIO, INTMINFAC, MLPLAMBDA, COLL_TOL, KLIM, SCA, &107:      &        MCPATHGWS, MCPATHGWQ, MCPATHNEGLECT, MCPATHTOL, FRAMESDIFF,TMRATIO, INTMINFAC, MLPLAMBDA, COLL_TOL, KLIM, SCA, &
110:      &        NEBMAXERISE, GDSQ, FLATEDIFF, QCIADDREPCUT, QCIADDREPEPS, QCIRADSHIFT, INTCONCUT, MLQLAMBDA108:      &         NEBMAXERISE, GDSQ, FLATEDIFF, QCIADDREPCUT, QCIADDREPEPS, QCIRADSHIFT, INTCONCUT
111: 109: 
112: !     sf344110: !     sf344
113:       DOUBLE PRECISION :: PCUTOFF,PYA11(3),PYA21(3),PYA12(3),PYA22(3),PEPSILON1(3),PSCALEFAC1(2),PSCALEFAC2(2), &111:       DOUBLE PRECISION :: PCUTOFF,PYA11(3),PYA21(3),PYA12(3),PYA22(3),PEPSILON1(3),PSCALEFAC1(2),PSCALEFAC2(2), &
114:      &                     PEPSILONATTR(2),PSIGMAATTR(2), PYOVERLAPTHRESH, LJSITECOORDS(3), LJGSITESIGMA, LJGSITEEPS, &112:      &                     PEPSILONATTR(2),PSIGMAATTR(2), PYOVERLAPTHRESH, LJSITECOORDS(3), LJGSITESIGMA, LJGSITEEPS, &
115:      &                     PYLOCALSTEP(2)113:      &                     PYLOCALSTEP(2)
116:  114:  
117:       DOUBLE PRECISION, ALLOCATABLE :: POINTSDECA(:), POINTSICOS(:)115:       DOUBLE PRECISION, ALLOCATABLE :: POINTSDECA(:), POINTSICOS(:)
118:       DOUBLE PRECISION, ALLOCATABLE :: VT(:), pya1bin(:,:),pya2bin(:,:)116:       DOUBLE PRECISION, ALLOCATABLE :: VT(:), pya1bin(:,:),pya2bin(:,:)
119:       LOGICAL          :: LJSITE,BLJSITE,LJSITEATTR,PYBINARYT,PARAMONOVPBCX,PARAMONOVPBCY,PARAMONOVPBCZ,PARAMONOVCUTOFF117:       LOGICAL          :: LJSITE,BLJSITE,LJSITEATTR,PYBINARYT,PARAMONOVPBCX,PARAMONOVPBCY,PARAMONOVPBCZ,PARAMONOVCUTOFF
120:       LOGICAL          :: PYGPERIODICT,ELLIPSOIDT,LJSITECOORDST,REALIGNXYZ,MULTISITEPYT,LJGSITET,NORMALMODET118:       LOGICAL          :: PYGPERIODICT,ELLIPSOIDT,LJSITECOORDST,REALIGNXYZ,MULTISITEPYT,LJGSITET,NORMALMODET
314: ! AMBER 12 variables312: ! AMBER 12 variables
315:       LOGICAL :: AMBER12T313:       LOGICAL :: AMBER12T
316:       LOGICAL :: CHIRALENDPOINTS314:       LOGICAL :: CHIRALENDPOINTS
317:       LOGICAL :: CLIMBERT,CLIMBERINIT315:       LOGICAL :: CLIMBERT,CLIMBERINIT
318:       INTEGER :: CLIMBERSTEPS316:       INTEGER :: CLIMBERSTEPS
319:       DOUBLE PRECISION :: CLIMBERCONV,CLIMBERSPRING317:       DOUBLE PRECISION :: CLIMBERCONV,CLIMBERSPRING
320:       INTEGER, DIMENSION(:,:), ALLOCATABLE :: BONDS318:       INTEGER, DIMENSION(:,:), ALLOCATABLE :: BONDS
321: 319: 
322:       DOUBLE PRECISION, ALLOCATABLE ::  MLPDAT(:,:)320:       DOUBLE PRECISION, ALLOCATABLE ::  MLPDAT(:,:)
323:       INTEGER, ALLOCATABLE ::  MLPOUTCOME(:)321:       INTEGER, ALLOCATABLE ::  MLPOUTCOME(:)
324:       DOUBLE PRECISION, ALLOCATABLE ::  MLQDAT(:,:) 
325:       INTEGER, ALLOCATABLE ::  MLQOUTCOME(:) 
326: 322: 
327: 323: 
328: END MODULE KEY324: END MODULE KEY


r31320/keywords.f 2016-10-15 14:30:18.493166043 +0100 r31319/keywords.f 2016-10-15 14:30:20.405191669 +0100
 64:          USE ISO_C_BINDING, ONLY: C_NULL_CHAR 64:          USE ISO_C_BINDING, ONLY: C_NULL_CHAR
 65: ! AMBER12 65: ! AMBER12
 66:          USE AMBER12_INTERFACE_MOD, ONLY: AMBER12_ATOM, AMBER12_RESIDUE, AMBER12_ATOMS, 66:          USE AMBER12_INTERFACE_MOD, ONLY: AMBER12_ATOM, AMBER12_RESIDUE, AMBER12_ATOMS,
 67:      &                                    AMBER12_RESIDUES, AMBER12_GET_COORDS 67:      &                                    AMBER12_RESIDUES, AMBER12_GET_COORDS
 68:          USE CHIRALITY 68:          USE CHIRALITY
 69:  69: 
 70:          IMPLICIT NONE 70:          IMPLICIT NONE
 71:  71: 
 72:          DOUBLE PRECISION ::  Q(3*NATOMS) 72:          DOUBLE PRECISION ::  Q(3*NATOMS)
 73:  73: 
 74:          INTEGER NDUM, LUNIT, FUNIT, GETUNIT, MLPDATSTART, MLQDATSTART 74:          INTEGER NDUM, LUNIT, FUNIT, GETUNIT, MLPDATSTART
 75:          INTEGER ITEM, NITEMS, LOC, LINE, NCR, NERROR, IR, LAST, NTYPEA, J1, J2, J3, J, I 75:          INTEGER ITEM, NITEMS, LOC, LINE, NCR, NERROR, IR, LAST, NTYPEA, J1, J2, J3, J, I
 76:          COMMON /BUFINF/ ITEM, NITEMS, LOC(132), LINE, SKIPBL, CLEAR, NCR, 76:          COMMON /BUFINF/ ITEM, NITEMS, LOC(132), LINE, SKIPBL, CLEAR, NCR,
 77:      &   NERROR, IR, ECHO, LAST, CAT 77:      &   NERROR, IR, ECHO, LAST, CAT
 78:          ! DOUBLE PRECISION ::AAA,AAB,ABB,PAA,PAB,PBB,QAA,QAB,QBB,ZAA,ZAB 78:          ! DOUBLE PRECISION ::AAA,AAB,ABB,PAA,PAB,PBB,QAA,QAB,QBB,ZAA,ZAB
 79:          ! DOUBLE PRECISION :: ZBB,R0AA,R0AB,R0BB 79:          ! DOUBLE PRECISION :: ZBB,R0AA,R0AB,R0BB
 80:          DOUBLE PRECISION :: XX, EPSAB, EPSBB, SIGAB, SIGBB, RANDOM, DPRAND 80:          DOUBLE PRECISION :: XX, EPSAB, EPSBB, SIGAB, SIGBB, RANDOM, DPRAND
 81:          LOGICAL END, SKIPBL, CLEAR, ECHO, CAT, CISTRANS, RBSYMTEST, YESNO 81:          LOGICAL END, SKIPBL, CLEAR, ECHO, CAT, CISTRANS, RBSYMTEST, YESNO
 82:          CHARACTER WORD*25, WW*20, PBC*3 82:          CHARACTER WORD*25, WW*20, PBC*3
 83:          CHARACTER(LEN=80) :: FILENAME,DUMMYS 83:          CHARACTER(LEN=80) :: FILENAME,DUMMYS
 84:          CHARACTER WORD2*25 84:          CHARACTER WORD2*25
 85:          ! COMMON /BIN/ NTYPEA,AAA,AAB,ABB,PAA,PAB,PBB,QAA,QAB,QBB,ZAA,ZAB 85:          ! COMMON /BIN/ NTYPEA,AAA,AAB,ABB,PAA,PAB,PBB,QAA,QAB,QBB,ZAA,ZAB
 86:          ! COMMON /BIN/ ZBB,R0AA,R0AB,R0BB 86:          ! COMMON /BIN/ ZBB,R0AA,R0AB,R0BB
 87:          COMMON /BIN/ EPSAB, EPSBB, SIGAB, SIGBB,NTYPEA 87:          COMMON /BIN/ EPSAB, EPSBB, SIGAB, SIGBB,NTYPEA
 88:  88: 
 89:          INTEGER NATOM, DMODE 89:          INTEGER NATOM, DMODE
 90:          DOUBLE PRECISION CHX(MXATMS), CHY(MXATMS), CHZ(MXATMS), CHMASS(MXATMS) 90:          DOUBLE PRECISION CHX(MXATMS), CHY(MXATMS), CHZ(MXATMS), CHMASS(MXATMS)
 91:          DOUBLE PRECISION DPERT 91:          DOUBLE PRECISION DPERT
 92:          DOUBLE PRECISION CHPMIN, CHPMAX, CHNMIN, CHNMAX 92:          DOUBLE PRECISION CHPMIN, CHPMAX, CHNMIN, CHNMAX
 93:          DOUBLE PRECISION, ALLOCATABLE :: LCONGEOM(:,:) 93:          DOUBLE PRECISION, ALLOCATABLE :: LCONGEOM(:,:)
 94:          DOUBLE PRECISION, ALLOCATABLE :: MLPMEAN(:), MLQMEAN(:) 94:          DOUBLE PRECISION, ALLOCATABLE :: MLPMEAN(:)
 95:          INTEGER ISEED 95:          INTEGER ISEED
 96:  96: 
 97:          DOUBLE PRECISION UNRX(NATOMS), UNRY(NATOMS), UNRZ(NATOMS) ! UNRES 97:          DOUBLE PRECISION UNRX(NATOMS), UNRY(NATOMS), UNRZ(NATOMS) ! UNRES
 98:          DOUBLE PRECISION DUMMY1(NATOMS) 98:          DOUBLE PRECISION DUMMY1(NATOMS)
 99:  99: 
100:          DOUBLE PRECISION SLENGTH, EPS, DUMMY100:          DOUBLE PRECISION SLENGTH, EPS, DUMMY
101:          INTEGER NOK, NBAD101:          INTEGER NOK, NBAD
102:          COMMON /BSNEW/ SLENGTH, NOK, NBAD, EPS102:          COMMON /BSNEW/ SLENGTH, NOK, NBAD, EPS
103:          DOUBLE PRECISION GSQSCALE, GSTHRESH103:          DOUBLE PRECISION GSQSCALE, GSTHRESH
104:          INTEGER NSPECIAL, NALLOW, NINFO104:          INTEGER NSPECIAL, NALLOW, NINFO
133:          DOUBLE PRECISION LJREPBB, LJATTBB, LJREPLL, LJATTLL, LJREPNN, LJATTNN,133:          DOUBLE PRECISION LJREPBB, LJATTBB, LJREPLL, LJATTLL, LJREPNN, LJATTNN,
134:      &   HABLN, HBBLN, HCBLN, HDBLN, EABLN, EBBLN, ECBLN, EDBLN, TABLN, TBBLN, TCBLN, TDBLN134:      &   HABLN, HBBLN, HCBLN, HDBLN, EABLN, EBBLN, ECBLN, EDBLN, TABLN, TBBLN, TCBLN, TDBLN
135:          INTEGER IGBNAB     ! sf344135:          INTEGER IGBNAB     ! sf344
136:          ! LOCAL AMH VARIABLES136:          ! LOCAL AMH VARIABLES
137:          INTEGER NRES_AMH, I_RES, GLY_COUNT137:          INTEGER NRES_AMH, I_RES, GLY_COUNT
138:          ! CHARACTER(LEN=5) TARFL138:          ! CHARACTER(LEN=5) TARFL
139:          ! DOUBLE PRECISION X, Y, Z139:          ! DOUBLE PRECISION X, Y, Z
140:          INTEGER :: GROUPCENTRE140:          INTEGER :: GROUPCENTRE
141:          DOUBLE PRECISION :: GROUPRADIUS,DISTGROUPX2,DISTGROUPY2,DISTGROUPZ2,DISTGROUPCENTRE141:          DOUBLE PRECISION :: GROUPRADIUS,DISTGROUPX2,DISTGROUPY2,DISTGROUPZ2,DISTGROUPCENTRE
142:          CHARACTER (LEN=2) :: FREEZEGROUPTYPE142:          CHARACTER (LEN=2) :: FREEZEGROUPTYPE
143:          LOGICAL :: FREEZEGROUPT, TURNOFFCHECKCHIRALITY, MLPDONE, MLPNORM,  MLQDONE, MLQNORM143:          LOGICAL :: FREEZEGROUPT, TURNOFFCHECKCHIRALITY, MLPDONE, MLPNORM
144:          LOGICAL :: RES_IN_LIST144:          LOGICAL :: RES_IN_LIST
145:          DOUBLE PRECISION LPI145:          DOUBLE PRECISION LPI
146:          INTEGER DATA_UNIT146:          INTEGER DATA_UNIT
147:          CHARACTER(LEN=13) :: AAOPTION147:          CHARACTER(LEN=13) :: AAOPTION
148:          CHARACTER(LEN=20) :: AMBERSTR148:          CHARACTER(LEN=20) :: AMBERSTR
149: 149: 
150:          INTEGER :: MAXNSETS150:          INTEGER :: MAXNSETS
151: 151: 
152:          LPI=3.14159265358979323846264338327950288419716939937510D0152:          LPI=3.14159265358979323846264338327950288419716939937510D0
153:          AAA=0153:          AAA=0
943: !943: !
944:          MLP3T=.FALSE.944:          MLP3T=.FALSE.
945:          MLPB3T=.FALSE.945:          MLPB3T=.FALSE.
946:          MLPB3NEWT=.FALSE.946:          MLPB3NEWT=.FALSE.
947:          MLPNEWREG=.FALSE.947:          MLPNEWREG=.FALSE.
948:          MLPPROB=.FALSE.948:          MLPPROB=.FALSE.
949:          MLPDONE=.FALSE.949:          MLPDONE=.FALSE.
950:          MLPNORM=.FALSE.950:          MLPNORM=.FALSE.
951:          MLPLAMBDA=0.0D0951:          MLPLAMBDA=0.0D0
952:          MLPDATSTART=1952:          MLPDATSTART=1
953: ! 
954: ! ML quadratic function 
955: ! 
956:          MLQT=.FALSE. 
957:          MLQPROB=.FALSE. 
958:          MLQDONE=.FALSE. 
959:          MLQNORM=.FALSE. 
960:          MLQLAMBDA=0.0D0 
961:          MLQDATSTART=1 
962: 953: 
963:          MAXGAPT=.FALSE.954:          MAXGAPT=.FALSE.
964: 955: 
965:          MALONALDEHYDE=.FALSE.956:          MALONALDEHYDE=.FALSE.
966: 957: 
967:          CLSTRINGT=.FALSE.958:          CLSTRINGT=.FALSE.
968:          CLSTRINGTST=.FALSE.959:          CLSTRINGTST=.FALSE.
969:          IF (FILTH2.EQ.0) THEN960:          IF (FILTH2.EQ.0) THEN
970:             OPEN (5,FILE='odata',STATUS='OLD')961:             OPEN (5,FILE='odata',STATUS='OLD')
971:          ELSE962:          ELSE
3869:             CALL READF(MINBACKTCUT)3860:             CALL READF(MINBACKTCUT)
3870: !3861: !
3871: ! Three layer neural network (multilayer perceptron) with3862: ! Three layer neural network (multilayer perceptron) with
3872: ! MLPIN inputs (columns per data item)3863: ! MLPIN inputs (columns per data item)
3873: ! MLPOUT outputs3864: ! MLPOUT outputs
3874: ! MLPHIDDEN hidden nodes3865: ! MLPHIDDEN hidden nodes
3875: ! MLPDATA data lines in MLPdata file (last column MLPIN+1 for correct outputs, numbered one to MLPOUT)3866: ! MLPDATA data lines in MLPdata file (last column MLPIN+1 for correct outputs, numbered one to MLPOUT)
3876: ! MLPLAMBDA coefficient for regularisation3867: ! MLPLAMBDA coefficient for regularisation
3877: ! MLPDATSHIFT - starting data item to allow reading from multiple positions3868: ! MLPDATSHIFT - starting data item to allow reading from multiple positions
3878: !3869: !
3879:          ELSE IF ((WORD.EQ.'MLP3').OR.(WORD.EQ.'MLPB3')) THEN3870:       ELSE IF ((WORD.EQ.'MLP3').OR.(WORD.EQ.'MLPB3')) THEN
3880:             MLP3T=.TRUE.3871:          MLP3T=.TRUE.
3881:             IF (WORD.EQ.'MLPB3') MLPB3T=.TRUE.3872:          IF (WORD.EQ.'MLPB3') MLPB3T=.TRUE.
3882:             CALL READI(MLPIN)3873:          CALL READI(MLPIN)
3883:             CALL READI(MLPHIDDEN)3874:          CALL READI(MLPHIDDEN)
3884:             CALL READI(MLPOUT)3875:          CALL READI(MLPOUT)
3885:             CALL READI(MLPDATA)3876:          CALL READI(MLPDATA)
3886:             IF (NITEMS.GT.5) CALL READF(MLPLAMBDA)3877:          IF (NITEMS.GT.5) CALL READF(MLPLAMBDA)
3887:             IF (NITEMS.GT.6) CALL READI(MLPDATSTART)3878:          IF (NITEMS.GT.6) CALL READI(MLPDATSTART)
3888:             IF (WORD.EQ.'MLPB3') THEN3879:          IF (WORD.EQ.'MLPB3') THEN
3889:                WRITE(*,'(A,5I8,G20.10)') 'MLPB3 potential with bias node and Nin, Nhidden, Nout, Ndata, startdata, lambda=',3880:             WRITE(*,'(A,5I8,G20.10)') 'MLPB3 potential with bias node and Nin, Nhidden, Nout, Ndata, startdata, lambda=',
3890:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPDATSTART,MLPLAMBDA3881:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPDATSTART,MLPLAMBDA
3891:                NMLP=MLPHIDDEN*(MLPIN+MLPOUT)+13882:             NMLP=MLPHIDDEN*(MLPIN+MLPOUT)+1
3892:             ELSE3883:          ELSE
3893:                WRITE(*,'(A,5I8,G20.10)') 'MLP3 potential with Nin, Nhidden, Nout, Ndata, startdata, lambda=',3884:             WRITE(*,'(A,5I8,G20.10)') 'MLP3 potential with Nin, Nhidden, Nout, Ndata, startdata, lambda=',
3894:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPDATSTART,MLPLAMBDA3885:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPDATSTART,MLPLAMBDA
3895:                NMLP=MLPHIDDEN*(MLPIN+MLPOUT)3886:             NMLP=MLPHIDDEN*(MLPIN+MLPOUT)
3896:             ENDIF3887:          ENDIF
3897:             IF (NMLP.NE.NATOMS) THEN3888:          IF (NMLP.NE.NATOMS) THEN
3898:                PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP3889:             PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP
3899:                STOP3890:             STOP
 3891:          ENDIF
 3892:          LUNIT=GETUNIT()
 3893:          OPEN(LUNIT,FILE='MLPdata',STATUS='OLD')
 3894:          ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA),MLPMEAN(MLPIN))
 3895:          MLPMEAN(1:MLPIN)=0.0D0
 3896:          DO J1=1,MLPDATA+MLPDATSTART-1
 3897:             IF (J1.GE.MLPDATSTART) THEN
 3898:                J2=J1-MLPDATSTART+1
 3899:                READ(LUNIT,*) MLPDAT(J2,1:MLPIN),MLPOUTCOME(J2)
 3900:                MLPOUTCOME(J2)=MLPOUTCOME(J2)+1 ! to shift the range from 1 instead of zero
 3901: !              WRITE(*,'(9G15.5,I8)') MLPDAT(J2,1:MLPIN),MLPOUTCOME(J2)
 3902:                DO J3=1,MLPIN
 3903:                   MLPMEAN(J3)=MLPMEAN(J3)+ABS(MLPDAT(J2,J3))
 3904:                ENDDO
 3905:             ELSE
 3906:                READ(LUNIT,*) DUMMY
3900:             ENDIF3907:             ENDIF
 3908:          ENDDO
 3909:          CLOSE(LUNIT)
 3910:          IF (MLPNORM) THEN
 3911:             MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA
 3912:             WRITE(*,'(A)') 'keyword> Rescaling inputs by mean absolute values:'
 3913:             WRITE(*,'(6G20.10)') MLPMEAN(1:MLPIN)
 3914:             DO J1=1,MLPIN
 3915:                MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1)
 3916:             ENDDO
 3917:          ENDIF
 3918:          DEALLOCATE(MLPMEAN)
 3919:          MLPDONE=.TRUE.
 3920:       ELSE IF (WORD.EQ.'MLPB3NEW') THEN
 3921:          MLP3T=.TRUE.
 3922:          MLPB3T=.TRUE.
 3923:          MLPB3NEWT=.TRUE.
 3924:          CALL READI(MLPIN)      ! number of inputs (data items after outcome)
 3925:          CALL READI(MLPSTART) ! starting position in data list, not counting outcome
 3926:          CALL READI(MLPHIDDEN)
 3927:          CALL READI(MLPOUT)
 3928:          CALL READI(MLPDATA)
 3929:          IF (NITEMS.GT.5) CALL READF(MLPLAMBDA)
 3930:          WRITE(*,'(A,5I8,G20.10)') ' keywords> MLP3 new potential bias nodes and Nin, Ninstart, Nhidden, Nout, Ndata, lambda=',
 3931:      &                                MLPIN,MLPSTART,MLPHIDDEN,MLPOUT,MLPDATA,MLPLAMBDA
 3932:          NMLP=MLPHIDDEN*(MLPIN+MLPOUT)+1
 3933:          IF (NMLP.NE.NATOMS) THEN
 3934:             PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP
 3935:             STOP
 3936:          ENDIF
 3937: 
 3938:          LUNIT=GETUNIT()
 3939:          OPEN(LUNIT,FILE='MLPdata',STATUS='OLD')
 3940:          ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA),MLPMEAN(MLPIN))
 3941:          MLPMEAN(1:MLPIN)=0.0D0
 3942:          DO J1=1,MLPDATA
 3943:             READ(LUNIT,*) MLPOUTCOME(J1),(DUMMY,J2=1,MLPSTART-1),MLPDAT(J1,1:MLPIN)
 3944:             MLPOUTCOME(J1)=MLPOUTCOME(J1)+1 ! to shift the range to 1 to 4
 3945:             IF (DEBUG) WRITE(*,'(9G20.10,I8)') MLPOUTCOME(J1),MLPDAT(J1,1:MLPIN)
 3946:             DO J2=1,MLPIN
 3947:                MLPMEAN(J2)=MLPMEAN(J2)+ABS(MLPDAT(J1,J2))
 3948:             ENDDO
 3949:          ENDDO
 3950:          CLOSE(LUNIT)
 3951:          IF (MLPNORM) THEN
 3952:             MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA
 3953:             WRITE(*,'(A)') 'keyword> Rescaling inputs by mean absolute values:'
 3954:             WRITE(*,'(6G20.10)') MLPMEAN(1:MLPIN)
 3955:             DO J1=1,MLPIN
 3956:                MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1)
 3957:             ENDDO
 3958:          ENDIF
 3959:          DEALLOCATE(MLPMEAN)
 3960:          MLPDONE=.TRUE.
 3961:       ELSE IF (WORD.EQ.'MLPNEWREG') THEN
 3962:          MLPNEWREG=.TRUE.
 3963:       ELSE IF (WORD.EQ.'MLPPROB') THEN
 3964:          MLPPROB=.TRUE.
 3965: ! 
 3966: ! MLPNORM directs OPTIM to rescale the input data columns by dividing each one by the
 3967: ! average of the mean magnitude
 3968: ! 
 3969:       ELSE IF (WORD.EQ.'MLPNORM') THEN
 3970:          MLPNORM=.TRUE.
 3971:          IF (MLPDONE) THEN
3901:             LUNIT=GETUNIT()3972:             LUNIT=GETUNIT()
3902:             OPEN(LUNIT,FILE='MLPdata',STATUS='OLD')3973:             OPEN(LUNIT,FILE='MLPdata',STATUS='OLD')
3903:             ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA),MLPMEAN(MLPIN))3974:             ALLOCATE(MLPMEAN(MLPIN))
3904:             MLPMEAN(1:MLPIN)=0.0D03975:             MLPMEAN(1:MLPIN)=0.0D0
3905:             DO J1=1,MLPDATA+MLPDATSTART-13976:             DO J1=1,MLPDATA+MLPDATSTART-1
3906:                IF (J1.GE.MLPDATSTART) THEN3977:                IF (J1.GE.MLPDATSTART) THEN
3907:                   J2=J1-MLPDATSTART+13978:                   J2=J1-MLPDATSTART+1
3908:                   READ(LUNIT,*) MLPDAT(J2,1:MLPIN),MLPOUTCOME(J2)3979:                   READ(LUNIT,*) MLPDAT(J2,1:MLPIN),MLPOUTCOME(J2)
3909:                   MLPOUTCOME(J2)=MLPOUTCOME(J2)+1 ! to shift the range from 1 instead of zero3980:                   MLPOUTCOME(J2)=MLPOUTCOME(J2)+1 ! to shift the range to 1 to 4
 3981: !                 WRITE(*,'(9G15.5,I8)') MLPDAT(J2,1:MLPIN),MLPOUTCOME(J2)
3910:                   DO J3=1,MLPIN3982:                   DO J3=1,MLPIN
3911:                      MLPMEAN(J3)=MLPMEAN(J3)+ABS(MLPDAT(J2,J3))3983:                      MLPMEAN(J3)=MLPMEAN(J3)+ABS(MLPDAT(J2,J3))
3912:                   ENDDO3984:                   ENDDO
3913:                ELSE3985:                ELSE
3914:                   READ(LUNIT,*) DUMMY3986:                   READ(LUNIT,*) DUMMY
3915:                ENDIF3987:                ENDIF
3916:             ENDDO3988:             ENDDO
 3989: 
3917:             CLOSE(LUNIT)3990:             CLOSE(LUNIT)
3918:             IF (MLPNORM) THEN3991:             MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA
3919:                MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA3992:             PRINT '(A)','keyword> Rescaling inputs by mean absolute values:'
3920:                WRITE(*,'(A)') 'keyword> Rescaling inputs by mean absolute values:'3993:             PRINT '(6G20.10)',MLPMEAN(1:MLPIN)
3921:                WRITE(*,'(6G20.10)') MLPMEAN(1:MLPIN)3994:             DO J1=1,MLPIN
3922:                DO J1=1,MLPIN3995:                MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1)
3923:                   MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1) 
3924:                ENDDO 
3925:             ENDIF 
3926:             DEALLOCATE(MLPMEAN) 
3927:             MLPDONE=.TRUE. 
3928:          ELSE IF (WORD.EQ.'MLPB3NEW') THEN 
3929:             MLP3T=.TRUE. 
3930:             MLPB3T=.TRUE. 
3931:             MLPB3NEWT=.TRUE. 
3932:             CALL READI(MLPIN)      ! number of inputs (data items after outcome) 
3933:             CALL READI(MLPSTART) ! starting position in data list, not counting outcome 
3934:             CALL READI(MLPHIDDEN) 
3935:             CALL READI(MLPOUT) 
3936:             CALL READI(MLPDATA) 
3937:             IF (NITEMS.GT.5) CALL READF(MLPLAMBDA) 
3938:             WRITE(*,'(A,5I8,G20.10)') ' keywords> MLP3 new potential bias nodes and Nin, Ninstart, Nhidden, Nout, Ndata, lambda=', 
3939:      &                                MLPIN,MLPSTART,MLPHIDDEN,MLPOUT,MLPDATA,MLPLAMBDA 
3940:             NMLP=MLPHIDDEN*(MLPIN+MLPOUT)+1 
3941:             IF (NMLP.NE.NATOMS) THEN 
3942:                PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP 
3943:                STOP 
3944:             ENDIF 
3945:     
3946:             LUNIT=GETUNIT() 
3947:             OPEN(LUNIT,FILE='MLPdata',STATUS='OLD') 
3948:             ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA),MLPMEAN(MLPIN)) 
3949:             MLPMEAN(1:MLPIN)=0.0D0 
3950:             DO J1=1,MLPDATA 
3951:                READ(LUNIT,*) MLPOUTCOME(J1),(DUMMY,J2=1,MLPSTART-1),MLPDAT(J1,1:MLPIN) 
3952:                MLPOUTCOME(J1)=MLPOUTCOME(J1)+1 ! to shift the range from 0 to from 1 
3953:                DO J2=1,MLPIN 
3954:                   MLPMEAN(J2)=MLPMEAN(J2)+ABS(MLPDAT(J1,J2)) 
3955:                ENDDO 
3956:             ENDDO3996:             ENDDO
3957:             CLOSE(LUNIT) 
3958:             IF (MLPNORM) THEN 
3959:                MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA 
3960:                WRITE(*,'(A)') 'keyword> Rescaling inputs by mean absolute values:' 
3961:                WRITE(*,'(6G20.10)') MLPMEAN(1:MLPIN) 
3962:                DO J1=1,MLPIN 
3963:                   MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1) 
3964:                ENDDO 
3965:             ENDIF 
3966:             DEALLOCATE(MLPMEAN)3997:             DEALLOCATE(MLPMEAN)
3967:             MLPDONE=.TRUE.3998:          ENDIF
3968:          ELSE IF (WORD.EQ.'MLPNEWREG') THEN 
3969:             MLPNEWREG=.TRUE. 
3970:          ELSE IF (WORD.EQ.'MLPPROB') THEN 
3971:             MLPPROB=.TRUE. 
3972: !  
3973: ! MLPNORM directs OPTIM to rescale the input data columns by dividing each one by the 
3974: ! average of the mean magnitude 
3975: !  
3976:          ELSE IF (WORD.EQ.'MLPNORM') THEN 
3977:             MLPNORM=.TRUE. 
3978:             IF (MLPDONE) THEN 
3979:                LUNIT=GETUNIT() 
3980:                OPEN(LUNIT,FILE='MLPdata',STATUS='OLD') 
3981:                ALLOCATE(MLPMEAN(MLPIN)) 
3982:                MLPMEAN(1:MLPIN)=0.0D0 
3983:                DO J1=1,MLPDATA+MLPDATSTART-1 
3984:                   IF (J1.GE.MLPDATSTART) THEN 
3985:                      J2=J1-MLPDATSTART+1 
3986:                      READ(LUNIT,*) MLPDAT(J2,1:MLPIN),MLPOUTCOME(J2) 
3987:                      MLPOUTCOME(J2)=MLPOUTCOME(J2)+1 ! to shift the range to 1 to 4 
3988:                      DO J3=1,MLPIN 
3989:                         MLPMEAN(J3)=MLPMEAN(J3)+ABS(MLPDAT(J2,J3)) 
3990:                      ENDDO 
3991:                   ELSE 
3992:                      READ(LUNIT,*) DUMMY 
3993:                   ENDIF 
3994:                ENDDO 
3995:  
3996:                CLOSE(LUNIT) 
3997:                MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA 
3998:                PRINT '(A)','keyword> Rescaling inputs by mean absolute values:' 
3999:                PRINT '(6G20.10)',MLPMEAN(1:MLPIN) 
4000:                DO J1=1,MLPIN 
4001:                   MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1) 
4002:                ENDDO 
4003:                DEALLOCATE(MLPMEAN) 
4004:             ENDIF 
4005:          ELSE IF (WORD.EQ.'MLQ') THEN 
4006:             MLQT=.TRUE. 
4007:             CALL READI(MLQIN)      ! number of inputs (data items after outcome) 
4008:             CALL READI(MLQSTART) ! starting position in data list, not counting outcome 
4009:             CALL READI(MLQOUT) 
4010:             CALL READI(MLQDATA) 
4011:             IF (NITEMS.GT.5) CALL READF(MLQLAMBDA) 
4012:             WRITE(*,'(A,4I8,G20.10)') ' keywords> MLQ Nin, Ninstart, Nout, Ndata, lambda=', 
4013:      &                                MLQIN,MLQSTART,MLQOUT,MLQDATA,MLQLAMBDA 
4014:             NMLQ=MLQOUT*(1+(MLQIN*(MLQIN+3))/2) 
4015:             WRITE(*,'(A,5I8,G20.10)') ' keywords> MLQ variables=',NMLQ 
4016:             IF (NMLQ.NE.NATOMS) THEN 
4017:                PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLQ=',NATOMS,NMLQ 
4018:                STOP 
4019:             ENDIF 
4020:  
4021:             LUNIT=GETUNIT() 
4022:             OPEN(LUNIT,FILE='MLQdata',STATUS='OLD') 
4023:             ALLOCATE(MLQDAT(MLQDATA,MLQIN),MLQOUTCOME(MLQDATA),MLQMEAN(MLQIN)) 
4024:             MLQMEAN(1:MLQIN)=0.0D0 
4025:             DO J1=1,MLQDATA 
4026:                READ(LUNIT,*) MLQOUTCOME(J1),(DUMMY,J2=1,MLQSTART-1),MLQDAT(J1,1:MLQIN) 
4027:                MLQOUTCOME(J1)=MLQOUTCOME(J1)+1 ! to shift the range from 0 to from 1 
4028:                DO J2=1,MLQIN 
4029:                   MLQMEAN(J2)=MLQMEAN(J2)+ABS(MLQDAT(J1,J2)) 
4030:                ENDDO 
4031:             ENDDO 
4032:             CLOSE(LUNIT) 
4033:             IF (MLQNORM) THEN 
4034:                MLQMEAN(1:MLQIN)=MLQMEAN(1:MLQIN)/MLQDATA 
4035:                WRITE(*,'(A)') 'keyword> Rescaling inputs by mean absolute values:' 
4036:                WRITE(*,'(6G20.10)') MLQMEAN(1:MLQIN) 
4037:                DO J1=1,MLQIN 
4038:                   MLQDAT(1:MLQDATA,J1)=MLQDAT(1:MLQDATA,J1)/MLQMEAN(J1) 
4039:                ENDDO 
4040:             ENDIF 
4041:             DEALLOCATE(MLQMEAN) 
4042:             MLQDONE=.TRUE. 
4043:          ELSE IF (WORD.EQ.'MLQPROB') THEN 
4044:             MLQPROB=.TRUE. 
4045: !  
4046: ! MLQNORM directs OPTIM to rescale the input data columns by dividing each one by the 
4047: ! average of the mean magnitude 
4048: !  
4049:          ELSE IF (WORD.EQ.'MLQNORM') THEN 
4050:             MLQNORM=.TRUE. 
4051:             IF (MLQDONE) THEN 
4052:                LUNIT=GETUNIT() 
4053:                OPEN(LUNIT,FILE='MLQdata',STATUS='OLD') 
4054:                ALLOCATE(MLQMEAN(MLQIN)) 
4055:                MLPMEAN(1:MLQIN)=0.0D0 
4056:                DO J1=1,MLQDATA+MLQDATSTART-1 
4057:                   IF (J1.GE.MLQDATSTART) THEN 
4058:                      J2=J1-MLQDATSTART+1 
4059:                      READ(LUNIT,*) MLQDAT(J2,1:MLQIN),MLQOUTCOME(J2) 
4060:                      MLQOUTCOME(J2)=MLQOUTCOME(J2)+1 ! to shift the range to 1 to 4 
4061:                      DO J3=1,MLPIN 
4062:                         MLQMEAN(J3)=MLQMEAN(J3)+ABS(MLQDAT(J2,J3)) 
4063:                      ENDDO 
4064:                   ELSE 
4065:                      READ(LUNIT,*) DUMMY 
4066:                   ENDIF 
4067:                ENDDO 
4068:     
4069:                CLOSE(LUNIT) 
4070:                MLPMEAN(1:MLQIN)=MLQMEAN(1:MLQIN)/MLQDATA 
4071:                PRINT '(A)','keyword> Rescaling inputs by mean absolute values:' 
4072:                PRINT '(6G20.10)',MLQMEAN(1:MLQIN) 
4073:                DO J1=1,MLPIN 
4074:                   MLQDAT(1:MLQDATA,J1)=MLQDAT(1:MLQDATA,J1)/MLQMEAN(J1) 
4075:                ENDDO 
4076:                DEALLOCATE(MLQMEAN) 
4077:             ENDIF 
4078: ! 3999: ! 
4079: ! MODE n  specifies the eigenvector to follow                  - default n=04000: ! MODE n  specifies the eigenvector to follow                  - default n=0
4080: ! 4001: ! 
4081: 4002: 
4082:          ELSE IF (WORD.EQ.'MODE') THEN4003:          ELSE IF (WORD.EQ.'MODE') THEN
4083:             CALL READI(IVEC)4004:             CALL READI(IVEC)
4084:             IF (NITEMS.GT.2) THEN4005:             IF (NITEMS.GT.2) THEN
4085:                CALL READI(IVEC2)4006:                CALL READI(IVEC2)
4086:             ELSE4007:             ELSE
4087:                ! IVEC2=IVEC4008:                ! IVEC2=IVEC
4165:      &      // TRIM(ADJUSTL(MULTISTART))4086:      &      // TRIM(ADJUSTL(MULTISTART))
4166:             MULTIFUNIT=-14087:             MULTIFUNIT=-1
4167:             IF (NITEMS.GT.2) THEN4088:             IF (NITEMS.GT.2) THEN
4168:                CALL READA(MULTIFINISH)4089:                CALL READA(MULTIFINISH)
4169:                MULTIFUNIT=GETUNIT()4090:                MULTIFUNIT=GETUNIT()
4170:                OPEN(MULTIFUNIT,FILE=TRIM(ADJUSTL(MULTIFINISH)),STATUS='OLD')4091:                OPEN(MULTIFUNIT,FILE=TRIM(ADJUSTL(MULTIFINISH)),STATUS='OLD')
4171:                PRINT '(A)',' keywords>                            reading additional finish coordinates from file '4092:                PRINT '(A)',' keywords>                            reading additional finish coordinates from file '
4172:      &         // TRIM(ADJUSTL(MULTIFINISH))4093:      &         // TRIM(ADJUSTL(MULTIFINISH))
4173:             ENDIF4094:             ENDIF
4174: 4095: 
4175:          ELSE IF (WORD .EQ. 'MULTIPOT') THEN ! Activate the multiple-potential scheme4096:              ELSE IF (WORD .EQ. 'MULTIPOT') THEN ! Activate the multiple-potential scheme
4176:             4097:             
4177:             MULTIPOTT = .TRUE.4098:             MULTIPOTT = .TRUE.
4178:             CALL MULTIPOT_INITIALISE4099:             CALL MULTIPOT_INITIALISE
4179: 4100: 
4180:          ELSE IF (WORD .EQ. 'MULTISITEPY') THEN4101:          ELSE IF (WORD .EQ. 'MULTISITEPY') THEN
4181: ! Syntax: MULTISITEPY sig_0 eps_0 [cut] [XYZ boxx boxy boxz]4102: ! Syntax: MULTISITEPY sig_0 eps_0 [cut] [XYZ boxx boxy boxz]
4182: ! Notes: The cutoff length is the raw length. It is not scaled4103: ! Notes: The cutoff length is the raw length. It is not scaled
4183: ! by the PY sigma_0 since it is also used for the LJ potential.4104: ! by the PY sigma_0 since it is also used for the LJ potential.
4184: ! The box length is in units of cutoff distance, so it should be4105: ! The box length is in units of cutoff distance, so it should be
4185: ! >= 2.4106: ! >= 2.


r31320/MLQ.f90 2016-10-15 14:30:17.781156507 +0100 r31319/MLQ.f90 2016-10-15 14:30:19.597180839 +0100
  1: SUBROUTINE MLQ(X,V,ENERGY,GTEST,SECT)  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/OPTIM/source/MLQ.f90' in revision 31319
  2: USE KEY 
  3: USE MODHESS 
  4: USE COMMONS, ONLY : DEBUG 
  5: IMPLICIT NONE 
  6: LOGICAL GTEST,SECT 
  7: DOUBLE PRECISION X(NMLQ), V(NMLQ), ENERGY, DUMMY1, DUMMY2, DUMMY3, AREA 
  8: DOUBLE PRECISION Y(MLQOUT), PROB(MLQOUT), DMAX, PMLQOUTJ1 
  9: DOUBLE PRECISION DYDW(NMLQ,MLQOUT), DPDW(NMLQ,MLQOUT), PSUM(NMLQ), PSAVE(MLQDATA,MLQOUT) 
 10: INTEGER MLQOUTJ1, MLQOFFSET, NDUMMY 
 11: INTEGER GETUNIT, LUNIT, J1, J2, J3, J4 
 12: CHARACTER(LEN=132) FNAME 
 13:  
 14: ! 
 15: ! Variables are ordered  
 16: ! w^0 at 1 
 17: ! w^1_j at j+1 
 18: ! w^2_jk with k >= j at 1+NMLQIN+(j*(2*NMLQIN-j+1))/2+1-j+k = 1+k+(j*(2*NMLQIN-j+1))/2 
 19: ! for input 1, then 2 offset by NMLQOUT*(1+(NMLQIN*(NMLQIN+3))/2), then 3, ... 
 20: ! 
 21:  
 22: IF (MLQPROB) THEN 
 23: !    LUNIT=GETUNIT() 
 24: !    IF (FILTH.EQ.0) THEN 
 25: !       FNAME='probabilities' 
 26: !    ELSE 
 27: !       WRITE(FNAME,'(A)') 'probabilities.'//TRIM(ADJUSTL(FILTHSTR)) 
 28: !    ENDIF 
 29: !    OPEN(LUNIT,FILE=TRIM(ADJUSTL(FNAME)),STATUS='UNKNOWN') 
 30: !    PRINT '(A)',' MLQ> writing probabilities' 
 31: ENDIF 
 32: MLQOFFSET=1+(MLQIN*(MLQIN+3))/2 
 33: ENERGY=0.0D0 
 34: V(1:NMLQ)=0.0D0 
 35: IF (SECT) HESS(1:NMLQ,1:NMLQ)=0.0D0 
 36: ! 
 37: ! J1 is data item from 1 to MLQDATA 
 38: ! MLQOUTJ1=MLQOUTCOME(J1) is the outcome for data entry J1 
 39: ! 
 40: DO J1=1,MLQDATA 
 41:    DYDW(1:NMLQ,1:MLQOUT)=0.0D0 
 42:    MLQOUTJ1=MLQOUTCOME(J1) 
 43: !  PRINT '(A,2I10)','J1,outcome=',J1,MLQOUTCOME(J1) 
 44:    DMAX=-1.0D100 
 45:    NDUMMY=0 
 46:    DO J4=1,MLQOUT 
 47:       DUMMY2=X(MLQOFFSET*(J4-1)+1) ! initialises the output value J4 for data point J1 
 48:       NDUMMY=NDUMMY+1 
 49:       DYDW(MLQOFFSET*(J4-1)+1,J4)=1.0D0 ! not summed over data points J1 
 50:       DO J2=1,MLQIN 
 51:          DUMMY2=DUMMY2+X(MLQOFFSET*(J4-1)+1+J2)*MLQDAT(J1,J2) 
 52:          NDUMMY=NDUMMY+1 
 53:          DYDW(MLQOFFSET*(J4-1)+1+J2,J4)=MLQDAT(J1,J2) 
 54: !        PRINT '(A,2I8)','w1 loop NDUMMY and index are ',NDUMMY,MLQOFFSET*(J4-1)+1+J2 
 55:       ENDDO 
 56:       DO J2=1,MLQIN      ! j 
 57:          DO J3=J2,MLQIN  ! k >= j 
 58:             DUMMY2=DUMMY2+MLQDAT(J1,J2)*MLQDAT(J1,J3)*X(MLQOFFSET*(J4-1)+1+J3+(J2*(2*MLQIN-J2+1))/2) 
 59:             NDUMMY=NDUMMY+1 
 60:             DYDW(MLQOFFSET*(J4-1)+1+J3+(J2*(2*MLQIN-J2+1))/2,J4)=MLQDAT(J1,J2)*MLQDAT(J1,J3) 
 61: !           PRINT '(A,2I8)','w2 loop NDUMMY and index are ',NDUMMY,MLQOFFSET*(J4-1)+1+J3+(J2*(2*MLQIN-J2+1))/2 
 62:          ENDDO 
 63:       ENDDO 
 64:       IF (DUMMY2.GT.DMAX) DMAX=DUMMY2 
 65:       Y(J4)=DUMMY2 ! output J4 for data point J1  
 66:    ENDDO   
 67: !  PRINT '(A,2I10)','NDUMMY should equal MLQOUT*MLQOFFSET=',NDUMMY,MLQOUT*MLQOFFSET 
 68: ! 
 69: ! Factor DMAX out of the exponentials to prevent overflow. 
 70: ! 
 71:    DUMMY3=0.0D0 
 72:    DO J4=1,MLQOUT 
 73:       Y(J4)=Y(J4)-DMAX 
 74:       DUMMY3=DUMMY3+EXP(Y(J4)) 
 75:    ENDDO 
 76:    DO J4=1,MLQOUT 
 77:       PROB(J4)=EXP(Y(J4))/DUMMY3 
 78:    ENDDO 
 79:    PMLQOUTJ1=PROB(MLQOUTJ1) ! this is p_c(d), the probability predicted for the known outcome for data point d 
 80:    IF (MLQPROB) THEN 
 81:       PSAVE(J1,1:MLQOUT)=PROB(1:MLQOUT) 
 82:    ENDIF 
 83:    ENERGY=ENERGY-LOG(PMLQOUTJ1) ! summing over contributions for data points, indexed by J1 
 84:  
 85:    IF (GTEST) THEN 
 86: ! 
 87: ! We only need the probability derivatives for the probability corresponding to the correct outcome for this data point 
 88: ! 
 89:       DO J3=1,NMLQ ! for each variable w 
 90:          DUMMY3=0.0D0 
 91:          DO J4=1,MLQOUT ! the only non-zero terms in this sum will correspond to variables associated with the given output 
 92:             DUMMY3=DUMMY3+PROB(J4)*DYDW(J3,J4) 
 93:          ENDDO 
 94:          PSUM(J3)=DUMMY3  
 95:          V(J3)=V(J3)-(DYDW(J3,MLQOUTJ1)-DUMMY3) 
 96:       ENDDO 
 97:  
 98:    ENDIF 
 99:  
100:    IF (SECT) THEN 
101:  
102:       IF (.NOT.GTEST) THEN ! need PSUM 
103:          DO J3=1,NMLQ ! for each variable w 
104:             DUMMY3=0.0D0 
105:             DO J4=1,MLQOUT ! the only non-zero terms in this sum will correspond to variables associated with the given output 
106:                DUMMY3=DUMMY3+PROB(J4)*DYDW(J3,J4) 
107:             ENDDO 
108:             PSUM(J3)=DUMMY3  
109:          ENDDO 
110:       ENDIF 
111:  
112:       DO J3=1,NMLQ 
113:          DO J4=1,MLQOUT  
114:             DPDW(J3,J4)=PROB(J4)*(DYDW(J3,J4)-PSUM(J3)) 
115:          ENDDO 
116:       ENDDO 
117:  
118:       DO J2=1,NMLQ  ! alpha 
119:          DO J3=J2,NMLQ  ! beta 
120:             DUMMY3=0.0D0 
121:             DO J4=1,MLQOUT 
122:                DUMMY3=DUMMY3+DPDW(J3,J4)*DYDW(J2,J4) 
123:             ENDDO 
124:             HESS(J3,J2)=HESS(J3,J2) + DUMMY3 
125: ! &                                +DPDW(J3,MLQOUTJ1)*DPDW(J2,MLQOUTJ1)/PMLQOUTJ1**2 & 
126: ! &                                -(DYDW(J3,MLQOUTJ1)-PSUM(J3))*(DYDW(J2,MLQOUTJ1)-PSUM(J2)) & 
127: ! &                                -DYDW(J3,MLQOUTJ1)*DYDW(J2,MLQOUTJ1) & 
128: ! &                                +DYDW(J3,MLQOUTJ1)*PSUM(J2)+DYDW(J2,MLQOUTJ1)*PSUM(J3)-PSUM(J3)*PSUM(J2) & 
129:          ENDDO 
130:       ENDDO 
131:  
132:    ENDIF 
133:  
134: ENDDO ! end of sum over data points, counter J1, limit MLQDATA 
135:  
136: DUMMY1=0.0D0 
137: DO J1=1,NMLQ 
138:    DUMMY1=DUMMY1+X(J1)**2 
139: ENDDO 
140:  
141: ENERGY=ENERGY/MLQDATA + MLQLAMBDA*DUMMY1 
142: ! IF (DEBUG) WRITE(*,'(A,G20.10)') 'MLQ> objective function=',ENERGY 
143:  
144: IF (MLQPROB) THEN 
145: !    CLOSE(LUNIT) 
146: !    WRITE(*,'(A)') ' MLQ> predicted probabilities written to file probabilities' 
147: !    PRINT '(A)',' MLQ> finished writing probabilities' 
148:    CALL ROC(PSAVE,AREA) 
149:    PRINT '(A,2G20.10)','energy, AUC=',ENERGY,AREA 
150: ENDIF 
151:  
152: IF (GTEST) V(1:NMLQ)=V(1:NMLQ)/MLQDATA  
153: IF (GTEST) V(1:NMLQ)=V(1:NMLQ) + 2.0D0*MLQLAMBDA*X(1:NMLQ) 
154: ! 
155: ! Symmetrise Hessian here 
156: ! 
157: IF (SECT) HESS(1:NMLQ,1:NMLQ)=HESS(1:NMLQ,1:NMLQ)/MLQDATA 
158: IF (SECT) THEN 
159:    DO J1=1,NMLQ 
160:       HESS(J1,J1)=HESS(J1,J1)+2*MLQLAMBDA 
161:    ENDDO 
162:    DO J1=1,NMLQ 
163:       DO J2=1,J1-1 
164:          HESS(J2,J1)=HESS(J1,J2) 
165:       ENDDO 
166:    ENDDO 
167: ENDIF 
168:  
169: END SUBROUTINE MLQ 
170:  
171: SUBROUTINE ROCMLQ(PSAVE,AREA) 
172: USE KEY, ONLY : MLQDATA, MLQOUTCOME, MLQOUT 
173: IMPLICIT NONE 
174: INTEGER J1, NVALS, J2 
175: DOUBLE PRECISION TPR, FPR, AREA, TPRPREV, FPRPREV, NPOS, NNEG, PTHRESH 
176: DOUBLE PRECISION PSAVE(MLQDATA,MLQOUT) 
177:  
178: NVALS=100 
179: AREA=0.0D0 
180: DO J1=0,NVALS 
181:    PTHRESH=J1/(1.0D0*NVALS) 
182:    TPRPREV=TPR 
183:    FPRPREV=FPR 
184:    TPR=0.0D0 
185:    FPR=0.0D0 
186:    NPOS=0.0D0 
187:    NNEG=0.0D0 
188:    DO J2=1,MLQDATA 
189:       IF (MLQOUTCOME(J2).LT.1.5D0) THEN    ! positive outcome: survival 
190:          NPOS=NPOS+1.0D0 
191:          IF (PSAVE(J2,1).GT.PTHRESH) THEN   ! positive classifier, correct 
192:             TPR=TPR+1.0D0 
193:          ENDIF 
194:       ELSE 
195:          NNEG=NNEG+1.0D0 
196:          IF (PSAVE(J2,1).GT.PTHRESH) THEN ! positive classifier, but wrong 
197:             FPR=FPR+1.0D0 
198:          ENDIF 
199:       ENDIF 
200:    ENDDO 
201:    TPR=TPR/MAX(NPOS,1.0D0) 
202:    FPR=FPR/MAX(NNEG,1.0D0) 
203:    PRINT '(4G20.10)',FPR,TPR,PTHRESH,AREA 
204:    IF (J1.GT.0) AREA=AREA+(TPR+TPRPREV)*ABS(FPR-FPRPREV)/2.0D0 
205: ENDDO 
206: ! PRINT '(A,I6,A,G20.10)','# finished ROC analysis for ',MLQDATA,' data values, AUC=',AREA 
207:  
208: END SUBROUTINE ROCMLQ 
209:  


r31320/odesd.f 2016-10-15 14:30:18.849170814 +0100 r31319/odesd.f 2016-10-15 14:30:20.761196418 +0100
 40:       MXSTPLOCAL=MXSTP 40:       MXSTPLOCAL=MXSTP
 41:       STRYMIN=0.0D0 41:       STRYMIN=0.0D0
 42:       NSTP=1 42:       NSTP=1
 43:       NVAR=3*NATOMS 43:       NVAR=3*NATOMS
 44:       IF ((FIXAFTER.GT.0).AND.(NSTP.GT.FIXAFTER)) FIXIMAGE=.TRUE. 44:       IF ((FIXAFTER.GT.0).AND.(NSTP.GT.FIXAFTER)) FIXIMAGE=.TRUE.
 45: 10    IF (PV.AND.(.NOT.BFGSSTEP)) THEN 45: 10    IF (PV.AND.(.NOT.BFGSSTEP)) THEN
 46:          CALL POTENTIAL(VARS,ENERGY,DYDX,.FALSE.,.FALSE.,RMS,.FALSE.,.FALSE.) 46:          CALL POTENTIAL(VARS,ENERGY,DYDX,.FALSE.,.FALSE.,RMS,.FALSE.,.FALSE.)
 47:          PVFLAG=.FALSE. 47:          PVFLAG=.FALSE.
 48:          CALL PVOPT(VARS,ENERGY,DYDX) 48:          CALL PVOPT(VARS,ENERGY,DYDX)
 49:       ENDIF 49:       ENDIF
 50: !     IF (.NOT.KNOWG) CALL POTENTIAL(VARS,ENERGY,DYDX,.TRUE.,GRADSQ,RMS,.FALSE.,.FALSE.) 50:       IF (.NOT.KNOWG) CALL POTENTIAL(VARS,ENERGY,DYDX,.TRUE.,GRADSQ,RMS,.FALSE.,.FALSE.)
 51:       CALL POTENTIAL(VARS,ENERGY,DYDX,.TRUE.,GRADSQ,RMS,.FALSE.,.FALSE.) 
 52:       PRINT '(A,G20.10)', 'EPS=',EPS 
 53:       CALL DUMPP(VARS,ENERGY) ! assumes NODUMP is always false if we are calling odesd.f 51:       CALL DUMPP(VARS,ENERGY) ! assumes NODUMP is always false if we are calling odesd.f
 54:       EREAL=ENERGY 52:       EREAL=ENERGY
 55:       REALRMS=RMS 53:       REALRMS=RMS
 56:  54: 
 57:       IF (GRADSQ) THEN 55:       IF (GRADSQ) THEN
 58:          ENERGY=DDOT(3*NATOMS,DYDX,1,DYDX,1) 56:          ENERGY=DDOT(3*NATOMS,DYDX,1,DYDX,1)
 59: C        ENERGY=SQRT(DDOT(3*NATOMS,DYDX,1,DYDX,1)) 57: C        ENERGY=SQRT(DDOT(3*NATOMS,DYDX,1,DYDX,1))
 60:          CALL DSYMV('U',3*NATOMS,2.0D0,HESS,SIZE(HESS,1),DYDX,1,0.0D0,VEC2,1) 58:          CALL DSYMV('U',3*NATOMS,2.0D0,HESS,SIZE(HESS,1),DYDX,1,0.0D0,VEC2,1)
 61:          RMS= DSQRT(DDOT(3*NATOMS,VEC2,1,VEC2,1)/(3*NATOMS)) 59:          RMS= DSQRT(DDOT(3*NATOMS,VEC2,1,VEC2,1)/(3*NATOMS))
 62:          IF (RMS.LT.GSTHRESH) THEN 60:          IF (RMS.LT.GSTHRESH) THEN
111:       DUMMY=RMS*SQRT(1.0D0*NVAR)109:       DUMMY=RMS*SQRT(1.0D0*NVAR)
112:       DO I=1,NVAR110:       DO I=1,NVAR
113:          DYDX(I)=-DYDX(I)/DUMMY111:          DYDX(I)=-DYDX(I)/DUMMY
114:          YSCAL(I)=ABS(VARS(I))+ABS(MXSTPLOCAL*DYDX(I))+TINY112:          YSCAL(I)=ABS(VARS(I))+ABS(MXSTPLOCAL*DYDX(I))+TINY
115: C        DYDX(I)=-DYDX(I)113: C        DYDX(I)=-DYDX(I)
116:       ENDDO114:       ENDDO
117: 115: 
118:       IF (BSMIN) CALL BSSTEP(VARS,DYDX,NVAR,SLENGTH,MXSTPLOCAL,EPS,YSCAL,STRYDID,STRYNEXT,ENERGY,RMS,EREAL,REALRMS,PTEST)116:       IF (BSMIN) CALL BSSTEP(VARS,DYDX,NVAR,SLENGTH,MXSTPLOCAL,EPS,YSCAL,STRYDID,STRYNEXT,ENERGY,RMS,EREAL,REALRMS,PTEST)
119:       IF (RKMIN) CALL RKQS(VARS,DYDX,NVAR,SLENGTH,MXSTPLOCAL,EPS,YSCAL,STRYDID,STRYNEXT,ENERGY,RMS,EREAL,REALRMS,PTEST)117:       IF (RKMIN) CALL RKQS(VARS,DYDX,NVAR,SLENGTH,MXSTPLOCAL,EPS,YSCAL,STRYDID,STRYNEXT,ENERGY,RMS,EREAL,REALRMS,PTEST)
120: 118: 
121:       WRITE(*,'(A,F20.10,A,F20.10)') 'Step length=',STRYDID,' next estimated step size=',STRYNEXT119: C     WRITE(*,'(A,F20.10,A,F20.10)') 'Step length=',STRYDID,' next estimated step size=',STRYNEXT
122: 120: 
123:       IF (STRYDID.GE.MXSTPLOCAL) THEN121:       IF (STRYDID.GE.MXSTPLOCAL) THEN
124:          NOK=NOK+1122:          NOK=NOK+1
125:       ELSE123:       ELSE
126:          NBAD=NBAD+1124:          NBAD=NBAD+1
127:       ENDIF125:       ENDIF
128:       PRINT*,'STRYDID,MXSTPLOCAL,NOK,NBAD=',STRYDID,MXSTPLOCAL,NOK,NBAD126: C     PRINT*,'STRYDID,MXSTPLOCAL,NOK,NBAD=',STRYDID,MXSTPLOCAL,NOK,NBAD
129:       IF (ABS(STRYNEXT).LT.STRYMIN) THEN127:       IF (ABS(STRYNEXT).LT.STRYMIN) THEN
130:          PRINT*, ' WARNING, stepsize < 0 in odesd'128:          PRINT*, ' WARNING, stepsize < 0 in odesd'
131:          OPEN(UNIT=96,FILE='disconn',STATUS='UNKNOWN')129:          OPEN(UNIT=96,FILE='disconn',STATUS='UNKNOWN')
132:          PRINT*,' intractable discontinuity - quit '130:          PRINT*,' intractable discontinuity - quit '
133:          WRITE(96,'(A)') 'intractable discontinuity'131:          WRITE(96,'(A)') 'intractable discontinuity'
134:          CLOSE(96)132:          CLOSE(96)
135:          IF (GRADSQ) THEN 133:          IF (GRADSQ) THEN 
136:             WRITE(*,'(A,4F20.10)') ' g^2, RMS force and real energy and RMS=',ENERGY,RMS,EREAL,REALRMS134:             WRITE(*,'(A,4F20.10)') ' g^2, RMS force and real energy and RMS=',ENERGY,RMS,EREAL,REALRMS
137:          ELSE135:          ELSE
138:             WRITE(*,'(A,2F20.10,A,I6,A,F15.10)') ' Energy and RMS force=',ENERGY,REALRMS136:             WRITE(*,'(A,2F20.10,A,I6,A,F15.10)') ' Energy and RMS force=',ENERGY,REALRMS
164: CU    USES derivs,mmid,pzextr162: CU    USES derivs,mmid,pzextr
165:       INTEGER I,IQ,K,KK,KM,KMAX,KOPT,NSEQ(IMAX)163:       INTEGER I,IQ,K,KK,KM,KMAX,KOPT,NSEQ(IMAX)
166:       DOUBLE PRECISION EPS1,EPSOLD,ERRMAX,FACT,H,RED,SCALE,WORK,WRKMIN164:       DOUBLE PRECISION EPS1,EPSOLD,ERRMAX,FACT,H,RED,SCALE,WORK,WRKMIN
167:      *,XEST,XNEW,ENERGY,EOLD,VNEW(NV),165:      *,XEST,XNEW,ENERGY,EOLD,VNEW(NV),
168:      *A(IMAX),ALF(KMAXX,KMAXX),ERR(KMAXX),YERR(NV),YSAV(NV),EREAL,REALRMS,166:      *A(IMAX),ALF(KMAXX,KMAXX),ERR(KMAXX),YERR(NV),YSAV(NV),EREAL,REALRMS,
169:      *YSEQ(NV)167:      *YSEQ(NV)
170:       LOGICAL FIRST,REDUCT,PTEST168:       LOGICAL FIRST,REDUCT,PTEST
171:       SAVE A,ALF,EPSOLD,FIRST,KMAX,KOPT,NSEQ,XNEW169:       SAVE A,ALF,EPSOLD,FIRST,KMAX,KOPT,NSEQ,XNEW
172:       INTEGER IMAXSAVE170:       INTEGER IMAXSAVE
173:       PARAMETER (IMAXSAVE=13)171:       PARAMETER (IMAXSAVE=13)
174:       DOUBLE PRECISION DSAVE(NV,IMAXSAVE),FXSAVE(IMAXSAVE),XSAVE(IMAXSAVE),QCOLSAVE(NV,IMAXSAVE), EPSSAVE172:       DOUBLE PRECISION DSAVE(NV,IMAXSAVE),FXSAVE(IMAXSAVE),XSAVE(IMAXSAVE),QCOLSAVE(NV,IMAXSAVE)
175: 173: 
176:       DATA FIRST/.TRUE./,EPSOLD/-1.D0/174:       DATA FIRST/.TRUE./,EPSOLD/-1.D0/
177:       DATA NSEQ /2,4,6,8,10,12,14,16,18/175:       DATA NSEQ /2,4,6,8,10,12,14,16,18/
178: 176: 
179: C     PRINT*,'in bsstep'177: C     PRINT*,'in bsstep'
180:       EOLD=ENERGY178:       EOLD=ENERGY
181:       EPSSAVE=EPS 
182:       IF(EPS.NE.EPSOLD)THEN179:       IF(EPS.NE.EPSOLD)THEN
183:         HNEXT=-1.D29180:         HNEXT=-1.D29
184:         XNEW=-1.D29181:         XNEW=-1.D29
185:         EPS1=SAFE1*EPS182:         EPS1=SAFE1*EPS
186:         A(1)=NSEQ(1)+1183:         A(1)=NSEQ(1)+1
187:         DO 11 K=1,KMAXX184:         DO 11 K=1,KMAXX
188:           A(K+1)=A(K)+NSEQ(K+1)185:           A(K+1)=A(K)+NSEQ(K+1)
189: 11      CONTINUE186: 11      CONTINUE
190:         DO 13 IQ=2,KMAXX187:         DO 13 IQ=2,KMAXX
191:           DO 12 K=1,IQ-1188:           DO 12 K=1,IQ-1
237: !            CALL POTENTIAL(Y,ENERGY,VNEW,GRADSQ,.FALSE.,RMS,.FALSE.,.FALSE.)234: !            CALL POTENTIAL(Y,ENERGY,VNEW,GRADSQ,.FALSE.,RMS,.FALSE.,.FALSE.)
238:              CALL POTENTIAL(Y,ENERGY,VNEW,.TRUE.,.FALSE.,RMS,.FALSE.,.FALSE.)235:              CALL POTENTIAL(Y,ENERGY,VNEW,.TRUE.,.FALSE.,RMS,.FALSE.,.FALSE.)
239:              EREAL=ENERGY236:              EREAL=ENERGY
240:              REALRMS=RMS237:              REALRMS=RMS
241:              IF (GRADSQ) THEN238:              IF (GRADSQ) THEN
242:                 ENERGY=DDOT(NV,VNEW,1,VNEW,1)239:                 ENERGY=DDOT(NV,VNEW,1,VNEW,1)
243: C               CALL DSYMV('U',NV,2.0D0,HESS,NV,VNEW,1,0.0D0,VEC2,1)240: C               CALL DSYMV('U',NV,2.0D0,HESS,NV,VNEW,1,0.0D0,VEC2,1)
244: C               RMS= DSQRT(DDOT(NV,VEC2,1,VEC2,1)/(NV))241: C               RMS= DSQRT(DDOT(NV,VEC2,1,VEC2,1)/(NV))
245: C               WRITE(*,'(A,4F20.10)') ' g^2, RMS force and real energy and RMS=',ENERGY,RMS,EREAL,REALRMS242: C               WRITE(*,'(A,4F20.10)') ' g^2, RMS force and real energy and RMS=',ENERGY,RMS,EREAL,REALRMS
246:              ENDIF243:              ENDIF
247: !            IF (ENERGY.GT.EOLD) THEN244:              IF (ENERGY.GT.EOLD) THEN
248:              IF (ENERGY-EOLD.GT.MAXERISE) THEN 
249:                 ERRMAX=2.0D0 ! reject step245:                 ERRMAX=2.0D0 ! reject step
250:                 EPS=MAX(EPS/2.0D0,1.0D-10)246:                 EPS=EPS/2.0D0
251:                 IF (PTEST) WRITE(*,'(3(A,G20.10))') ' bsstep> energy rises from ',EOLD,' to ',ENERGY,247:                 IF (PTEST) WRITE(*,'(3(A,G20.10))') ' bsstep> energy rises from ',EOLD,' to ',ENERGY,
252:      &                                               ' reduce eps to ',EPS248:      &                                               ' reduce eps to ',EPS
253:              ELSE249:              ELSE
254: !               EPS=MIN(10.0D0,EPS*1.5D0)250: C               EPS=EPS*1.1D0
255:                 DYDX(1:NV)=VNEW(1:NV) ! pass the energy and gradient back and we don;t have to call potential again251:                 DYDX(1:NV)=VNEW(1:NV) ! pass the energy and gradient back and we don;t have to call potential again
256:              ENDIF252:              ENDIF
257:           ENDIF253:           ENDIF
258:           IF (ERRMAX.LT.1.D0) GOTO 4 ! step accepted254:           IF (ERRMAX.LT.1.D0) GOTO 4 ! step accepted
259:           IF(K.EQ.KMAX.OR.K.EQ.KOPT+1)THEN255:           IF(K.EQ.KMAX.OR.K.EQ.KOPT+1)THEN
260:             RED=SAFE2/ERR(KM)256:             RED=SAFE2/ERR(KM)
261:             GOTO 3257:             GOTO 3
262:           ELSE IF(K.EQ.KOPT)THEN258:           ELSE IF(K.EQ.KOPT)THEN
263:             IF(ALF(KOPT-1,KOPT).LT.ERR(KM))THEN259:             IF(ALF(KOPT-1,KOPT).LT.ERR(KM))THEN
264:               RED=1.D0/ERR(KM)260:               RED=1.D0/ERR(KM)
294:         ENDIF290:         ENDIF
295: 18    CONTINUE291: 18    CONTINUE
296:       HNEXT=H/SCALE292:       HNEXT=H/SCALE
297:       IF(KOPT.GE.K.AND.KOPT.NE.KMAX.AND..NOT.REDUCT)THEN293:       IF(KOPT.GE.K.AND.KOPT.NE.KMAX.AND..NOT.REDUCT)THEN
298:         FACT=MAX(SCALE/ALF(KOPT-1,KOPT),SCALMX)294:         FACT=MAX(SCALE/ALF(KOPT-1,KOPT),SCALMX)
299:         IF(A(KOPT+1)*FACT.LE.WRKMIN)THEN295:         IF(A(KOPT+1)*FACT.LE.WRKMIN)THEN
300:           HNEXT=H/FACT296:           HNEXT=H/FACT
301:           KOPT=KOPT+1297:           KOPT=KOPT+1
302:         ENDIF298:         ENDIF
303:       ENDIF299:       ENDIF
304: !     EPS=EPSSAVE 
305:       RETURN300:       RETURN
306:       END301:       END
307: 302: 
308:       SUBROUTINE MMID(Y,DYDX,NVAR,XS,HTOT,NSTEP,YOUT)303:       SUBROUTINE MMID(Y,DYDX,NVAR,XS,HTOT,NSTEP,YOUT)
309:       USE KEY304:       USE KEY
310:       USE MODHESS305:       USE MODHESS
311:       IMPLICIT NONE306:       IMPLICIT NONE
312:       INTEGER NSTEP,NVAR307:       INTEGER NSTEP,NVAR
313:       DOUBLE PRECISION HTOT,XS,DYDX(NVAR),Y(NVAR),YOUT(NVAR),ENERGY308:       DOUBLE PRECISION HTOT,XS,DYDX(NVAR),Y(NVAR),YOUT(NVAR),ENERGY
314:       INTEGER I,N309:       INTEGER I,N
494:       IF (ERRMAX.LT.1.0D0) THEN489:       IF (ERRMAX.LT.1.0D0) THEN
495:          CALL POTENTIAL(YTEMP,ENERGY,VNEW,.TRUE.,.FALSE.,RMS,.FALSE.,.FALSE.)490:          CALL POTENTIAL(YTEMP,ENERGY,VNEW,.TRUE.,.FALSE.,RMS,.FALSE.,.FALSE.)
496:          EREAL=ENERGY491:          EREAL=ENERGY
497:          REALRMS=RMS492:          REALRMS=RMS
498:          IF (GRADSQ) THEN493:          IF (GRADSQ) THEN
499:             ENERGY=DDOT(N,VNEW,1,VNEW,1)494:             ENERGY=DDOT(N,VNEW,1,VNEW,1)
500: C           CALL DSYMV('U',N,2.0D0,HESS,N,VNEW,1,0.0D0,VEC2,1)495: C           CALL DSYMV('U',N,2.0D0,HESS,N,VNEW,1,0.0D0,VEC2,1)
501: C           RMS= DSQRT(DDOT(N,VEC2,1,VEC2,1)/(N))496: C           RMS= DSQRT(DDOT(N,VEC2,1,VEC2,1)/(N))
502: C           WRITE(*,'(A,4F20.10)') ' g^2, RMS force and real energy and RMS=',ENERGY,RMS,EREAL,REALRMS497: C           WRITE(*,'(A,4F20.10)') ' g^2, RMS force and real energy and RMS=',ENERGY,RMS,EREAL,REALRMS
503:          ENDIF498:          ENDIF
504: !        IF (ENERGY.GT.EOLD) THEN499:          IF (ENERGY.GT.EOLD) THEN
505:          IF (ENERGY-EOLD.GT.MAXERISE) THEN 
506:             ERRMAX=2.0D0500:             ERRMAX=2.0D0
507:             EPS=EPS/2.0D0501:             EPS=EPS/2.0D0
508:             IF (PTEST) WRITE(*,'(3(A,G20.10))') ' rkqs> energy rises from ',EOLD,' to ',ENERGY,502:             IF (PTEST) WRITE(*,'(3(A,G20.10))') ' rkqs> energy rises from ',EOLD,' to ',ENERGY,
509:      &                                               ' reduce eps to ',EPS503:      &                                               ' reduce eps to ',EPS
510:          ELSE504:          ELSE
511: C           EPS=EPS*1.1D0505: C           EPS=EPS*1.1D0
512:             DYDX(1:N)=VNEW(1:N) ! pass the energy and gradient back and we don;t have to call potential again506:             DYDX(1:N)=VNEW(1:N) ! pass the energy and gradient back and we don;t have to call potential again
513:          ENDIF507:          ENDIF
514:       ENDIF508:       ENDIF
515: 509: 


r31320/potential.f 2016-10-15 14:30:19.229175947 +0100 r31319/potential.f 2016-10-15 14:30:21.177202014 +0100
490:             IF (PTEST) THEN490:             IF (PTEST) THEN
491:                WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,' '491:                WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,' '
492:                WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,' '492:                WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,' '
493:             ENDIF493:             ENDIF
494: 494: 
495: 495: 
496:          ELSE IF (VARIABLES) THEN496:          ELSE IF (VARIABLES) THEN
497: 497: 
498:             IF (MLPB3T) THEN498:             IF (MLPB3T) THEN
499:                CALL MLPB3(COORDS, VNEW, ENERGY, GTEST, STEST)499:                CALL MLPB3(COORDS, VNEW, ENERGY, GTEST, STEST)
 500: !                DIFF=1.0D-4
 501: !                PRINT*,'analytic and numerical gradients:'
 502: !                IF (.NOT.(ALLOCATED(HESS))) ALLOCATE(HESS(NMLP,NMLP))
 503: !                CALL MLPB3(COORDS, VNEW, ENERGY, .TRUE., .TRUE.)
 504: !                PRINT '(A,I8)','SIZE(HESS)=',SIZE(HESS)
 505: !                HESSDUM(1:NMLP,1:NMLP)=HESS(1:NMLP,1:NMLP)
 506: !                DO J1=1,NATOMS
 507: !                   COORDS(J1)=COORDS(J1)+DIFF
 508: !                   CALL MLPB3(COORDS,VPLUS,EPLUS,.FALSE.,.FALSE.)
 509: !                   COORDS(J1)=COORDS(J1)-2.0D0*DIFF
 510: !                   CALL MLPB3(COORDS,VMINUS,EMINUS,.FALSE.,.FALSE.)
 511: !                   COORDS(J1)=COORDS(J1)+DIFF
 512: !                   WRITE(*,'(I5,2F20.10)') J1,VNEW(J1),(EPLUS-EMINUS)/(2.0D0*DIFF)
 513: !                ENDDO
 514: !                PRINT*,'analytic and numerical second derivatives:'
 515: !                DO J1=1,NATOMS
 516: !                   COORDS(J1)=COORDS(J1)+DIFF
 517: !                   CALL MLPB3(COORDS,VPLUS,EPLUS,.TRUE.,.FALSE.)
 518: !                   COORDS(J1)=COORDS(J1)-2.0D0*DIFF
 519: !                   CALL MLPB3(COORDS,VMINUS,EMINUS,.TRUE.,.FALSE.)
 520: !                   COORDS(J1)=COORDS(J1)+DIFF
 521: !                   DO J2=1,NATOMS
 522: !                      IF ((ABS(HESS(J1,J2)).NE.0.0D0).AND. 
 523: !     &                   (ABS(100.0D0*(HESS(J1,J2)-(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF))/HESS(J1,J2)).GT.1.0D0)) THEN
 524: !                      WRITE(*,'(2I5,2G20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF),'   X'
 525: !                      ELSE
 526: !                         WRITE(*,'(2I5,2G20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF)
 527: !                      ENDIF
 528: !                   ENDDO
 529: !                ENDDO
 530: !                STOP
500:             ELSEIF (MLP3T) THEN531:             ELSEIF (MLP3T) THEN
501:                CALL MLP3(COORDS, VNEW, ENERGY, GTEST, STEST)532:                CALL MLP3(COORDS, VNEW, ENERGY, GTEST, STEST)
502:             ELSEIF (MLQT) THEN 
503:                CALL MLQ(COORDS, VNEW, ENERGY, GTEST, STEST) 
504:                DIFF=1.0D-4 
505:                PRINT*,'analytic and numerical gradients:' 
506:                IF (.NOT.(ALLOCATED(HESS))) ALLOCATE(HESS(NMLQ,NMLQ)) 
507:                CALL MLQ(COORDS, VNEW, ENERGY, .TRUE., .TRUE.) 
508:                PRINT '(A,I8)','SIZE(HESS)=',SIZE(HESS) 
509:                HESSDUM(1:NMLQ,1:NMLQ)=HESS(1:NMLQ,1:NMLQ) 
510:                DO J1=1,NATOMS 
511:                   COORDS(J1)=COORDS(J1)+DIFF 
512:                   CALL MLQ(COORDS,VPLUS,EPLUS,.FALSE.,.FALSE.) 
513:                   COORDS(J1)=COORDS(J1)-2.0D0*DIFF 
514:                   CALL MLQ(COORDS,VMINUS,EMINUS,.FALSE.,.FALSE.) 
515:                   COORDS(J1)=COORDS(J1)+DIFF 
516:                   WRITE(*,'(A,I5,2F20.10)') 'anal and num ',J1,VNEW(J1),(EPLUS-EMINUS)/(2.0D0*DIFF) 
517:                ENDDO 
518:                PRINT*,'analytic and numerical second derivatives:' 
519:                DO J1=1,NATOMS 
520:                   COORDS(J1)=COORDS(J1)+DIFF 
521:                   CALL MLQ(COORDS,VPLUS,EPLUS,.TRUE.,.FALSE.) 
522:                   COORDS(J1)=COORDS(J1)-2.0D0*DIFF 
523:                   CALL MLQ(COORDS,VMINUS,EMINUS,.TRUE.,.FALSE.) 
524:                   COORDS(J1)=COORDS(J1)+DIFF 
525:                   DO J2=1,NATOMS 
526:                      IF ((ABS(HESS(J1,J2)).NE.0.0D0).AND.  
527:      &                   (ABS(100.0D0*(HESS(J1,J2)-(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF))/HESS(J1,J2)).GT.1.0D0)) THEN 
528:                      WRITE(*,'(2I5,2G20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF),'   X' 
529:                      ELSE 
530:                         WRITE(*,'(2I5,2G20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF) 
531:                      ENDIF 
532:                   ENDDO 
533:                ENDDO 
534:                STOP 
535:             ELSE533:             ELSE
536:                CALL FUNCTIONAL( COORDS, VNEW, ENERGY, GTEST, STEST)534:                CALL FUNCTIONAL( COORDS, VNEW, ENERGY, GTEST, STEST)
537:             ENDIF535:             ENDIF
538:             IF (PTEST.OR.MLPPROB.OR.MLQPROB) THEN536:             IF (PTEST.OR.MLPPROB) THEN
539:                 WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,'         '537:                 WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,'         '
540:                 WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,'         '538:                 WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,'         '
541:             ENDIF539:             ENDIF
542: !           IF (MLPPROB) STOP540: !           IF (MLPPROB) STOP
543:             ! CALL CTEST(NATOMS, COORDS, VNEW, ENERGY, GTEST, STEST)541:             ! CALL CTEST(NATOMS, COORDS, VNEW, ENERGY, GTEST, STEST)
544:             ! CALL TWODFUNC(COORDS,VNEW,ENERGY,GTEST,STEST)542:             ! CALL TWODFUNC(COORDS,VNEW,ENERGY,GTEST,STEST)
545:             ! CALL MB(COORDS,VNEW,ENERGY,GTEST,STEST)543:             ! CALL MB(COORDS,VNEW,ENERGY,GTEST,STEST)
546:             ! CALL P4DIFF(NATOMS,COORDS,VNEW,ENERGY,PARAM1,GTEST,STEST)544:             ! CALL P4DIFF(NATOMS,COORDS,VNEW,ENERGY,PARAM1,GTEST,STEST)
547:             ! CALL P4DIFF(NATOMS,COORDS,VNEW,ENERGY,PARAM1,PARAM2,GTEST,STEST)545:             ! CALL P4DIFF(NATOMS,COORDS,VNEW,ENERGY,PARAM1,PARAM2,GTEST,STEST)
548: !           CALL WATERMETHANE(COORDS,ENERGY)546: !           CALL WATERMETHANE(COORDS,ENERGY)


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0