      SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
     1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
     2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C
      INCLUDE 'ABA_PARAM.INC'
C
C MATERIAL AND STRENGTH PARAMETERS
      PARAMETER(YT=14.86D3,XC=392.7D3,YC=36.7D3,SC=15.5D3)
      PARAMETER(G12=1.01D6,ALPHA=0.8D-14)
C
      CHARACTER*80 CMNAME,ORNAME
      CHARACTER*3  FLGRAY(15)
      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),T(3,3),TIME(2),
     * 	coord(*),jmac(*),jmtyp(*)
      DIMENSION ARRAY(15),JARRAY(15)
C
C INITIALIZE FAILURE FLAGS FROM STATEV. 
      EM     = STATEV(1)
      EFS    = STATEV(2)
      DAMAGE = STATEV(3)
C
C GET STRESSES FROM PREVIOUS INCREMENT
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
     $     jmac, jmtyp, matlayo, laccflg)
      S11 = ARRAY(1)
      S22 = ARRAY(2)
      S12 = ARRAY(4)
      CALL GETVRM('E',ARRAY,JARRAY,FLGRAY,jrcd,
     $     jmac, jmtyp, matlayo, laccflg)
      E12 = ARRAY(4)
C
C DAMAGE INDEX: = 0 IF NO STRAIN TO PREVENT DIVIDE BY ZERO
C
      IF (E12.NE.0) THEN
         DAMAGE = (3.D0*ALPHA*G12*S12**2 - 2.D0*ALPHA*(S12**3)/E12) / 
     &        (1.D0 + 3.D0*ALPHA*G12*S12**2)
      ELSE 
         DAMAGE = 0.D0
      ENDIF
C
      F1 = S12**2/(2.D0*G12) + 0.75D0*ALPHA*S12**4
      F2 = SC**2 /(2.D0*G12) + 0.75D0*ALPHA*SC**4
C
C MATRIX TENSILE/COMPRESSIVE FAILURE
      IF (EM .LT. 1.D0) THEN
         IF (S22 .LT. 0.D0) THEN
            EM = SQRT((S22/YC)**2 + F1/F2)
         ELSE 
            EM = SQRT((S22/YT)**2 + F1/F2)
         ENDIF
         STATEV(1) = EM
      ENDIF
C
C FIBER-MATRIX SHEAR FAILURE
      IF (EFS .LT. 1.D0) THEN
         IF (S11 .LT. 0.D0) THEN
            EFS = SQRT((S11/XC)**2 + F1/F2)
         ELSE
            EFS = 0.D0
         ENDIF
         STATEV(2) = EFS
      ENDIF
C
C STATE TRANSITION DIAGRAM
C
C FV1: MATRIX COMPR/TENS FAILURE
C FV2: FIBER/MATRIX SHEAR FAILURE
C FV3: MATERIAL DAMAGE (SHEAR NONLINEARITY)
C                            FV1  FV2  FV3      E1  E2  NU12  G12
C
C (0) NO FAILURE              0    0    0  -->  E1  E2  NU12  G12
C (1) MATRIX (COMPR/TENS)     1    0    0  -->  E1   0   0    G12
C (2) FIB/MTX SHEAR           0    1    0  -->  E1  E2   0     0
C (3) MATRIX & F/M SHEAR      1    1    0  -->  E1   0   0     0
C (4) PURE DAMAGE             0    0    1  -->  E1  E2  NU12   0
C (5) MTRX & DAMAGE           1    0    1  -->  E1   0   0     0
C (6) F/M SHEAR & DAMAGE      0    1    1  -->  E1  E2   0     0
C (7) MTRX, F/M SHR & DAMAGE  1    1    1  -->  E1   0   0     0
C
C     UPDATE FIELD VARIABLES 
C          
      FIELD(1) = 0.D0
      FIELD(2) = 0.D0
      IF (EM .GT. 1.D0) FIELD(1) = 1.D0
      IF (EFS .GT. 1.D0) FIELD(2) = 1.D0
      FIELD(3) = DAMAGE
      STATEV(3) = FIELD(3)
C
      RETURN
      END


