abaqus中元素过度失真是什么意思_Abaqus用户子程序DISP介绍

本文介绍了Abaqus中的用户子程序DISP,讲解了如何使用DISP控制模型元素的位移,包括U变量的意义、COORDS节点坐标和JDOF自由度的作用。通过实例展示了如何利用DISP实现特定位移效果,并强调了理解子程序形参对于正确实现子程序的重要性。
摘要由CSDN通过智能技术生成

b3d4677aa15e5a0158990af4fcf1be44.png

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

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

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

dc8b48c9bd1a99f20c2fb8f6eaa8195c.png

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


开场白说完了,下面就开始今天的学习了。我们今天先不说UMAT,我们说个快乐的-DISP。鉴于有粉丝给我留言说想学习,作为一个宠粉的up,我肯定想办法满足大家,所以我得多花点时间准备准备,因为有点难(T_T),我也打算在后面把我之前收集的关于UMAT的资料整理一下,分享给大家,还请耐心等待一下。

1 子程序接口

首先是需要在帮助文档里,把子程序的接口找到。大家应该都知道在哪吧,我之前的专栏有说过,忘了的小伙伴可以重新看一下。

a928d0358239e05f552c202355dd820f.png

2 了解子程序形参的意义

拿到接口之后,最最重要的是,子程序的形参到底表示什么意思(因为子程序是要跟主程序数据互通,这些参量都是abaqus定义的,所以你要知道abaqus赋予他们的意义是什么),这些参量的意义abaqus帮助文档写的已经很清楚了,鉴于今天的DISP比较简单,这些参量的意义,留给大家自己去阅读。下面我介绍两个重要的:

2.1 U

012845e03abdb5527abb1f7cd0e3271c.png

首先,U是待定义的变量,前篇我们说了子程序的构架,待定义的变量需要时时刻刻牢记在心。U是个数组,有个三个元素,分别是U(1),U(2),U(3),乍一看好像指的是节点x、y、z三个方向的位移,其实不是啊。(我的第一印象就是这样。。。。)U(1)值得是位移量,不带分量的,是一定要定义的量。U(2)是U(1)对时间的一阶导数,其实就是速度。U(3)是U(1)对时间的2阶导数,其实就是加速度。说了半天,什么意思?举个栗子。我喜欢举栗子:

56e7fb8cac62235f19d13457c44561cc.png

假如,你的实现的位移量与时间有关的话,如我的例子所示,位移量是时间的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。材料用的是.....无所谓了,用什么都行。画好之后的效果:

a0fd5fd96639dd2a3323c7ba27799be9.png
模型尺寸

7c3902de63ceaae71fedc25c3ad8686c.png

3.2 DISP接口

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

dd7532f4441d46b188a37327c0e0a397.png

3.3 写代码

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

我就随便写一个吧。

5276bd5f3d0e744535b7fccf03ee8288.png

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

b3db636ad8a45687d7a452d7562a36dd.png

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

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

865f15f6a4a7ff28488bd933f0d7fe47.png

4 测试结果

测试一下的结果:

f14c77832e91d819ecab7545d376ad07.png

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

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

34268e4698ee987ad046cbb46d09682d.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值