hdiff output

r32037/mylbfgs.f90 2017-03-07 17:30:20.993451282 +0000 r32036/mylbfgs.f90 2017-03-07 17:30:21.245454620 +0000
  3: SUBROUTINE MYLBFGS(N, M, XCOORDS, DIAGCO, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP)  3: SUBROUTINE MYLBFGS(N, M, XCOORDS, DIAGCO, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP)
  4:    USE COMMONS, ONLY: NATOMS, DMACRYST, HYBRIDMINT, CUDAT, AMBER12T, EPSRIGID, &  4:    USE COMMONS, ONLY: NATOMS, DMACRYST, HYBRIDMINT, CUDAT, AMBER12T, EPSRIGID, &
  5:                       DEBUG, MYUNIT, GRADPROBLEMT, RMS, QCIPOTT  5:                       DEBUG, MYUNIT, GRADPROBLEMT, RMS, QCIPOTT
  6:    USE GENRIGID, ONLY: DEGFREEDOMS, RIGIDINIT, ATOMRIGIDCOORDT, TRANSFORMCTORIGID, &  6:    USE GENRIGID, ONLY: DEGFREEDOMS, RIGIDINIT, ATOMRIGIDCOORDT, TRANSFORMCTORIGID, &
  7:                        TRANSFORMRIGIDTOC, NRIGIDBODY  7:                        TRANSFORMRIGIDTOC, NRIGIDBODY
  8:    USE MODCUDALBFGS, ONLY: CUDA_LBFGS_WRAPPER  8:    USE MODCUDALBFGS, ONLY: CUDA_LBFGS_WRAPPER
  9:    USE PREC, ONLY: INT32, REAL64  9:    USE PREC, ONLY: INT32, REAL64
 10:    USE RAD_MOD, ONLY: RADCOM 10:    USE RAD_MOD, ONLY: RADCOM
 11:    IMPLICIT NONE 11:    IMPLICIT NONE
 12: ! Arguments 12: ! Arguments
 13: ! jk669 3/3/17 Intents added. 13: ! TODO: check intents
 14:    INTEGER(INT32), intent(in) :: N 14:    INTEGER(INT32)    :: N
 15:    INTEGER(INT32), intent(in) :: M 15:    INTEGER(INT32)    :: M
 16:    REAL(REAL64),intent(inout) :: XCOORDS(3*NATOMS) 16:    REAL(REAL64)      :: XCOORDS(3*NATOMS)
 17:    LOGICAL, intent(in) :: DIAGCO 17:    LOGICAL           :: DIAGCO
 18:    REAL(REAL64), intent(in) :: EPS 18:    REAL(REAL64)      :: EPS
 19:    LOGICAL, intent(inout) :: MFLAG 19:    LOGICAL           :: MFLAG
 20:    REAL(REAL64), intent(inout) :: ENERGY 20:    REAL(REAL64)      :: ENERGY
 21:    INTEGER(INT32), intent(in) :: ITMAX 21:    INTEGER(INT32)    :: ITMAX
 22:    INTEGER(INT32), intent(inout) :: ITDONE 22:    INTEGER(INT32)    :: ITDONE
 23:    LOGICAL, intent(inout) :: RESET 23:    LOGICAL           :: RESET
 24:    INTEGER(INT32), intent(in) :: NP 24:    INTEGER(INT32)    :: NP
 25: ! Variables 25: ! Variables
 26:    LOGICAL           :: EVAP, EVAPREJECT 26:    LOGICAL           :: EVAP, EVAPREJECT
 27: ! Common block 27: ! Common block
 28: ! TODO: delete common block 28: ! TODO: delete common block
 29: ! ds656> EVAPREJECT was missing here until 10/06/2015 29: ! ds656> EVAPREJECT was missing here until 10/06/2015
 30:    COMMON /EV/ EVAP, EVAPREJECT 30:    COMMON /EV/ EVAP, EVAPREJECT
 31: !   INTEGER           :: TEMPNATOMS, TEMPN !Commented out to match commented out code. jk669 3/3/17 31:    INTEGER           :: TEMPNATOMS, TEMPN
 32:    REAL(REAL64)      :: XRIGIDCOORDS(DEGFREEDOMS) 32:    REAL(REAL64)      :: XRIGIDCOORDS(DEGFREEDOMS)
 33:    REAL(REAL64)      :: EPS_TEMP 33:    REAL(REAL64)      :: EPS_TEMP
 34:  34: 
 35: ! vr274> DMACRYS uses a different minimization protocol to avoid cold fusions 35: ! vr274> DMACRYS uses a different minimization protocol to avoid cold fusions
 36:    IF (DMACRYST) THEN 36:    IF (DMACRYST) THEN
 37:       CALL DMACRYS_MINIMIZE(N, M, XCOORDS, DIAGCO, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP) 37:       CALL DMACRYS_MINIMIZE(N, M, XCOORDS, DIAGCO, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP)
 38:       RETURN 38:       RETURN
 39:    END IF 39:    END IF
 40:  40: 
 41: ! hk286 > if generalised rigid body is used, then use rigid coords, otherwise proceed as usual 41: ! hk286 > if generalised rigid body is used, then use rigid coords, otherwise proceed as usual
 59:          IF (.NOT. (AMBER12T)) THEN 59:          IF (.NOT. (AMBER12T)) THEN
 60:             CALL RADCOM(XCOORDS, .TRUE.) ! Evaporated atoms moved back in 60:             CALL RADCOM(XCOORDS, .TRUE.) ! Evaporated atoms moved back in
 61:          END IF 61:          END IF
 62:          CALL CUDA_LBFGS_WRAPPER(N, M, XCOORDS, EPS_TEMP, MFLAG, ENERGY, ITMAX, ITDONE, RESET) 62:          CALL CUDA_LBFGS_WRAPPER(N, M, XCOORDS, EPS_TEMP, MFLAG, ENERGY, ITMAX, ITDONE, RESET)
 63:          IF (.NOT. (AMBER12T)) THEN 63:          IF (.NOT. (AMBER12T)) THEN
 64:             EVAP = .FALSE. 64:             EVAP = .FALSE.
 65:             CALL RADCOM(XCOORDS, .FALSE.) ! Evaporated atoms NOT moved back in 65:             CALL RADCOM(XCOORDS, .FALSE.) ! Evaporated atoms NOT moved back in
 66:             MFLAG = (.NOT. EVAP) 66:             MFLAG = (.NOT. EVAP)
 67:          END IF 67:          END IF
 68:       ELSE 68:       ELSE
 69:          !CALL MYMYLBFGS(N, M, XCOORDS, DIAGCO, EPS_TEMP, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP) !replaced by wrapper jk669  69:          CALL MYMYLBFGS(N, M, XCOORDS, DIAGCO, EPS_TEMP, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP)
 70:          call min_wrapper(n,m,xcoords,diagco,eps,mflag,energy,itmax,itdone,reset,np) 
 71:       END IF 70:       END IF
 72:       IF (DEBUG.AND.HYBRIDMINT) WRITE(MYUNIT, '(A)') ' HYBRIDMIN> Rigid body minimisation converged, switching to all-atom' 71:       IF (DEBUG.AND.HYBRIDMINT) WRITE(MYUNIT, '(A)') ' HYBRIDMIN> Rigid body minimisation converged, switching to all-atom'
 73: ! Convert back to atomistic coordinates.  72: ! Convert back to atomistic coordinates. 
 74:       XRIGIDCOORDS(1:DEGFREEDOMS) = XCOORDS(1:DEGFREEDOMS) 73:       XRIGIDCOORDS(1:DEGFREEDOMS) = XCOORDS(1:DEGFREEDOMS)
 75:       CALL TRANSFORMRIGIDTOC(1, NRIGIDBODY, XCOORDS, XRIGIDCOORDS) 74:       CALL TRANSFORMRIGIDTOC(1, NRIGIDBODY, XCOORDS, XRIGIDCOORDS)
 76:       ATOMRIGIDCOORDT = .TRUE. 75:       ATOMRIGIDCOORDT = .TRUE.
 77:    END IF 76:    END IF
 78:  77: 
 79: ! If we're not using rigid bodies, or we've already completed a rigid body minimisation and we're using 78: ! If we're not using rigid bodies, or we've already completed a rigid body minimisation and we're using
 80: ! hybrid minimisation, then perform a minimisation in atomistic coordinates. 79: ! hybrid minimisation, then perform a minimisation in atomistic coordinates.
 84:          IF (.NOT. (AMBER12T)) THEN 83:          IF (.NOT. (AMBER12T)) THEN
 85:             CALL RADCOM(XCOORDS, .TRUE.) ! Evaporated atoms moved back in 84:             CALL RADCOM(XCOORDS, .TRUE.) ! Evaporated atoms moved back in
 86:          END IF 85:          END IF
 87:          CALL CUDA_LBFGS_WRAPPER(N, M, XCOORDS, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET) 86:          CALL CUDA_LBFGS_WRAPPER(N, M, XCOORDS, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET)
 88:          IF (.NOT. (AMBER12T)) THEN 87:          IF (.NOT. (AMBER12T)) THEN
 89:             EVAP = .FALSE. 88:             EVAP = .FALSE.
 90:             CALL RADCOM(XCOORDS, .FALSE.) ! Evaporated atoms NOT moved back in 89:             CALL RADCOM(XCOORDS, .FALSE.) ! Evaporated atoms NOT moved back in
 91:             MFLAG = (.NOT. EVAP) 90:             MFLAG = (.NOT. EVAP)
 92:          END IF 91:          END IF
 93:       ELSE 92:       ELSE
 94:          !CALL MYMYLBFGS(N, M, XCOORDS, DIAGCO, EPS_TEMP, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP) 93:          CALL MYMYLBFGS(N, M, XCOORDS, DIAGCO, EPS, MFLAG, ENERGY, ITMAX, ITDONE, RESET, NP)
 95:          call min_wrapper(n,m,xcoords,diagco,eps,mflag,energy,itmax,itdone,reset,np) !replaced by wrapper jk669  
 96:       END IF 94:       END IF
 97:    END IF 95:    END IF
 98:  96: 
 99:    GRADPROBLEMT = .FALSE. 97:    GRADPROBLEMT = .FALSE.
