      SUBROUTINE UEL(RHS,AMATRX,SVARS,ENERGY,
     1     NDOFEL,NRHS,NSVARS,PROPS,NPROPS,COORDS,
     2     MCRD,NNODE,U,DU,V,A,JTYPE,TIME,DTIME,
     3     KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,
     4     ADLMAG,PREDEF,NPREDF,LFLAGS,MLVARX,
     5     DDLMAG,MDLOAD,PNEWDT,JPROPS,NJPROP,
     6     PERIOD)
C     
      INCLUDE 'ABA_PARAM.INC'
      PARAMETER ( ZERO = 0.D0, HALF = 0.5D0, 
     1     ONE = 1.D0, SEVEN=7.0D0, EIGHT=8.0D0 )
C
      DIMENSION RHS(MLVARX,*),
     1     AMATRX(NDOFEL,NDOFEL),
     2     SVARS(NSVARS),ENERGY(8),PROPS(*),
     3     COORDS(MCRD,NNODE),U(NDOFEL),
     4     DU(MLVARX,*),V(NDOFEL),A(NDOFEL),
     5     TIME(2),PARAMS(3),JDLTYP(MDLOAD,*),
     6     ADLMAG(MDLOAD,*),DDLMAG(MDLOAD,*),
     7     PREDEF(2,NPREDF,NNODE),LFLAGS(*),
     8     JPROPS(*)
C
C     USER ELEMENT TO MODEL THE HYDRODYNAMIC 
C     PRESSURE OF RESERVOIR ON DAM USING 
C     WESTERGAARD ADDED MASS TECHNIQUE. 
C     
C     PROPERTIES:
C           PROPS(1) = Depth of reservoir
C           PROPS(2) = Y coordinate of water level
C           PROPS(3) = Density of water
C
      RESERVOIR_DEPTH    = PROPS(1)
      YCOORD_WATER = PROPS(2)
      WATER_DENSITY  = PROPS(3)
      YCOORD_ELCENTROID = 
     *    HALF * (COORDS(2,2) + COORDS(2,1))
      ELCENTROID_DEPTH = 
     *    YCOORD_WATER - YCOORD_ELCENTROID
      RHO = (SEVEN/EIGHT) * WATER_DENSITY *
     *    SQRT(RESERVOIR_DEPTH * ELCENTROID_DEPTH)
C     
      ALEN = ABS(COORDS(2,2)-COORDS(2,1))
      AM   = HALF*RHO*ALEN
C
      DO K1 = 1, NDOFEL                      
        DO KRHS = 1, NRHS
          RHS(K1,KRHS) = ZERO
        END DO
        DO K2 = 1, NDOFEL
          AMATRX(K2,K1) = ZERO
        END DO
      END DO

      do k1 = 1, nsvars
         svars(k1) = zero
      end do
C
      IF (LFLAGS(3).EQ.1) THEN
C       Normal incrementation
        IF (LFLAGS(1).EQ.11
     *        .OR.LFLAGS(1).EQ.12) THEN
C        *DYNAMIC
          BETA  = PARAMS(2)
          DADU = ONE/(BETA*DTIME**2)
C     
          AMATRX(1,1) = AM*DADU
          AMATRX(3,3) = AM*DADU
          RHS(1,1) = RHS(1,1)-AM*A(1)
          RHS(3,1) = RHS(3,1)-AM*A(3)
          ENERGY(1)= HALF*AM*(V(1)*V(1)+V(3)*V(3))
        END IF
      ELSE IF (LFLAGS(3).EQ.4) THEN
C       Mass matrix
         AMATRX(1,1) = AM
         AMATRX(3,3) = AM
      ELSE IF (LFLAGS(3).EQ.5) THEN
C       Half-step residual calculation
         RHS(1,1) = RHS(1,1)-AM*A(1)
         RHS(3,1) = RHS(3,1)-AM*A(3)
      ELSE IF (LFLAGS(3).EQ.6) THEN
C       Initial acceleration calculation
         AMATRX(1,1) = AM
         AMATRX(3,3) = AM
         ENERGY(1) = HALF*AM*(V(1)*V(1)+V(3)*V(3))
      END IF
C
      RETURN
      END         
