Skip to main content

cohesive model of Needleman was input into abaqus, but wrong???

Submitted by yiqinuli on

 I have written  vumat codes of a cohesive model of Needleman (whose paper entilted "Numerical simulations of fast crack growth in brittle solids"), and I have implemented it into ABAQUS/Explicit, but the predicted result is wrong. I don't know why. The corresponding fortran file is as follows:

      subroutine vumat(

C Read only (unmodifiable)variables -

     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,

     5  stressOld, stateOld, enerInternOld, enerInelasOld,

     6  tempNew, stretchNew, defgradNew, fieldNew,

C Write only (modifiable) variables -

     7  stressNew, stateNew, enerInternNew, enerInelasNew )

C

      include 'vaba_param.inc'

C

      dimension props(nprops), density(nblock), coordMp(nblock,*),

     1  charLength(nblock), strainInc(nblock,ndir+nshr),

     2  relSpinInc(nblock,nshr), tempOld(nblock),

     3  stretchOld(nblock,ndir+nshr),

     4  defgradOld(nblock,ndir+nshr+nshr),

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

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

     7  enerInelasOld(nblock), tempNew(nblock),

     8  stretchNew(nblock,ndir+nshr),

     8  defgradNew(nblock,ndir+nshr+nshr),

     9  fieldNew(nblock,nfieldv),

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

     2  enerInternNew(nblock), enerInelasNew(nblock)

C

      character*80 cmname

C

C  six parameters

      Parameter(EX=2.71828)

      snmax=props(1)  ! the maxinum normal stress

      deltn=props(2)  ! the maxinum normal displacement

      stmax=props(3)   ! the maxinum shear stress

      delts=props(4)  ! the maxinum shear displacement

      t=props(5)   !depth of cohesive elements

      r=props(6)   

 

C

C)

C the maxinum energy

      egyn=EX*snmax*deltn

      egyt=SQRT(EX/2)*stmax*delts

      q=egyt/egyn

C

C)

C

      do 100 i=1, nblock

C

C)))) calculate strain

        sta1=stateOld(i,1)+strainInc(i,1)

        sta2=stateOld(i,2)+strainInc(i,2)

        sta3=stateOld(i,3)+strainInc(i,3)

        sta4=stateOld(i,4)+strainInc(i,4)

C calculate  displacement

        detn=sta1*t

        dets=sta2*t

        

        tn=detn/deltn

        ts=dets/delts

 

C)calculate stress and energy

 

        sig1=(egyn/deltn)*(EX**(-tn))*(tn*(EX**(-ts*ts))+((1-q)/(r-1))

     1   *(1-(EX**(-ts*ts)))*(r-tn))

        sig2=(egyn/deltn)*2*(deltn/delts)*ts*(q+((r-q)/(r-1))*tn)

     2   *(EX**(-tn))*(EX**(-ts*ts))

        sig3=0

        sig4=0

        

        ENGY=egyn+egyn*(EX**(-tn))*((1-r+tn)*((1-q)/(r-1))

     1   -(q+((r-q)/(r-1))*tn)*(EX**(-ts*ts)))

 

C calculate the pure normal and shear energy

        ENt=egyn+egyn*((1-r)*((1-q)/(r-1))

     1   -q*(EX**(-ts*ts)))

        ENn=egyn+egyn*(EX**(-tn))*((1-r+tn)*((1-q)/(r-1))

     1   -(q+((r-q)/(r-1))*tn))

 

C

C................upate the stress ##################################,,

C

        stressNew(i,1)=sig1

        stressNew(i,2)=sig2

        stressNew(i,3)=sig3

        stressNew(i,4)=sig4

        

 

C) calculate the energy difference between the predicted energy and the maxinum energy

        detENt=egyt-ENt

        detENn=egyn-ENn

 

C.....,update the state variables

        stateNew(i,1)=stateOld(i,1)+strainInc(i,1)

        stateNew(i,2)=stateOld(i,2)+strainInc(i,2)

        stateNew(i,3)=stateOld(i,3)+strainInc(i,3)

        stateNew(i,4)=stateOld(i,4)+strainInc(i,4)

        

C   update the state variables

        stateNew(i,5)=2*sta1

        stateNew(i,6)=dets

        stateNew(i,7)=detn

        stateNew(i,8)=ENGY

        stateNew(i,9)=ENt

        stateNew(i,10)=ENn

        stateNew(i,11)=detENt

        stateNew(i,12)=detENn

        

C..........predict the fracture........................,,

        

        if(stateNew(i,11)>0.01) then

          stateNew(i,13)=1

        else

          stateNew(i,13)=0

        endif

 

C...........predict the fracture....................,,

        if(stateNew(i,12)>0.01) then

          stateNew(i,14)=1

        else

          stateNew(i,14)=0

        endif 

 

C..........predict the fracture......,,

        

        if( (stateNew(i,13)==0) .or. (stateNew(i,14)==0) ) then

          stateNew(i,15)=1

        else

          stateNew(i,15)=0

        endif 

        

C

100    continue

C

      return

      end

the abaqus input file is at the attachment

Attachment Size
abaqus input file 17.72 KB