nicky_wang22 发表于 2020-6-17 11:01:16

验证子程序时当材料达到屈服时网格发生畸变

我在验证子程序的时候,发现每当材料发生屈服时也就是应力应变曲线斜率为0时,网格发生畸变,我觉得会不会是此时应力增量变为0导致应力增量出了问题,这方面一直没搞懂,有没有大佬帮忙看看代码,多谢了!C**********************************************************
!C    VUMAT FOR ZWT MODEL WITH IMPACT ANALYSIS
!C    WRITTEN BYZZD
!C**********************************************************
      SUBROUTINE VUMAT(
!C READ ONLY (UNMODIFIABLE)VARIABLES -
   1NBLOCK, NDIR, NSHR, NSTATEV, NFIELDV, NPROPS, LANNEAL,
   2STEPTIME, TOTALTIME, DT, CMNAME, COORDMP, CHARLENGTH,
   3PROPS, DENSITY, STRAININC, RELSPININC,
   4TEMPOLD, STRETCHOLD, DEFGRADOLD, FIELDOLD,
   5STRESSOLD, STATEOLD, ENERINTERNOLD, ENERINELASOLD,
   6TEMPNEW, STRETCHNEW, DEFGRADNEW, FIELDNEW,
!C WRITE ONLY (MODIFIABLE) VARIABLES -
   7STRESSNEW, STATENEW, ENERINTERNNEW, ENERINELASNEW )
!C
      INCLUDE 'VABA_PARAM.INC'
!C
      DIMENSION PROPS(NPROPS), DENSITY(NBLOCK), COORDMP(NBLOCK,*),
   1CHARLENGTH(NBLOCK), STRAININC(NBLOCK,NDIR+NSHR),
   2RELSPININC(NBLOCK,NSHR), TEMPOLD(NBLOCK),
   3STRETCHOLD(NBLOCK,NDIR+NSHR),
   4DEFGRADOLD(NBLOCK,NDIR+NSHR+NSHR),
   5FIELDOLD(NBLOCK,NFIELDV), STRESSOLD(NBLOCK,NDIR+NSHR),
   6STATEOLD(NBLOCK,NSTATEV), ENERINTERNOLD(NBLOCK),
   7ENERINELASOLD(NBLOCK), TEMPNEW(NBLOCK),
   8STRETCHNEW(NBLOCK,NDIR+NSHR),
   8DEFGRADNEW(NBLOCK,NDIR+NSHR+NSHR),
   9FIELDNEW(NBLOCK,NFIELDV),
   1STRESSNEW(NBLOCK,NDIR+NSHR), STATENEW(NBLOCK,NSTATEV),
   2ENERINTERNNEW(NBLOCK), ENERINELASNEW(NBLOCK)
!C
      CHARACTER*80 CMNAME
!C
!C STRAIN
!C   STATE(*,1) = STRAIN11
!C   STATE(*,2) = STRAIN22
!C   STATE(*,3) = STRAIN33
!C   STATE(*,4) = STRAIN12
!C   STATE(*,5) = STRAIN23
!C   STATE(*,6) = STRAIN31
!C
!C UNDAMAGED STRESS
!C   STATE(*,7) = STRESS11 (UNDAMAGED)
!C   STATE(*,8) = STRESS22 (UNDAMAGED)
!C   STATE(*,9) = STRESS33 (UNDAMAGED)
!C   STATE(*,10) = STRESS12 (UNDAMAGED)
!C   STATE(*,11) = STRESS23 (UNDAMAGED)
!C   STATE(*,12) = STRESS31 (UNDAMAGED)
!C
!C   STATE(*,13) = DAMAGE
!C
      PARAMETER( ZERO = 0.D0, ONE = 1.D0, TWO = 2.D0, THREE = 3.D0,
   1THIRD = ONE/THREE, HALF = ONE/TWO, TWOTHIRDS = TWO/THREE,
   2THREEHALFS = 1.5D0)
!C
!C
      E0   = PROPS(1)
      ALPHA= PROPS(2)
      BETA   = PROPS(3)
!c      E1   = PROPS(4)
       MU   = PROPS(4)
!c      THETA= PROPS(6)
!c   E2       = PROPS(7)
!c      THETA2 = PROPS(8)
!c      E      = PROPS(9)          
      TWOMU= TWO*MU
      AF   = ONE/((ONE+MU)*(ONE-TWOMU))   
