hdiff output

r29854/key.f90 2016-03-16 18:32:37.174480994 +0000 r29853/key.f90 2016-03-16 18:32:38.010489593 +0000
 44:      &        CHECKCONINT, ATOMMATCHFULL, NIH2LEPST,NIHEAM7T,NIHLEPST, NIHPAIRONLYT, & 44:      &        CHECKCONINT, ATOMMATCHFULL, NIH2LEPST,NIHEAM7T,NIHLEPST, NIHPAIRONLYT, &
 45:      &        QSPCFWT, QTIP4PFT, CFUSIONT, DUMPINTXYZ, DUMPINTEOS, INTLJT, INTTST, EYTRAPT, OHCELLT, MKTRAPT, & 45:      &        QSPCFWT, QTIP4PFT, CFUSIONT, DUMPINTXYZ, DUMPINTEOS, INTLJT, INTTST, EYTRAPT, OHCELLT, MKTRAPT, &
 46:      &        INTFREEZET, LPERMDIST, CHECKNEGATIVET, CHECKOVERLAPT, ACK1, ACK2, CONDATT, USERPOTT, & 46:      &        INTFREEZET, LPERMDIST, CHECKNEGATIVET, CHECKOVERLAPT, ACK1, ACK2, CONDATT, USERPOTT, &
 47:      &        CONCUTFRACT, CONCUTABST, ENDNUMHESS2, CHARMMDFTBT, PAIRCOLOURT, REVERSEUPHILLT, WHOLEDNEB, & 47:      &        CONCUTFRACT, CONCUTABST, ENDNUMHESS2, CHARMMDFTBT, PAIRCOLOURT, REVERSEUPHILLT, WHOLEDNEB, &
 48:      &        NONEBMAX, READMASST, ONEDAPBCT, ONEDPBCT, INVTONEDPBCT, INVTTWODPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, & 48:      &        NONEBMAX, READMASST, ONEDAPBCT, ONEDPBCT, INVTONEDPBCT, INVTTWODPBCT, TWODAPBCT, TWODPBCT, THREEDAPBCT, &
 49:      &        THREEDPBCT, FOURDAPBCT, FOURDPBCT, MODEDOWNT, CHEMSHIFT, TTM3T, & 49:      &        THREEDPBCT, FOURDAPBCT, FOURDPBCT, MODEDOWNT, CHEMSHIFT, TTM3T, &
 50:      &        NOINVERSION, INVERTPT, KNOWVECS, PMPATHT, AAORIENTT, MULTIJOBT, QUIPARGSTRT, QUIPPARAMST, HESSDUMPT, & 50:      &        NOINVERSION, INVERTPT, KNOWVECS, PMPATHT, AAORIENTT, MULTIJOBT, QUIPARGSTRT, QUIPPARAMST, HESSDUMPT, &
 51:      &        CLASSICALRATEST, TSPLITTINGT, HESSREADT, INSTANTONOPTT,INSTANTONSTARTDUMPT,VARSTEPOPTT, MOLPRO, REAXFFT, & 51:      &        CLASSICALRATEST, TSPLITTINGT, HESSREADT, INSTANTONOPTT,INSTANTONSTARTDUMPT,VARSTEPOPTT, MOLPRO, REAXFFT, &
 52:      &        EIGENONLY,OVERCONV, GLJT,CLSTRINGT,CLSTRINGTST, PHI4MODT, EX1DT, MCPATHT, MCBIAST, RPHT, TWISTT, MCPATH2T, & 52:      &        EIGENONLY,OVERCONV, GLJT,CLSTRINGT,CLSTRINGTST, PHI4MODT, EX1DT, MCPATHT, MCBIAST, RPHT, TWISTT, MCPATH2T, &
 53:      &        PBST, SSHT, GAUSSIAN03, CPPNEBT, CUDAT, CUDATIMET, TRUSTMODET,MODELOST, METRICTENSOR, INTSPRINGACTIVET, & 53:      &        PBST, SSHT, GAUSSIAN03, CPPNEBT, CUDAT, CUDATIMET, TRUSTMODET,MODELOST, METRICTENSOR, INTSPRINGACTIVET, &
 54:      &        PERMGUESS, QCIPERMCHECK, DUMPFRQST, MULTIPOTT, MLP3T, MLPB3T, DUMPBESTPATH 54:      &        PERMGUESS, QCIPERMCHECK, DUMPFRQST, MULTIPOTT, MLP3T, DUMPBESTPATH
 55:  55: 
 56: ! bf269 > polymer in a pore (non-bonding (LJ) energy from neighbours is not subtracted) 56: ! bf269 > polymer in a pore (non-bonding (LJ) energy from neighbours is not subtracted)
 57:       LOGICAL :: PORE8T = .FALSE. ! add 8th power cylindrical pore to the potential? 57:       LOGICAL :: PORE8T = .FALSE. ! add 8th power cylindrical pore to the potential?
 58:       INTEGER :: PORE8_AXIS = 3 ! principal axis of the cylindric pore (1:x, 2:y, 3:z) 58:       INTEGER :: PORE8_AXIS = 3 ! principal axis of the cylindric pore (1:x, 2:y, 3:z)
 59:       DOUBLE PRECISION :: PORE8_ENERGY = 1.0d1 ! energy of the pore when radius = 1 59:       DOUBLE PRECISION :: PORE8_ENERGY = 1.0d1 ! energy of the pore when radius = 1
 60:       LOGICAL :: HARMPOLYT = .FALSE. ! add harmonic bonds between the beads 60:       LOGICAL :: HARMPOLYT = .FALSE. ! add harmonic bonds between the beads
 61:       DOUBLE PRECISION :: HARMPOLY_BONLEN = 0.0d0 ! equilibrium length of springs between beads 61:       DOUBLE PRECISION :: HARMPOLY_BONLEN = 0.0d0 ! equilibrium length of springs between beads
 62:       DOUBLE PRECISION :: HARMPOLY_K = 1.0d2 ! force constant of the springs 62:       DOUBLE PRECISION :: HARMPOLY_K = 1.0d2 ! force constant of the springs
 63:  63: 
 64: ! hk286 > generalised THOMSON problem 64: ! hk286 > generalised THOMSON problem


