Hi, 

I am trying to implement probabilistic damage model of the dynamic fragmentation of brittle materials,Hild,Advanaces in applied mechanics,2010 

I have got excessive distortion error.Please anyone suggest me how to rectify the error.Please see my subroutine if any error correct me.my model includes anisotropic damage(D1,D2,D3 in principal directions which are found in each time step,alpha is known). Please check the attached cae,vumat code files

  subroutine vumat(

     1  nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,

     2  stepTime, totalTime, dt, cmname, coordMp, charLength,

     3  props, density, strainInc, relSpinInc,

     4  tempOld, stretchOld, defgradOld, fieldOld,

     3  stressOld, stateOld, enerInternOld, enerInelasOld,

     6  tempNew, stretchNew, defgradNew, fieldNew,

     5  stressNew, stateNew, enerInternNew, enerInelasNew )

C

      INCLUDE 'VABA_PARAM.INC'

C

C

C All arrays dimensioned by (*) are not used in this algorithm

      dimension props(nprops), density(nblock),

     1  coordMp(nblock,*),

     2  charLength(*), strainInc(nblock,ndir+nshr),

     3  relSpinInc(*), tempOld(*),

     4  stretchOld(*), defgradOld(*),

     5  fieldOld(*), stressOld(nblock,ndir+nshr),

     6  stateOld(nblock,nstatev), enerInternOld(nblock),

     7  enerInelasOld(nblock), tempNew(*),

     8  stretchNew(*), defgradNew(*), fieldNew(*),

     9  stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),

     1  enerInternNew(nblock), enerInelasNew(nblock)

C

      character*80 cmname

C

C

***********************************************************************************

**  VUMAT,PROBABILISTIC DAMAGE MODEL FOR ABAQUS/STANDARD INCORPORATING            **

**  ELASTIC PROPERTIES AND  WEIBULL PARAMETERS                                   **

**                                                                               **

***********************************************************************************

***********************************************************************************

**

**

**

*USER SUBROUTINE

      PARAMETER (M=3,N=3,ZERO=0.D0,ONE=1.D0,TWO=2.D0,THREE=3.D0,

     +          SIX=6.D0, NINE=9.D0,XALPHA=0.31,S=4.18)

C

      DIMENSION XIDEN(M,N),XC(6,6),XS(6,6),

     +          STR(M,N),XDAM(nblock,M),AJAC(6,6),STRN(M,N),

     +          XPRIN(nblock,M),XDEF(nblock,M),XPRINN(nblock,M),

     +          XFAIL(nblock),XPRINR(nblock,M)

      dimension  eigVal(nblock,M), eigVec(nblock,M)

      real V,B,RKO,RKT,RKTH,RKF,RK

      integer seed

       seed=7654321

C

C     XDAM=DAMAGE VALUE CORRESPONDING TO EACH PRICIPAL DIRECTION,XPRIN=PRINCIPAL STRESS

C     XDEF=MODIFIED GROWTH DEFECT DENSITY CORRESPONDING TO EACH PRINCIPAL STRESS

C     XPRINN-PRINCIPALSTRESS NEW,XPRIN-PRICIPAL STRESS OLD

C     XPRINR-PRINCIPAL STRESS RATE

C

C--------------------------------------------------------------------

C

C     SPECIFY MATERIAL PROPERTIES

C     ALL DIMENSIONS ARE IN meter

C

       E=props(1)

       XNUE=props(2)

       XDENSITY=props(3)

       XPOROSITY=props(4)

       XM=props(5)

       XMEANFS=props(6)

       XEFFVOL=props(7)

       ALAMBDA=E*XNUE/(ONE+XNUE)/(ONE-TWO*XNUE)

       AMU=E/(ONE+XNUE)/2

       V=SQRT(E/XDENSITY)

       DO I=1,M

       DO J=1,N

        STR(I,J)=ZERO

       END DO

      END DO

      NTENS=ndir+nshr

       DO I=1,NTENS

        DO J=1,NTENS

            AJAC(I,J)=ZERO

        ENDDO

       ENDDO

C     STATE VARIABLES:1 TO 3 ARE DAMAGE VALUE VARYING FROM 0 TO 1

C     STATE VARIABLES:4-FAILURE STRESS

C     STATE VARIABLES:5,6,7-PRINCIPAL STRESSES

