C-----------------------------------------------------------------------
      SUBROUTINE MD(IMD,KMDTP,MDFLAG,ICAR,ITERMD,ITERMX,ISTR,ISSS
     &             ,DTUC,EPP) 
C-----------------------------------------------------------------------
      IMPLICIT REAL(A-H,O-Y)                                          
      IMPLICIT COMPLEX(Z)                                            
      INCLUDE 'PACVPP' 
      INTEGER KMDTP(KATM) 
C     MOLECULAR DYNAMICS PART (SIMPLE VERLET ALGORITHM)                 
      DIMENSION VEPSI(6),EPP(3,3),VAVB(6),EPSIR(6)
      DIMENSION ALT(3,3) 
C     WRITE (6,*) 'IN MD ICAR,ISTR = ',ICAR,ISTR,ISSS                   
      TKIN=0.0D0                                                        
      FCMX=0.0D0                                                        
      FDEL =-5.0D-12                                                    
      DO 10  I=1,KATM                                                   
        IF (KMDTP(I).EQ.1) THEN                                         
          FCX   = DREAL(ZFORC2(I,1))                                    
          FCY   = DREAL(ZFORC2(I,2))                                    
          FCZ   = DREAL(ZFORC2(I,3))                                    
          FCA   = SQRT(FCX**2+FCY**2+FCZ**2)                            
          IF (FCA.GT.FCMX) FCMX=FCA                                     
        END IF                                                          
  10  CONTINUE                                                          
C     WRITE (6,*) 'IN MD MDFLAG = ',MDFLAG                              
      IF(MDFLAG.EQ.0) THEN                                              
      DO 100 I=1,KATM                                                   
        IF (KMDTP(I).EQ.1) THEN                                         
          FCX   = DREAL(ZFORC2(I,1))                                    
          FCY   = DREAL(ZFORC2(I,2))                                   
          FCZ   = DREAL(ZFORC2(I,3))                                    
C**       FCA   = SQRT(FCX**2+FCY**2+FCZ**2)                            
C**       IF (FCA.GT.FCMX) FCMX=FCA                                     
          FVX=FCX*VEL(I,1)
          IF (FVX.LT.0.0D0) VEL(I,1)=0.0D0
          FVY=FCY*VEL(I,2)
          IF (FVY.LT.0.0D0) VEL(I,2)=0.0D0
          FVZ=FCZ*VEL(I,3)
          IF (FVZ.LT.0.0D0) VEL(I,3)=0.0D0
C 
          VEL(I,1) = VEL(I,1) + DTIO*FCX/AMION(I)                       
          VEL(I,2) = VEL(I,2) + DTIO*FCY/AMION(I)                       
          VEL(I,3) = VEL(I,3) + DTIO*FCZ/AMION(I)                       
          CATX(I)  = CATX(I)  + DTIO*VEL(I,1)                           
          CATY(I)  = CATY(I)  + DTIO*VEL(I,2)                           
          CATZ(I)  = CATZ(I)  + DTIO*VEL(I,3)                           
        END IF                                                          
  100 CONTINUE                                                          
C     CONSIDER BOUNDARY CONDITION                                      
C*****IF (MOD(ITER,100).EQ.0) THEN                                      
        DO 200 I=1,KATM
          P = ALINV(1,1)*CATX(I)+ALINV(1,2)*CATY(I)+ALINV(1,3)*CATZ(I)  
          Q = ALINV(2,1)*CATX(I)+ALINV(2,2)*CATY(I)+ALINV(2,3)*CATZ(I)  
          R = ALINV(3,1)*CATX(I)+ALINV(3,2)*CATY(I)+ALINV(3,3)*CATZ(I)  
C         IF (P.GE.1.0D0) P = P-1.0D0
C         IF (P.LT.0.0D0) P = P+1.0D0                                   
C         IF (Q.GE.1.0D0) Q = Q-1.0D0                                   
C         IF (Q.LT.0.0D0) Q = Q+1.0D0                                   
C         IF (R.GE.1.0D0) R = R-1.0D0                                   
C         IF (R.LT.0.0D0) R = R+1.0D0 
C*    RECALCULATE X,Y,Z                                                 
          CATX(I)=P*ALTV(1,1)+Q*ALTV(1,2)+R*ALTV(1,3)                   
          CATY(I)=P*ALTV(2,1)+Q*ALTV(2,2)+R*ALTV(2,3)                   
          CATZ(I)=P*ALTV(3,1)+Q*ALTV(3,2)+R*ALTV(3,3)                   
          PPOS(I)=P                                                     
          QPOS(I)=Q                                                     
          RPOS(I)=R                                                     
  200   CONTINUE 
C       WRITE (6,*) 'NEXT IS EPP SET]' 
C------------------------------------------------------------           
C     CHANGE A SHAPE OF AN UNIT CELL BY USING STRESSES      -           
C            1993 4/9                                       -           
C------------------------------------------------------------           
      IF (ICAR.EQ.2 .AND. ISTR.EQ.1) THEN                               
      WRITE (6,*) 'NOW MD SET EPP',ITER
      DO 6005 I=1,6                                                     
      VAVB(I)=0.0D0                                                     
 6005 CONTINUE                                                          
      DO 6010 IA=1,KATM
