hdiff output

r31705/commons.f90 2017-01-21 10:36:00.766250000 +0000 r31704/commons.f90 2017-01-21 10:36:03.526250000 +0000
112:      &        CHARMMDFTBT, PERMINVOPT, BLOCKMOVET, MAXERISE_SET, PYT, BINARY_EXAB, CHIROT, SANDBOXT, &112:      &        CHARMMDFTBT, PERMINVOPT, BLOCKMOVET, MAXERISE_SET, PYT, BINARY_EXAB, CHIROT, SANDBOXT, &
113:      &        RESERVOIRT, DISTOPT, ONEDAPBCT, ONEDPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, THREEDPBCT, RATIOT, &113:      &        RESERVOIRT, DISTOPT, ONEDAPBCT, ONEDPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, THREEDPBCT, RATIOT, &
114:      &        PTRANDOM, PTINTERVAL, PTSINGLE, PTSETS, CHEMSHIFT, CHEMSHIFT2, CSH, DEBUGss2029, UNIFORMMOVE, RANSEEDT, &114:      &        PTRANDOM, PTINTERVAL, PTSINGLE, PTSETS, CHEMSHIFT, CHEMSHIFT2, CSH, DEBUGss2029, UNIFORMMOVE, RANSEEDT, &
115:      &        TTM3T, NOINVERSION, RIGIDCONTOURT, UPDATERIGIDREFT, HYBRIDMINT, COMPRESSRIGIDT, MWFILMT, &115:      &        TTM3T, NOINVERSION, RIGIDCONTOURT, UPDATERIGIDREFT, HYBRIDMINT, COMPRESSRIGIDT, MWFILMT, &
116:      &        SUPPRESST, MFETT, POLIRT, QUIPT, SWPOTT, MWPOTT, REPMATCHT, GLJT, MLJT, READMASST, SPECMASST, NEWTSALLIST, &116:      &        SUPPRESST, MFETT, POLIRT, QUIPT, SWPOTT, MWPOTT, REPMATCHT, GLJT, MLJT, READMASST, SPECMASST, NEWTSALLIST, &
117:      &        PHI4MODELT, CUDAT, CUDATIMET, AMBER12T, ENERGY_DECOMPT, NEWMOVEST, DUMPMINT, MBPOLT, MOLECULART, GCBHT, SEMIGRAND_MUT, USEROT, & 117:      &        PHI4MODELT, CUDAT, CUDATIMET, AMBER12T, ENERGY_DECOMPT, NEWMOVEST, DUMPMINT, MBPOLT, MOLECULART, GCBHT, SEMIGRAND_MUT, USEROT, & 
118:      &        SAVEMULTIMINONLY, GRADPROBLEMT, INTLJT, CONDATT, QCIPERMCHECK, &118:      &        SAVEMULTIMINONLY, GRADPROBLEMT, INTLJT, CONDATT, QCIPERMCHECK, &
119:      &        INTCONSTRAINTT, INTFREEZET, CHECKCONINT, CONCUTABST, CONCUTFRACT, INTERPCOSTFUNCTION, &119:      &        INTCONSTRAINTT, INTFREEZET, CHECKCONINT, CONCUTABST, CONCUTFRACT, INTERPCOSTFUNCTION, &
120:      &        RBAAT, FREEZENODEST, DUMPINTEOS, DUMPINTXYZ, QCIPOTT, QCIPOT2T, INTSPRINGACTIVET, LPERMDIST, LOCALPERMDIST, QCIRADSHIFTT, &120:      &        RBAAT, FREEZENODEST, DUMPINTEOS, DUMPINTXYZ, QCIPOTT, QCIPOT2T, INTSPRINGACTIVET, LPERMDIST, LOCALPERMDIST, QCIRADSHIFTT, &
121:      &        MLP3T, MKTRAPT, MLPB3T, MLPB3NEWT, MULTIPOTT, QCIAMBERT, MLPNEWREG, DJWRBT, STEALTHYT, LJADDT, QCINOREPINT, RIGIDMDT, &121:      &        MLP3T, MKTRAPT, MLPB3T, MLPB3NEWT, MULTIPOTT, QCIAMBERT, MLPNEWREG, DJWRBT, STEALTHYT, LJADDT, QCINOREPINT, RIGIDMDT, &
122:      &        DUMPMQT, MLQT, MLQPROB, LJADD2T, MLPVB3T, NOREGBIAS122:      &        DUMPMQT, MLQT, MLQPROB, LJADD2T
123: !123: !
124:       DOUBLE PRECISION, ALLOCATABLE :: SEMIGRAND_MU(:) 124:       DOUBLE PRECISION, ALLOCATABLE :: SEMIGRAND_MU(:) 
125:       DOUBLE PRECISION, ALLOCATABLE :: ATMASS(:)125:       DOUBLE PRECISION, ALLOCATABLE :: ATMASS(:)
126:       DOUBLE PRECISION, ALLOCATABLE :: SPECMASS(:) 126:       DOUBLE PRECISION, ALLOCATABLE :: SPECMASS(:) 
127: 127: 
128: ! csw34> FREEZEGROUP variables128: ! csw34> FREEZEGROUP variables
129: !129: !
130:       INTEGER :: GROUPCENTRE130:       INTEGER :: GROUPCENTRE
131:       DOUBLE PRECISION :: GROUPRADIUS131:       DOUBLE PRECISION :: GROUPRADIUS
132:       CHARACTER (LEN=2) :: FREEZEGROUPTYPE132:       CHARACTER (LEN=2) :: FREEZEGROUPTYPE


r31705/finalio.f90 2017-01-21 10:36:01.002250000 +0000 r31704/finalio.f90 2017-01-21 10:36:03.914250000 +0000
754:         ENDDO754:         ENDDO
755:         755:         
756:      ELSE IF (GBT.OR.GBDT.OR.GBDPT.OR.MSGBT) THEN756:      ELSE IF (GBT.OR.GBDT.OR.GBDPT.OR.MSGBT) THEN
757:         DO J2 = 1, NATOMS/2757:         DO J2 = 1, NATOMS/2
758:            WRITE(MYUNIT2,'(3f20.10)') (QMINP(J1,3*(J2-1)+J3),J3=1,3)758:            WRITE(MYUNIT2,'(3f20.10)') (QMINP(J1,3*(J2-1)+J3),J3=1,3)
759:         ENDDO759:         ENDDO
760:         DO J2 = 1, NATOMS/2760:         DO J2 = 1, NATOMS/2
761:            WRITE(MYUNIT2,'(3f20.10)') (QMINP(J1,3*NATOMS/2+3*(J2-1)+J3),J3=1,3)761:            WRITE(MYUNIT2,'(3f20.10)') (QMINP(J1,3*NATOMS/2+3*(J2-1)+J3),J3=1,3)
762:         ENDDO762:         ENDDO
763:         763:         
764:      ELSE IF (MLP3T.OR.MLPB3T.OR.MLQT.OR.MLPVB3T) THEN764:      ELSE IF (MLP3T.OR.MLPB3T.OR.MLQT) THEN
765:         DO J2 = 1, NATOMS765:         DO J2 = 1, NATOMS
766:            WRITE(MYUNIT2,'(3G20.10)') QMINP(J1,J2)766:            WRITE(MYUNIT2,'(3G20.10)') QMINP(J1,J2)
767:         ENDDO767:         ENDDO
768:         768:         
769:      ELSE IF (GEMT) THEN769:      ELSE IF (GEMT) THEN
770:         DO J2 = 1, NATOMS770:         DO J2 = 1, NATOMS
771:            WRITE(MYUNIT2,'(3f20.10)') (QMINP(J1,3*(J2-1)+J3),J3=1,3)771:            WRITE(MYUNIT2,'(3f20.10)') (QMINP(J1,3*(J2-1)+J3),J3=1,3)
772:         ENDDO772:         ENDDO
773:         773:         
774:      ELSE IF (BLNT.AND.(.NOT.P46).AND.(.NOT.G46)) THEN774:      ELSE IF (BLNT.AND.(.NOT.P46).AND.(.NOT.G46)) THEN


