Abaqus用户子程序DISP详解

    hello,小伙伴大家好。现在是2020/12/2,凌晨的2点。12月的第二天,日子一天天的过去了,我可怜的专栏还没多少篇。12月开头,立个flag,每天至少给大家写一篇,当然不限于脚本和子程序。[滑稽]

    我们今天就介绍一个简单的子程序,DISP。其实abaqus的用户子程序没有多少,standrad有67个,explicit有27个。一共也就94个子程序。我迟早会把它们全部讲完的。开心ing

    那么其实这94个子程序里,真正有难度的,一双手是完全数的过来的。剩下的都是偏简单的,大家学起来完全没压力。怎么区分有没有难度,大家可以在帮助文档里看子程序的介绍页面,如下图,如果你想学的里面有这个东西(红框框里的),恭喜恭喜

    

    上面的就是子程序天花板之一UMAT,abaqus写了个warning,提醒你学这个要有心理准备。

cut-off

    开场白说完了,下面就开始今天的学习了。我们今天先不说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),你知道我想让它往那个方向位移吗?你知道这么写的话,它会往哪个方向位移吗??挺有意思的问题,我觉得与其我讲出来,不如让大家自己尝试尝试。自己动手写,是学习和理解子程序最好的办法(脚本也是),别人跟你怎么解释都不行,都不如自己实实在在的敲一敲。这个是真心话。大家看到这里还是要自己尝试尝试的。

cut-off

3 测试栗子

    我喜欢这个环节。

3.1 模型

    我们今天用的模型是,80*400的shell模型,厚度0.2。材料用的是.....无所谓了,用什么都行。画好之后的效果:

模型尺寸

3.2 DISP接口

    在cae里找到DISP接口。如下图

3.3 写代码

    我这里想做的是,把这块平板弄成sin函数的波浪。我随便想的。大家自己在写子程序的时候一定要清楚你的目标是什么。你想实现什么。

    我就随便写一个吧。

    写到这里的时候,应该会奇怪,为什么没有指定方向。我们在返回看关于DISP子程序的介绍时,会看到这么一句话:

    这句话的意思是,每个自由度都会调用一次子程序。一个节点有6个自由度,每个自由度都会单独调用DISP子程序。那我们怎么知道,是那个自由度调用的呢,这时候JDOF就派上用处了,大家都知道,这个形参是给我们使用的,它在传入子程序的时候,是有值的,它的值就表示了节点的哪个自由度。

    那么问题就简单了,我想让这块板,在y方向上移动,那我只需要加个判断。当自由度是2的时候,有位移。其他方向都为0。

4 测试结果 

   测试一下的结果:

    看起来我们的例子很简单,一旦和空间和时间都联系起来,位移可以做到千变万化,你可以控制任何节点的任何位移,可控的自由度之高,实在是舒适。

    比如下面是我随便测试的。位移量只与空间坐标有关,与时间无关。大家可以想想这个子程序该怎么写。

cut-off

    好啦,今天的DISP介绍到此结束了,我们下期再见。88

    曾经以为很遥远的2020,其实只剩一个月了..............

   

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空