在Abaqus 2022中通过VUMAT子程序获取积分点编号
在Abaqus 2022 VUMAT中直接获取积分点编号的方案
从Abaqus 2020版本开始,确实可以通过jInfoArray直接获取积分点的局部编号,无需再依赖vumatXtrArg(...)子程序,具体实现方式如下:
- 核心用法:
jInfoArray是VUMAT的输入参数之一,其中第3个元素(Fortran 1-based索引)对应当前调用所针对的单元内积分点局部编号,同时第1个元素是单元编号,可配对使用。 - 代码示例:
subroutine VUMAT(STATEV, DDSDDE, SSE, SPD, SCD, RPL, DDSDDT, DRPLDE, DRPLDT, & STRAN, DSTRAN, TIME, DTIME, TEMP, DTEMP, PREDEF, DPRED, CMNAME, NDI, NSHR, & NTENS, NSTATV, PROPS, NPROPS, COORDS, DROT, PNEWDT, CELENT, DFGRD0, DFGRD1, & NOEL, NPT, LAYER, KSPT, KSTEP, KINC, JELEM, PARAMS, NDLOAD, JTYPE, & LDLOAD, JARRAY, NJARRAY, jInfoArray, nJInfoArray) implicit none ! 省略其他参数声明 integer, intent(in) :: jInfoArray(*) integer :: elem_id, integ_pt_id ! 获取单元编号和积分点局部编号 elem_id = jInfoArray(1) integ_pt_id = jInfoArray(3) ! 此处添加你的业务逻辑,例如记录积分点数据等 end subroutine VUMAT
- 补充说明:
- 如果需要全局唯一的积分点ID,需自行计算:假设当前单元类型的积分点总数为
n_integ_pts,则全局ID可通过(elem_id - 1)*n_integ_pts + integ_pt_id得到,注意需确保同类型单元的积分点数量一致,不同单元类型需单独处理。 - 旧版本的
vumatXtrArg(...)在2022版本中依然兼容,但使用jInfoArray更高效直接,无需额外调用子程序。
- 如果需要全局唯一的积分点ID,需自行计算:假设当前单元类型的积分点总数为
内容的提问来源于stack exchange,提问作者Berntsson
相关产品推荐
相关产品推荐

