hdiff output

r29880/MLJ.f90 2016-01-31 20:30:07.253827998 +0000 r29879/MLJ.f90 2016-01-31 20:30:08.157839794 +0000
 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 18: ! 18: !
 19: !  =============================================================== 19: !  ===============================================================
 20: !  Multicomponent Lennard-Jones without a cutoff. 20: !  Multicomponent Lennard-Jones without a cutoff.
 21: !  Assumed reduced units with SIGMA_AA = EPSILON_AA = 1. 21: !  Assumed reduced units with SIGMA_AA = EPSILON_AA = 1.
 22: !  Per-atom energy is stored in array VT(NATOMS). 22: !  Per-atom energy is stored in array VT(NATOMS).
 23: ! 23: !
 24: !  ds656> 6/12/2014 24: !  ds656> 6/12/2014
 25: !  =============================================================== 25: !  ===============================================================
 26: ! 26: !
 27: SUBROUTINE MLJ(X,GRAD,POT,GRADT,HESST,STRESST) 27: SUBROUTINE MLJ(X,GRAD,POT,GTEST)
 28:   ! 28:   !
 29:   USE COMMONS, ONLY : NATOMS,VT,ATOMLISTS, NSPECIES, STRESS 29:   USE COMMONS, ONLY : NATOMS,VT,ATOMLISTS, NSPECIES
 30:   USE POT_PARAMS, ONLY : MLJ_EPS, MLJ_SIG 30:   USE POT_PARAMS, ONLY : MLJ_EPS, MLJ_SIG
 31:   ! 31:   !
 32:   IMPLICIT NONE 32:   IMPLICIT NONE
 33:   ! 33:   !
 34:   LOGICAL, INTENT (IN) :: GRADT,HESST,STRESST 34:   LOGICAL, INTENT (IN) :: GTEST
 35:   DOUBLE PRECISION, INTENT (IN) :: X(3*NATOMS) 35:   DOUBLE PRECISION, INTENT (IN) :: X(3*NATOMS)
 36:   DOUBLE PRECISION, INTENT (INOUT) :: POT, GRAD(3*NATOMS) 36:   DOUBLE PRECISION, INTENT (INOUT) :: POT, GRAD(3*NATOMS)
 37:   ! 37:   !
 38:   LOGICAL :: SELF 38:   LOGICAL :: SELF
 39:   INTEGER :: I,J,J1,J13,J2,J23,T1,T2,G1,G2,G2START,& 39:   INTEGER :: I,J1,J13,J2,J23,T1,T2,G1,G2,G2START,&
 40:        K1,K2,LI1,LI2,UI1,UI2 40:        K1,K2,LI1,LI2,UI1,UI2
 41:   DOUBLE PRECISION :: DIST2, DX(3), IR6, IR12, DUMMY, & 41:   DOUBLE PRECISION :: DIST2, DX(3), IR6, IR12, DUMMY, SIG2, EPS4, EPS24
 42:        SIG2, EPS4, EPS24, IGRAD(3) 
 43:   ! 42:   !
 44:   ! Zero the potential and the gradient 43:   ! Zero the potential and the gradient
 45:   VT(1:NATOMS) = 0.0D0 44:   VT(1:NATOMS) = 0.0D0
 46:   POT = 0.0D0 45:   POT = 0.0D0
 47:   IF(GRADT) GRAD(:) = 0.0D0 46:   IF(GTEST) GRAD(:) = 0.0D0
 48:   IF(STRESST) STRESS(:,:,:) = 0.0D0 
 49:   ! 47:   !
 50:   ! Double loop over atom types 48:   ! Double loop over atom types
 51:   LT1: DO T1=1,NSPECIES(0) 49:   LT1: DO T1=1,NSPECIES(0)
 52:      LT2: DO T2=1,T1  50:      LT2: DO T2=1,T1 
 53:         ! 51:         !
 54:         ! This can be precomputed elsewhere... 52:         ! This can be precomputed elsewhere...
 55:         SIG2 = MLJ_SIG(T1,T2)*MLJ_SIG(T1,T2) 53:         SIG2 = MLJ_SIG(T1,T2)*MLJ_SIG(T1,T2)
 56:         EPS4 = 4.0D0*MLJ_EPS(T1,T2) 54:         EPS4 = 4.0D0*MLJ_EPS(T1,T2)
 57:         IF(GRADT) EPS24 = 24.0D0*MLJ_EPS(T1,T2) 55:         IF(GTEST) EPS24 = 24.0D0*MLJ_EPS(T1,T2)
 58:         ! 56:         !
 59:         ! Double loop over mobile and frozen atom groups 57:         ! Double loop over mobile and frozen atom groups
 60:         LG1: DO G1 = 1,2 ! 1 -> mobile; 2 -> frozen 58:         LG1: DO G1 = 1,2 ! 1 -> mobile; 2 -> frozen
 61:            ! 59:            !
 62:            IF(T1 == T2) THEN 60:            IF(T1 == T2) THEN
 63:               G2START = G1 61:               G2START = G1
 64:            ELSE 62:            ELSE
 65:               G2START = 1 63:               G2START = 1
 66:            ENDIF 64:            ENDIF
 67:            ! 65:            !
