ABAQUS用户定义单元UEL与VUEL从入门到放弃系列3————讲一讲的RHS和NBLOCK

大家好,我是借风一尺,一个终极懒癌患者。
......说完这句话其实已经不想再码字了。
好的,直入主题,速战速决。
来技术邻其实已经很久了,也目睹了技术邻这两年飞一般的发展速度,好像突然火起来了哈哈。最初来技术邻,讲实话其实就是来学UEL的,后来发现没帖子,然后就各种找论坛,simweABAQUS版块的帖子二零零几年的帖子都被我挖干净了,做UEL的人确实比做UMAT的少多了,但技术邻这个平台依旧让我受益良多,诸如蓝牙老师,isolver团队snowwave02等大佬,他们的分享,甚至很多是免费分享确实高屋建瓴,知识的学习必是知其所以然,我想只有这样的学术氛围越来越重,这样乐于分享的大佬越来越多,中国的自研工业软件才能走向世界,我们的工业4.0才有可能实现。
学于此,也该传于此,作为一只科研狗,我想我比谁都清楚什么叫从“入门”到“放弃”,未知的知识就是这样,不懂的时候它比金子都贵,等你学会了它好像又像水一样普通,亦如水一样珍贵。
之后也会逐渐在技术邻更一些帖子,可能也会有视频吧,内容大概会围绕有限元理论,用户子程序开发,ABAQUS python开发,XFEM,lamb波的SHM等,因为不知道想学UEL\VUEL的人群多大,也不知道大家都想了解些什么,不知道应该从何说起,可能有些想学UEL的小白基础很差连有限元理论都没学全,再加上我确实是个懒癌晚期,其实很多东西都做好了,懒的发,也希望能治疗一下自己的懒癌吧。
今日份正事,给大家简单讲一讲VUEL中几个重要的数组,并发一个平面四节点等参单元的VUEL程序。
首先讲一讲最重要的,也是最让大家疑惑的数组RHS,我们先来看看ABAQUS帮助文档的介绍。
此为UEL中RHS的定义,right-hand-side,译为右端项,表示这个单元在整个系统平衡方程中右端的量,是一个the residual vector(残差向量),这个残差向量就是回传给ABAQUS进行迭代收敛平衡的,在大部分NRHS=1的分析中,其等于external forces minus internal forces(外力减内力),因此我们在UEL编程时,所求的RHS就应该等于外力减去内力,但其实写过UEL的都知道, 我们计算的RHS=-KU(不考虑非线性的时候,其中K为刚度矩阵),仅仅是负的内力,而并没有使用外力减内力,那么这究竟是为什么呢?很多人解释为外力由ABAQUS自己求得,所以我们只需要提供内力的负值。
对此问题,我个人有不同见解,在此进行学术探讨,请各位指点。
在说明我的观点之前,请各位先看以下三个数组
JDLTYP:用来定义单元所受分布式载荷类型的整数型数组
ADLMAG:用来定义单元所受分布式载荷大小的数组
DDLMAG:用来定义单元所受分布式载荷增量大小的数组
此时就要牵扯出另一个话题,那就是使用UEL\VUEL时,无法正常和CAE一样加载分布式载荷的问题,比如体力,重力,如果和CAE一样加载就会报错,再联系UEL中有专门针对分布式载荷定义的一套数组,不难推测出分布式载荷应当只能在UEL的程序中进行定义计算,而非直接在inp中添加。(Ps:我也没用过,毕竟懒癌,如果哪位大佬使用过,希望可以和我们分享一下经验,代表千万网友感谢!)
因此,我个人得出的结论是,RHS定义中所说的外力-内力,指的应当是程序中用数组定义的分布式外载荷P-内力KU,而其他在inp中加载的外力由ABAQUS自行计算,在UEL程序中不做考虑。
我们再来看VUEL中关于RHS的说明

依旧定义为单元对系统方程右端的贡献,但此时不再是外力-内力,而是定义为包含单元的内力或是由分布式载荷计算而来的外部载荷,故在没有分布式载荷时,RHS=内力KU(不考虑非线性);因此可再次猜测,ABAQUS UEL和VUEL所说的外载荷就是分布式载荷,其它INP中定义的外载荷不做考虑。
接下来讨论一个VUEL中特有的数组NBLOCK,译为块,也正是这个数组标志着VUEL与UEL运行的不同;众所周知,ABAQUS调用UEL计算时,是一次进一个单元,然后计算这个单元的RHS、AMATRX等数组并回传给ABAQUS,然后再进第二个单元,如此进行...;
而ABAQUS调用VUEL计算时,是一次进入一批单元,这个一批单元个数即为NBLOCK的大小(之前一位名为Xujianqing的作者曾经发过一个帖子说明说明过NBLOCK最大值为136,但我后来测试发现,在低版本如6.14中,最大NBLCOK=136,在高版本如2020中,最大NBLOCK=144)。
这是个什么意思呢?
就是说,当你单元总数a小于等于136(或144)时,则NBLOCK=a,ABAQUS只调用一次VUEL程序,然后把你这a个单元挨个塞进第kblock个篮子里,计算得到各个kblock中rhs,amass等值,而后组成数组rhs(nblock,ndofel),amass(nblock,ndofel)等一起回传给ABAQUS;当a大于136(或者144)时,且a=n*136+b时,则NBLOCK=136(或144),ABAQUS将依次调用n+1次VUEL程序,前n次每次进入136(或144)个单元,即NBLOCK=136(或144),按照上述所说计算完并回传数组后,继续下一次调用,n次调用结束后,第n+1次进入最后剩余的b个单元,即NBLOCK=b。
以上便是VUEL的调用和工作方式,那么为什么ABAQUS在显示分析中会弄出这么一个数组呢,为什么要给单元分批,并且每次读进一批单元后,要把他们分在不同的“篮子”里呢,在此我们猜测这是为了多核并行计算准备的数组,这样便可以说通一切。
以上便是今天的全部分享,祝大家工作顺利,科研顺利!Respect!
以下内容为付费内容,请购买后观看
包含1个文件 26人购买
平面四节点vuel程序(未考虑几何非线性),Fortran+inp

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