C     STATE VARIABLES:8,9,10-DEFECT DENSITY CORRESPONDING TO EACH PRINCIPAL STRESS

       if (stepTime.eq.zero) then

        do 101 i = 1,nblock   

        B=((XEFFVOL)*((XMEANFS)**XM))

        PK=ran(seed)    

      Q=ONE/(ONE-PK)

      XFAIL(i)=(XMEANFS)*((LOG(Q))**(ONE/XM))     

       AJAC(1,1)= (ALAMBDA+TWO*AMU)

       AJAC(2,2)= (ALAMBDA+TWO*AMU)

       AJAC(3,3)= (ALAMBDA+TWO*AMU)

       AJAC(4,4)= AMU

       AJAC(5,5)= AMU

       AJAC(6,6)= AMU

       AJAC(1,2)= ALAMBDA

       AJAC(1,3)= ALAMBDA

       AJAC(2,1)= ALAMBDA

       AJAC(2,3)= ALAMBDA

       AJAC(3,1)= ALAMBDA

       AJAC(3,2)= ALAMBDA

        DO j=1,NTENS

        stressNew(i,j)=stressOld(i,j)+

     2   (DOT_PRODUCT(AJAC(j,:),strainInc(i,:)))

       ENDDO      

      stateNew(i,4)=XFAIL(i)     

      seed=seed+1

101     continue

      endif

      do 100 i = 1,nblock

C

C     WRITE STRESSES IN MATRIX FORM

C

      DO j = 1,3

      STR(j,j) = stressOld(i,j)

      END DO

      STR(1,2) = stressOld(i,4)

      STR(2,1) = stressOld(i,4)

      STR(1,3) = stressOld(i,5)

      STR(3,1) = stressOld(i,5)

      STR(2,3) = stressOld(i,6)

      STR(3,2) = stressOld(i,6)

c     FIND THE EIGEN VALUES OF THE STRESSOLD MATRIX

      CALL VSPRINC( NBLOCK, STR, eigVal, ndir, nshr )

C     EVR IS THE PRICIPAL STRESSES

      DO j=1,3

        XPRIN(i,j)=eigVal(i,j)

      ENDDO

       print*, 'old principal stress'

      print*,  XPRIN(i,:) 

C

C     WRITE STRESSES IN MATRIX FORM

C

      DO j = 1,3

      STRN(j,j) = stressNew(i,j)

      END DO

      STRN(1,2) = stressNew(i,4)

      STRN(2,1) = stressNew(i,4)

      STRN(1,3) = stressNew(i,5)

      STRN(3,1) = stressNew(i,5)

      STRN(2,3) = stressNew(i,6)

      STRN(3,2) = stressNew(i,6)     

c     FIND THE EIGEN VALUES OF THE STRESSNEW MATRIX

      CALL VSPRINC( NBLOCK, STRN, eigVal, ndir, nshr )

C     EVR IS THE PRICIPAL STRESSES

      DO j=1,3

        XPRINN(i,j)=eigVal(i,j)

      ENDDO

      print*, 'new principal stress'

      print*,  XPRINN(i,:) 

C     FINDING THE PRINCIPAL STRESS RATE

      DO j=1,3

        XPRINR(i,j)=(XPRINN(i,j)-XPRIN(i,j))/dt

      ENDDO

      print*, 'principal stress rate'

      print*,  XPRINR(i,:) 

C     FINDING THE DEFECT DENSITY CORRESPONDING TO EACH PRICIPAL STRESS

C     FINDING THE DAMAGE VALUE CORRESPONDING TO EACH PRINCIPAL STRESS

C     REFER EQUATION 83

      DO j=1,3

       IF (XPRINR(i,j).LE.ZERO) THEN

          stateNew(i,j)=stateOld(i,j)

       ELSE

        IF ((XPRIN(i,j).GT.ZERO).AND.(XPRINR(i,j).GT.ZERO))THEN

         IF (XPRIN(i,j).LE.XFAIL(i)) THEN

                stateNew(i,j+7)=ZERO

                stateNew(i,j)=ZERO

            ELSE

             stateNew(i,j+7)=K*((XPRIN(i,j))**XM)

C     XBETA IS THE VALUE OF THE RIGHT HAND SIDE IN THE EQUATION 81

             XBETA=6*S*((0.33*V)**3)*XDEF(i,j)

             RKO=((1-XDAM(i,j))*(XBETA*(totalTime**2)))/2

             RKT=((1-(XDAM(i,j)+((dt*RKO)/2)))

     1         *(XBETA*((totalTime+dt/2)**2))/2)

             RKTH=(1-(XDAM(i,j)+(dt*RKT)/2))

     1         *(XBETA*((totalTime+dt/2)**2))/2

             RKF=(1-(XDAM(i,j)+(dt*RKTH)))

     1         *(XBETA*((totalTime+dt)**2))/2

             RK=RKO+2*RKT+2*RKTH+RKF

             stateNew(i,j)=stateOld(i,j)+((dt/6)*RK)

             ENDIF

            ELSE

                stateNew(i,j+7)=ZERO

                stateNew(i,j)=ZERO

           ENDIF

        ENDIF

      ENDDO

