C234567890123456789012345678901234567890123456789012345678901234567890
C
      SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
     1 RPL,DDSDDT,DRPLDE,DRPLDT,
     2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
     3 NDI,NSHR,NTENS,NSTATEV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
     4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      CHARACTER*8 CMNAME
      DIMENSION STRESS(NTENS),STATEV(NSTATEV),
     1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
     2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
     3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)
C
C     LOCAL ARRAYS
C---------------------------------------------------------------------
C     EELAS  - LOGARITHMIC ELASTIC STRAINS
C     EELASP - PRINCIPAL ELASTIC STRAINS
C     BBAR   - DEVIATORIC RIGHT CAUCHY-GREEN TENSOR
C     BBARP  - PRINCIPAL VALUES OF BBAR
C     BBARN  - PRINCIPAL DIRECTION OF BBAR (AND EELAS)
C     DISTGR - DEVIATORIC DEFORMATION GRADIENT (DISTORTION TENSOR)
C----------------------------------------------------------------------
C
      DIMENSION EELAS(6), EELASP(3), BBAR(6), BBARP(3), BBARN(3,3),
     1          DISTGR(3,3)
C
      PARAMETER(ZERO = 0.D0, ONE = 1.D0, TWO = 2.D0, THREE = 3.D0,
     1          FOUR = 4.D0)
C
C----------------------------------------------------------------------
C     UMAT FOR COMPRESSIBLE NEO-HOOKEAN HYPERELASTICITY 
C     CANNOT BE USED FOR PLANE STRESS
C----------------------------------------------------------------------
C     PROPS(1)  - E
C     PROPS(2)  - NU
C----------------------------------------------------------------------
C
C     ELASTIC PROPERTIES
C
c      EMOD = PROPS(1)
c      ENU  = PROPS(2)
c      C10  = EMOD / (FOUR * (ONE + ENU))
c      D1   = 6.0 * (ONE - TWO * ENU) / EMOD
      C10  = PROPS(1)
      D1   = PROPS(2)
C
C     JACOBIAN AND DISTORTION TENSOR
C
      DET = DFGRD1(1,1) * DFGRD1(2,2) * DFGRD1(3,3)
     1    - DFGRD1(1,2) * DFGRD1(2,1) * DFGRD1(3,3)
C
      IF (NSHR .EQ. 3) THEN
          DET = DET + DFGRD1(1,2) * DFGRD1(2,3) * DFGRD1(3,1)
     1              + DFGRD1(1,3) * DFGRD1(3,2) * DFGRD1(2,1)
     2              - DFGRD1(1,3) * DFGRD1(3,1) * DFGRD1(2,2)
     3              - DFGRD1(2,3) * DFGRD1(3,2) * DFGRD1(1,1)
      END IF
      SCALE = DET**(-ONE /THREE)
C
      DO K1 = 1, 3
        DO K2 = 1, 3
          DISTGR(K2,K1) = SCALE * DFGRD1(K2,K1)
        END DO
      END DO
C
C     CALCULATE LEFT CAUCHY-GREEN TENSOR
C
      BBAR(1) = DISTGR(1,1)**2 + DISTGR(1,2)**2 + DISTGR(1,3)**2
      BBAR(2) = DISTGR(2,1)**2 + DISTGR(2,2)**2 + DISTGR(2,3)**2
      BBAR(3) = DISTGR(3,3)**2 + DISTGR(3,1)**2 + DISTGR(3,2)**2
      BBAR(4) = DISTGR(1,1)*DISTGR(2,1) + DISTGR(1,2)*DISTGR(2,2) 
     1        + DISTGR(1,3)*DISTGR(2,3)
      IF (NSHR .EQ. 3) THEN
        BBAR(5) = DISTGR(1,1)*DISTGR(3,1) + DISTGR(1,2)*DISTGR(3,2) 
     1          + DISTGR(1,3)*DISTGR(3,3)
        BBAR(6) = DISTGR(2,1)*DISTGR(3,1) + DISTGR(2,2)*DISTGR(3,2) 
     1          + DISTGR(2,3)*DISTGR(3,3)
      END IF
C
C     CALCULATE THE STRESS
C
      TRBBAR = (BBAR(1) + BBAR(2) + BBAR(3)) / THREE
      EG     = TWO * C10 / DET
      EK     = TWO / D1 * (TWO * DET - ONE)
      PR     = TWO / D1 * (DET - ONE)
      DO K1 = 1, NDI
        STRESS(K1) = EG * (BBAR(K1) - TRBBAR) + PR
      END DO