r29854/keywords.f 2016-03-16 18:32:37.410483421 +0000 r29853/keywords.f 2016-03-16 18:32:38.210491649 +0000
883:          DUMPFRQST=.FALSE.883:          DUMPFRQST=.FALSE.
884: 884: 
885:          CUDAT=.FALSE.885:          CUDAT=.FALSE.
886:          CUDAPOT=' '886:          CUDAPOT=' '
887:          CUDATIMET=.FALSE.887:          CUDATIMET=.FALSE.
888: 888: 
889: !889: !
890: ! Neural network potential890: ! Neural network potential
891: !891: !
892:          MLP3T=.FALSE.892:          MLP3T=.FALSE.
893:          MLPB3T=.FALSE. 
894:          MLPLAMBDA=0.0D0893:          MLPLAMBDA=0.0D0
895: 894: 
896:          CLSTRINGT=.FALSE.895:          CLSTRINGT=.FALSE.
897:          CLSTRINGTST=.FALSE.896:          CLSTRINGTST=.FALSE.
898:          IF (FILTH2.EQ.0) THEN897:          IF (FILTH2.EQ.0) THEN
899:             OPEN (5,FILE='odata',STATUS='OLD')898:             OPEN (5,FILE='odata',STATUS='OLD')
900:          ELSE899:          ELSE
901:             WRITE(OTEMP,*) FILTH2900:             WRITE(OTEMP,*) FILTH2
902:             WRITE(OSTRING,'(A)') 'odata.' // TRIM(ADJUSTL(OTEMP))901:             WRITE(OSTRING,'(A)') 'odata.' // TRIM(ADJUSTL(OTEMP))
903:             OPEN (5,FILE=OSTRING,STATUS='OLD')902:             OPEN (5,FILE=OSTRING,STATUS='OLD')
3680:          ELSE IF (WORD.EQ.'MINBACKTCUT') THEN3679:          ELSE IF (WORD.EQ.'MINBACKTCUT') THEN
3681:             CALL READF(MINBACKTCUT)3680:             CALL READF(MINBACKTCUT)
3682: !3681: !
3683: ! Three layer neural network (multilayer perceptron) with3682: ! Three layer neural network (multilayer perceptron) with
3684: ! MLPIN inputs (columns per data item)3683: ! MLPIN inputs (columns per data item)
3685: ! MLPOUT outputs3684: ! MLPOUT outputs
3686: ! MLPHIDDEN hidden nodes3685: ! MLPHIDDEN hidden nodes
3687: ! MLPDATA data lines in MLPdata file (last column MLPIN+1 for correct outputs, numbered one to MLPOUT)3686: ! MLPDATA data lines in MLPdata file (last column MLPIN+1 for correct outputs, numbered one to MLPOUT)
3688: ! MLPLAMBDA coefficient for regularisation3687: ! MLPLAMBDA coefficient for regularisation
3689: !3688: !
3690:       ELSE IF ((WORD.EQ.'MLP3').OR.(WORD.EQ.'MLPB3')) THEN3689:       ELSE IF (WORD.EQ.'MLP3') THEN
3691:          MLP3T=.TRUE.3690:          MLP3T=.TRUE.
3692:          IF (WORD.EQ.'MLPB3') MLPB3T=.TRUE. 
3693:          CALL READI(MLPIN)3691:          CALL READI(MLPIN)
3694:          CALL READI(MLPHIDDEN)3692:          CALL READI(MLPHIDDEN)
3695:          CALL READI(MLPOUT)3693:          CALL READI(MLPOUT)
3696:          CALL READI(MLPDATA)3694:          CALL READI(MLPDATA)
3697:          IF (NITEMS.GT.5) CALL READF(MLPLAMBDA)3695:          IF (NITEMS.GT.5) CALL READF(MLPLAMBDA)
3698:          IF (WORD.EQ.'MLPB3') THEN3696:          WRITE(*,'(A,4I8,G20.10)') 'MLP3 potential with Nin, Nhidden, Nout, Ndata, lambda=',
3699:             WRITE(*,'(A,4I8,G20.10)') 'MLPB3 potential with two bias nodes and Nin, Nhidden, Nout, Ndata, lambda=', 
3700:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPLAMBDA3697:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPLAMBDA
3701:             NMLP=MLPHIDDEN*(MLPIN+MLPOUT)+23698:          NMLP=MLPHIDDEN*(MLPIN+MLPOUT)
3702:          ELSE 
3703:             WRITE(*,'(A,4I8,G20.10)') 'MLP3 potential with Nin, Nhidden, Nout, Ndata, lambda=', 
3704:      &                                   MLPIN,MLPHIDDEN,MLPOUT,MLPDATA,MLPLAMBDA 
3705:             NMLP=MLPHIDDEN*(MLPIN+MLPOUT) 
3706:          ENDIF 
3707:          IF (NMLP.NE.NATOMS) THEN3699:          IF (NMLP.NE.NATOMS) THEN
3708:             PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP3700:             PRINT '(A,2I8)', 'keywords> ERROR *** NATOMS,NMLP=',NATOMS,NMLP
3709:             STOP3701:             STOP
3710:          ENDIF3702:          ENDIF
3711:          LUNIT=GETUNIT()3703:          LUNIT=GETUNIT()
3712:          OPEN(LUNIT,FILE='MLPdata',STATUS='OLD')3704:          OPEN(LUNIT,FILE='MLPdata',STATUS='OLD')
3713:          ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA))3705:          ALLOCATE(MLPDAT(MLPDATA,MLPIN),MLPOUTCOME(MLPDATA))
3714:          DO J1=1,MLPDATA3706:          DO J1=1,MLPDATA
3715:             READ(LUNIT,*) MLPDAT(J1,1:MLPIN),MLPOUTCOME(J1)3707:             READ(LUNIT,*) MLPDAT(J1,1:MLPIN),MLPOUTCOME(J1)
3716:             MLPOUTCOME(J1)=MLPOUTCOME(J1)+1 ! to shift the range to 1 to 43708:             MLPOUTCOME(J1)=MLPOUTCOME(J1)+1 ! to shift the range to 1 to 4


