hdiff output

r29457/disconnectionDPS.f90 2015-11-17 23:34:17.217540300 +0000 r29456/disconnectionDPS.f90 2015-11-17 23:34:17.429543138 +0000
235: !235: !
236: ! TRVALSCALE <x> <y>236: ! TRVALSCALE <x> <y>
237: ! Currently only for use with TRVAL.237: ! Currently only for use with TRVAL.
238: ! Creates a colour scalebar displaying the order parameter values for each colour.238: ! Creates a colour scalebar displaying the order parameter values for each colour.
239: ! <x> and <y> (in postscript units) are optional and overide the default values. - vkd239: ! <x> and <y> (in postscript units) are optional and overide the default values. - vkd
240: !240: !
241: ! TSTHRESH    <threshold> ignore transition states above this threshold.241: ! TSTHRESH    <threshold> ignore transition states above this threshold.
242: ! MAXTSENERGY <threshold> ignore transition states above this threshold.242: ! MAXTSENERGY <threshold> ignore transition states above this threshold.
243: ! MAXTSBARRIER <threshold> ignore transition states with both barriers above this threshold.243: ! MAXTSBARRIER <threshold> ignore transition states with both barriers above this threshold.
244: !244: !
245: ! MINBARRIER <threshold> ignore transition states with either barrier below this threshold. 
246: ! Default is -1.0D100 
247: ! 
248: ! WEIGHTS <file>245: ! WEIGHTS <file>
249: ! If present, use weights in <file> to scale the horizontal width. The expected 246: ! If present, use weights in <file> to scale the horizontal width. The expected 
250: ! format of <file> is 247: ! format of <file> is 
251: ! bin number  Vmin   Vmax  ln weight248: ! bin number  Vmin   Vmax  ln weight
252: !249: !
253: ! ZEROGM250: ! ZEROGM
254: ! Shift all energies so that the global minimum (or the lowest-energy minimum in the connected 251: ! Shift all energies so that the global minimum (or the lowest-energy minimum in the connected 
255: ! component to be plotted) is at 0.252: ! component to be plotted) is at 0.
256: !253: !
257: ! COLOURFRONT254: ! COLOURFRONT
551:    INTEGER :: NMINTR=0548:    INTEGER :: NMINTR=0
552:    INTEGER :: CONNECTMIN=0549:    INTEGER :: CONNECTMIN=0
553:    INTEGER :: MINRANGE=10000550:    INTEGER :: MINRANGE=10000
554:    INTEGER, ALLOCATABLE :: MINIDS(:)551:    INTEGER, ALLOCATABLE :: MINIDS(:)
555:    INTEGER, ALLOCATABLE :: MINTRS(:)552:    INTEGER, ALLOCATABLE :: MINTRS(:)
556:    INTEGER, ALLOCATABLE :: MINPAIRS(:,:,:)553:    INTEGER, ALLOCATABLE :: MINPAIRS(:,:,:)
557:    DOUBLE PRECISION, ALLOCATABLE :: DPMINTRS(:)554:    DOUBLE PRECISION, ALLOCATABLE :: DPMINTRS(:)
558:    DOUBLE PRECISION :: DELTA_E, E_HIGH555:    DOUBLE PRECISION :: DELTA_E, E_HIGH
559:    DOUBLE PRECISION :: TSTHRESH=1.0D100556:    DOUBLE PRECISION :: TSTHRESH=1.0D100
560:    DOUBLE PRECISION :: TSBARTHRESH=1.0D100557:    DOUBLE PRECISION :: TSBARTHRESH=1.0D100
561:    DOUBLE PRECISION :: TSLOWBARTHRESH=-1.0D100 
562:    DOUBLE PRECISION :: CSCALE=1.0D0 558:    DOUBLE PRECISION :: CSCALE=1.0D0 
563:    DOUBLE PRECISION :: CSHIFT=0.0D0 559:    DOUBLE PRECISION :: CSHIFT=0.0D0 
564:    DOUBLE PRECISION :: DJWSCALE=1.0D0 560:    DOUBLE PRECISION :: DJWSCALE=1.0D0 
565:    DOUBLE PRECISION :: TRMIN=0.0D0561:    DOUBLE PRECISION :: TRMIN=0.0D0
566:    DOUBLE PRECISION :: TRMAX=1.0D0562:    DOUBLE PRECISION :: TRMAX=1.0D0
567:    DOUBLE PRECISION :: BENERGY=1.0D100 563:    DOUBLE PRECISION :: BENERGY=1.0D100 
568:    DOUBLE PRECISION :: TRSCALEX=90.0564:    DOUBLE PRECISION :: TRSCALEX=90.0
569:    DOUBLE PRECISION :: TRSCALEY=50.0565:    DOUBLE PRECISION :: TRSCALEY=50.0
570:    CHARACTER(LEN=120) :: FILE_MIN, FILE_PICK, FILE_TS, FILE_WEIGHTS, &    566:    CHARACTER(LEN=120) :: FILE_MIN, FILE_PICK, FILE_TS, FILE_WEIGHTS, &    
571:       FILE_TRACE, FILE_IDMIN, FILE_PAIRS567:       FILE_TRACE, FILE_IDMIN, FILE_PAIRS
738: 734: 
739:    WRITE (6, '(I6, 3A)') &735:    WRITE (6, '(I6, 3A)') &
740:       & N_TS, ' non-degenerate paths read in from ', TRIM(file_ts), '.'736:       & N_TS, ' non-degenerate paths read in from ', TRIM(file_ts), '.'
741:    WRITE (6, '(A, 2(F18.10))') 'Highest and lowest transition states: ', &737:    WRITE (6, '(A, 2(F18.10))') 'Highest and lowest transition states: ', &
742:       & B_HIGH, B_LOW738:       & B_HIGH, B_LOW
743: 739: 
744:    PRINT *,'n_min,n_ts=',n_min,n_ts740:    PRINT *,'n_min,n_ts=',n_min,n_ts
745:    ALLOCATE (NCONN(N_MIN),PLUS(N_TS),MINUS(N_TS),NDISTA(N_MIN),TSEN(N_TS))741:    ALLOCATE (NCONN(N_MIN),PLUS(N_TS),MINUS(N_TS),NDISTA(N_MIN),TSEN(N_TS))
746:    DO I=1,N_TS742:    DO I=1,N_TS
747:       IF (TS(I)%E.LE.M(TS(I)%MIN1)) THEN743:       IF (TS(I)%E.LE.M(TS(I)%MIN1)) THEN
748:          PRINT '(A,I6,A)','WARNING *** energy of ts ',I,' is lower than min1.'744:          PRINT '(A,I6,A)','WARNING *** energy of ts ',I,' is lower than min1. Resetting'
749:          IF (TS(I)%E-M(TS(I)%MIN1).GE.TSLOWBARTHRESH) THEN745:          TS(I)%E=M(TS(I)%MIN1)+DELTA_E/2.0D0
750:             TS(I)%E=M(TS(I)%MIN1)+DELTA_E/2.0D0 
751:             PRINT '(A)','Resetting' 
752:          ELSE  
753:             PRINT '(A)','Excluding this TS; not resetting' 
754:          ENDIF 
755:       ENDIF746:       ENDIF
756:       IF (TS(I)%E.LE.M(TS(I)%MIN2)) THEN747:       IF (TS(I)%E.LE.M(TS(I)%MIN2)) THEN
757:          PRINT '(A,I6,A)','WARNING *** energy of ts ',I,' is lower than min2.'748:          PRINT '(A,I6,A)','WARNING *** energy of ts ',I,' is lower than min2. Resetting'
758:          IF (TS(I)%E-M(TS(I)%MIN2).GE.TSLOWBARTHRESH) THEN749:          TS(I)%E=M(TS(I)%MIN2)+DELTA_E/2.0D0
759:             TS(I)%E=M(TS(I)%MIN2)+DELTA_E/2.0D0 
760:             PRINT '(A)','Resetting' 
761:          ELSE  
762:             PRINT '(A)','Excluding this TS; not resetting' 
763:          ENDIF 
764:       ENDIF750:       ENDIF
765:    ENDDO751:    ENDDO
766:    DO I=1,N_TS752:    DO I=1,N_TS
767:       TSEN(I)=TS(I)%E753:       TSEN(I)=TS(I)%E
768:       PLUS(I)=TS(I)%MIN1754:       PLUS(I)=TS(I)%MIN1
769:       MINUS(I)=TS(I)%MIN2755:       MINUS(I)=TS(I)%MIN2
770:    ENDDO756:    ENDDO
771:    CALL GETNCONN(N_MIN,N_TS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,.FALSE.,TSEN)757:    CALL GETNCONN(N_MIN,N_TS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,.FALSE.,TSEN)
772:    DEADTS(1:N_TS)=.FALSE.758:    DEADTS(1:N_TS)=.FALSE.
773:    IF (NCONNMIN.GE.0) THEN759:    IF (NCONNMIN.GE.0) THEN
797:    ELSE783:    ELSE
798:       NDISTA(GMIN)=0784:       NDISTA(GMIN)=0
799:    ENDIF785:    ENDIF
800:    NCYCLE=0786:    NCYCLE=0
801: 5  CHANGED=.FALSE.787: 5  CHANGED=.FALSE.
802:    NCYCLE=NCYCLE+1788:    NCYCLE=NCYCLE+1
803:    DO J1=1,N_TS789:    DO J1=1,N_TS
804:       IF ((NCONN(PLUS(J1)).LE.NCONNMIN).OR.(NCONN(MINUS(J1)).LE.NCONNMIN)) CYCLE790:       IF ((NCONN(PLUS(J1)).LE.NCONNMIN).OR.(NCONN(MINUS(J1)).LE.NCONNMIN)) CYCLE
805:       IF (TS(J1)%E.GT.TSTHRESH) CYCLE791:       IF (TS(J1)%E.GT.TSTHRESH) CYCLE
806:       IF ((TS(J1)%E-M(TS(J1)%MIN1).GT.TSBARTHRESH).AND.(TS(J1)%E-M(TS(J1)%MIN2).GT.TSBARTHRESH)) CYCLE792:       IF ((TS(J1)%E-M(TS(J1)%MIN1).GT.TSBARTHRESH).AND.(TS(J1)%E-M(TS(J1)%MIN2).GT.TSBARTHRESH)) CYCLE
807:       IF ((TS(J1)%E-M(TS(J1)%MIN1).LT.TSLOWBARTHRESH).OR.(TS(J1)%E-M(TS(J1)%MIN2).LT.TSLOWBARTHRESH)) CYCLE 
808:       IF (NDISTA(MINUS(J1))+1.LT.NDISTA(PLUS(J1))) THEN793:       IF (NDISTA(MINUS(J1))+1.LT.NDISTA(PLUS(J1))) THEN
809:          CHANGED=.TRUE.794:          CHANGED=.TRUE.
810:          NDISTA(PLUS(J1))=NDISTA(MINUS(J1))+1795:          NDISTA(PLUS(J1))=NDISTA(MINUS(J1))+1
811:       ENDIF796:       ENDIF
812:       IF (NDISTA(PLUS(J1))+1.LT.NDISTA(MINUS(J1))) THEN797:       IF (NDISTA(PLUS(J1))+1.LT.NDISTA(MINUS(J1))) THEN
813:          CHANGED=.TRUE.798:          CHANGED=.TRUE.
814:          NDISTA(MINUS(J1))=NDISTA(PLUS(J1))+1799:          NDISTA(MINUS(J1))=NDISTA(PLUS(J1))+1
815:       ENDIF800:       ENDIF
816:    ENDDO801:    ENDDO
817:    IF (CHANGED) GOTO 5802:    IF (CHANGED) GOTO 5
851:    CLOSE(LUNIT)836:    CLOSE(LUNIT)
852: !837: !
853: !  Flag transition states to underconnected minima via DEADTS.838: !  Flag transition states to underconnected minima via DEADTS.
854: !  NCONN only counts non-degenerate rearrangements as connections.839: !  NCONN only counts non-degenerate rearrangements as connections.
855: !840: !
856:    NLEFTTS=0841:    NLEFTTS=0
857:    DO J1=1,N_TS842:    DO J1=1,N_TS
858:       IF ((NCONN(PLUS(J1)).LE.NCONNMIN).OR.(NCONN(MINUS(J1)).LE.NCONNMIN)) DEADTS(J1)=.TRUE.843:       IF ((NCONN(PLUS(J1)).LE.NCONNMIN).OR.(NCONN(MINUS(J1)).LE.NCONNMIN)) DEADTS(J1)=.TRUE.
859:       IF (TS(J1)%E.GT.TSTHRESH) DEADTS(J1)=.TRUE.844:       IF (TS(J1)%E.GT.TSTHRESH) DEADTS(J1)=.TRUE.
860:       IF ((TS(J1)%E-M(TS(J1)%MIN1).GT.TSBARTHRESH).AND.(TS(J1)%E-M(TS(J1)%MIN2).GT.TSBARTHRESH)) DEADTS(J1)=.TRUE.845:       IF ((TS(J1)%E-M(TS(J1)%MIN1).GT.TSBARTHRESH).AND.(TS(J1)%E-M(TS(J1)%MIN2).GT.TSBARTHRESH)) DEADTS(J1)=.TRUE.
861:       IF ((TS(J1)%E-M(TS(J1)%MIN1).LT.TSLOWBARTHRESH).OR.(TS(J1)%E-M(TS(J1)%MIN2).LT.TSLOWBARTHRESH)) DEADTS(J1)=.TRUE. 
862:       IF (.NOT.DEADTS(J1)) NLEFTTS=NLEFTTS+1846:       IF (.NOT.DEADTS(J1)) NLEFTTS=NLEFTTS+1
863:    ENDDO847:    ENDDO
864:    PRINT '(A,2I8)','Number of remaining minima and transition states=',NLEFTMIN,NLEFTTS848:    PRINT '(A,2I8)','Number of remaining minima and transition states=',NLEFTMIN,NLEFTTS
865: 849: 
866:    IF (GMIN_CONN /= GMIN) THEN850:    IF (GMIN_CONN /= GMIN) THEN
867:       WRITE (6, '(A,I10,F18.10,A)') ' Lowest minimum satisfying connectivity criteria at index, energy ',GMIN_CONN,E_GMIN_CONN,'.'851:       WRITE (6, '(A,I10,F18.10,A)') ' Lowest minimum satisfying connectivity criteria at index, energy ',GMIN_CONN,E_GMIN_CONN,'.'
868:       GMIN = GMIN_CONN852:       GMIN = GMIN_CONN
869:       E_GMIN = E_GMIN_CONN853:       E_GMIN = E_GMIN_CONN
870:       IF (ZEROGM) THEN854:       IF (ZEROGM) THEN
871:          WRITE (6, '(A)') ' Setting the energy of the lowest minimum on the tree to zero.'855:          WRITE (6, '(A)') ' Setting the energy of the lowest minimum on the tree to zero.'
2354:          IDENTIFY_NODE_SIZE = .TRUE.2338:          IDENTIFY_NODE_SIZE = .TRUE.
2355:          CALL GET_INTEGER(MAX_MIN2)2339:          CALL GET_INTEGER(MAX_MIN2)
2356:       CASE ('CONNECTMIN')2340:       CASE ('CONNECTMIN')
2357:          CALL GET_INTEGER(CONNECTMIN)2341:          CALL GET_INTEGER(CONNECTMIN)
2358:       CASE ('TSTHRESH')2342:       CASE ('TSTHRESH')
2359:          CALL GET_DP(TSTHRESH)2343:          CALL GET_DP(TSTHRESH)
2360:       CASE ('MAXTSENERGY')2344:       CASE ('MAXTSENERGY')
2361:          CALL GET_DP(TSTHRESH)2345:          CALL GET_DP(TSTHRESH)
2362:       CASE ('MAXTSBARRIER')2346:       CASE ('MAXTSBARRIER')
2363:          CALL GET_DP(TSBARTHRESH)2347:          CALL GET_DP(TSBARTHRESH)
2364:       CASE ('MINBARRIER') 
2365:          CALL GET_DP(TSLOWBARTHRESH) 
2366:       CASE ('IDMIN')2348:       CASE ('IDMIN')
2367:          IDMINT = .TRUE.2349:          IDMINT = .TRUE.
2368:          CALL GET_INTEGER(NDUMMY)2350:          CALL GET_INTEGER(NDUMMY)
2369:          ALLOCATE(SAVEID(NMINID))2351:          ALLOCATE(SAVEID(NMINID))
2370:          SAVEID(1:NMINID)=MINIDS(1:NMINID)2352:          SAVEID(1:NMINID)=MINIDS(1:NMINID)
2371:          DEALLOCATE(MINIDS)2353:          DEALLOCATE(MINIDS)
2372:          ALLOCATE(MINIDS(1:NMINID+1))2354:          ALLOCATE(MINIDS(1:NMINID+1))
2373:          MINIDS(1:NMINID)=SAVEID(1:NMINID)2355:          MINIDS(1:NMINID)=SAVEID(1:NMINID)
2374:          MINIDS(NMINID+1)=NDUMMY2356:          MINIDS(NMINID+1)=NDUMMY
2375:          NMINID=NMINID+12357:          NMINID=NMINID+1
2937:           ISTACK(JSTACK-1)=L2919:           ISTACK(JSTACK-1)=L
2938:           L=I2920:           L=I
2939:         ENDIF2921:         ENDIF
2940:       ENDIF2922:       ENDIF
2941:       GOTO 12923:       GOTO 1
2942:       END2924:       END
2943: 2925: 
2944: ! GETNCONN(NMIN,NTS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,DEBUG)2926: ! GETNCONN(NMIN,NTS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,DEBUG)
2945:       SUBROUTINE GETNCONN(NMIN,NTS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,DEBUG,TSEN)2927:       SUBROUTINE GETNCONN(NMIN,NTS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,DEBUG,TSEN)
2946: !     USE COMMON, ONLY: NMIN,NTS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,MAXMIN,DEBUG2928: !     USE COMMON, ONLY: NMIN,NTS,NCONN,PLUS,MINUS,NCONNMIN,NCONNMAX,MAXMIN,DEBUG
2947:       USE VARS, ONLY : M, TSTHRESH, TSBARTHRESH, TSLOWBARTHRESH2929:       USE VARS, ONLY : M, TSTHRESH, TSBARTHRESH
2948:       IMPLICIT NONE2930:       IMPLICIT NONE
2949:       INTEGER NMIN2931:       INTEGER NMIN
2950:       INTEGER J1, PNCONNECTED, NCONNECTED, NZERO, JMAX, NCONN(NMIN), NTS, NCONNMIN, NCONNMAX, &2932:       INTEGER J1, PNCONNECTED, NCONNECTED, NZERO, JMAX, NCONN(NMIN), NTS, NCONNMIN, NCONNMAX, &
2951:      &        PLUS(NTS), MINUS(NTS)2933:      &        PLUS(NTS), MINUS(NTS)
2952:       DOUBLE PRECISION TSEN(NTS)2934:       DOUBLE PRECISION TSEN(NTS)
2953:       LOGICAL CONNECTED(NMIN), DEBUG 2935:       LOGICAL CONNECTED(NMIN), DEBUG 
2954: !  2936: !  
2955: !  Record the number of connections for each minimum in NCONN.2937: !  Record the number of connections for each minimum in NCONN.
2956: !  NCONN is the number of connections to minima with more2938: !  NCONN is the number of connections to minima with more
2957: !  than NCONNMIN connections.2939: !  than NCONNMIN connections.
2960:       DO J1=1,NMIN2942:       DO J1=1,NMIN
2961:          CONNECTED(J1)=.TRUE.2943:          CONNECTED(J1)=.TRUE.
2962:       ENDDO2944:       ENDDO
2963: 11    DO J1=1,NMIN2945: 11    DO J1=1,NMIN
2964:          NCONN(J1)=02946:          NCONN(J1)=0
2965:       ENDDO2947:       ENDDO
2966:       PNCONNECTED=NCONNECTED2948:       PNCONNECTED=NCONNECTED
2967:       DO J1=1,NTS2949:       DO J1=1,NTS
2968:          IF (TSEN(J1).GT.TSTHRESH) CYCLE2950:          IF (TSEN(J1).GT.TSTHRESH) CYCLE
2969:          IF ((TSEN(J1)-M(PLUS(J1)).GT.TSBARTHRESH).AND.(TSEN(J1)-M(MINUS(J1)).GT.TSBARTHRESH)) CYCLE2951:          IF ((TSEN(J1)-M(PLUS(J1)).GT.TSBARTHRESH).AND.(TSEN(J1)-M(MINUS(J1)).GT.TSBARTHRESH)) CYCLE
2970:          IF ((TSEN(J1)-M(PLUS(J1)).LT.TSLOWBARTHRESH).OR.(TSEN(J1)-M(MINUS(J1)).LT.TSLOWBARTHRESH)) CYCLE 
2971:          IF (PLUS(J1).NE.MINUS(J1)) THEN2952:          IF (PLUS(J1).NE.MINUS(J1)) THEN
2972:             IF (CONNECTED(MINUS(J1))) NCONN(PLUS(J1))=NCONN(PLUS(J1))+12953:             IF (CONNECTED(MINUS(J1))) NCONN(PLUS(J1))=NCONN(PLUS(J1))+1
2973:             IF (CONNECTED(PLUS(J1)))  NCONN(MINUS(J1))=NCONN(MINUS(J1))+12954:             IF (CONNECTED(PLUS(J1)))  NCONN(MINUS(J1))=NCONN(MINUS(J1))+1
2974:          ENDIF 2955:          ENDIF 
2975:       ENDDO2956:       ENDDO
2976:       NCONNECTED=02957:       NCONNECTED=0
2977:       DO J1=1,NMIN2958:       DO J1=1,NMIN
2978:          CONNECTED(J1)=.FALSE.2959:          CONNECTED(J1)=.FALSE.
2979:          IF (NCONN(J1).GT.NCONNMIN) THEN2960:          IF (NCONN(J1).GT.NCONNMIN) THEN
2980:             CONNECTED(J1)=.TRUE.2961:             CONNECTED(J1)=.TRUE.


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0