ABAQUS材料子程序学习(20年12月1日)

ABAQUS材料子程序学习(20年12月1日)

  • 前言
    • umat子程序
    • DeBug
    • 计算结果

前言

记录自己学习过程,本文针对《非线性本构关系在ABAQUS中的实现》第二章“动态回弹模量“本构的学习,书中自带程序可能由于转成PDF的原因有一些排版上的混乱,下文的UMAT子程序,有VS code编写,和书中例子基本相同。

umat子程序

      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,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
     4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,JSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      CHARACTER*80 CMNAME
      DIMENSION STRESS(NTENS),STATEV(NSTATV),
     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),
     4 JSTEP(4)

C    局部变量
      DIMENSION SDEV(NTENS)
      REAL THETA, THETA0, TAUOC, TAUOC0, DNU, DK, DN, DM, PA
      LOGICAL SINGULAR
C     DNU:Poisson's ratio => PROPS(1)
C     DK: Material parameter, k1=> PROPS(2)
C     DN: Material parameter,k2=> PROPS(3)
C     DM: Material parameter,k3=> PROPS(4)
C     PA: atmo=> PROPS(5)
C     DL: Material parameter,k4=> PROPS(6)

      DNU=PROPS(1)
      DK=PROPS(2)
      DN=PROPS(3)
      DM=PROPS(4)
      PA=PROPS(5)
      DL=PROPS(6)

C     计算弹性常数
      ALPHA=DNU/(1-2.0*DNU)
      ALPHA_BAR=3.0*ALPHA+1
      DLL=1.0/DL
C     偏应力与等效偏应力
      THETA=STRESS(1)+STRESS(2)+STRESS(3)
      DO I=1,NDI
        SDEV(I)=STRESS(I)-THETA*0.333333
      ENDDO
      DO I=NDI+1,NTENS
        SDEV(I)=STRESS(I)
      ENDDO
      TAUOC=0.0
      DO I=1,NTENS
        TAUOC=TAUOC+SDEV(I)**2
      ENDDO
      TAUOC=SQRT(TAUOC/3.0)
      THETA0=THETA
      TAUOC0=TAUOC

      IF(THETA .GT. -0.01) THETA0=-0.01
      IF(TAUOC .LT. 0.00001) TAUOC0=0.00001

C     更新恢复模量(Resilient modulus)
      RMR=DK*PA*(-THETA0/PA)**DN*(DL*TAUOC0/PA+1)**DM
      STATEV(1)=RMR
      SINGULAR=.TRUE.
      DO I=1,NTENS
        IF (STRESS(I) .LT. -0.1) SINGULAR=.FALSE.
      ENDDO
      IF (SINGULAR) THEN
        A=ALPHA
        B=0.0
        C=0.0
        D=0.0
      ELSE
        XX=TAUOC+PA*DLL
        YY=1.0/(XX*(1.0-DN)-DM*TAUOC)
        A=XX*YY*ALPHA_BAR*DN/3.0+ALPHA
        B=ALPHA_BAR*DN*XX*YY/THETA
        C=THETA*DM*YY/(9*TAUOC)
      END IF
      DDSDDE=0.0
      DO I=1,NDI
        DDSDDE(I,I)=1.0
      ENDDO
      DO I=NDI+1,NTENS
        DDSDDE(I,I)=0.5
      ENDDO
      DO I=1,NDI
        DO J=1,NDI
          DDSDDE(I,J)=DDSDDE(I,J)+A+B*SDEV(I)+C*SDEV(J)
     &     +D*SDEV(I)*SDEV(J)
        ENDDO
      ENDDO
      DO I=1,NDI
        DO J=NDI+1,NTENS
          DDSDDE(I,J)=DDSDDE(I,J)+C*SDEV(J)+D*SDEV(I)*SDEV(J)
          DDSDDE(J,I)=DDSDDE(J,I)+C*SDEV(J)+D*SDEV(I)*SDEV(J)
        ENDDO
      ENDDO
      DO I=NDI+1,NTENS
        DO J=NDI+1,NTENS
          DDSDDE(I,J)=DDSDDE(I,J)+D*SDEV(I)*SDEV(J)
        ENDDO
      ENDDO
C     应力更新
      DO I=1,NTENS
        DO J=1,NTENS
          STRESS(I)=STRESS(I)+DDSDDE(I,J)*DSTRAN(J)
        ENDDO
      ENDDO
      RETURN
      END

DeBug

1)log文件中修改umat的语法错误

2)没有语法错误依旧出现:
Error in job Job-Lug: Abaqus/Standard Analysis exited with an error - Please see the message file for possible error messages if the file exists.
Job Job-load aborted due to errors
解决办法:1边界条件设置一定要从初始步开始
2.载荷施加设置分析步施加较小载荷提供缓冲
3.分析步的分析时间设置initial为更小的值(我这里0.05)

计算结果

ABAQUS材料子程序学习(20年12月1日)_第1张图片

你可能感兴趣的:(abaqus,umat)