100:    IF (RMS.EQ.1.0D-100) THEN 98:    IF (RMS.EQ.1.0D-100) THEN
101:        IF (QCIPOTT) THEN 99:        IF (QCIPOTT) THEN
102: !         WRITE(MYUNIT,'(A)') ' mylbfgs> WARNING - RMS force was set to 1.0e-100'100: !         WRITE(MYUNIT,'(A)') ' mylbfgs> WARNING - RMS force was set to 1.0e-100'
103:        ELSE101:        ELSE
104:           WRITE(MYUNIT,'(2A)') ' mylbfgs> WARNING - RMS force was set to 1.0e-100 as it was either smaller ', &102:           WRITE(MYUNIT,'(A)') ' mylbfgs> WARNING - RMS force was set to 1.0e-100 as it was either smaller than this value or NaN - discarding structure'
105:             'than this value or NaN - discarding structure' 
106:           WRITE(MYUNIT,'(A)') '  - see debug output for further information'103:           WRITE(MYUNIT,'(A)') '  - see debug output for further information'
107:           GRADPROBLEMT = .TRUE.104:           GRADPROBLEMT = .TRUE.
108:           MFLAG=.FALSE.105:           MFLAG=.FALSE.
109:       ENDIF106:       ENDIF
110:    ENDIF107:    ENDIF
111: 108: 
112: ! hk286 - alternative implementation, fool mymylbfgs the number of atoms rather than passing zeroes109: ! hk286 - alternative implementation, fool mymylbfgs the number of atoms rather than passing zeroes
113: !      IF (RIGIDINIT) THEN110: !      IF (RIGIDINIT) THEN
114: !         ATOMRIGIDCOORDT = .FALSE.111: !         ATOMRIGIDCOORDT = .FALSE.
115: !         CALL TRANSFORMCTORIGID(XCOORDS, XRIGIDCOORDS)112: !         CALL TRANSFORMCTORIGID(XCOORDS, XRIGIDCOORDS)
122: !         N = TEMPN119: !         N = TEMPN
123: !         CALL TRANSFORMRIGIDTOC(1,NRIGIDBODY, XCOORDS, XRIGIDCOORDS)120: !         CALL TRANSFORMRIGIDTOC(1,NRIGIDBODY, XCOORDS, XRIGIDCOORDS)
124: !         ATOMRIGIDCOORDT = .TRUE.      121: !         ATOMRIGIDCOORDT = .TRUE.      
125: !      ELSE122: !      ELSE
126: !         ATOMRIGIDCOORDT = .TRUE.123: !         ATOMRIGIDCOORDT = .TRUE.
127: !        CALL MYMYLBFGS(N,M,XCOORDS,DIAGCO,EPS,MFLAG,ENERGY,ITMAX,ITDONE,RESET,NP)124: !        CALL MYMYLBFGS(N,M,XCOORDS,DIAGCO,EPS,MFLAG,ENERGY,ITMAX,ITDONE,RESET,NP)
128: !      END IF125: !      END IF
129: ! hk286126: ! hk286
130: 127: 
131: END SUBROUTINE MYLBFGS128: END SUBROUTINE MYLBFGS
132:  
133: !jk669: wrapper function for selecting minimization algorithm. 3/3/17 
134: !Default is LBFGS without line search unless SQNM keyword is present in the data file.  
135: subroutine min_wrapper(numcoords,mupdates,xcoords,diagco,maxrmsgrad,converget,energy,itermax,iter,reset,np) 
136: use COMMONS, only: SQNM_HISTMAX, SQNMT 
137: use PREC, only: INT32, REAL64 
138: implicit none  
139:    !all variables are from mylbfgs except those from COMMONS.  
140:    integer(INT32), intent(in) :: numcoords 
141:    integer(INT32), intent(in) :: mupdates 
142:    real(REAL64), intent(inout) :: xcoords(numcoords) 
143:    logical, intent(in) :: diagco 
144:    real(REAL64), intent(in) :: maxrmsgrad 
145:    logical, intent(inout) :: converget 
146:    real(REAL64), intent(out) :: energy 
147:    integer(INT32), intent(in) :: itermax 
148:    integer(INT32), intent(inout) :: iter 
149:    logical, intent(inout) :: reset 
150:    integer(INT32), intent(in) :: np 
151:  
152: if (SQNMT) then !SQNM minimizer is turned on.  
153:    call sqnm(numcoords,xcoords,maxrmsgrad,SQNM_HISTMAX,converget,energy,itermax,iter) 
154: else 
155:    call MYMYLBFGS(numcoords,mupdates,xcoords,diagco,maxrmsgrad,converget,energy,itermax,iter,reset,np) 
156: end if  
157:  
158: end subroutine min_wrapper 
159: 129: 


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0