hello,小伙伴大家好。现在是2020/12/2,凌晨的2点。12月的第二天,日子一天天的过去了,我可怜的专栏还没多少篇。12月开头,立个flag,每天至少给大家写一篇,当然不限于脚本和子程序。[滑稽]
我们今天就介绍一个简单的子程序,DISP。其实abaqus的用户子程序没有多少,standrad有67个,explicit有27个。一共也就94个子程序。我迟早会把它们全部讲完的。开心ing
那么其实这94个子程序里,真正有难度的,一双手是完全数的过来的。剩下的都是偏简单的,大家学起来完全没压力。怎么区分有没有难度,大家可以在帮助文档里看子程序的介绍页面,如下图,如果你想学的里面有这个东西(红框框里的),恭喜恭喜
上面的就是子程序天花板之一UMAT,abaqus写了个warning,提醒你学这个要有心理准备。
开场白说完了,下面就开始今天的学习了。我们今天先不说UMAT,我们说个快乐的-DISP。鉴于有粉丝给我留言说想学习,作为一个宠粉的up,我肯定想办法满足大家,所以我得多花点时间准备准备,因为有点难(T_T),我也打算在后面把我之前收集的关于UMAT的资料整理一下,分享给大家,还请耐心等待一下。
1 子程序接口
首先是需要在帮助文档里,把子程序的接口找到。大家应该都知道在哪吧,我之前的专栏有说过,忘了的小伙伴可以重新看一下。
2 了解子程序形参的意义
拿到接口之后,最最重要的是,子程序的形参到底表示什么意思(因为子程序是要跟主程序数据互通,这些参量都是abaqus定义的,所以你要知道abaqus赋予他们的意义是什么),这些参量的意义abaqus帮助文档写的已经很清楚了,鉴于今天的DISP比较简单,这些参量的意义,留给大家自己去阅读。下面我介绍两个重要的:
2.1 U
首先,U是待定义的变量,前篇我们说了子程序的构架,待定义的变量需要时时刻刻牢记在心。U是个数组,有个三个元素,分别是U(1),U(2),U(3),乍一看好像指的是节点x、y、z三个方向的位移,其实不是啊。(我的第一印象就是这样。。。。)U(1)值得是位移量,不带分量的,是一定要定义的量。U(2)是U(1)对时间的一阶导数,其实就是速度。U(3)是U(1)对时间的2阶导数,其实就是加速度。说了半天,什么意思?举个栗子。我喜欢举栗子:
假如,你的实现的位移量与时间有关的话,如我的例子所示,位移量是时间的3次方。那么你就需要定义U(2)和U(3),求导大家都会吧,我就不解释了。time(1)是当前分析步的时间。如果你写过子程序,你会发现,abaqus的子程序会经常让你把导数或者偏导数写出来,这样做的好处是什么,官方说,这个东西只会影响你的收敛速度,不会影响模型的计算精度。换句话说,如果我今天不定义U(2)和U(3),搞不好也是能算出来的,而且精度上是没有影响的。(推测,主程序在检测到你没有写导数的时候,可能会帮助你计算导数)
一般情况下,我都建议大家一定要写出来,我不知道它对收敛性影响大不大,但是我知道的是,让fortran自动算导数肯定不如你直接给了公式算的快。而且现在计算机这么强,python库这么强大,再复杂的函数,都能快速给你求出导来。
2.2 COORDS
这个我其实都不太想说,节点坐标,数组,3个元素。分别表示节点x,y,z三方向的坐标值。经常用到。看到就应该知道。
2.3 JDOF
这个我觉得是DISP里比较重要的形参了,理解了这个,这个子程序就可以搞定了。它是一个数,1-6,分别指的是节点的6个自由度。那它有什么用处呢?
我不知道大家奇不奇怪我上面写的栗子,我就这么干吧吧的写了个U(1),你知道我想让它往那个方向位移吗?你知道这么写的话,它会往哪个方向位移吗??挺有意思的问题,我觉得与其我讲出来,不如让大家自己尝试尝试。自己动手写,是学习和理解子程序最好的办法(脚本也是),别人跟你怎么解释都不行,都不如自己实实在在的敲一敲。这个是真心话。大家看到这里还是要自己尝试尝试的。
3 测试栗子
我喜欢这个环节。
3.1 模型
我们今天用的模型是,80*400的shell模型,厚度0.2。材料用的是.....无所谓了,用什么都行。画好之后的效果:
模型尺寸
3.2 DISP接口
在cae里找到DISP接口。如下图
3.3 写代码
我这里想做的是,把这块平板弄成sin函数的波浪。我随便想的。大家自己在写子程序的时候一定要清楚你的目标是什么。你想实现什么。
我就随便写一个吧。
写到这里的时候,应该会奇怪,为什么没有指定方向。我们在返回看关于DISP子程序的介绍时,会看到这么一句话:
这句话的意思是,每个自由度都会调用一次子程序。一个节点有6个自由度,每个自由度都会单独调用DISP子程序。那我们怎么知道,是那个自由度调用的呢,这时候JDOF就派上用处了,大家都知道,这个形参是给我们使用的,它在传入子程序的时候,是有值的,它的值就表示了节点的哪个自由度。
那么问题就简单了,我想让这块板,在y方向上移动,那我只需要加个判断。当自由度是2的时候,有位移。其他方向都为0。
4 测试结果
测试一下的结果:
看起来我们的例子很简单,一旦和空间和时间都联系起来,位移可以做到千变万化,你可以控制任何节点的任何位移,可控的自由度之高,实在是舒适。
比如下面是我随便测试的。位移量只与空间坐标有关,与时间无关。大家可以想想这个子程序该怎么写。
好啦,今天的DISP介绍到此结束了,我们下期再见。88
曾经以为很遥远的2020,其实只剩一个月了..............