r29854/MLPB3.f90 2016-03-16 18:32:36.950478688 +0000 r29853/MLPB3.f90 2016-03-16 18:32:37.806487494 +0000
  1: SUBROUTINE MLPB3(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/MLPB3.f90' in revision 29853
  2: USE KEY 
  3: USE MODHESS 
  4: USE COMMONS, ONLY : DEBUG 
  5: IMPLICIT NONE 
  6: LOGICAL GTEST,SECT 
  7: DOUBLE PRECISION X(NMLP), V(NMLP), ENERGY, DUMMY1, DUMMY2, DUMMY3, DUMMY4, SUMINPUTS 
  8: DOUBLE PRECISION Y(MLPOUT), PROB(MLPOUT), PMLPOUTJ1, DMAX 
  9: DOUBLE PRECISION DYW1G(MLPHIDDEN), DPCW1BG(MLPOUT,MLPHIDDEN) 
 10: DOUBLE PRECISION DYW2G(MLPOUT,MLPHIDDEN,MLPIN), DPCW2BG(MLPHIDDEN,MLPIN), TANHSUM(MLPHIDDEN), SECH2(MLPHIDDEN) 
 11: DOUBLE PRECISION DYCDBHID(MLPOUT), DPCDBHID(MLPOUT), DPCDBHIDOUTJ1, D2PCDBHID2, D2YCDBH2(MLPOUT) 
 12: DOUBLE PRECISION DPCDW2BG(MLPOUT,MLPHIDDEN,MLPIN), D2YCDBHIDDW2BG, D2PCDBHIDDW2BG 
 13: DOUBLE PRECISION DPCDBHIDDW1BG(MLPOUT,MLPHIDDEN) 
 14: INTEGER MLPOUTJ1, MLPOFFSET, BOFFSET 
 15: INTEGER GETUNIT, LUNIT, J1, J2, J3, J4, K4, K2, K3, J5 
 16:  
 17: ! 
 18: ! Variables are ordered  
 19: ! w^2_{jk} at (j-1)*MLPIN+k 
 20: !   up to MLPHIDDEN*MLPIN, then 
 21: ! w^1_{ij} at MLPHIDDEN*MLPIN + (i-1)*MLPHIDDEN+j 
 22: !   up to MLPHIDDEN*MLPIN + MLPOUT*MLPHIDDEN 
 23: ! bhidden at MLPHIDDEN*(MLPIN+MLPOUT)+1 
 24: ! bout    at MLPHIDDEN*(MLPIN+MLPOUT)+2 
 25: ! 
 26:  
 27: MLPOFFSET=MLPHIDDEN*MLPIN 
 28: BOFFSET=MLPHIDDEN*(MLPIN+MLPOUT) 
 29: ENERGY=0.0D0 
 30: V(1:NMLP)=0.0D0 
 31: IF (SECT) HESS(1:NMLP,1:NMLP)=0.0D0 
 32: DO J1=1,MLPDATA 
 33:    MLPOUTJ1=MLPOUTCOME(J1) 
 34:    DO J2=1,MLPHIDDEN 
 35:       DUMMY1=0.0D0 
 36:       DO J3=1,MLPIN 
 37:          DUMMY1=DUMMY1+(X((J2-1)*MLPIN+J3)+X(BOFFSET+1))*MLPDAT(J1,J3) 
 38:       ENDDO 
 39:       TANHSUM(J2)=TANH(DUMMY1)  
 40:       DYW1G(J2)=TANHSUM(J2) 
 41: !     PRINT *,'DUMMY1=',DUMMY1 
 42: !     IF (ABS(DUMMY1).GT.20.0D0) THEN 
 43: !        SECH2(J2)=0.0D0 
 44: !     ELSE 
 45:          SECH2(J2)=1.0D0/COSH(DUMMY1)**2  
 46: !     ENDIF 
 47:    ENDDO 
 48: !  DUMMY3=0.0D0 
 49:    DMAX=-1.0D100 
 50:    DO J4=1,MLPOUT 
 51:       DUMMY2=0.0D0 
 52:       DO J2=1,MLPHIDDEN 
 53:          DO J3=1,MLPIN 
 54:             DYW2G(J4,J2,J3)=(X( MLPOFFSET + (J4-1)*MLPHIDDEN + J2 )+X(BOFFSET+2)) * MLPDAT(J1,J3)*SECH2(J2) 
 55:          ENDDO 
 56:          DUMMY2=DUMMY2+(X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)+X(BOFFSET+2))*TANHSUM(J2) 
 57:       ENDDO 
 58: !     IF (DUMMY2.GT.50.0D0) DUMMY2=50.0D0 ! to prevent FPE 
 59:       IF (DUMMY2.GT.DMAX) DMAX=DUMMY2 
 60:       Y(J4)=DUMMY2 
 61: !     DUMMY3=DUMMY3+EXP(DUMMY2) 
 62:    ENDDO   
 63: ! 
 64: ! Factor DMAX out of the exponentials to prevent overflow. 
 65: ! 
 66:    DUMMY3=0.0D0 
 67:    DO J4=1,MLPOUT 
 68:       Y(J4)=Y(J4)-DMAX 
 69:       DUMMY3=DUMMY3+EXP(Y(J4)) 
 70:    ENDDO 
 71:    DO J4=1,MLPOUT 
 72:       PROB(J4)=EXP(Y(J4))/DUMMY3 
 73:    ENDDO 
 74:    PMLPOUTJ1=PROB(MLPOUTJ1) 
 75: !  IF (DEBUG) THEN 
 76: !     WRITE(*,'(A,I8,A)') 'MLP3> data point ',J1,' outputs and probabilities:' 
 77: !     WRITE(*,'(8G15.5)') Y(1:MLPOUT),PROB(1:MLPOUT) 
 78: !  ENDIF 
 79:    ENERGY=ENERGY-LOG(PMLPOUTJ1) 
 80:    IF (GTEST) THEN 
 81: ! 
 82: ! We only need the probability derivative for the probability corresponding to the correct outcome for this data point 
 83: ! 
 84:       DPCW1BG(1:MLPOUT,1:MLPHIDDEN)=0.0D0 
 85:       DO J2=1,MLPHIDDEN 
 86:          DO J4=1,MLPOUT 
 87:             DPCW1BG(J4,J2)=DPCW1BG(J4,J2)-PMLPOUTJ1*PROB(J4)*DYW1G(J2) 
 88:          ENDDO 
 89:          DPCW1BG(MLPOUTJ1,J2)=DPCW1BG(MLPOUTJ1,J2)+PMLPOUTJ1*DYW1G(J2) 
 90:       ENDDO 
 91:  
 92:       DO J3=1,MLPIN 
 93:          DO J2=1,MLPHIDDEN 
 94:             DUMMY3=0.0D0 
 95:             DO J4=1,MLPOUT 
 96:                DUMMY3=DUMMY3+PROB(J4)*DYW2G(J4,J2,J3) 
 97:             ENDDO 
 98:             DPCW2BG(J2,J3)=PMLPOUTJ1*(DYW2G(MLPOUTJ1,J2,J3)-DUMMY3) 
 99:          ENDDO 