107:                     IR6 = (SIG2/DIST2)**3105:                     IR6 = (SIG2/DIST2)**3
108:                     IR12 = IR6*IR6106:                     IR12 = IR6*IR6
109:                     DUMMY = EPS4*(IR12 - IR6)107:                     DUMMY = EPS4*(IR12 - IR6)
110:                     !WRITE(*,*) "DUMMY FOR POT", DUMMY108:                     !WRITE(*,*) "DUMMY FOR POT", DUMMY
111:                     ! -----------------------------------------109:                     ! -----------------------------------------
112:                     !110:                     !
113:                     VT(J1) = VT(J1) + DUMMY111:                     VT(J1) = VT(J1) + DUMMY
114:                     VT(J2) = VT(J2) + DUMMY112:                     VT(J2) = VT(J2) + DUMMY
115:                     POT = POT + DUMMY113:                     POT = POT + DUMMY
116:                     !114:                     !
117:                     IF(GRADT) THEN ! Calculate gradient115:                     IF(GTEST) THEN ! Calculate gradient for groups 1 and 2
118:                        ! 
119:                        DUMMY = EPS24*(IR6 - 2.0D0*IR12)/DIST2116:                        DUMMY = EPS24*(IR6 - 2.0D0*IR12)/DIST2
120:                        !WRITE(*,*) "DUMMY FOR GRAD", DUMMY117:                        !WRITE(*,*) "DUMMY FOR GRAD", DUMMY
121:                        DO I = 1,3118:                        DO I = 1,3
122:                           IGRAD(I) = DUMMY*DX(I)119:                           GRAD(J13+I) = GRAD(J13+I) + DUMMY*DX(I)
123:                           GRAD(J13+I) = GRAD(J13+I) + IGRAD(I)120:                           GRAD(J23+I) = GRAD(J23+I) - DUMMY*DX(I)
124:                           GRAD(J23+I) = GRAD(J23+I) - IGRAD(I) 
125:                        ENDDO121:                        ENDDO
126:                        ! 
127:                        IF(STRESST) THEN 
128:                           DO I=1,3 
129:                              DO J=I,3 
130:                                 DUMMY = IGRAD(I)*DX(J) 
131:                                 STRESS(J1,I,J) = STRESS(J1,I,J) + & 
132:                                      DUMMY 
133:                                 STRESS(J2,I,J) = STRESS(J2,I,J) + & 
134:                                      DUMMY 
135:                                 STRESS(0,I,J) = STRESS(0,I,J) + & 
136:                                      DUMMY 
137:                              ENDDO 
138:                           ENDDO 
139:                        ENDIF 
140:                        ! 
141:                     ENDIF122:                     ENDIF
142:                     !123:                     !
143:                  ENDDO LA2 ! Double loop over atoms124:                  ENDDO LA2 ! Double loop over atoms
144:               ENDDO LA1125:               ENDDO LA1
145:               !126:               !
146:            ENDDO LG2 ! Double loop over groups127:            ENDDO LG2 ! Double loop over groups
147:         ENDDO LG1128:         ENDDO LG1
148:         !129:         !
149:      ENDDO LT2 ! Double loop over types130:      ENDDO LT2 ! Double loop over types
150:   ENDDO LT1131:   ENDDO LT1
151:   !132:   !
152:   IF(GRADT) THEN133:   IF(GTEST) THEN
153:      DO T1=1,NSPECIES(0) ! Atom types134:      DO T1=1,NSPECIES(0) ! Atom types
154:         DO J2=1,ATOMLISTS(T1,2,0) ! span group 2 only135:         DO J2=1,ATOMLISTS(T1,2,0) ! span group 2 only
155:            J1=ATOMLISTS(T1,2,J2)136:            J1=ATOMLISTS(T1,2,J2)
156:            J13=3*(J1-1)137:            J13=3*(J1-1)
157:            GRAD(J13+1) = 0.0D0 ! Reset to zero138:            GRAD(J13+1) = 0.0D0 ! Reset to zero
158:            GRAD(J13+2) = 0.0D0139:            GRAD(J13+2) = 0.0D0
159:            GRAD(J13+3) = 0.0D0140:            GRAD(J13+3) = 0.0D0
160:         ENDDO141:         ENDDO
161:      ENDDO142:      ENDDO
162:      !143:      !
169:      !          J1=ATOMLISTS(T1,G1,J2)150:      !          J1=ATOMLISTS(T1,G1,J2)
170:      !          J13=3*(J1-1)151:      !          J13=3*(J1-1)
171:      !          WRITE(*,'(A,1X, I4, 4(1X,F12.6))') "BLJ_CLUST>", &152:      !          WRITE(*,'(A,1X, I4, 4(1X,F12.6))') "BLJ_CLUST>", &
172:      !               J1, VT(J1), GRAD(J13+1), GRAD(J13+2), GRAD(J13+3)153:      !               J1, VT(J1), GRAD(J13+1), GRAD(J13+2), GRAD(J13+3)
173:      !       ENDDO154:      !       ENDDO
174:      !    ENDDO155:      !    ENDDO
175:      ! ENDDO156:      ! ENDDO
176:      !157:      !
177:   ENDIF158:   ENDIF
178:   !159:   !
179:   IF(STRESST) THEN 
180:      DO I=1,3 
181:         DO J=I,3 
182:            STRESS(0,J,I) = STRESS(0,I,J) ! Impose symmetry 
183:         ENDDO 
184:      ENDDO 
185:   ENDIF 
186:   ! 
187:   RETURN160:   RETURN
188:   !161:   !
189: END SUBROUTINE MLJ162: END SUBROUTINE MLJ