C
      DO K1 = NDI+1, NDI+NSHR
        STRESS(K1) = EG * BBAR(K1)
      END DO
C
C     CALCULATE THE STIFFNESS
C
      EG23 = EG * TWO / THREE
      DDSDDE(1,1) = EG23 * (BBAR(1) + TRBBAR) + EK
      DDSDDE(2,2) = EG23 * (BBAR(2) + TRBBAR) + EK
      DDSDDE(3,3) = EG23 * (BBAR(3) + TRBBAR) + EK
      DDSDDE(1,2) =-EG23 * (BBAR(1) + BBAR(2) - TRBBAR) + EK
      DDSDDE(1,3) =-EG23 * (BBAR(1) + BBAR(3) - TRBBAR) + EK
      DDSDDE(2,3) =-EG23 * (BBAR(2) + BBAR(3) - TRBBAR) + EK
      DDSDDE(1,4) = EG23 * BBAR(4) / TWO
      DDSDDE(2,4) = EG23 * BBAR(4) / TWO
      DDSDDE(3,4) =-EG23 * BBAR(4)
      DDSDDE(4,4) = EG * (BBAR(1) + BBAR(2)) / TWO
      IF (NSHR .EQ. 3) THEN
        DDSDDE(1,5) = EG23 * BBAR(5) / TWO
        DDSDDE(2,5) =-EG23 * BBAR(5)
        DDSDDE(3,5) = EG23 * BBAR(5) / TWO
        DDSDDE(1,6) =-EG23 * BBAR(6)
        DDSDDE(2,6) = EG23 * BBAR(6) / TWO
        DDSDDE(3,6) = EG23 * BBAR(6) / TWO
        DDSDDE(5,5) = EG * (BBAR(1) + BBAR(3)) / TWO
        DDSDDE(6,6) = EG * (BBAR(2) + BBAR(3)) / TWO
        DDSDDE(4,5) = EG * BBAR(6) / TWO
        DDSDDE(4,6) = EG * BBAR(5) / TWO
        DDSDDE(5,6) = EG * BBAR(4) / TWO
      END IF
      DO K1 = 1, NTENS
        DO K2 = 1, K1 - 1
          DDSDDE(K1, K2) = DDSDDE(K2, K1)
        END DO
      END DO
C
C     CALCULATE LOGARITHMIC ELASTIC STRAINS (OPTIONAL)
C
      CALL SPRIND (BBAR, BBARP, BBARN, 1, NDI, NSHR)
      EELASP(1) = LOG(SQRT(BBARP(1))/SCALE)
      EELASP(2) = LOG(SQRT(BBARP(2))/SCALE)
      EELASP(3) = LOG(SQRT(BBARP(3))/SCALE)
      EELAS(1) = EELASP(1) * BBARN(1,1)**2 + EELASP(2) * BBARN(2,1)**2
     1         + EELASP(3) * BBARN(3,1)**2
      EELAS(2) = EELASP(1) * BBARN(1,2)**2 + EELASP(2) * BBARN(2,2)**2
     1         + EELASP(3) * BBARN(3,2)**2
      EELAS(3) = EELASP(1) * BBARN(1,3)**2 + EELASP(2) * BBARN(2,3)**2
     1         + EELASP(3) * BBARN(3,3)**2
      EELAS(4) = TWO * (EELASP(1) * BBARN(1,1) * BBARN(1,2)
     1               +  EELASP(2) * BBARN(2,1) * BBARN(2,2)
     2               +  EELASP(3) * BBARN(3,1) * BBARN(3,2))
      IF (NSHR .EQ. 3) THEN
        EELAS(5) = TWO * (EELASP(1) * BBARN(1,1) * BBARN(1,3)
     1                 +  EELASP(2) * BBARN(2,1) * BBARN(2,3)
     2                 +  EELASP(3) * BBARN(3,1) * BBARN(3,3))
        EELAS(6) = TWO * (EELASP(1) * BBARN(1,2) * BBARN(1,3)
     1                 +  EELASP(2) * BBARN(2,2) * BBARN(2,3)
     2                 +  EELASP(3) * BBARN(3,2) * BBARN(3,3))
      END IF
C
C     STORE ELASTIC STRAINS IN STATE VARIABLE ARRAY
C
      DO K1 = 1, NTENS
        STATEV(K1) = EELAS(K1)
      END DO
C
      RETURN
      END

    