C     STATE VARIABLES:1 TO 3 ARE DAMAGE VALUE VARYING FROM 0 TO 1

C     STATE VARIABLES:4-FAILURE STRESS

        stateNew(i,4)=XFAIL(i)

        stateNew(i,5)=XPRIN(i,1)

        stateNew(i,6)=XPRIN(i,2)

        stateNew(i,7)=XPRIN(i,3)         

C     UPDATING THE STRESS MATRIX:TO DO THAT UPDATE THE COMPLIANCE TENSOR

C     MATRIX AND INVERSE THE COMPLIANCE TENSOR TO OBTAIN THE CONSTITUTIVE TENSOR

C     XC=COMPLIANCE TENSSOR,XS=INVERSE OF COMPLIANCE TENSOR

      XC(1,1)=ONE/E/(1-stateNew(i,1))

      XC(1,2)=(-XNUE)/E

      XC(1,3)=(-XNUE)/E

      XC(1,4)=0.0

      XC(1,5)=0.0

      XC(1,6)=0.0

      XC(2,1)=(-XNUE)/E

      XC(2,2)=ONE/E/(1-stateNew(i,2))

      XC(2,3)=(-XNUE)/E

      XC(2,4)=0.0

      XC(2,5)=0.0

      XC(2,6)=0.0

      XC(3,1)=(-XNUE)/E

      XC(3,2)=(-XNUE)/E

      XC(3,3)=ONE/E/(1-stateNew(i,3))

      XC(3,4)=0.0

      XC(3,5)=0.0

      XC(3,6)=0.0

      XC(4,1)=0.0

      XC(4,2)=0.0

      XC(4,3)=0.0

      XC(4,4)=(ONE+XNUE)/((ONE-stateNew(i,2))**(XALPHA))

     3 /((ONE-stateNew(i,3))**(XALPHA))/E

      XC(4,5)=0.0

      XC(4,6)=0.0

      XC(5,1)=0.0

      XC(5,2)=0.0

      XC(5,3)=0.0

      XC(5,4)=0.0

      XC(5,5)=(ONE+XNUE)/((ONE-stateNew(i,3))**(XALPHA))

     4 /((ONE-stateNew(i,1))**(XALPHA))/E

      XC(5,6)=0.0

      XC(6,1)=0.0

      XC(6,2)=0.0

      XC(6,3)=0.0

      XC(6,4)=0.0

      XC(6,5)=0.0

      XC(6,6)=(ONE+XNUE)/((ONE-stateNew(i,1))**XALPHA)

     5 /((ONE-stateNew(i,2))**XALPHA)/E

C     FINDING XS=INVERSE OF COMPLIANCE TENSOR BY GUASS JORDAN METHOD

      CALL INVERSEA(XC,XS)         

        DO j=1,NTENS

      stressNew(i,j)=stressOld(i,j)+DOT_PRODUCT(XS(j,:),strainInc(i,:))

       ENDDO

100     continue

        return

        end

********************END OF VUMAT SUBROUTINE******************************

*************************************************************************

C **   INVERSE OF A 6X6 MATRIX BY GAUSS JORDAN METHOD

*************************************************************************

C **   INVERSE OF A 6X6 MATRIX BY GAUSS JORDAN METHOD

      SUBROUTINE INVERSEA(A,C)

C

      INCLUDE 'VABA_PARAM.INC'

C

      PARAMETER (M=6,N=6)

      DIMENSION A(M,N),B(6,12),C(M,N)

      INTEGER I,J,N

C **  BUILDING AUGUMENTED MATRIX B

      DO 40 J=1,N

        DO 30 I=1,N

            B(I,J)=A(I,J)

30    CONTINUE

40    CONTINUE

      DO I=1,N

        DO J=N+1,2*N

            IF ((J-I).EQ.N) THEN

                B(I,J)=1.0

                ELSE

                    B(I,J)=0.0

            ENDIF

        ENDDO

      ENDDO

      DO 160 I=1,N

        B(I,:)=B(I,:)/B(I,I)

        DO 150 J=1,N

            IF (I.NE.J) THEN

                B(J,:)=B(J,:)-B(J,I)*B(I,:)

            ENDIF

150        CONTINUE

160        CONTINUE

       DO I=1,N

        DO J=N+1,2*N

            C(I,J-6)=B(I,J)

        ENDDO

       ENDDO

       RETURN

       END

More Bhanu Savarni Kosuri's questions See All
Similar questions and discussions