众所周知,UMAT子程序是通过每一步Abaqus传入的数据,经过计算后输出特定的值。
因此,请教一下,UMAT能否在第K+1个增量步调用第K个增量步传入的数据呢?
UMAT能否保存并读取每一步输入的量
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢
- 关于UMAT中数据的保存与读取
- 在UMAT(用户材料子程序)中,从理论上来说是可以保存和读取每一步相关输入量的部分信息的。
- Abaqus在每个增量步会向UMAT传递一系列的数据,例如应变增量、应力状态等信息。在UMAT内部,可以定义一些变量来存储之前增量步传入的相关数据。
- 关于在第$ K + 1 $个增量步调用第$ K $个增量步传入的数据
- 这是可以做到的。例如,在UMAT中,可以定义一些静态变量(在Fortran编写的UMAT中)。假设在第$ K $个增量步传入了应变增量$ \Delta\epsilon_{ij}^K $,可以在UMAT内部定义一个变量(比如$ old_strain $)来保存这个应变增量的值。
- 在Fortran编写的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,KSTEP,KINC) implicit none integer NDI,NSHR,NTENS,NSTATV,NPROPS,NOEL,NPT,LAYER,KSPT,KSTEP,KINC real*8 STRESS(NTENS),STATEV(NSTATV),DDSDDE(NTENS,NTENS),SSE,SPD,SCD real*8 RPL(NTENS),DDSDDT(NTENS),DRPLDE(NTENS),DRPLDT(NTENS) real*8 STRAN(NTENS),DSTRAN(NTENS),TIME,DTIME,TEMP,DTEMP real*8 PREDEF(1),DPRED(1),PROPS(NPROPS),CELENT,DFGRD0(3,3) real*8 DFGRD1(3,3),PNEWDT,old_strain(NTENS) character*80 CMNAME save old_strain if (KINC.eq.1) then old_strain = 0.0d0 else ! 这里可以使用old_strain,它保存了上一个增量步的应变相关信息 do i = 1,NTENS old_strain(i)=STRAN(i) end do end if ! 以下是UMAT的正常计算部分,例如计算应力更新等 !... end subroutine umat - 在这个示例中,当$ KINC = 1 $(第一个增量步)时,将$ old_strain $初始化为0。在后续的增量步($ KINC>1 $)中,将当前增量步的应变$ STRAN $保存到$ old_strain $中,这样就可以在后续计算中使用上一个增量步的应变信息了。不过在实际应用中,需要根据具体的材料本构关系和计算需求来正确处理这些数据的保存和使用。
解决评论 打赏 举报无用 1- 关于UMAT中数据的保存与读取