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+方向的位移载荷。

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

对模型划分成不同网格数量进行测试,测试结果下表所示。

单元数
核数
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=7B=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的循环而变化,用户可以根据需求设置其在代码中的功能),结果截图如下:

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

1000个数据,1~7各重复了136次,8重复了48次,与上述分析一致。

因此在nblock实际代表的是ABAQUS提供给子程序的材料点块,这个块区包含的单元数与模型单元数有关,而k则是对该材料点块实现一个遍历,确保每个单元都被考虑到。本研究仅针对于单核计算来讲,多核模拟将在后续展开介绍。

默认 最新
当前暂无评论,小编等你评论哦!
点赞 4 评论 收藏 7
关注