I use the UMAT for ABAQUS, but I meet a problem can't be solved, a job error always exists: 'The executable standard.exe aborted with system error code 1073741819. Please check the .dat, .msg, and .sta files for error messages if the files exist. ' I am sure that there are no
syntax error in my code. following is my code.
C
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDET,DPRED,CMNAME,
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
4 CELENT,DFGRDO,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,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)
C
DIMENSION STRANT(NTENS), DDDE(6), ATEMP1(6)
DIMENSION CFULL(6,6),CDFULL(6,6),DCDD(6,6)
DIMENSION OLD_STRESS(6)
PARAMETER (ZERO = 0.D0,ONE =1.D0,TWO=2.D0,THREE=3.D0,HALF = 0.5D0)
C
C 定义材料参数
EE = PROPS(1) !杨氏模量
Viod = PROPS(2) !泊松比
Cm = PROPS(3) !基体压缩强度
Tm = PROPS(4) !基体拉伸强度
Yc = PROPS(5) !critical value of thermal conjugate force
C
C 更新应变
DO I = 1, NTENS
STRANT(I) = STRAN(I) + DSTRAN(I)
END DO
C
C 给上一步的应力赋值
S11 = STRESS(1)
S22 = STRESS(2)
S33 = STRESS(3)
S12 = STRESS(4)
S13 = STRESS(5)
S23 = STRESS(6)
C
C 计算应力不变量及热聚力能量
J1 = S11 + S22 + S33
I2 = S11 * S22 + S22 * S33 + S33 * S11 - (S12 * S12 + S23 * S23 +
1 S13 * S13)
xigmaeq = SQRT(J1 * J1 - THREE * I2)
YY = (xigmaeq/(2*EE))*((TWO/THREE)*(ONE+Viod)+
1 THREE*(1-TWO*Viod*(J1/(THREE*xigmaeq))))
C
C 损伤初始准则分母参数
xigmaeqc = SQRT(Cm * Tm)
J1c = (Cm * Tm) / (Cm - Tm)
D = ZERO
C
C 填写 6X6 全刚度矩阵
DO I = 1, 6
DO J = 1, 6
CFULL(I,J)=ZERO
END DO
END DO
ATEMP = (ONE + Viod)*(ONE - 2*Viod)
CFULL(1,1) = EE * (ONE - Viod) / ATEMP
CFULL(2,2) = CFULL(1,1)
CFULL(3,3) = CFULL(1,1)
CFULL(1,2) = EE * Viod / ATEMP
CFULL(1,3) = CFULL(1,2)
CFULL(2,3) = CFULL(1,2)
CFULL(4,4) = EE / (ONE + Viod) / 2
CFULL(5,5) = CFULL(4,4)
CFULL(6,6) = CFULL(4,4)
DO I = 2, 6
DO J = 1, I-1
CFULL(I,J) = CFULL(J,I)
END DO
END DO
C
C 检查损伤初始条件
DOLD = STATEV(1)
CALL CheckFailureIni(Yc,STRANT,CELENT, CFULL, D, DOLD, NTENS)
C
C 更新损伤变量
STATEV(1) = D
C
C 将 OLD STRESS 保存到 OLD_STRESS
DO I = 1, NTENS
OLD_STRESS(I) = STRESS(I)
END DO
C
C 调用应力获取函数,更新应力
CALL GetStress(CFULL,CDFULL,D,STRESS,STRANT,NTENS)
C
C 更新 JACOBIAN(常刚度法)
DO I = 1,NTENS
DO J =1,NTENS
DDSDDE(I,J) = CFULL(I,J)
END DO
END DO
C
C 结束程序
RETURN
END
C******************************************************************************
C TO CHECK THE FAILURE INITIATION*********
C******************************************************************************
SUBROUTINE CheckFailureIni(Yc,STRANT,CELENT,CFULL,D,DOLD,NTENS)
INCLUDE 'ABA_PARAM.INC'
DIMENSION STRANT(6), CFULL(6,6)
PARAMETER (ZERO = 0.D0, ONE = 1.D0, TWO = 2.D0)
C
C 检查损伤条件,更新损伤变量(不考虑粘性)
TERM = (xigmaeq / xigmaeqc)**TWO + (J1 / J1c)
IF (TERM .GT. ONE) THEN
D = ONE - EXP((-1) * TWO * (YY / Yc))
ELSE
D = ZERO
END IF
RETURN
END
C******************************************************************************
C CALCULATE THE STRESS BASED ON THE DAMAGE VARAIBLES***************************
C******************************************************************************
SUBROUTINE GetStress(CFULL,CDFULL,D,STRESS,STRANT,NTENS)
INCLUDE 'ABA_PARAM.INC'
DIMENSION CFULL(6,6),CDFULL(6,6),STRESS(NTENS), STRANT(6)
PARAMETER (ZERO=0.D0, ONE=1.D0)
DO I = 1, 6
DO J = 1, 6
CDFULL(I,J)=CFULL(I,J)
END DO
END DO
IF (D .NE. ZERO) THEN
CDFULL(1,1) = (ONE - D) * CFULL(1,1)
CDFULL(1,2) = (ONE - D) * CFULL(1,2)
CDFULL(1,3) = (ONE - D) * CFULL(1,3)
CDFULL(2,1) = (ONE - D) * CFULL(2,1)
CDFULL(2,2) = (ONE - D) * CFULL(2,2)
CDFULL(2,3) = (ONE - D) * CFULL(2,3)
CDFULL(3,1) = (ONE - D) * CFULL(3,1)
CDFULL(3,2) = (ONE - D) * CFULL(3,2)
CDFULL(3,3) = (ONE - D) * CFULL(3,3)
CDFULL(4,4) = (ONE - D) * CFULL(4,4)
CDFULL(5,5) = (ONE - D) * CFULL(5,5)
CDFULL(6,6) = (ONE - D) * CFULL(6,6)
END IF
C 更新应力
DO I = 1, NTENS
STRESS(I) = ZERO
DO J = 1, NTENS
STRESS(I)=STRESS(I)+CDFULL(I,J)*STRANT(J)
END DO
END DO
RETURN
END