100:       ENDDO 
101:  
102:       V(BOFFSET+2)=0.0D0 
103:  
104:       SUMINPUTS=0.0D0 
105:       DO J3=1,MLPIN 
106:          SUMINPUTS=SUMINPUTS+MLPDAT(J1,J3) 
107:       ENDDO 
108:  
109:       DO J4=1,MLPOUT 
110:          DUMMY2=0.0D0 
111:          DO J2=1,MLPHIDDEN 
112:             DUMMY2=DUMMY2+(X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)+X(BOFFSET+2))*SECH2(J2) 
113:          ENDDO 
114:          DYCDBHID(J4)=DUMMY2*SUMINPUTS 
115:       ENDDO 
116:  
117:       DUMMY2=0.0D0 
118:       DO J4=1,MLPOUT 
119:          DUMMY2=DUMMY2+PROB(J4)*DYCDBHID(J4) 
120:       ENDDO 
121:       V(BOFFSET+1)=V(BOFFSET+1)-(DYCDBHID(MLPOUTJ1)-DUMMY2) 
122:       DPCDBHIDOUTJ1=PMLPOUTJ1*(DYCDBHID(MLPOUTJ1)-DUMMY2) 
123:           
124:       DO J4=1,MLPOUT 
125:          DPCDBHID(J4)=PROB(J4)*(DYCDBHID(J4)-DUMMY2) 
126:       ENDDO 
127:  
128:       DO J4=1,MLPOUT 
129:          DO J2=1,MLPHIDDEN 
130:             V(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)=V(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)-DPCW1BG(J4,J2)/PMLPOUTJ1 
131:          ENDDO 
132:       ENDDO 
133:  
134:       DO J3=1,MLPIN 
135:          DO J2=1,MLPHIDDEN 
136:             V((J2-1)*MLPIN+J3)=V((J2-1)*MLPIN+J3)-DPCW2BG(J2,J3)/PMLPOUTJ1 
137:          ENDDO 
138:       ENDDO 
139:    ENDIF 
140:  
141:    IF (SECT) THEN 
142:  
143:       DUMMY2=0.0D0 
144:       DO J4=1,MLPOUT 
145:          DUMMY2=DUMMY2+PROB(J4)*DYCDBHID(J4) 
146:       ENDDO 
147:  
148:       DO J2=1,MLPHIDDEN ! J2 is gamma 
149:          DO J4=1,MLPOUT ! J4 is beta  
150:             DPCDBHIDDW1BG(J4,J2)=-TANHSUM(J2)*PMLPOUTJ1*PROB(J4)*(DYCDBHID(MLPOUTJ1)-DUMMY2) & 
151:   &                  -TANHSUM(J2)*PMLPOUTJ1*PROB(J4)*(DYCDBHID(J4) - DUMMY2) - PMLPOUTJ1*PROB(J4)*SUMINPUTS*SECH2(J2)  
152:          ENDDO 
153:          DPCDBHIDDW1BG(MLPOUTJ1,J2)=DPCDBHIDDW1BG(MLPOUTJ1,J2)+TANHSUM(J2)*PMLPOUTJ1*(DYCDBHID(MLPOUTJ1)-DUMMY2) & 
154:   &              +PMLPOUTJ1*SUMINPUTS*SECH2(J2) 
155:       ENDDO 
156: ! 
157: !     b hidden with w^1 beta gamma 
158: ! 
159:       DO J2=1,MLPHIDDEN ! J2 is gamma 
160:          DO J4=1,MLPOUT ! J4 is beta  
161:             HESS(BOFFSET+1,MLPOFFSET+(J4-1)*MLPHIDDEN+J2)= & 
162:   &         HESS(BOFFSET+1,MLPOFFSET+(J4-1)*MLPHIDDEN+J2) + DPCDBHIDOUTJ1*DPCW1BG(J4,J2)/PMLPOUTJ1**2  & 
163:   &                                -DPCDBHIDDW1BG(J4,J2)/PMLPOUTJ1 
164:          ENDDO 
165:       ENDDO 
166:  
167:       DO J4=1,MLPOUT ! J4 is input epsilon 
168:          DUMMY1=0.0D0 
169:          DO J2=1,MLPHIDDEN ! J2 is gamma 
170:             DUMMY1=DUMMY1+SECH2(J2)*TANHSUM(J2)*(X(MLPHIDDEN*MLPIN + (J4-1)*MLPHIDDEN+J2)+X(BOFFSET+2)) 
171:          ENDDO 
172:          D2YCDBH2(J4)=-2.0D0*SUMINPUTS**2*DUMMY1 
173:       ENDDO 
174:  
175:       DUMMY1=0.0D0 
176:       DUMMY2=0.0D0 
177:       DO J4=1,MLPOUT 
178:          DUMMY1=DUMMY1+PROB(J4)*DYCDBHID(J4) 
179:          DUMMY2=DUMMY2+DPCDBHID(J4)*DYCDBHID(J4)+PROB(J4)*D2YCDBH2(J4) 
180:       ENDDO 
181:  
182:       D2PCDBHID2=DPCDBHID(MLPOUTJ1)**2+PMLPOUTJ1*D2YCDBH2(MLPOUTJ1)-DPCDBHID(MLPOUTJ1)*DUMMY1 & 
183:   &               -PMLPOUTJ1*DUMMY2 
184:  
185:       HESS(BOFFSET+1,BOFFSET+1)=HESS(BOFFSET+1,BOFFSET+1)+DPCDBHID(MLPOUTJ1)**2/PMLPOUTJ1**2-D2PCDBHID2/PMLPOUTJ1 
186: ! 
187: !     b hidden with w^2 beta gamma 
188: ! 
189:       DO J4=1,MLPOUT 
190:          DPCDBHID(J4)=PROB(J4)*(DYCDBHID(J4)-DUMMY2) 
191:       ENDDO 
192:  
193:       DUMMY1=0.0D0 
194:       DO J4=1,MLPOUT 
195:          DUMMY1=DUMMY1+PROB(J4)*DYCDBHID(J4) 
196:       ENDDO 
197:  
198:       DO J2=1,MLPHIDDEN ! J2 is beta 
199:          DO J3=1,MLPIN  ! J3 is gamma 
200:             DUMMY2=0.0D0 
201:             DUMMY3=0.0D0 
202:             DUMMY4=0.0D0 
203:             DO J4=1,MLPOUT 
204:                DUMMY4=DUMMY4+PROB(J4)*DYW2G(J4,J2,J3) 
205:             ENDDO 
206:             DO J4=1,MLPOUT 
207:                DPCDW2BG(J4,J2,J3)=PROB(J4)*(DYW2G(J4,J2,J3)-DUMMY4) 
208:             ENDDO 
209:             DO J4=1,MLPOUT 
210:                DUMMY2=DUMMY2+DYCDBHID(J4)*DPCDW2BG(J4,J2,J3) 
211:                DUMMY3=DUMMY3-2.0D0*PROB(J4)*MLPDAT(J1,J3)*SUMINPUTS*(X(MLPOFFSET+(J4-1)*MLPHIDDEN+J2)+X(BOFFSET+2))*SECH2(J2)*TANHSUM(J2) 
212:             ENDDO 
213:  
214:             D2YCDBHIDDW2BG=-2.0D0*MLPDAT(J1,J3)*SUMINPUTS*(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+J2)+X(BOFFSET+2))*SECH2(J2)*TANHSUM(J2) 
215:             D2PCDBHIDDW2BG=DPCDW2BG(MLPOUTJ1,J2,J3)*(DYCDBHID(MLPOUTJ1)-DUMMY1)+PMLPOUTJ1*(D2YCDBHIDDW2BG-DUMMY2-DUMMY3)  
216:             HESS(BOFFSET+1,(J3-1)*MLPHIDDEN+J2)= & 
217:   &         HESS(BOFFSET+1,(J3-1)*MLPHIDDEN+J2) + DPCDBHID(MLPOUTJ1)*DPCDW2BG(MLPOUTJ1,J2,J3)/PMLPOUTJ1**2 - D2PCDBHIDDW2BG/PMLPOUTJ1 
218:          ENDDO 
219:       ENDDO 
220: ! 
221: ! This block w^1 with w^1 is locally symmetric 
222: ! 
223:       DO J4=1,MLPOUT ! J4 is beta  
224:          DO J2=1,MLPHIDDEN ! J2 is gamma 
225:             DO K4=1,J4 ! K4 is alpha 
226:                DO K2=1,MLPHIDDEN ! K2 is epsilon 
227:                   DUMMY1=0.0D0 
228:                   IF ((J4.EQ.MLPOUTJ1).AND.(K4.EQ.MLPOUTJ1)) DUMMY1=1.0D0 
229:                   IF (J4.EQ.MLPOUTJ1) DUMMY1=DUMMY1-PROB(K4) 
230:                   IF (K4.EQ.MLPOUTJ1) DUMMY1=DUMMY1-PROB(J4) 
231:                   IF (K4.EQ.J4) DUMMY1=DUMMY1-PROB(J4) 
232:                   DUMMY1=DUMMY1+2.0D0*PROB(J4)*PROB(K4) 
233:                   HESS(MLPOFFSET+(J4-1)*MLPHIDDEN+J2,MLPOFFSET+(K4-1)*MLPHIDDEN+K2)= & 
234:   &               HESS(MLPOFFSET+(J4-1)*MLPHIDDEN+J2,MLPOFFSET+(K4-1)*MLPHIDDEN+K2) & ! sum over data points 
235:   &               +DPCW1BG(J4,J2)*DPCW1BG(K4,K2)/PMLPOUTJ1**2 & 
236:   &               -DUMMY1*TANHSUM(J2)*TANHSUM(K2) 
237:                ENDDO 
238:             ENDDO 
239:          ENDDO 
240:       ENDDO 
241: ! 
242: ! Off-diagonal w^1 with w^2 blocks 
243: ! 
244:       DO J3=1,MLPOUT ! J3 is beta for w^1 outputs 
245:          DO J2=1,MLPHIDDEN ! J2 is gamma for w^1 hidden 
246:             DO K4=1,MLPHIDDEN ! K4 is alpha for w^2 hidden 
247:                DUMMY3=0.0D0 
248:                DO J5=1,MLPOUT 
249:                   DUMMY3=DUMMY3+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + K4)  
250:                ENDDO 
251:                DO K2=1,MLPIN ! K2 is epsilon for w^2 inputs 
252:                   DUMMY1=0.0D0 
253:                   IF (K4.EQ.J2) DUMMY1=DUMMY1-PMLPOUTJ1*PROB(J3)*MLPDAT(J1,K2)*SECH2(J2) 
254:                   IF ((K4.EQ.J2).AND.(J3.EQ.MLPOUTJ1)) DUMMY1=DUMMY1+PMLPOUTJ1*MLPDAT(J1,K2)*SECH2(J2) 
255:  
256:                   DUMMY2=TANHSUM(J2)*PMLPOUTJ1*MLPDAT(J1,K2)*SECH2(K4) & 
257:   &                      *(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+K4)-DUMMY3) 
258:                   DUMMY1=DUMMY1-PROB(J3)*DUMMY2 
259:                   IF (MLPOUTJ1.EQ.J3) DUMMY1=DUMMY1+DUMMY2 
260:                   DUMMY1=DUMMY1-PMLPOUTJ1*PROB(J3)*MLPDAT(J1,K2)*SECH2(K4)*TANHSUM(J2) & 
261:   &                             *(X(MLPOFFSET + (J3-1)*MLPHIDDEN + K4)-DUMMY3) 
262:                   HESS(MLPOFFSET+(J3-1)*MLPHIDDEN+J2,(K4-1)*MLPIN+K2)= & 
263:   &               HESS(MLPOFFSET+(J3-1)*MLPHIDDEN+J2,(K4-1)*MLPIN+K2) & ! sum over data points 
264:   &               +DPCW1BG(J3,J2)*DPCW2BG(K4,K2)/PMLPOUTJ1**2 & 
265:   &               -DUMMY1/PMLPOUTJ1 
266:                ENDDO 
267:             ENDDO 
268:          ENDDO 
269:       ENDDO 
270: ! 
271: ! diagonal w^2 with w^2  
272: ! 
273:       DO J3=1,MLPIN ! J3 is gamma for w^2 inputs 
274:          DO J2=1,MLPHIDDEN ! J2 is beta for w^2 hidden 
275:             DUMMY2=0.0D0 
276:             DO J5=1,MLPOUT 
277:                DUMMY2=DUMMY2+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + J2)  
278:             ENDDO 
279:             DO K4=1,MLPIN ! K4 is epsilon for w^2 inputs 
280:                DO K2=1,J2 ! K2 is alpha for w^2 hidden 
281:                   DUMMY3=0.0D0 
282:                   DO J5=1,MLPOUT 
283:                      DUMMY3=DUMMY3+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + K2)  
284:                   ENDDO 
285:                   DUMMY4=0.0D0 
286:                   DO J5=1,MLPOUT 
287:                      DUMMY4=DUMMY4+PROB(J5)*X(MLPOFFSET + (J5-1)*MLPHIDDEN + K2)  & ! take out of loops 
288:   &                                        *X(MLPOFFSET + (J5-1)*MLPHIDDEN + J2) 
289:                   ENDDO 
290:                   DUMMY1=DPCW2BG(K2,K4)*MLPDAT(J1,J3)*SECH2(J2) & 
291:   &                      *(X(MLPOFFSET+(MLPOUTJ1-1)*MLPHIDDEN+J2)-DUMMY2) & 
292:   &                      -PMLPOUTJ1*MLPDAT(J1,J3)*SECH2(J2)*MLPDAT(J1,K4)*SECH2(K2) & 
293:   &                      *(DUMMY4-DUMMY2*DUMMY3) 
294:                   IF (K2.EQ.J2) DUMMY1=DUMMY1-2.0D0*PMLPOUTJ1*MLPDAT(J1,K4)*MLPDAT(J1,J3) & 
295:   &                                     *SECH2(J2)*TANHSUM(J2)*(X(MLPOFFSET + (MLPOUTJ1-1)*MLPHIDDEN + J2)-DUMMY2)  
296:  
297:                   HESS((J2-1)*MLPIN+J3,(K2-1)*MLPIN+K4)= & 
298:   &               HESS((J2-1)*MLPIN+J3,(K2-1)*MLPIN+K4) & ! sum over data points 
299:   &               +DPCW2BG(J2,J3)*DPCW2BG(K2,K4)/PMLPOUTJ1**2 - DUMMY1/PMLPOUTJ1 
300:                ENDDO 
301:             ENDDO 
302:          ENDDO 
303:       ENDDO 
304:    ENDIF 
305: ENDDO 
306:  
307: DUMMY1=0.0D0 
308: DO J1=1,NMLP-2 
309:    DUMMY1=DUMMY1+X(J1)**2 
310: ENDDO 
311:  
312: ENERGY=ENERGY/MLPDATA + MLPLAMBDA*DUMMY1 
313: ! IF (DEBUG) WRITE(*,'(A,G20.10)') 'MLP3> objective function=',ENERGY 
314:  
315: IF (GTEST) V(1:NMLP)=V(1:NMLP)/MLPDATA  
316: IF (GTEST) V(1:NMLP-2)=V(1:NMLP-2) + 2.0D0*MLPLAMBDA*X(1:NMLP-2) 
317: ! 
318: ! Symmetrise Hessian here 
319: ! 
320: IF (SECT) HESS(1:NMLP,1:NMLP)=HESS(1:NMLP,1:NMLP)/MLPDATA 
321: IF (SECT) THEN 
322:    DO J1=1,NMLP-2 
323:       HESS(J1,J1)=HESS(J1,J1)+2*MLPLAMBDA 
324:    ENDDO 
325:    DO J1=1,NMLP 
326:       DO J2=1,J1-1 
327:          HESS(J2,J1)=HESS(J1,J2) 
328:       ENDDO 
329:    ENDDO 
330: ENDIF 
331:  
332: END SUBROUTINE MLPB3 