r29880/potential.f90 2016-01-31 20:30:07.449830554 +0000 r29879/potential.f90 2016-01-31 20:30:08.353842338 +0000
825: 825: 
826:    ELSE IF (BLJCLUSTER_NOCUT) THEN826:    ELSE IF (BLJCLUSTER_NOCUT) THEN
827: ! ds656> Binary LJ without cutoff827: ! ds656> Binary LJ without cutoff
828:       CALL RAD(X, GRAD, EREAL, GRADT)828:       CALL RAD(X, GRAD, EREAL, GRADT)
829:       CALL BLJ_CLUST(X, GRAD, EREAL, GRADT)829:       CALL BLJ_CLUST(X, GRAD, EREAL, GRADT)
830: 830: 
831:    ELSE IF (MLJT) THEN831:    ELSE IF (MLJT) THEN
832: ! ds656> Multicomponent LJ with no cutoff (akin to BLJ_CLUST).832: ! ds656> Multicomponent LJ with no cutoff (akin to BLJ_CLUST).
833: !        Should give same results as GLJ, but different code.833: !        Should give same results as GLJ, but different code.
834:       CALL RAD(X, GRAD, EREAL, GRADT)834:       CALL RAD(X, GRAD, EREAL, GRADT)
835:       CALL MLJ(X, GRAD, EREAL, GRADT, SECT, .FALSE.)835:       CALL MLJ(X, GRAD, EREAL, GRADT)
836: 836: 
837:    ELSE IF (GLJT) THEN837:    ELSE IF (GLJT) THEN
838: ! generalised LJ with no cutoff838: ! generalised LJ with no cutoff
839:       CALL RAD(X, GRAD, EREAL, GRADT)839:       CALL RAD(X, GRAD, EREAL, GRADT)
840:       CALL GLJ(X, GRAD, EREAL, GRADT)840:       CALL GLJ(X, GRAD, EREAL, GRADT)
841: 841: 
842:    ELSE IF (BINARY) THEN842:    ELSE IF (BINARY) THEN
843:       IF (SHIFTCUT) THEN843:       IF (SHIFTCUT) THEN
844:          CALL LJPSHIFT(X, GRAD, EREAL, GRADT, SECT)844:          CALL LJPSHIFT(X, GRAD, EREAL, GRADT, SECT)
845:       ELSE845:       ELSE