r31705/io1.f 2017-01-21 10:36:01.226250000 +0000 r31704/io1.f 2017-01-21 10:36:04.214250000 +0000
101:                   IF (ZSYM(J1).EQ.'C ') IATNUM(J1+1)=6101:                   IF (ZSYM(J1).EQ.'C ') IATNUM(J1+1)=6
102:                   IF (ZSYM(J1).EQ.'N ') IATNUM(J1+1)=7102:                   IF (ZSYM(J1).EQ.'N ') IATNUM(J1+1)=7
103:                   IF (ZSYM(J1).EQ.'O ') IATNUM(J1+1)=8103:                   IF (ZSYM(J1).EQ.'O ') IATNUM(J1+1)=8
104:                   IF (ZSYM(J1).EQ.'F ') IATNUM(J1+1)=9104:                   IF (ZSYM(J1).EQ.'F ') IATNUM(J1+1)=9
105:                   IF (ZSYM(J1).EQ.'S ') IATNUM(J1+1)=18105:                   IF (ZSYM(J1).EQ.'S ') IATNUM(J1+1)=18
106:                   CALL READF(COORDS(J2+1,JP))106:                   CALL READF(COORDS(J2+1,JP))
107:                   CALL READF(COORDS(J2+2,JP))107:                   CALL READF(COORDS(J2+2,JP))
108:                   CALL READF(COORDS(J2+3,JP))108:                   CALL READF(COORDS(J2+3,JP))
109:                ENDDO109:                ENDDO
110:             ENDDO110:             ENDDO
111:          ELSEIF (MLP3T.OR.MLPVB3T) THEN ! for this neural net it is one variable per line111:          ELSEIF (MLP3T) THEN ! for this neural net it is one variable per line
112:             REWIND(COORDS_UNIT)112:             REWIND(COORDS_UNIT)
113:             DO JP=1,NPAR113:             DO JP=1,NPAR
114:                DO J1=1,NATOMS114:                DO J1=1,NATOMS
115:                    READ(COORDS_UNIT,*) COORDS(J1,JP)115:                    READ(COORDS_UNIT,*) COORDS(J1,JP)
116:                ENDDO116:                ENDDO
117:             ENDDO117:             ENDDO
118:          ELSEIF (MLQT) THEN ! for this ML it is one variable per line118:          ELSEIF (MLQT) THEN ! for this ML it is one variable per line
119:             REWIND(COORDS_UNIT)119:             REWIND(COORDS_UNIT)
120:             DO JP=1,NPAR120:             DO JP=1,NPAR
121:                DO J1=1,NATOMS121:                DO J1=1,NATOMS
191:                COORDS(J1,JP)=COORDS(J1,JP)*RESIZE191:                COORDS(J1,JP)=COORDS(J1,JP)*RESIZE
192:             ENDDO192:             ENDDO
193:          ENDDO193:          ENDDO
194:       ENDIF194:       ENDIF
195: 195: 
196:       IF (.NOT.SEEDT.AND..NOT.AMHT.AND..NOT.SUPPRESST) THEN196:       IF (.NOT.SEEDT.AND..NOT.AMHT.AND..NOT.SUPPRESST) THEN
197:          WRITE(MYUNIT,20) 197:          WRITE(MYUNIT,20) 
198: 20       FORMAT('Initial coordinates:')198: 20       FORMAT('Initial coordinates:')
199:          IF (MPIT) THEN199:          IF (MPIT) THEN
200:             WRITE(MYUNIT,30) (COORDS(J1,MYNODE+1),J1=1,3*NATOMS)200:             WRITE(MYUNIT,30) (COORDS(J1,MYNODE+1),J1=1,3*NATOMS)
201:          ELSEIF (MLP3T.OR.MLPVB3T) THEN 201:          ELSEIF (MLP3T) THEN 
202:             WRITE(MYUNIT,'(G20.10)') (COORDS(J1,MYNODE+1),J1=1,NATOMS)202:             WRITE(MYUNIT,'(G20.10)') (COORDS(J1,MYNODE+1),J1=1,NATOMS)
203:          ELSEIF (MLQT) THEN 203:          ELSEIF (MLQT) THEN 
204:             WRITE(MYUNIT,'(G20.10)') (COORDS(J1,MYNODE+1),J1=1,NATOMS)204:             WRITE(MYUNIT,'(G20.10)') (COORDS(J1,MYNODE+1),J1=1,NATOMS)
205:          ELSE 205:          ELSE 
206:            DO JP=1,NPAR206:            DO JP=1,NPAR
207:                WRITE(MYUNIT,30) (COORDS(J1,JP),J1=1,3*NATOMS)207:                WRITE(MYUNIT,30) (COORDS(J1,JP),J1=1,3*NATOMS)
208: 30             FORMAT(3F20.10)208: 30             FORMAT(3F20.10)
209:             ENDDO209:             ENDDO
210:          ENDIF210:          ENDIF
211:       ENDIF211:       ENDIF
704:          WRITE(MYUNIT,'(I4,A)') NATOMS,' QCI atoms'704:          WRITE(MYUNIT,'(I4,A)') NATOMS,' QCI atoms'
705:       ELSEIF (MKTRAPT) THEN705:       ELSEIF (MKTRAPT) THEN
706:          WRITE(MYUNIT,'(I4,A)') NATOMS,' MK trapped ions'706:          WRITE(MYUNIT,'(I4,A)') NATOMS,' MK trapped ions'
707:       ELSEIF (DJWRBT) THEN707:       ELSEIF (DJWRBT) THEN
708:          IF (DJWRBID.EQ.1) THEN708:          IF (DJWRBID.EQ.1) THEN
709:             WRITE(MYUNIT,'(3(I4,A))') NATOMS,' sites for ',NRIGIDBODY,' rigid bodies - DJW potential ',DJWRBID709:             WRITE(MYUNIT,'(3(I4,A))') NATOMS,' sites for ',NRIGIDBODY,' rigid bodies - DJW potential ',DJWRBID
710:             WRITE(MYUNIT,'(2(I4,A))') NRIGIDBODY-NHEXAMERS,' pentamers and ',NHEXAMERS,' hexamers'710:             WRITE(MYUNIT,'(2(I4,A))') NRIGIDBODY-NHEXAMERS,' pentamers and ',NHEXAMERS,' hexamers'
711:             WRITE(MYUNIT,'(A,4G20.10)') 'rho, eps, sigma and pentamer radius=',CAPSIDRHO,CAPSIDEPS,SIGMAPENT,RADPENT711:             WRITE(MYUNIT,'(A,4G20.10)') 'rho, eps, sigma and pentamer radius=',CAPSIDRHO,CAPSIDEPS,SIGMAPENT,RADPENT
712:             WRITE(MYUNIT,'(A,4G20.10)') 'hexamer sigma, radius and hex/pent sigma=',SIGMAHEX,RADHEX,SIGMAPH712:             WRITE(MYUNIT,'(A,4G20.10)') 'hexamer sigma, radius and hex/pent sigma=',SIGMAHEX,RADHEX,SIGMAPH
713:          ENDIF713:          ENDIF
714:       ELSEIF (MLPVB3T) THEN 
715:          WRITE(MYUNIT,'(I4,A)') NATOMS,' link weights for MLPVB3' 
716:       ELSEIF (MLP3T) THEN714:       ELSEIF (MLP3T) THEN
717:          WRITE(MYUNIT,'(I4,A)') NATOMS,' link weights for MLP3'715:          WRITE(MYUNIT,'(I4,A)') NATOMS,' link weights for MLP3'
718:       ELSEIF (MLQT) THEN716:       ELSEIF (MLQT) THEN
719:          WRITE(MYUNIT,'(I4,A)') NATOMS,' variables for ML quadratic'717:          WRITE(MYUNIT,'(I4,A)') NATOMS,' variables for ML quadratic'
720:       ELSEIF  (LJADDT) THEN718:       ELSEIF  (LJADDT) THEN
721:          IF (SORTT) THEN719:          IF (SORTT) THEN
722:             WRITE(MYUNIT,'(A)') 'Turning off SORT option for LJADD'720:             WRITE(MYUNIT,'(A)') 'Turning off SORT option for LJADD'
723:             SORTT=.FALSE.721:             SORTT=.FALSE.
724:          ENDIF722:          ENDIF
725:          WRITE(MYUNIT,'(I4,A)') NATOMS,' LJ addressable atoms'723:          WRITE(MYUNIT,'(I4,A)') NATOMS,' LJ addressable atoms'
888: !           ENDDO886: !           ENDDO
889: !            WRITE(MYUNIT, '(A,G15.5,A,G15.5)') 'Maximum step size scaled by estimated nearest neighbour distance of ',887: !            WRITE(MYUNIT, '(A,G15.5,A,G15.5)') 'Maximum step size scaled by estimated nearest neighbour distance of ',
890: !    &                    0.677441D0-0.0037582*NATOMS+9.40318D-6*NATOMS**2-6.21931D-9*NATOMS**3,' to give ',STEP(1)888: !    &                    0.677441D0-0.0037582*NATOMS+9.40318D-6*NATOMS**2-6.21931D-9*NATOMS**3,' to give ',STEP(1)
891:          ELSEIF (MULLERBROWNT) THEN 889:          ELSEIF (MULLERBROWNT) THEN 
892:             RADIUS=100.0D0890:             RADIUS=100.0D0
893:          ELSE 891:          ELSE 
894:             RADIUS=RADIUS*2.0D0**(1.0D0/6.0D0)892:             RADIUS=RADIUS*2.0D0**(1.0D0/6.0D0)
895:          ENDIF893:          ENDIF
896:       ENDIF894:       ENDIF
897:       IF ((.NOT.PERIODIC).AND.(.NOT.AMBER).AND.(.NOT.BLNT).AND.(.NOT.MULLERBROWNT).AND.(.NOT.MODEL1T).AND.(.NOT.PERCOLATET) 895:       IF ((.NOT.PERIODIC).AND.(.NOT.AMBER).AND.(.NOT.BLNT).AND.(.NOT.MULLERBROWNT).AND.(.NOT.MODEL1T).AND.(.NOT.PERCOLATET) 
898:      &                    .AND.(.NOT.QCIPOTT).AND.(.NOT.INTCONSTRAINTT).AND.(.NOT.MLP3T).AND.(.NOT.MKTRAPT).AND.(.NOT.MLQT)896:      &                    .AND.(.NOT.QCIPOTT).AND.(.NOT.INTCONSTRAINTT).AND.(.NOT.MLP3T).AND.(.NOT.MKTRAPT).AND.(.NOT.MLQT)) 
899:      &                    .AND.(.NOT.MLPVB3T))  
900:      1                    WRITE(MYUNIT,'(A,F20.10)') 'Container radius=',RADIUS897:      1                    WRITE(MYUNIT,'(A,F20.10)') 'Container radius=',RADIUS
901:       RADIUS=RADIUS**2898:       RADIUS=RADIUS**2
902:       IF (PERCOLATET) WRITE(MYUNIT,'(A,F20.10)') 'Checking for percolated structure, cutoff=',PERCCUT899:       IF (PERCOLATET) WRITE(MYUNIT,'(A,F20.10)') 'Checking for percolated structure, cutoff=',PERCCUT
903:       PERCCUT=PERCCUT**2900:       PERCCUT=PERCCUT**2
904:       IF (NPAR.GT.1) THEN901:       IF (NPAR.GT.1) THEN
905:          WRITE(MYUNIT,'(I2,A)') NPAR,' parallel runs'902:          WRITE(MYUNIT,'(I2,A)') NPAR,' parallel runs'
906:          IF (TABOOT) WRITE(MYUNIT,'(A,I4,A)') 'Taboo lists contain the lowest ',NTAB,' minima'903:          IF (TABOOT) WRITE(MYUNIT,'(A,I4,A)') 'Taboo lists contain the lowest ',NTAB,' minima'
907:       ELSE IF (TABOOT) THEN904:       ELSE IF (TABOOT) THEN
908:          WRITE(MYUNIT,'(A,I4,A)') 'Taboo list contains the lowest ',NTAB,' minima'905:          WRITE(MYUNIT,'(A,I4,A)') 'Taboo list contains the lowest ',NTAB,' minima'
909:       ENDIF906:       ENDIF


r31705/keywords.f 2017-01-21 10:36:01.462250000 +0000 r31704/keywords.f 2017-01-21 10:36:04.482250000 +0000
1146: !     SIGMAHEX=(1.0D0+RADHEX*SQRT((5.0D0+SQRT(5.0D0))/2.0D0))1146: !     SIGMAHEX=(1.0D0+RADHEX*SQRT((5.0D0+SQRT(5.0D0))/2.0D0))
1147: !     SIGMAPH=0.5D0*(SIGMA + SIGMAHEX)1147: !     SIGMAPH=0.5D0*(SIGMA + SIGMAHEX)
1148: !     CAPSIDEPS=0.4D01148: !     CAPSIDEPS=0.4D0
1149: 1149: 
1150: !1150: !
1151: ! Neural network potential1151: ! Neural network potential
1152: !1152: !
1153:       MLP3T=.FALSE.1153:       MLP3T=.FALSE.
1154:       MLPB3T=.FALSE.1154:       MLPB3T=.FALSE.
1155:       MLPB3NEWT=.FALSE.1155:       MLPB3NEWT=.FALSE.
1156:       MLPVB3T=.FALSE. 
1157:       NOREGBIAS=.FALSE. 
1158:       MLPNEWREG=.FALSE.1156:       MLPNEWREG=.FALSE.
1159:       MLPDONE=.FALSE.1157:       MLPDONE=.FALSE.
1160:       MLPNORM=.FALSE.1158:       MLPNORM=.FALSE.
1161:       MLPLAMBDA=0.0D01159:       MLPLAMBDA=0.0D0
1162: !1160: !
1163: ! ML quadratic function1161: ! ML quadratic function
1164: !1162: !
1165:       MLQT=.FALSE.1163:       MLQT=.FALSE.
1166:       MLQPROB=.FALSE.1164:       MLQPROB=.FALSE.
1167:       MLQDONE=.FALSE.1165:       MLQDONE=.FALSE.
2193:          IF (MLPNORM) THEN2191:          IF (MLPNORM) THEN
2194:             MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA 2192:             MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA 
2195:             WRITE(MYUNIT,'(A)') 'keyword> Rescaling inputs by mean absolute values:'2193:             WRITE(MYUNIT,'(A)') 'keyword> Rescaling inputs by mean absolute values:'
2196:             WRITE(MYUNIT,'(6G20.10)') MLPMEAN(1:MLPIN)2194:             WRITE(MYUNIT,'(6G20.10)') MLPMEAN(1:MLPIN)
2197:             DO J1=1,MLPIN2195:             DO J1=1,MLPIN
2198:                MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1)2196:                MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1)
2199:             ENDDO2197:             ENDDO
2200:          ENDIF2198:          ENDIF
2201:          DEALLOCATE(MLPMEAN)2199:          DEALLOCATE(MLPMEAN)
2202:          MLPDONE=.TRUE.2200:          MLPDONE=.TRUE.
2203:       ELSE IF (WORD.EQ.'NOREGBIAS') THEN 
2204:          NOREGBIAS=.TRUE. 
2205:       ELSE IF (WORD.EQ.'MLPVB3') THEN 
2206:          MLPVB3T=.TRUE. 
2207:          CALL READI(MLPIN)      ! number of inputs (data items after outcome) 
2208:          CALL READI(MLPSTART) ! starting position in data list, not counting outcome 
2209:          CALL READI(MLPHIDDEN) 
2210:          CALL READI(MLPOUT) 
2211:          CALL READI(MLPDATA) 
2212:          IF (NITEMS.GT.5) CALL READF(MLPLAMBDA) 
2213:          WRITE(MYUNIT,'(A,5I8,G20.10)') ' keywords> MLP3 vector bias nodes and Nin, Ninstart, Nhidden, Nout, Ndata, lambda=', 
2214:      &                                MLPIN,MLPSTART,MLPHIDDEN,MLPOUT,MLPDATA,MLPLAMBDA 
2215:          NMLP=MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN+MLPOUT 
2216:          IF (NMLP.NE.NATOMS) THEN 
2217:             WRITE(MYUNIT,'(A,2I8)') 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP 
2218:             STOP 
2219:          ENDIF 
2220:          LUNIT=GETUNIT() 
2221:          OPEN(LUNIT,FILE='MLPdata',STATUS='OLD') 
2222:          ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA),MLPMEAN(MLPIN)) 
2223:          MLPMEAN(1:MLPIN)=0.0D0 
2224:          DO J1=1,MLPDATA 
2225:             READ(LUNIT,*) MLPOUTCOME(J1),(DUMMY,J2=1,MLPSTART-1),MLPDAT(J1,1:MLPIN) 
2226:             MLPOUTCOME(J1)=MLPOUTCOME(J1)+1 ! to shift the range from 0 to from 1 
2227:             DO J2=1,MLPIN 
2228:                MLPMEAN(J2)=MLPMEAN(J2)+ABS(MLPDAT(J1,J2)) 
2229:             ENDDO 
2230:          ENDDO 
2231:          CLOSE(LUNIT) 
2232:          IF (MLPNORM) THEN 
2233:             MLPMEAN(1:MLPIN)=MLPMEAN(1:MLPIN)/MLPDATA 
2234:             WRITE(MYUNIT,'(A)') 'keyword> Rescaling inputs by mean absolute values:' 
2235:             WRITE(MYUNIT,'(6G20.10)') MLPMEAN(1:MLPIN) 
2236:             DO J1=1,MLPIN 
2237:                MLPDAT(1:MLPDATA,J1)=MLPDAT(1:MLPDATA,J1)/MLPMEAN(J1) 
2238:             ENDDO 
2239:          ENDIF 
2240:          DEALLOCATE(MLPMEAN) 
2241:          MLPDONE=.TRUE. 
2242:       ELSE IF (WORD.EQ.'MLPNEWREG') THEN2201:       ELSE IF (WORD.EQ.'MLPNEWREG') THEN
2243:          MLPNEWREG=.TRUE.2202:          MLPNEWREG=.TRUE.
2244:          WRITE(MYUNIT,'(A)') 'keyword> Including reciprocals in regularisation'2203:          WRITE(MYUNIT,'(A)') 'keyword> Including reciprocals in regularisation'
2245: !2204: !
2246: ! MLPNORM directs OPTIM to rescale the input data columns by dividing each one by the2205: ! MLPNORM directs OPTIM to rescale the input data columns by dividing each one by the
2247: ! average of the mean magnitude2206: ! average of the mean magnitude
2248: ! Arranged so that MLPNORM can come before of after MLPB3/MLP32207: ! Arranged so that MLPNORM can come before of after MLPB3/MLP3
2249: !2208: !
2250:       ELSE IF (WORD.EQ.'MLPNORM') THEN2209:       ELSE IF (WORD.EQ.'MLPNORM') THEN
2251:          MLPNORM=.TRUE.2210:          MLPNORM=.TRUE.
2275:          CALL READI(MLQIN)      ! number of inputs (data items after outcome)2234:          CALL READI(MLQIN)      ! number of inputs (data items after outcome)
2276:          CALL READI(MLQSTART) ! starting position in data list, not counting outcome2235:          CALL READI(MLQSTART) ! starting position in data list, not counting outcome
2277:          CALL READI(MLQOUT)2236:          CALL READI(MLQOUT)
2278:          CALL READI(MLQDATA)2237:          CALL READI(MLQDATA)
2279:          IF (NITEMS.GT.4) CALL READF(MLQLAMBDA)2238:          IF (NITEMS.GT.4) CALL READF(MLQLAMBDA)
2280:          WRITE(MYUNIT,'(A,4I8,G20.10)') ' keywords> MLQ Nin, Ninstart, Nout, Ndata, lambda=',2239:          WRITE(MYUNIT,'(A,4I8,G20.10)') ' keywords> MLQ Nin, Ninstart, Nout, Ndata, lambda=',
2281:      &                                MLQIN,MLQSTART,MLQOUT,MLQDATA,MLQLAMBDA2240:      &                                MLQIN,MLQSTART,MLQOUT,MLQDATA,MLQLAMBDA
2282:          NMLQ=MLQOUT*(1+(MLQIN*(MLQIN+3))/2)2241:          NMLQ=MLQOUT*(1+(MLQIN*(MLQIN+3))/2)
2283:          WRITE(MYUNIT,'(A,5I8,G20.10)') ' keywords> MLQ variables=',NMLQ2242:          WRITE(MYUNIT,'(A,5I8,G20.10)') ' keywords> MLQ variables=',NMLQ
2284:          IF (NMLQ.NE.NATOMS) THEN2243:          IF (NMLQ.NE.NATOMS) THEN
2285:             WRITE(MYUNIT,'(A,2I8)') 'keywords> ERROR *** NATOMS,NMLQ=',NATOMS,NMLQ2244:             PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLQ=',NATOMS,NMLQ
2286:             STOP2245:             STOP
2287:          ENDIF2246:          ENDIF
2288: 2247: 
2289:          LUNIT=GETUNIT()2248:          LUNIT=GETUNIT()
2290:          OPEN(LUNIT,FILE='MLQdata',STATUS='OLD')2249:          OPEN(LUNIT,FILE='MLQdata',STATUS='OLD')
2291:          ALLOCATE(MLQDAT(MLQDATA,MLQIN),MLQOUTCOME(MLQDATA),MLQMEAN(MLQIN))2250:          ALLOCATE(MLQDAT(MLQDATA,MLQIN),MLQOUTCOME(MLQDATA),MLQMEAN(MLQIN))
2292:          MLQMEAN(1:MLQIN)=0.0D02251:          MLQMEAN(1:MLQIN)=0.0D0
2293:          DO J1=1,MLQDATA2252:          DO J1=1,MLQDATA
2294:             READ(LUNIT,*) MLQOUTCOME(J1),(DUMMY,J2=1,MLQSTART-1),MLQDAT(J1,1:MLQIN)2253:             READ(LUNIT,*) MLQOUTCOME(J1),(DUMMY,J2=1,MLQSTART-1),MLQDAT(J1,1:MLQIN)
2295:             MLQOUTCOME(J1)=MLQOUTCOME(J1)+1 ! to shift the range from 0 to from 12254:             MLQOUTCOME(J1)=MLQOUTCOME(J1)+1 ! to shift the range from 0 to from 1


r31705/MLPVB3.f90 2017-01-21 10:36:00.538250000 +0000 r31704/MLPVB3.f90 2017-01-21 10:36:03.298250000 +0000
  1: SUBROUTINE MLPVB3(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/GMIN/source/MLPVB3.f90' in revision 31704
  2: USE COMMONS 
  3: USE MODHESS 
  4: IMPLICIT NONE 
  5: LOGICAL GTEST,SECT 
  6: DOUBLE PRECISION X(NMLP), V(NMLP), ENERGY, DUMMY1, DUMMY2, DUMMY3, DUMMY4, SUMINPUTS, AREA 
  7: DOUBLE PRECISION Y(MLPOUT), PROB(MLPOUT), PMLPOUTJ1, DMAX 
  8: DOUBLE PRECISION DYW1G(MLPHIDDEN), DPCW1BG(MLPOUT,MLPHIDDEN) 
  9: DOUBLE PRECISION DYW2G(MLPOUT,MLPHIDDEN,MLPIN), DPCW2BG(MLPHIDDEN,MLPIN), TANHSUM(MLPHIDDEN), SECH2(MLPHIDDEN) 
 10: DOUBLE PRECISION DYCDBHID(MLPOUT), DPCDBHID(MLPOUT), DPCDBHIDOUTJ1, D2PCDBHID2, D2YCDBHID2(MLPOUT) 
 11: DOUBLE PRECISION D2YCDBHIDDW2BG, D2PCDBHIDDW2BG 
 12: DOUBLE PRECISION DPCDBHIDDW1BG(MLPOUT,MLPHIDDEN) 
 13: DOUBLE PRECISION DPEDW2BG(MLPOUT,MLPHIDDEN,MLPIN), DPEDW1BG(MLPOUT,MLPOUT,MLPHIDDEN), DPEDWBHJ(MLPOUT,MLPHIDDEN) 
 14: DOUBLE PRECISION, PARAMETER :: BOUT=0.0D0 
 15: DOUBLE PRECISION, ALLOCATABLE :: PSAVE(:,:) 
 16: INTEGER MLPOUTJ1, MLPOFFSET, BOFFSET1, BOFFSET2, NREG 
 17: INTEGER GETUNIT, LUNIT, J1, J2, J3, J4, K4, K2, K3, J5, J6 
 18: CHARACTER(LEN=132) FNAME 
 19:  
 20: ! 
 21: ! Variables are ordered  
 22: ! w^2_{jk} at (j-1)*MLPIN+k 
 23: !   up to MLPHIDDEN*MLPIN, then 
 24: ! w^1_{ij} at MLPHIDDEN*MLPIN + (i-1)*MLPHIDDEN+j 
 25: !   up to MLPHIDDEN*MLPIN + MLPOUT*MLPHIDDEN 
 26: ! w^bh_j at MLPHIDDEN*(MLPIN+MLPOUT)+1 to MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN 
 27: ! w^bo_i at MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN+1 to MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN+MLPOUT 
 28: ! 
 29:  
 30: MLPOFFSET=MLPHIDDEN*MLPIN 
 31: BOFFSET1=MLPHIDDEN*(MLPIN+MLPOUT) 
 32: BOFFSET2=MLPHIDDEN*(MLPIN+MLPOUT+1) 
 33: ENERGY=0.0D0 
 34: V(1:NMLP)=0.0D0 
 35: IF (SECT) HESS(1:NMLP,1:NMLP)=0.0D0 
 36: DO J1=1,MLPDATA 
 37:    MLPOUTJ1=MLPOUTCOME(J1) 
 38:    DO J2=1,MLPHIDDEN 
 39:       DUMMY1=0.0D0 
 40:       DO J3=1,MLPIN 
 41:          DUMMY1=DUMMY1+X((J2-1)*MLPIN+J3)*MLPDAT(J1,J3) 
 42:       ENDDO 
 43:       DUMMY1=DUMMY1+X(BOFFSET1+J2) 
 44:       TANHSUM(J2)=TANH(DUMMY1)  
 45:       DYW1G(J2)=TANHSUM(J2) 
 46: !     PRINT *,'DUMMY1=',DUMMY1 
 47: !     IF (ABS(DUMMY1).GT.20.0D0) THEN 
 48: !        SECH2(J2)=0.0D0 
 49: !     ELSE 
 50:          SECH2(J2)=1.0D0/COSH(DUMMY1)**2  
 51: !     ENDIF 
 52:    ENDDO 
 53: !  DUMMY3=0.0D0 
 54:    DMAX=-1.0D100 
 55:    DO J4=1,MLPOUT 
 56:       DUMMY2=0.0D0 
 57:       DO J2=1,MLPHIDDEN 
 58:          DO J3=1,MLPIN 
 59:             DYW2G(J4,J2,J3)=(X( MLPOFFSET + (J4-1)*MLPHIDDEN + J2 )) * MLPDAT(J1,J3)*SECH2(J2) 
 60:          ENDDO 
 61:          DUMMY2=DUMMY2+X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)*TANHSUM(J2) 
 62:       ENDDO 
 63:       DUMMY2=DUMMY2+X(BOFFSET2+J4) 
 64: !     IF (DUMMY2.GT.50.0D0) DUMMY2=50.0D0 ! to prevent FPE 
 65:       IF (DUMMY2.GT.DMAX) DMAX=DUMMY2 
 66:       Y(J4)=DUMMY2 
 67: !     DUMMY3=DUMMY3+EXP(DUMMY2) 
 68:    ENDDO   
 69: ! 
 70: ! Factor DMAX out of the exponentials to prevent overflow. 
 71: ! 
 72:    DUMMY3=0.0D0 
 73:    DO J4=1,MLPOUT 
 74:       Y(J4)=Y(J4)-DMAX 
 75:       DUMMY3=DUMMY3+EXP(Y(J4)) 
 76:    ENDDO 
 77:    DO J4=1,MLPOUT 
 78:       PROB(J4)=EXP(Y(J4))/DUMMY3 
 79:    ENDDO 
 80:    PMLPOUTJ1=PROB(MLPOUTJ1) 
 81:    ENERGY=ENERGY-LOG(PMLPOUTJ1) 
 82:    IF (GTEST) THEN 
 83: ! 
 84: ! We only need the probability derivative for the probability corresponding to the correct outcome for this data point 
 85: ! 
 86:       DPCW1BG(1:MLPOUT,1:MLPHIDDEN)=0.0D0 
 87:       DO J2=1,MLPHIDDEN 
 88:          DO J4=1,MLPOUT 
 89:             DPCW1BG(J4,J2)=DPCW1BG(J4,J2)-PMLPOUTJ1*PROB(J4)*DYW1G(J2)  
 90:          ENDDO 
 91:          DPCW1BG(MLPOUTJ1,J2)=DPCW1BG(MLPOUTJ1,J2)+PMLPOUTJ1*DYW1G(J2) ! d p_c / dw^1_beta gamma 
 92:       ENDDO 
 93:  
 94:       DO J3=1,MLPIN 
 95:          DO J2=1,MLPHIDDEN 
 96:             DUMMY3=0.0D0 
 97:             DO J4=1,MLPOUT 
 98:                DUMMY3=DUMMY3+PROB(J4)*DYW2G(J4,J2,J3) 
 99:             ENDDO 
100:             DPCW2BG(J2,J3)=PMLPOUTJ1*(DYW2G(MLPOUTJ1,J2,J3)-DUMMY3) 
101:          ENDDO 
102:       ENDDO 
103:       DO J4=1,MLPOUT 
104:          V(BOFFSET2+J4)=V(BOFFSET2+J4)+PROB(J4) 
105:       ENDDO 
106:       V(BOFFSET2+MLPOUTJ1)=V(BOFFSET2+MLPOUTJ1)-1.0D0 
107:  
108:       SUMINPUTS=0.0D0 
109:       DO J3=1,MLPIN 
110:          SUMINPUTS=SUMINPUTS+MLPDAT(J1,J3) 
111:       ENDDO 
112:  
113:       DO J4=1,MLPOUT 
114:          DUMMY2=0.0D0 
115:          DO J2=1,MLPHIDDEN 
116:             DUMMY2=DUMMY2+X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)*SECH2(J2) 
117:          ENDDO 
118:          DYCDBHID(J4)=DUMMY2*SUMINPUTS 
119:       ENDDO 
120:  
121:       DUMMY2=0.0D0 
122:       DO J4=1,MLPOUT 
123:          DUMMY2=DUMMY2+PROB(J4)*DYCDBHID(J4) 
124:       ENDDO 
125:  
126:       DPCDBHIDOUTJ1=PMLPOUTJ1*(DYCDBHID(MLPOUTJ1)-DUMMY2) 
127:           
128:       DO J4=1,MLPOUT 
129:          DPCDBHID(J4)=PROB(J4)*(DYCDBHID(J4)-DUMMY2) 
130:       ENDDO 
131:  
132:       DO J4=1,MLPOUT 
133:          DO J2=1,MLPHIDDEN 
134:             V(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)=V(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)-DPCW1BG(J4,J2)/PMLPOUTJ1 
135:          ENDDO 
136:       ENDDO 
137:  
138:       DO J2=1,MLPHIDDEN 
139:          DUMMY2=0.0D0 
140:          DO J4=1,MLPOUT 
141:             DUMMY2=DUMMY2-X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)*PROB(J4) 
142:          ENDDO 
143:          V(BOFFSET1+J2)=V(BOFFSET1+J2)-SECH2(J2)*(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+J2)+DUMMY2) 
144:       ENDDO 
145:  
146:       DO J3=1,MLPIN 
147:          DO J2=1,MLPHIDDEN 
148:             V((J2-1)*MLPIN+J3)=V((J2-1)*MLPIN+J3)-DPCW2BG(J2,J3)/PMLPOUTJ1 
149:          ENDDO 
150:       ENDDO 
151:    ENDIF 
152:  
153:    IF (SECT) THEN 
154: ! 
155: ! This block w^1 with w^1 is locally symmetric 
156: ! 
157:       DO J4=1,MLPOUT ! J4 is beta  
158:          DO J2=1,MLPHIDDEN ! J2 is gamma 
159:             DO K4=1,J4 ! K4 is alpha 
160:                DO K2=1,MLPHIDDEN ! K2 is epsilon 
161:                   DUMMY1=0.0D0 
162:                   IF ((J4.EQ.MLPOUTJ1).AND.(K4.EQ.MLPOUTJ1)) DUMMY1=1.0D0 
163:                   IF (J4.EQ.MLPOUTJ1) DUMMY1=DUMMY1-PROB(K4) 
164:                   IF (K4.EQ.MLPOUTJ1) DUMMY1=DUMMY1-PROB(J4) 
165:                   IF (K4.EQ.J4) DUMMY1=DUMMY1-PROB(J4) 
166:                   DUMMY1=DUMMY1+2.0D0*PROB(J4)*PROB(K4) 
167:                   HESS(MLPOFFSET+(J4-1)*MLPHIDDEN+J2,MLPOFFSET+(K4-1)*MLPHIDDEN+K2)= & 
168:   &               HESS(MLPOFFSET+(J4-1)*MLPHIDDEN+J2,MLPOFFSET+(K4-1)*MLPHIDDEN+K2) & ! sum over data points 
169:   &               +DPCW1BG(J4,J2)*DPCW1BG(K4,K2)/PMLPOUTJ1**2 & 
170:   &               -DUMMY1*TANHSUM(J2)*TANHSUM(K2) 
171:                ENDDO 
172:             ENDDO 
173:          ENDDO 
174:       ENDDO 
175: ! 
176: ! Off-diagonal w^1 with w^2 blocks 
177: ! 
178:       DO J3=1,MLPOUT ! J3 is beta for w^1 outputs 
179:          DO J2=1,MLPHIDDEN ! J2 is gamma for w^1 hidden 
180:             DO K4=1,MLPHIDDEN ! K4 is alpha for w^2 hidden 
181:                DUMMY3=0.0D0 
182:                DO J5=1,MLPOUT 
183:                   DUMMY3=DUMMY3+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + K4)  
184:                ENDDO 
185:                DO K2=1,MLPIN ! K2 is epsilon for w^2 inputs 
186:                   DUMMY1=0.0D0 
187:                   IF (K4.EQ.J2) DUMMY1=DUMMY1-PMLPOUTJ1*PROB(J3)*MLPDAT(J1,K2)*SECH2(J2) 
188:                   IF ((K4.EQ.J2).AND.(J3.EQ.MLPOUTJ1)) DUMMY1=DUMMY1+PMLPOUTJ1*MLPDAT(J1,K2)*SECH2(J2) 
189:  
190:                   DUMMY2=TANHSUM(J2)*PMLPOUTJ1*MLPDAT(J1,K2)*SECH2(K4) & 
191:   &                      *(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+K4)-DUMMY3) 
192:                   DUMMY1=DUMMY1-PROB(J3)*DUMMY2 
193:                   IF (MLPOUTJ1.EQ.J3) DUMMY1=DUMMY1+DUMMY2 
194:                   DUMMY1=DUMMY1-PMLPOUTJ1*PROB(J3)*MLPDAT(J1,K2)*SECH2(K4)*TANHSUM(J2) & 
195:   &                             *(X(MLPOFFSET + (J3-1)*MLPHIDDEN + K4)-DUMMY3) 
196:                   HESS(MLPOFFSET+(J3-1)*MLPHIDDEN+J2,(K4-1)*MLPIN+K2)= & 
197:   &               HESS(MLPOFFSET+(J3-1)*MLPHIDDEN+J2,(K4-1)*MLPIN+K2) & ! sum over data points 
198:   &               +DPCW1BG(J3,J2)*DPCW2BG(K4,K2)/PMLPOUTJ1**2 & 
199:   &               -DUMMY1/PMLPOUTJ1 
200:                ENDDO 
201:             ENDDO 
202:          ENDDO 
203:       ENDDO 
204: ! 
205: ! diagonal w^2 with w^2  
206: ! 
207:       DO J3=1,MLPIN ! J3 is gamma for w^2 inputs 
208:          DO J2=1,MLPHIDDEN ! J2 is beta for w^2 hidden 
209:             DUMMY2=0.0D0 
210:             DO J5=1,MLPOUT 
211:                DUMMY2=DUMMY2+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + J2)  
212:             ENDDO 
213:             DO K4=1,MLPIN ! K4 is epsilon for w^2 inputs 
214:                DO K2=1,J2 ! K2 is alpha for w^2 hidden 
215:                   DUMMY3=0.0D0 
216:                   DO J5=1,MLPOUT 
217:                      DUMMY3=DUMMY3+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + K2)  
218:                   ENDDO 
219:                   DUMMY4=0.0D0 
220:                   DO J5=1,MLPOUT 
221:                      DUMMY4=DUMMY4+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + K2)  & ! take out of loops 
222:   &                                        *X(MLPOFFSET + (J5-1)*MLPHIDDEN + J2) 
223:                   ENDDO 
224:                   DUMMY1=DPCW2BG(K2,K4)*MLPDAT(J1,J3)*SECH2(J2) & 
225:   &                      *(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+J2)-DUMMY2) & 
226:   &                      -PMLPOUTJ1*MLPDAT(J1,J3)*SECH2(J2)*MLPDAT(J1,K4)*SECH2(K2) & 
227:   &                      *(DUMMY4-DUMMY2*DUMMY3) 
228:                   IF (K2.EQ.J2) DUMMY1=DUMMY1-2.0D0*PMLPOUTJ1*MLPDAT(J1,K4)*MLPDAT(J1,J3) & 
229:   &                                     *SECH2(J2)*TANHSUM(J2)*(X(MLPOFFSET + (MLPOUTJ1-1)*MLPHIDDEN + J2)-DUMMY2)  
230:  
231:                   HESS((J2-1)*MLPIN+J3,(K2-1)*MLPIN+K4)= & 
232:   &               HESS((J2-1)*MLPIN+J3,(K2-1)*MLPIN+K4) & ! sum over data points 
233:   &               +DPCW2BG(J2,J3)*DPCW2BG(K2,K4)/PMLPOUTJ1**2 - DUMMY1/PMLPOUTJ1 
234:                ENDDO 
235:             ENDDO 
236:          ENDDO 
237:       ENDDO 
238: ! 
239: ! w^2_{jk} at (j-1)*MLPIN+k 
240: !   up to MLPHIDDEN*MLPIN, then 
241: ! w^1_{ij} at MLPHIDDEN*MLPIN + (i-1)*MLPHIDDEN+j 
242: !   up to MLPHIDDEN*MLPIN + MLPOUT*MLPHIDDEN 
243: ! w^bh_j at MLPHIDDEN*(MLPIN+MLPOUT)+1 to MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN 
244: ! w^bo_i at MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN+1 to MLPHIDDEN*(MLPIN+MLPOUT)+MLPHIDDEN+MLPOUT 
245: ! 
246:  
247:       DO J5=1,MLPOUT ! eps 
248:          DO J3=1,MLPHIDDEN ! gamma   
249:             DO J2=1,MLPOUT ! beta 
250:                DPEDW1BG(J5,J2,J3)=-PROB(J5)*TANHSUM(J3)*PROB(J2) 
251:                IF (J2.EQ.J5) DPEDW1BG(J5,J2,J3)=DPEDW1BG(J5,J2,J3)+PROB(J5)*TANHSUM(J3) 
252:             ENDDO 
253:          ENDDO 
254:       ENDDO 
255:  
256:       DO J5=1,MLPOUT ! eps 
257:          DO J3=1,MLPIN ! gamma  
258:             DO J2=1,MLPHIDDEN ! beta 
259:                DUMMY3=0.0D0 
260:                DO J4=1,MLPOUT 
261:                   DUMMY3=DUMMY3+PROB(J4)*X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2) 
262:                ENDDO 
263:                DPEDW2BG(J5,J2,J3)=PROB(J5)*SECH2(J2)*MLPDAT(J1,J3)*(X(MLPOFFSET+(J5-1)*MLPHIDDEN+J2)-DUMMY3) 
264:             ENDDO 
265:          ENDDO 
266:       ENDDO 
267:  
268:       DO J5=1,MLPOUT ! eps 
269:          DO J2=1,MLPHIDDEN ! j 
270:             DUMMY3=0.0D0 
271:             DO J4=1,MLPOUT 
272:                DUMMY3=DUMMY3+PROB(J4)*X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2) 
273:             ENDDO 
274:             DPEDWBHJ(J5,J2)=PROB(J5)*SECH2(J2)*(X(MLPOFFSET+(J5-1)*MLPHIDDEN+J2)-DUMMY3) 
275:          ENDDO 
276:       ENDDO 
277: ! 
278: ! w^bo_i with w^1_bg (output hidden)  
279: ! 
280:       DO J5=1,MLPOUT 
281:          DO J3=1,MLPHIDDEN ! gamma 
282:             DO J2=1,MLPOUT ! beta 
283:                HESS(BOFFSET2+J5,MLPOFFSET+(J2-1)*MLPHIDDEN+J3)=HESS(BOFFSET2+J5,MLPOFFSET+(J2-1)*MLPHIDDEN+J3)+DPEDW1BG(J5,J2,J3) 
284:             ENDDO 
285:          ENDDO 
286:       ENDDO 
287: ! 
288: ! w^bo_i with w^2_bg (hidden input)  
289: ! 
290:       DO J5=1,MLPOUT ! i 
291:          DO J2=1,MLPHIDDEN ! beta 
292:             DO J3=1,MLPIN  ! gamma 
293:                HESS(BOFFSET2+J5,(J2-1)*MLPIN+J3)=HESS(BOFFSET2+J5,(J2-1)*MLPIN+J3)+DPEDW2BG(J5,J2,J3) 
294:             ENDDO 
295:          ENDDO 
296:       ENDDO 
297: ! 
298: ! w^bo_i with w^bo_j  
299: ! 
300:       DO J5=1,MLPOUT 
301:          DO J2=1,J5 
302:             HESS(BOFFSET2+J5,BOFFSET2+J2)=HESS(BOFFSET2+J5,BOFFSET2+J2)-PROB(J5)*PROB(J2) 
303:          ENDDO 
304:          HESS(BOFFSET2+J5,BOFFSET2+J5)=HESS(BOFFSET2+J5,BOFFSET2+J5)+PROB(J5) 
305:       ENDDO 
306: ! 
307: ! w^bo_i with w^bh_j  
308: ! 
309:       DO J2=1,MLPHIDDEN ! j 
310:          DUMMY1=0.0D0 
311:          DO J5=1,MLPOUT 
312:             DUMMY1=DUMMY1+PROB(J5)*X(MLPOFFSET+(J5-1)*MLPHIDDEN+J2) 
313:          ENDDO 
314:          DO J5=1,MLPOUT ! i 
315:             HESS(BOFFSET2+J5,BOFFSET1+J2)=HESS(BOFFSET2+J5,BOFFSET1+J2)+PROB(J5)*SECH2(J2)*(X(MLPOFFSET+(J5-1)*MLPHIDDEN+J2)-DUMMY1) 
316:          ENDDO 
317:       ENDDO 
318: ! 
319: ! w^bh_j with w^1_bg 
320: ! 
321:       DO J6=1,MLPOUT ! beta 
322:          DO J2=1,MLPHIDDEN ! j 
323:             DO J3=1,MLPHIDDEN ! gamma 
324:                DUMMY1=0.0D0 
325:                DO J5=1,MLPOUT 
326:                   DUMMY1=DUMMY1+X(MLPOFFSET+(J5-1)*MLPHIDDEN+J2)*DPEDW1BG(J5,J6,J3) 
327:                ENDDO 
328:                HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)=HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)+SECH2(J2)*DUMMY1 
329:                IF (J2.EQ.J3) THEN 
330:                   HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)=HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)+SECH2(J2)*PROB(J6) 
331:                   IF (J6.EQ.MLPOUTJ1) THEN 
332:                      HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)=HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)-SECH2(J2) 
333:                   ENDIF 
334:                ENDIF 
335:  
336: !              HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)=HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)+TANHSUM(J3)*DPEDWBHJ(J6,J2) 
337: !              IF (J6.EQ.MLPOUTJ1) THEN 
338: !                 IF (J3.EQ.J2) THEN 
339: !                    HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)=HESS(BOFFSET1+J2,MLPOFFSET+(J6-1)*MLPHIDDEN+J3)-SECH2(J3)  
340: !                 ENDIF 
341: !              ENDIF 
342:             ENDDO 
343:          ENDDO 
344:       ENDDO 
345: ! 
346: ! w^bh_j hidden with w^bh k  
347: ! 
348:       DO J6=1,MLPHIDDEN ! j 
349:          DUMMY1=0.0D0 
350:          DO J4=1,MLPOUT 
351:             DUMMY1=DUMMY1+PROB(J4)*X(MLPOFFSET+(J4-1)*MLPHIDDEN+J6) 
352:          ENDDO 
353:          DO J2=1,MLPHIDDEN ! k 
354:             DUMMY2=0.0D0 
355:             DO J4=1,MLPOUT 
356:                DUMMY2=DUMMY2+X(MLPOFFSET+(J4-1)*MLPHIDDEN+J6)*DPEDWBHJ(J4,J2) 
357:             ENDDO 
358:             HESS(BOFFSET1+J6,BOFFSET1+J2)=HESS(BOFFSET1+J6,BOFFSET1+J2)+SECH2(J6)*DUMMY2 
359:             IF (J2.EQ.J6) THEN 
360:                HESS(BOFFSET1+J6,BOFFSET1+J2)=HESS(BOFFSET1+J6,BOFFSET1+J2)+2.0D0*SECH2(J6)*TANHSUM(J6)*(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+J6)-DUMMY1) 
361:             ENDIF 
362:          ENDDO 
363:       ENDDO 
364: ! 
365: ! w^bh_j hidden with w^2 beta gamma (hidden in) 
366: ! 
367:       DO J6=1,MLPHIDDEN ! j 
368:          DUMMY1=0.0D0 
369:          DO J4=1,MLPOUT 
370:             DUMMY1=DUMMY1+PROB(J4)*X(MLPOFFSET+(J4-1)*MLPHIDDEN+J6) 
371:          ENDDO 
372:  
373:          DO J2=1,MLPHIDDEN ! J2 is beta 
374:             DO J3=1,MLPIN  ! J3 is gamma 
375:  
376:                DUMMY4=0.0D0 
377:                DO J4=1,MLPOUT 
378:                   DUMMY4=DUMMY4+X(MLPOFFSET+(J4-1)*MLPHIDDEN+J6)*DPEDW2BG(J4,J2,J3) 
379:                ENDDO 
380:  
381:                HESS(BOFFSET1+J6,(J2-1)*MLPIN+J3)=HESS(BOFFSET1+J6,(J2-1)*MLPIN+J3) + SECH2(J6)*DUMMY4 
382:                IF (J2.EQ.J6) THEN 
383:                   HESS(BOFFSET1+J6,(J2-1)*MLPIN+J3)=HESS(BOFFSET1+J6,(J2-1)*MLPIN+J3)+2.0D0*SECH2(J6)*TANHSUM(J6)*MLPDAT(J1,J3) & 
384:   &                  * (X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+J6)-DUMMY1) 
385:                ENDIF 
386:             ENDDO 
387:          ENDDO 
388:       ENDDO 
389:  
390:    ENDIF ! end of sect block 
391:  
392: ENDDO ! end of sum over data items counter J1 
393:  
394: NREG=NMLP 
395: ! 
396: ! If NOREGBIAS is true then exclude regularisation over bias weights, which start at 
397: ! variable BOFFSET1 + 1 
398: ! 
399: IF (NOREGBIAS) NREG=BOFFSET1 
400:  
401: DUMMY1=0.0D0 
402: DO J1=1,NREG 
403:    DUMMY1=DUMMY1+X(J1)**2 
404: ENDDO 
405:  
406: ENERGY=ENERGY/MLPDATA + MLPLAMBDA*DUMMY1 
407: ! IF (DEBUG) WRITE(*,'(A,G20.10)') 'MLP3> objective function=',ENERGY 
408:  
409: IF (GTEST) V(1:NMLP)=V(1:NMLP)/MLPDATA  
410: IF (GTEST) V(1:NREG)=V(1:NREG) + 2.0D0*MLPLAMBDA*X(1:NREG) 
411: ! 
412: ! Symmetrise Hessian here 
413: ! 
414: IF (SECT) HESS(1:NMLP,1:NMLP)=HESS(1:NMLP,1:NMLP)/MLPDATA 
415: IF (SECT) THEN 
416:    DO J1=1,NREG 
417:       HESS(J1,J1)=HESS(J1,J1)+2*MLPLAMBDA 
418: !     IF (MLPNEWREG) HESS(J1,J1)=HESS(J1,J1)+6.0D0*MLPLAMBDA/MAX(1.0D-100,X(J1)**4) 
419:    ENDDO 
420:    DO J1=1,NMLP 
421:       DO J2=1,J1-1 
422:          HESS(J2,J1)=HESS(J1,J2) 
423:       ENDDO 
424:    ENDDO 
425: ENDIF 
426:  
427: END SUBROUTINE MLPVB3 


r31705/potential.f90 2017-01-21 10:36:01.698250000 +0000 r31704/potential.f90 2017-01-21 10:36:04.778250000 +0000
351:       CALL RAD(X, GRAD, EREAL, GRADT)351:       CALL RAD(X, GRAD, EREAL, GRADT)
352:       CALL MSC(X, GRAD, EREAL, GRADT)352:       CALL MSC(X, GRAD, EREAL, GRADT)
353: 353: 
354:    ELSE IF (ACKLANDT) THEN354:    ELSE IF (ACKLANDT) THEN
355:       CALL RAD(X, GRAD, EREAL, GRADT)355:       CALL RAD(X, GRAD, EREAL, GRADT)
356:       CALL ACK(X, GRAD, EREAL, GRADT)356:       CALL ACK(X, GRAD, EREAL, GRADT)
357: 357: 
358:    ELSE IF (FAL.OR.FNI) THEN358:    ELSE IF (FAL.OR.FNI) THEN
359:       CALL RAD(X, GRAD, EREAL, GRADT)359:       CALL RAD(X, GRAD, EREAL, GRADT)
360:       CALL FARKAS(X, GRAD, EREAL, GRADT, NATOMS)360:       CALL FARKAS(X, GRAD, EREAL, GRADT, NATOMS)
361:    ELSE IF (MLPVB3T) THEN 
362:       CALL MLPVB3(X, GRAD, EREAL, GRADT, SECT) 
363:    ELSE IF (MLPB3T) THEN361:    ELSE IF (MLPB3T) THEN
364:       CALL MLPB3(X, GRAD, EREAL, GRADT, SECT)362:       CALL MLPB3(X, GRAD, EREAL, GRADT, SECT)
365: !       DIFF=1.0D-4363: !       DIFF=1.0D-4
366: !       WRITE(MYUNIT, *) 'analytic and numerical gradients:'364: !       WRITE(MYUNIT, *) 'analytic and numerical gradients:'
367: !       DO J1=1, NATOMS365: !       DO J1=1, NATOMS
368: !          X(J1)=X(J1)+DIFF366: !          X(J1)=X(J1)+DIFF
369: !          CALL MLPB3(X, GPLUS, EPLUS,.FALSE.,.FALSE.)367: !          CALL MLPB3(X, GPLUS, EPLUS,.FALSE.,.FALSE.)
370: !          X(J1)=X(J1)-2.0D0*DIFF368: !          X(J1)=X(J1)-2.0D0*DIFF
371: !          CALL MLPB3(X, GMINUS, EMINUS,.FALSE.,.FALSE.)369: !          CALL MLPB3(X, GMINUS, EMINUS,.FALSE.,.FALSE.)
372: !          X(J1)=X(J1)+DIFF370: !          X(J1)=X(J1)+DIFF


r31705/quench.F 2017-01-21 10:36:01.938250000 +0000 r31704/quench.F 2017-01-21 10:36:05.050250000 +0000
108:       IF (DFTBCT.AND.LJATT) GUIDET=.TRUE.108:       IF (DFTBCT.AND.LJATT) GUIDET=.TRUE.
109:       IF (DFTBCT.AND.GUIDET) THEN109:       IF (DFTBCT.AND.GUIDET) THEN
110:          LJATT=.TRUE.110:          LJATT=.TRUE.
111:          IF (DEBUG) WRITE(MYUNIT,'(A)') 'quench> Turning on LJAT guiding potential and rescaling coordinates'111:          IF (DEBUG) WRITE(MYUNIT,'(A)') 'quench> Turning on LJAT guiding potential and rescaling coordinates'
112:          COORDS(1:3*NATOMS,NP)=COORDS(1:3*NATOMS,NP)/LJATTOC112:          COORDS(1:3*NATOMS,NP)=COORDS(1:3*NATOMS,NP)/LJATTOC
113:       ENDIF113:       ENDIF
114:       IF (CSMGUIDET) CSMDOGUIDET=.TRUE.114:       IF (CSMGUIDET) CSMDOGUIDET=.TRUE.
115:       NOPT=3*NATOMS115:       NOPT=3*NATOMS
116:       IF (WENZEL) NOPT=2116:       IF (WENZEL) NOPT=2
117:       IF (MULLERBROWNT) NOPT=2117:       IF (MULLERBROWNT) NOPT=2
118:       IF (MLP3T.OR.MLPB3T.OR.MLPVB3T) NOPT=NMLP118:       IF (MLP3T.OR.MLPB3T) NOPT=NMLP
119:       IF (MLQT) NOPT=NMLQ119:       IF (MLQT) NOPT=NMLQ
120: !120: !
121: !  QTEST is set for the final quenches with tighter convergence criteria.121: !  QTEST is set for the final quenches with tighter convergence criteria.
122: !122: !
123:       IF (QTEST) THEN123:       IF (QTEST) THEN
124:          GMAX=CQMAX124:          GMAX=CQMAX
125:       ELSE125:       ELSE
126:          GMAX=BQMAX126:          GMAX=BQMAX
127:       ENDIF127:       ENDIF
128: 128: 


r31705/takestep.f 2017-01-21 10:36:03.054250000 +0000 r31704/takestep.f 2017-01-21 10:36:05.322250000 +0000
 64: !  Calling CENTRE if NORESET is .TRUE. can lead to problems with COORDSO containing an atom 64: !  Calling CENTRE if NORESET is .TRUE. can lead to problems with COORDSO containing an atom
 65: !  outside the permitted radius. Then it may be impossible to take a step that keeps all the 65: !  outside the permitted radius. Then it may be impossible to take a step that keeps all the
 66: !  atoms inside. 66: !  atoms inside.
 67: ! 67: !
 68:       PISQ = PI*PI 68:       PISQ = PI*PI
 69:       NTRIESMAX=100 69:       NTRIESMAX=100
 70:  70: 
 71: !     IF (CENT.AND.(.NOT.SEEDT)) CALL CENTRE2(COORDS(1:3*NATOMS,NP)) ! COORDS might have been shifted by symmetry 71: !     IF (CENT.AND.(.NOT.SEEDT)) CALL CENTRE2(COORDS(1:3*NATOMS,NP)) ! COORDS might have been shifted by symmetry
 72:       IF ((.NOT.NORESET).AND.(.NOT.PERMOPT).AND.(.NOT.DIFFRACTT).AND.(.NOT.BLNT).AND.(.NOT.PERIODIC)  72:       IF ((.NOT.NORESET).AND.(.NOT.PERMOPT).AND.(.NOT.DIFFRACTT).AND.(.NOT.BLNT).AND.(.NOT.PERIODIC) 
 73:      &   .AND.(.NOT.PERMINVOPT).AND.(.NOT.QCIPOTT).AND.(.NOT.MLP3T).AND.(.NOT.MLQT).AND.(.NOT.MKTRAPT).AND.(.NOT.MLPB3T) 73:      &   .AND.(.NOT.PERMINVOPT).AND.(.NOT.QCIPOTT).AND.(.NOT.MLP3T).AND.(.NOT.MLQT).AND.(.NOT.MKTRAPT).AND.(.NOT.MLPB3T)
 74:      &   .AND.(.NOT.GAUSST).AND.(.NOT.(CSMT.AND.(.NOT.SYMMETRIZECSM))).AND.(.NOT.PERCOLATET) 74:      &   .AND.(.NOT.GAUSST).AND.(.NOT.(CSMT.AND.(.NOT.SYMMETRIZECSM))).AND.(.NOT.PERCOLATET)) THEN
 75:      &   .AND.(.NOT.MLPVB3T)) THEN 
 76: ! 75: !
 77: !        csw34> CHECK NOTHING HAS MOVED OUTSIDE THE CONTAINER RADIUS  76: !        csw34> CHECK NOTHING HAS MOVED OUTSIDE THE CONTAINER RADIUS 
 78: ! 77: !
 79:          DO J1=1,NATOMS 78:          DO J1=1,NATOMS
 80:             IF ((.NOT.RIGID).OR.(J1.LE.NATOMS/2)) THEN 79:             IF ((.NOT.RIGID).OR.(J1.LE.NATOMS/2)) THEN
 81:                J2=3*J1 80:                J2=3*J1
 82:                DUMMY2=COORDS(J2-2,NP)**2+COORDS(J2-1,NP)**2+COORDS(J2,NP)**2 81:                DUMMY2=COORDS(J2-2,NP)**2+COORDS(J2-1,NP)**2+COORDS(J2,NP)**2
 83:                IF (DUMMY2.GT.RADIUS) THEN 82:                IF (DUMMY2.GT.RADIUS) THEN
 84:                   IF (AMBERT) THEN ! jmc49 We don't really want a container at all in amber9, but this bit of code is being used  83:                   IF (AMBERT) THEN ! jmc49 We don't really want a container at all in amber9, but this bit of code is being used 
 85:                                    ! to warn about drift in, for instance, the amber-md. 84:                                    ! to warn about drift in, for instance, the amber-md.
397:             IF (TMOVE(NP)) LOCALSTEP=STEP(NP)396:             IF (TMOVE(NP)) LOCALSTEP=STEP(NP)
398:             IF (TMOVE(NP).AND.TBP) LOCALSTEP=STEP(NP)*TBPINCR ! jdf43>397:             IF (TMOVE(NP).AND.TBP) LOCALSTEP=STEP(NP)*TBPINCR ! jdf43>
399:          ENDIF398:          ENDIF
400: !399: !
401: !  Angular move block.400: !  Angular move block.
402: !  If NORESET is .TRUE. then VAT won;t be set, so we should skip this block.401: !  If NORESET is .TRUE. then VAT won;t be set, so we should skip this block.
403: !402: !
404: !        IF (J1.EQ.JMAX) WRITE(MYUNIT,'(A,I6,4F15.5)') 'JMAX,VAT,ASTEP(NP),VMIN,prod=',JMAX,VAT(J1,NP), 403: !        IF (J1.EQ.JMAX) WRITE(MYUNIT,'(A,I6,4F15.5)') 'JMAX,VAT,ASTEP(NP),VMIN,prod=',JMAX,VAT(J1,NP), 
405: !    &                                    ASTEP(NP),VMIN,ASTEP(NP)*VMIN404: !    &                                    ASTEP(NP),VMIN,ASTEP(NP)*VMIN
406:          IF (((VAT(J1,NP).GT.ASTEP(NP)*VMIN).AND.(J1.EQ.JMAX)).AND.(.NOT.BLNT).AND.!(.NOT.RIGID).AND.405:          IF (((VAT(J1,NP).GT.ASTEP(NP)*VMIN).AND.(J1.EQ.JMAX)).AND.(.NOT.BLNT).AND.!(.NOT.RIGID).AND.
407:      &         (.NOT.DIFFRACTT).AND.(.NOT.GAUSST).AND.(.NOT.PERCOLATET).AND.(.NOT.MLPVB3T)406:      &         (.NOT.DIFFRACTT).AND.(.NOT.GAUSST).AND.(.NOT.PERCOLATET) 
408:      &        .AND.(.NOT.NORESET).AND.(.NOT.PERIODIC).AND.(.NOT.THOMSONT).AND.(.NOT.ONEDAPBCT).AND.(.NOT.ONEDPBCT)407:      &        .AND.(.NOT.NORESET).AND.(.NOT.PERIODIC).AND.(.NOT.THOMSONT).AND.(.NOT.ONEDAPBCT).AND.(.NOT.ONEDPBCT)
409:      &      .AND.(.NOT.TWODPBCT).AND.(.NOT.THREEDAPBCT).AND.(.NOT.THREEDPBCT).AND.(.NOT.QCIPOTT).AND.(.NOT.MLP3T).AND.(.NOT.MLPB3T)408:      &      .AND.(.NOT.TWODPBCT).AND.(.NOT.THREEDAPBCT).AND.(.NOT.THREEDPBCT).AND.(.NOT.QCIPOTT).AND.(.NOT.MLP3T).AND.(.NOT.MLPB3T)
410:      &       .AND.(.NOT.MLQT).AND.(.NOT.TWODAPBCT).AND.(.NOT.((NCORE(NP).GT.0).AND.(J1.GT.NATOMS-NCORE(NP))))) THEN409:      &       .AND.(.NOT.MLQT).AND.(.NOT.TWODAPBCT).AND.(.NOT.((NCORE(NP).GT.0).AND.(J1.GT.NATOMS-NCORE(NP))))) THEN
411: 410: 
412:             IF (DEBUG) WRITE(MYUNIT,'(A,I4,A,F12.4,A,F12.4,A,I4,A,F12.4)') 'angular move for atom ',J1, 411:             IF (DEBUG) WRITE(MYUNIT,'(A,I4,A,F12.4,A,F12.4,A,I4,A,F12.4)') 'angular move for atom ',J1, 
413:      &           ' V=',VMAX,' Vmin=',VMIN,' next most weakly bound atom is ',JMAX2,' V=',VMAX2412:      &           ' V=',VMAX,' Vmin=',VMIN,' next most weakly bound atom is ',JMAX2,' V=',VMAX2
414: 413: 
415:            THETA=DPRAND()*PI414:            THETA=DPRAND()*PI
416:            PHI=DPRAND()*PI*2.0D0415:            PHI=DPRAND()*PI*2.0D0
417: !416: !
592:               COORDS(J2-1,NP)=COORDS(J2-1,NP)+LOCALSTEP*RANDOM*DUMMY591:               COORDS(J2-1,NP)=COORDS(J2-1,NP)+LOCALSTEP*RANDOM*DUMMY
593:               RANDOM=(DPRAND()-0.5D0)*2.0D0592:               RANDOM=(DPRAND()-0.5D0)*2.0D0
594: !             COORDS(J2,NP)=COORDS(J2,NP)+LOCALSTEP*RANDOM*CMDIST(J1)/CMMAX593: !             COORDS(J2,NP)=COORDS(J2,NP)+LOCALSTEP*RANDOM*CMDIST(J1)/CMMAX
595:               IF (.NOT.TWOD) COORDS(J2,NP)=COORDS(J2,NP)+LOCALSTEP*RANDOM*DUMMY594:               IF (.NOT.TWOD) COORDS(J2,NP)=COORDS(J2,NP)+LOCALSTEP*RANDOM*DUMMY
596:            ENDIF595:            ENDIF
597: !596: !
598: ! Stop atoms leaving the container in this step597: ! Stop atoms leaving the container in this step
599: !598: !
600:            IF ((.NOT.PERIODIC).AND.(.NOT.AMBERT).AND.(.NOT.(RIGID.AND.((J1.GT.NATOMS/2)))).AND.(.NOT.BLNT).AND.(.NOT.MLP3T)599:            IF ((.NOT.PERIODIC).AND.(.NOT.AMBERT).AND.(.NOT.(RIGID.AND.((J1.GT.NATOMS/2)))).AND.(.NOT.BLNT).AND.(.NOT.MLP3T)
601:      1     .AND.(.NOT.PERCOLATET).AND.(.NOT.DIFFRACTT).AND.(.NOT.THOMSONT).AND.(.NOT.GAUSST).AND.(.NOT.QCIPOTT)600:      1     .AND.(.NOT.PERCOLATET).AND.(.NOT.DIFFRACTT).AND.(.NOT.THOMSONT).AND.(.NOT.GAUSST).AND.(.NOT.QCIPOTT)
602:      2     .AND.(.NOT.MKTRAPT).AND.(.NOT.MLPB3T).AND.(.NOT.MLQT).AND.(.NOT.MLPVB3T)) THEN601:      2     .AND.(.NOT.MKTRAPT).AND.(.NOT.MLPB3T).AND.(.NOT.MLQT)) THEN
603: !          IF ((.NOT.PERIODIC).AND.(.NOT.AMBER).AND.(.NOT.(RIGID.AND.(LOCALSTEP.EQ.0.0D0))).AND.(.NOT.BLNT)) THEN602: !          IF ((.NOT.PERIODIC).AND.(.NOT.AMBER).AND.(.NOT.(RIGID.AND.(LOCALSTEP.EQ.0.0D0))).AND.(.NOT.BLNT)) THEN
604:               DUMMY=COORDS(J2-2,NP)**2+COORDS(J2-1,NP)**2+COORDS(J2,NP)**2603:               DUMMY=COORDS(J2-2,NP)**2+COORDS(J2-1,NP)**2+COORDS(J2,NP)**2
605: !604: !
606: !  Simply rescaling the radius of an atom that leaves the container will bias the sampling605: !  Simply rescaling the radius of an atom that leaves the container will bias the sampling
607: !  of configuration space. However, we are not using takestep for bspt thermodynamic sampling!606: !  of configuration space. However, we are not using takestep for bspt thermodynamic sampling!
608: !  So, put the atom back in the container on the other side!607: !  So, put the atom back in the container on the other side!
609: !608: !
610: !              IF (DUMMY.GT.RADIUS) THEN609: !              IF (DUMMY.GT.RADIUS) THEN
611: !                 COORDS(J2-2,NP)=(SQRT(RADIUS)-0.5D0)*COORDS(J2-2,NP)/SQRT(DUMMY)610: !                 COORDS(J2-2,NP)=(SQRT(RADIUS)-0.5D0)*COORDS(J2-2,NP)/SQRT(DUMMY)
612: !                 COORDS(J2-1,NP)=(SQRT(RADIUS)-0.5D0)*COORDS(J2-1,NP)/SQRT(DUMMY)611: !                 COORDS(J2-1,NP)=(SQRT(RADIUS)-0.5D0)*COORDS(J2-1,NP)/SQRT(DUMMY)


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0