ABAQUS显式子程序调用规则及nblock变量解释

在使用ABAQUS进行有限元仿真时,调用用户子程序可以使用户解决一些问题时具有很大的灵活性。在实现更加复杂的计算过程时,ABAQUS软件与子程序之间的交互关系是需要了解的。Vxxxxxx(VUMAT/VUHARD/VUSDFLD等)子程序内需要将用户自定义变形部分写入(do k=1,nblock → end do)语句内,理解nblock的含义将对子程序的改进大有帮助。本文以VUHARD子程序为例,测试了ABAQUS显式算法在调用用户子程序时的基本规则。
首先建立了三维Part,为其赋予热变形本构参数(用户可参考Johnson-Cook模型),单元采用C3D8RT单元,具有8个节点,1个积分点。固定Z0面,施加沿Z+方向的位移载荷。
对模型划分成不同网格数量进行测试,测试结果下表所示。
单元数 |
核数 |
nblock |
k |
8 | 1 | 8 |
1-8 |
64 | 1 | 64 | 1-64 |
125 |
1 | 125 |
1-125 |
216 |
1 | 136;80 |
1-136;1-80 |
343 |
1 | 136×2;71 |
(1-136)×2;1-71 |
1000 |
1 | 136×7;48 |
(1-136)×7;1-48 |
统计结果表明,nblock的最大值为136。可得单元数和nblock的关系为:
单元数=136*A+B
以表中1000单元为例,A=7,B=48。
ABAQUS在调用VUHARD子程序时,每次向子程序提供136个单元(单元数<136则提供所有单元)进行计算,使用(do k=1,nblock → end do)计算每一个单元的相关变量。因此对于1000单元来说,一共调用8次子程序。
设置全局变量commom /globals/ kdtest,在ABAQUS每一次调用子程序之后,给其加一,统计模拟过程中的总循环数,在(do k=1,nblock → end do) 循环内部输出变量kdtest的值。(全局变量可以不跟着k的循环而变化,用户可以根据需求设置其在代码中的功能),结果截图如下:
共1000个数据,1~7各重复了136次,8重复了48次,与上述分析一致。
因此在nblock实际代表的是ABAQUS提供给子程序的材料点块,这个块区包含的单元数与模型单元数有关,而k则是对该材料点块实现一个遍历,确保每个单元都被考虑到。本研究仅针对于单核计算来讲,多核模拟将在后续展开介绍。

工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP
