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