!C
!C
!C
          DO I = 1, NBLOCK
!C CALCULATE DINCSIGMA=A*INCE(KL)   
         DINC_SIGMA11=AF*((ONE-MU)*STRAININC(I,1)+MU*STRAININC(I,2)
   1             +MU*STRAININC(I,3))
         DINC_SIGMA22=AF*(MU*STRAININC(I,1)+(ONE-MU)*STRAININC(I,2)
   1             +MU*STRAININC(I,3))
         DINC_SIGMA33=AF*(MU*STRAININC(I,1)+MU*STRAININC(I,2)
   1             +(ONE-MU)*STRAININC(I,3))
         DINC_SIGMA12 = AF*((ONE-TWOMU)/TWO)*STRAININC(I,4)
         DINC_SIGMA23 = AF*((ONE-TWOMU)/TWO)*STRAININC(I,5)
         DINC_SIGMA31 = AF*((ONE-TWOMU)/TWO)*STRAININC(I,6)
!C UPDATE STRAIN
         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)
         STATENEW(I,5)=STATEOLD(I,5)+STRAININC(I,5)
         STATENEW(I,6)=STATEOLD(I,6)+STRAININC(I,6)
!C CALCULATE INCREAMENT OF SIJ = INC_SIJ
!C
!C         DINCF_S11=E0*DINC_SIGMA11+(TWO*ALPHA*STATENEW(I,1)+THREE
!C   1      *BETA*(STATENEW(I,1)**TWO))*DINC_SIGMA11
!C
!C          DINCF_S22=E0*DINC_SIGMA22+(TWO*ALPHA*STATENEW(I,2)+THREE
!C      1      *BETA*(STATENEW(I,2)**TWO))*DINC_SIGMA22        
!C
!C          DINCF_S33=E0*DINC_SIGMA33+(TWO*ALPHA*STATENEW(I,3)+THREE
!C      1      *BETA*(STATENEW(I,3)**TWO))*DINC_SIGMA33
!C
!C          DINCF_S12=E0*DINC_SIGMA12+(TWO*ALPHA*STATENEW(I,4)+THREE
!C      1      *BETA*(STATENEW(I,4)**TWO))*DINC_SIGMA12
!C
!C          DINCF_S23=E0*DINC_SIGMA23+(TWO*ALPHA*STATENEW(I,5)+THREE
!C      1      *BETA*(STATENEW(I,5)**TWO))*DINC_SIGMA23
!C
!C          DINCF_S31=E0*DINC_SIGMA31+(TWO*ALPHA*STATENEW(I,6)+THREE
!C      1      *BETA*(STATENEW(I,6)**TWO))*DINC_SIGMA31
!CCALCULATE LOW STRAIN RATE
!c          DINCS_S11=STATENEW(I,7)*(EXP(-1.*DT/THETA)-ONE)+(((ONE-EXP(-1.*DT/
!c   1         THETA))/(DT+0.000000000000001))*E1*THETA)*DINC_SIGMA11
!c          DINCS_S22=STATENEW(I,8)*(EXP(-1.*DT/THETA)-ONE)+(((ONE-EXP(-1.*DT/
!c   1         THETA))/(DT+0.000000000000001))*E1*THETA)*DINC_SIGMA22
!c          DINCS_S33=STATENEW(I,9)*(EXP(-1.*DT/THETA)-ONE)+(((ONE-EXP(-1.*DT/
!c   1         THETA))/(DT+0.000000000000001))*E1*THETA)*DINC_SIGMA33
!c          DINCS_S12=STATENEW(I,10)*(EXP(-1.*DT/THETA)-ONE)+(((ONE-EXP(-1.*DT/
!c   1         THETA))/(DT+0.000000000000001))*E1*THETA)*DINC_SIGMA12
!c          DINCS_S23=STATENEW(I,11)*(EXP(-1.*DT/THETA)-ONE)+(((ONE-EXP(-1.*DT/
!c   1         THETA))/(DT+0.000000000000001))*E1*THETA)*DINC_SIGMA23
!c          DINCS_S31=STATENEW(I,12)*(EXP(-1.*DT/THETA)-ONE)+(((ONE-EXP(-1.*DT/
!c   1         THETA))/(DT+0.000000000000001))*E1*THETA)*DINC_SIGMA31
!CCALCULATE HIGH STRAIN RATE PART
!c       DINCT_S11=STATENEW(I,13)*(EXP(-1.*DT/THETA2)-ONE)+(((ONE-EXP(-1.
!c   1    *DT/THETA2))/(DT+0.000000000000001))*E2*THETA2)*DINC_SIGMA11
!c          DINCT_S22=STATENEW(I,14)*(EXP(-1.*DT/THETA2)-ONE)+(((ONE-EXP(-1.*DT/
!c   1    THETA2))/(DT+0.000000000000001))*E2*THETA2)*DINC_SIGMA22
!c          DINCT_S33=STATENEW(I,15)*(EXP(-1.*DT/THETA2)-ONE)+(((ONE-EXP(-1.*DT/
!c   1    THETA2))/(DT+0.000000000000001))*E2*THETA2)*DINC_SIGMA33
!c          DINCT_S12=STATENEW(I,16)*(EXP(-1.*DT/THETA2)-ONE)+(((ONE-EXP(-1.*DT
!c   1    /THETA2))/(DT+0.000000000000001))*E2*THETA2)*DINC_SIGMA12
!c          DINCT_S23=STATENEW(I,17)*(EXP(-1.*DT/THETA2)-ONE)+(((ONE-EXP(-1.*DT/
!c   1    THETA2))/(DT+0.000000000000001))*E2*THETA2)*DINC_SIGMA23
!c          DINCT_S31=STATENEW(I,18)*(EXP(-1.*DT/THETA2)-ONE)+(((ONE-EXP(-1.*DT/
!c   1    THETA2))/(DT+0.000000000000001))*E2*THETA2)*DINC_SIGMA31
!C        UPDATE THE HISTORY
!c      STATENEW(I,7)=STATEOLD(I,7)+DINCS_S11
!c          STATENEW(I,8)=STATEOLD(I,8)+DINCS_S22
!c          STATENEW(I,9)=STATEOLD(I,9)+DINCS_S33
!c          STATENEW(I,10)=STATEOLD(I,10)+DINCS_S12
!c          STATENEW(I,11)=STATEOLD(I,11)+DINCS_S23
!c          STATENEW(I,12)=STATEOLD(I,12)+DINCS_S31
!c          STATENEW(I,13)=STATEOLD(I,13)+DINCT_S11
!c          STATENEW(I,14)=STATEOLD(I,14)+DINCT_S22
!c          STATENEW(I,15)=STATEOLD(I,15)+DINCT_S33
!c          STATENEW(I,16)=STATEOLD(I,16)+DINCT_S12
!c          STATENEW(I,17)=STATEOLD(I,17)+DINCT_S23
!c          STATENEW(I,18)=STATEOLD(I,18)+DINCT_S31
         STRESSNEW(I,1)=STRESSOLD(I,1)+E0*DINC_SIGMA11+
        1       (TWO*ALPHA*STATENEW(I,1)+THREE
   2    *BETA*(STATENEW(I,1)**TWO))*DINC_SIGMA11
!C
         STRESSNEW(I,2)=STRESSOLD(I,2)+E0*DINC_SIGMA22+
        1       (TWO*ALPHA*STATENEW(I,2)+THREE
   2      *BETA*(STATENEW(I,2)**TWO))*DINC_SIGMA22
!C
         STRESSNEW(I,3)=STRESSOLD(I,3)+E0*DINC_SIGMA33+
        1       (TWO*ALPHA*STATENEW(I,3)+THREE
   2      *BETA*(STATENEW(I,3)**TWO))*DINC_SIGMA33
!C
         STRESSNEW(I,4)=STRESSOLD(I,4)+E0*DINC_SIGMA12+
        1       (TWO*ALPHA*STATENEW(I,4)+THREE
   2      *BETA*(STATENEW(I,4)**TWO))*DINC_SIGMA12
!C
         STRESSNEW(I,5)=STRESSOLD(I,5)+E0*DINC_SIGMA23+
   1       (TWO*ALPHA*STATENEW(I,5)+THREE
   2      *BETA*(STATENEW(I,5)**TWO))*DINC_SIGMA23
!C               
         STRESSNEW(I,6)=STRESSOLD(I,6)+E0*DINC_SIGMA31+
        1       (TWO*ALPHA*STATENEW(I,6)+THREE
   2      *BETA*(STATENEW(I,6)**TWO))*DINC_SIGMA31
      END DO
      RETURN
      END

页: [1]
查看完整版本: 验证子程序时当材料达到屈服时网格发生畸变