C     WRITE (6,*) 'VEL(IA) = ',IA,VEL(IA,1),VEL(IA,2),VEL(IA,3)         
      VAVB(1)=VAVB(1)+VEL(IA,1)*VEL(IA,1)/UNIVOL                        
      VAVB(2)=VAVB(2)+VEL(IA,1)*VEL(IA,2)/UNIVOL                        
      VAVB(3)=VAVB(3)+VEL(IA,1)*VEL(IA,3)/UNIVOL                        
      VAVB(4)=VAVB(4)+VEL(IA,2)*VEL(IA,2)/UNIVOL                        
      VAVB(5)=VAVB(5)+VEL(IA,2)*VEL(IA,3)/UNIVOL                        
      VAVB(6)=VAVB(6)+VEL(IA,3)*VEL(IA,3)/UNIVOL                        
 6010 CONTINUE
      IF (ISSS.EQ.0) THEN                                               
          DO 6000 I=1,6                                                 
C         VEPSI(I)=-DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))                     
          EPSIR(I)=-DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))                     
C         EPSIR(I)= DTUC*VEPSI(I)                                       
 6000 CONTINUE                                                          
          ISSS=1                                                        
      END IF                                                            
      DO 6100 I=1,6
C     CHKVF=VEPSI(I)*(SIGSTR(I)+VAVB(I)-PEX(I))                         
      CHKVF=EPSIR(I)*(SIGSTR(I)+VAVB(I)-PEX(I))                         
        IF (CHKVF.GE.0.0D0)  THEN                                       
            EPSIR(I)=0.0D0                                              
C            VEPSI(I)=0.0D0                                              
        END IF                                                          
C           VEPSI(I)=VEPSI(I) -DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))          
            EPSIR(I)=         -DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))          
C           EPSIR(I)=EPSIR(I) +DTUC*VEPSI(I)                            
 6100 CONTINUE 
        EPP(1,1)=EPSIR(1) + 1.0D0                                       
        EPP(1,2)=EPSIR(2)
        EPP(1,3)=EPSIR(3)
        EPP(2,1)=EPSIR(2)
        EPP(2,2)=EPSIR(4) + 1.0D0                                       
        EPP(2,3)=EPSIR(5)
        EPP(3,1)=EPSIR(3)
        EPP(3,2)=EPSIR(5)
        EPP(3,3)=EPSIR(6) + 1.0D0 
        WRITE (6,*) 'EPP(1,1) = ',EPP(1,1),VAVB(1)
        WRITE (6,*) 'EPP(1,2) = ',EPP(1,2),VAVB(2)                      
        WRITE (6,*) 'EPP(1,3) = ',EPP(1,3),VAVB(3)                      
        WRITE (6,*) 'EPP(2,1) = ',EPP(2,1),VAVB(2)                      
        WRITE (6,*) 'EPP(2,2) = ',EPP(2,2),VAVB(4)                      
        WRITE (6,*) 'EPP(2,3) = ',EPP(2,3),VAVB(5)                      
        WRITE (6,*) 'EPP(3,1) = ',EPP(3,1),VAVB(3)                      
        WRITE (6,*) 'EPP(3,2) = ',EPP(3,2),VAVB(5)                      
        WRITE (6,*) 'EPP(3,3) = ',EPP(3,3),VAVB(6) 
 5000 CONTINUE                                                          
C     CHANGE AXES OF A UNIT CELL                                        
      DO 6200 I=1,3                                                     
      ALT(I,1)=EPP(I,1)*ALTV(1,1)+EPP(I,2)*ALTV(2,1) 
     &        +EPP(I,3)*ALTV(3,1)                   
      ALT(I,2)=EPP(I,1)*ALTV(1,2)+EPP(I,2)*ALTV(2,2)
     &        +EPP(I,3)*ALTV(3,2)                   
      ALT(I,3)=EPP(I,1)*ALTV(1,3)+EPP(I,2)*ALTV(2,3)
     &        +EPP(I,3)*ALTV(3,3)                   
 6200 CONTINUE                                                          
C
      DO 6210 I=1,3
      ALTV(I,1)=ALT(I,1)
      ALTV(I,2)=ALT(I,2)
      ALTV(I,3)=ALT(I,3)
 6210 CONTINUE 
C                                                                       
      DO 6500 IA=1,KATM
      P=PPOS(IA)
      Q=QPOS(IA)
      R=RPOS(IA)
      CATX(IA)=P*ALTV(1,1)+Q*ALTV(1,2)+R*ALTV(1,3)
      CATY(IA)=P*ALTV(2,1)+Q*ALTV(2,2)+R*ALTV(2,3)
      CATZ(IA)=P*ALTV(3,1)+Q*ALTV(3,2)+R*ALTV(3,3) 
 6500 CONTINUE 
C
      END IF                                                            
C
C      IF(MOD(ITER,10).EQ.0) THEN 
        WRITE (18,*) 'ITER = ',ITER
        WRITE (18,300)(I,CATX(I),CATY(I),CATZ(I),                       
     &                   PPOS(I),QPOS(I),RPOS(I)  ,I=1,KATM)            
C      END IF                                                           
      IF((FCMX.LT.FDEL*0.5D0).OR.(ITER.GE.ITERMX)) THEN                 
        MDFLAG  = 1                                                     
        ICAR    = 0                                                     
        ITERMD  = ITER                                                  
                WRITE(6,*) ' ITERMD= ',ITERMD                           
      END IF                                                            
      END IF                                                            
      IF((FCMX.GT.FDEL).AND.(ITER.LE.ITERMX)) THEN                      
        MDFLAG  = 0                                                     
        ICAR    = 2                                                     
        ITERMD  = 5000                                                  
      END IF                                                            
  300 FORMAT(' ',I3,3F15.10,3F10.6)                                     
  302 FORMAT(' ',I3,3F20.10)                                            
      WRITE(21,305) ITER,FCMX,MDFLAG                                    
  305 FORMAT(' ',I5,F12.6,3X,I3,'ITER AND FCMX') 
      RETURN                                                            
      END