我在做的东西需要涉及到两种自定义材料,我把两种材料写到同一个Umat里,按照help文档里给的例子,用材料名称进行区别并进行调用。调用后能算,但是算得结果明显不对。而把每种材料的内容独自写成Umat再调用,结果却是正确的。因此推测材料内容没有问题,但是按名称调用的时候有问题。以下是按名称调用的子程序,有大佬能帮忙看看嘛,感激不尽
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,
2 TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MATERL,NDI,NSHR,NTENS,
3 NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
4 DFGRD0,DFGRD1,NOEL,NPT,KSLAY,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),
4 DFGRD0(3,3),DFGRD1(3,3)
C
C Call different material——Mat_1 and Mat_2
C
if (CMNAME(1:5).EQ.'Mat_1') then
call Umat_1(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
* RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,
* TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MATERL,NDI,NSHR,NTENS,
* NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
* DFGRD0,DFGRD1,NOEL,NPT,KSLAY,KSPT,KSTEP,KINC)
C
else if (CMNAME(1:5).EQ.'Mat_2') then
call Umat_2(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
* RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,
* TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MATERL,NDI,NSHR,NTENS,
* NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
* DFGRD0,DFGRD1,NOEL,NPT,KSLAY,KSPT,KSTEP,KINC)
C
end if
C
RETURN
END
|