r29880/stress.f90 2016-01-31 20:30:07.637833003 +0000 r29879/stress.f90 2016-01-31 20:30:08.545844842 +0000
  1: SUBROUTINE CALC_STRESS(X,EPOT)  1: SUBROUTINE CALC_STRESS(X,EPOT)
  2:   !  2:   !
  3:   USE COMMONS, ONLY : STRESST, STRESS, NATOMS, MYUNIT, &  3:   USE COMMONS, ONLY : STRESST, STRESS, NATOMS, MYUNIT, &
  4:        MGUPTAT, MIEFT, MLJT  4:        MGUPTAT, MIEFT
  5:   !  5:   !
  6:   IMPLICIT NONE  6:   IMPLICIT NONE
  7:   !  7:   !
  8:   DOUBLE PRECISION, INTENT(IN) :: X(3*NATOMS)  8:   DOUBLE PRECISION, INTENT(IN) :: X(3*NATOMS)
  9:   DOUBLE PRECISION, INTENT(OUT) :: EPOT  9:   DOUBLE PRECISION, INTENT(OUT) :: EPOT
 10:   ! 10:   !
 11:   INTEGER :: I,J 11:   INTEGER :: I,J
 12:   DOUBLE PRECISION :: GRAD(3*NATOMS) 12:   DOUBLE PRECISION :: GRAD(3*NATOMS)
 13:   ! 13:   !
 14:   IF(.NOT.STRESST) THEN 14:   IF(.NOT.STRESST) THEN
 15:      WRITE(MYUNIT,'(A)') & 15:      WRITE(MYUNIT,'(A)') &
 16:           'calc_stress> Should not be here!' 16:           'calc_stress> Should not be here!'
 17:      RETURN 17:      RETURN
 18:   ELSE 18:   ELSE
 19:      STRESS(:,:,:) = 0.0D0 ! Initialise 19:      STRESS(:,:,:) = 0.0D0 ! Initialise
 20:   ENDIF 20:   ENDIF
 21:   ! 21:   !
 22:   IF(MGUPTAT) THEN 22:   IF(MGUPTAT) THEN
 23:      CALL MGUPTA(X, GRAD, EPOT, .TRUE., .FALSE., .TRUE.) 23:      CALL MGUPTA(X, GRAD, EPOT, .TRUE., .FALSE., .TRUE.)
 24:   ELSEIF(MLJT) THEN 
 25:      CALL MLJ(X, GRAD, EPOT, .TRUE., .FALSE., .TRUE.) 
 26:   ELSE 24:   ELSE
 27:      WRITE(MYUNIT,'(A)') & 25:      WRITE(MYUNIT,'(A)') &
 28:           'calc_stress> Stress calculation not implemented for current potential.' 26:           'calc_stress> Stress calculation not implemented for current potential.'
 29:   ENDIF 27:   ENDIF
 30:   ! 28:   !
 31:   IF(MIEFT) CALL MIEF(X,GRAD,EPOT,.TRUE.,.TRUE.) 29:   IF(MIEFT) CALL MIEF(X,GRAD,EPOT,.TRUE.,.TRUE.)
 32:   ! 30:   !
 33:   WRITE(MYUNIT,'(A)') 'stress> Overall stress tensor:' 31:   WRITE(MYUNIT,'(A)') 'stress> Overall stress tensor:'
 34:   DO I=1,3 32:   DO I=1,3
 35:      WRITE(MYUNIT,'(3(1X,E15.8))') (STRESS(0,I,J),J=1,3) 33:      WRITE(MYUNIT,'(3(1X,E15.8))') (STRESS(0,I,J),J=1,3)


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0