r29854/potential.f 2016-03-16 18:32:37.606485438 +0000 r29853/potential.f 2016-03-16 18:32:38.410493706 +0000
477:             CALL example1Dpotential(COORDS,VNEW,ENERGY,GTEST,STEST)477:             CALL example1Dpotential(COORDS,VNEW,ENERGY,GTEST,STEST)
478:             478:             
479:             IF (PTEST) THEN479:             IF (PTEST) THEN
480:                WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,' '480:                WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,' '
481:                WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,' '481:                WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,' '
482:             ENDIF482:             ENDIF
483: 483: 
484: 484: 
485:          ELSE IF (VARIABLES) THEN485:          ELSE IF (VARIABLES) THEN
486: 486: 
487:             IF (MLPB3T) THEN487:             IF (MLP3T) THEN
488: !              CALL MLPB3(COORDS, VNEW, ENERGY, GTEST, STEST) 
489:                DIFF=1.0D-4 
490:                PRINT*,'analytic and numerical gradients:' 
491:                IF (.NOT.(ALLOCATED(HESS))) ALLOCATE(HESS(NMLP,NMLP)) 
492:                CALL MLPB3(COORDS, VNEW, ENERGY, .TRUE., .TRUE.) 
493:                PRINT '(A,I8)','SIZE(HESS)=',SIZE(HESS) 
494:                HESSDUM(1:NMLP,1:NMLP)=HESS(1:NMLP,1:NMLP) 
495:                DO J1=1,NATOMS 
496:                   COORDS(J1)=COORDS(J1)+DIFF 
497:                   CALL MLPB3(COORDS,VPLUS,EPLUS,.FALSE.,.FALSE.) 
498:                   COORDS(J1)=COORDS(J1)-2.0D0*DIFF 
499:                   CALL MLPB3(COORDS,VMINUS,EMINUS,.FALSE.,.FALSE.) 
500:                   COORDS(J1)=COORDS(J1)+DIFF 
501:                   WRITE(*,'(I5,2F20.10)') J1,VNEW(J1),(EPLUS-EMINUS)/(2.0D0*DIFF) 
502:                ENDDO 
503:                PRINT*,'analytic and numerical second derivatives:' 
504:                DO J1=1,NATOMS 
505:                   COORDS(J1)=COORDS(J1)+DIFF 
506:                   CALL MLPB3(COORDS,VPLUS,EPLUS,.TRUE.,.FALSE.) 
507:                   COORDS(J1)=COORDS(J1)-2.0D0*DIFF 
508:                   CALL MLPB3(COORDS,VMINUS,EMINUS,.TRUE.,.FALSE.) 
509:                   COORDS(J1)=COORDS(J1)+DIFF 
510:                   DO J2=1,NATOMS 
511:                      IF ((ABS(HESS(J1,J2)).NE.0.0D0).AND.  
512:      &                   (ABS(100.0D0*(HESS(J1,J2)-(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF))/HESS(J1,J2)).GT.1.0D-3)) THEN 
513:                      WRITE(*,'(2I5,2F20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF),'   X' 
514:                      ELSE 
515:                         WRITE(*,'(2I5,2F20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF) 
516:                      ENDIF 
517:                   ENDDO 
518:                ENDDO 
519:                STOP 
520:             ELSEIF (MLP3T) THEN 
521:                CALL MLP3(COORDS, VNEW, ENERGY, GTEST, STEST)488:                CALL MLP3(COORDS, VNEW, ENERGY, GTEST, STEST)
 489: !              DIFF=1.0D-4
 490: !              PRINT*,'analytic and numerical gradients:'
 491: !              IF (.NOT.(ALLOCATED(HESS))) ALLOCATE(HESS(NMLP,NMLP))
 492: !              CALL MLP3(COORDS, VNEW, ENERGY, .TRUE., .TRUE.)
 493: !              PRINT '(A,I8)','SIZE(HESS)=',SIZE(HESS)
 494: !              HESSDUM(1:NMLP,1:NMLP)=HESS(1:NMLP,1:NMLP)
 495: !              DO J1=1,NATOMS
 496: !                 COORDS(J1)=COORDS(J1)+DIFF
 497: !                 CALL MLP3(COORDS,VPLUS,EPLUS,.FALSE.,.FALSE.)
 498: !                 COORDS(J1)=COORDS(J1)-2.0D0*DIFF
 499: !                 CALL MLP3(COORDS,VMINUS,EMINUS,.FALSE.,.FALSE.)
 500: !                 COORDS(J1)=COORDS(J1)+DIFF
 501: !                 IF ((ABS(VNEW(J1)).NE.0.0D0).AND.ABS(100.0D0*(VNEW(J1)-(EPLUS-EMINUS)/(2.0D0*DIFF))/VNEW(J1)).GT.-1.0D0) THEN
 502: !                    WRITE(*,'(I5,2F20.10)') J1,VNEW(J1),(EPLUS-EMINUS)/(2.0D0*DIFF)
 503: !                 ENDIF
 504: !              ENDDO
 505: !              PRINT*,'analytic and numerical second derivatives:'
 506: !              DO J1=1,NATOMS
 507: !                 COORDS(J1)=COORDS(J1)+DIFF
 508: !                 CALL MLP3(COORDS,VPLUS,EPLUS,.TRUE.,.FALSE.)
 509: !                 COORDS(J1)=COORDS(J1)-2.0D0*DIFF
 510: !                 CALL MLP3(COORDS,VMINUS,EMINUS,.TRUE.,.FALSE.)
 511: !                 COORDS(J1)=COORDS(J1)+DIFF
 512: !                 DO J2=1,NATOMS
 513: !                    IF ((ABS(HESS(J1,J2)).NE.0.0D0).AND.
 514: !   &                   (ABS(100.0D0*(HESS(J1,J2)-(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF))/HESS(J1,J2)).GT.1.0D-3)) THEN
 515: !                    WRITE(*,'(2I5,2F20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF),'   X'
 516: !                    ELSE
 517: !                       WRITE(*,'(2I5,2F20.10,A)') J1,J2,HESS(J1,J2),(VPLUS(J2)-VMINUS(J2))/(2.0D0*DIFF)
 518: !                    ENDIF
 519: !                 ENDDO
 520: !              ENDDO
 521: !              STOP
522:             ELSE522:             ELSE
523:                CALL FUNCTIONAL( COORDS, VNEW, ENERGY, GTEST, STEST)523:                CALL FUNCTIONAL( COORDS, VNEW, ENERGY, GTEST, STEST)
524:             ENDIF524:             ENDIF
525:             IF (PTEST) THEN525:             IF (PTEST) THEN
526:                 WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,'         '526:                 WRITE(*,10) ' potential> Energy for last cycle=',ENERGY,'         '
527:                 WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,'         '527:                 WRITE(ESTRING,10) 'Energy for last cycle=',ENERGY,'         '
528:             ENDIF528:             ENDIF
529:             ! CALL CTEST(NATOMS, COORDS, VNEW, ENERGY, GTEST, STEST)529:             ! CALL CTEST(NATOMS, COORDS, VNEW, ENERGY, GTEST, STEST)
530:             ! CALL TWODFUNC(COORDS,VNEW,ENERGY,GTEST,STEST)530:             ! CALL TWODFUNC(COORDS,VNEW,ENERGY,GTEST,STEST)
531:             ! CALL MB(COORDS,VNEW,ENERGY,GTEST,STEST)531:             ! CALL MB(COORDS,VNEW,ENERGY,GTEST,STEST)


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0