子程序调用与宏定义的异同_Abaqus显示动力学载荷子程序VDLOAD

hello,小伙伴们晚上好。今天是2020-12-12。剁手节快乐。我也是成功的剁手了。快乐一时,吃土一世。T-T, T-T。咱们不说剁手的事了,说点开心的事,今天介绍一下关于Explicit的子程序,比较简单的子程序VDLOAD。Expliciti的子程序比较少,总共27个。(Standrad用户子程序有61个)由于两种求解器的求解算法的区别,所以导致他们的子程序相应的也会有区别。我前面介绍的几个,都是Standard的子程序,刚好今天给大家介绍一个Explicit的子程序。

1 VDLOAD子程序接口

首先,还是去abaqus帮助文档找到VDLOAD的接口位置:

c856d30c322bee12998c1063c9500bb1.png

2 VDLOAD形参

找到之后,需要做的就是了解子程序形参所表示的含义,这一步的工作,只需要老老实实把帮助文档读一读就行了,其实很多子程序的形参都有共同的地方,大家一开始写的时候,可能会比较困难,等你写得多了,就会大彻大悟了,什么样的子程序拿到手,都能很快上手(材料子程序除外啊,那个东西需要不少时间):大家可以把这些形参读一读,我挑几个比较重要的讲:

68d5fc31961b83ddc910de643c085f07.png

(1)nBlock 这是个变量,它有个值,这个值表示的是调用子程序的点的数量。什么意思呢,比如在我们的VDLOAD里。由于是节点调用子程序,所以这个值就表示调用vdload子程序的节点数量。而像VUMAT那种等等,由于它是单元积分点调用,这个变量,就表示的是单元积分点数量。那问题就来了,我们怎么知道是积分点还是节点还是别的呢。其实,它已经说的明明白白的:

71ae6dc90e8fff86afef79d6c9b63870.png

每个Explicit子程序都有这么一个变量。这个有什么用,大家要明白,与Standard不同的是,Explicit求解过程是大增量步去代替迭代的过程,所以你会看到Explicit的增量步都非常的多,如果每个增量步的每个积分点都单独调用子程序,那时间将会非常的长。本来explicit的求解效率就很低了,时间再长,根本顶不住。所以,每个增量步只调用一次,这一次就把所有的积分点处理了,于是乎,就有了子程序接口开始的这么一句话,有个循环。而这个循环,就表示,一次调用把所有积分点的数据都处理了。这就是它与Standard的区别。standard的每个积分点都是独立调用子程序的。

85720c525f8af9af4d2b28249ac8e81c.png

搞清楚这一点之后,其实接下来的事,就和写Standard子程序,没有任何区别了。大家只要搞清楚子程序的形参之后。记住待定义的变量之后,就没有任何问题了。(擦,待定义的变量还没讲。。。。)

(2)ndim

这个好理解,如果你的模型是二维的话,这个值就是2,如果三维模型,这个值就是3

(3)curCoords(nblock,ndim)

这个变量也是常用的,是个二维数组。储存节点的坐标

剩下的形参,有些比较简单,有些不怎么用得到。如果有不理解的,把它写到文件里,然后看一下值是什么,有输入有输出,多练习,大家就明白是什么了。

3 待定义的变量(重要)

d9dca0bf0c858a1f8fe9fd3608b4e810.png

没有什么比这个更重要了。这个是最最最最重要的,刻在心里。任何子程序,需要你定义的变量,都是非常重要的。

这个变量就是在VDLOAD里更新的,就是我经常说的,要牢记在心里,这就是的目的。你写程序的目标,其他形参都是你的工具,你要用那些工具,去做各种各样的操作,然后得到你想要的值,给它。这就是我们写子程序的初心。就是为了定义这个值的。

4 模型

说完子程序的三个要素之后,解释一下我们今天的模型。100*100*2mm的板,材料随机。大家注意一下我这里的坐标原点在哪,你们做的时候,保证和我的位置要一样,因为我写的子程序是依照这个坐标原点来的。

step分析步建两个,时间都是0.001s,explicit的时间能给小一点就给小一点。算的快一点。

950ea5414ac5315964023709a4acac35.png

载荷的话,给pressure。选user-defined,得启动一下vdload。下面全固定就行了。

321e3b3fac81d2e97a5ee9cdf2e6f5d2.png

5 写VDLOAD

现在就是写了,比如我今天想实现一个,step-1力以一个圆向外扩散,然后step-2力再以一个圆返回中心。大家先记住,等会看了结果就明白了。

算法的实现方式,当然是通过子程序来做了。因为我们这里有两个分析步,形参里却没有关系分析步的变量,所有只能通过时间来区别哪个是哪个分析步了。我们的两个分析步时间都是0.001s,所以,如果总时间再[0,0.001]之间的,就是Step-1,如果总时间在(0.001,0.002]之间,是Step-2。

      subroutine vdload (C Read only (unmodifiable)variables -     1 nBlock, ndim, stepTime, totalTime,     2 amplitude, curCoords, velocity, dirCos, jltyp, sname,C Write only (modifiable) variable -     1 value )C      include 'vaba_param.inc'C      dimension curCoords(nBlock,ndim), velocity(nBlock,ndim),     1  dirCos(nBlock,ndim,ndim), value(nBlock)      character*80 snamec     变量声明      real radius,dis      do 100 km = 1, nBlock c     节点距离中心(50,50)的距离            dis = sqrt((curCoords(km,1)-50)**2+(curCoords(km,2)-50)     *              **2)c         Step-1          if (totalTime<=0.001)then              radius = stepTime*50000c         Step-2          else              radius = 50-stepTime*50000          end if c         判断位置          if (dis<=radius+1 .and. dis>=radius-1)then                  value(km) = 100          else                  value(km) = 0.0          end if          100   continue      return      end      

6 结果

把它丢进abaqus算一下,看一下结果,没问题啦:其他的杂七杂八的颜色,应该是显示动力学的应力波互相干涉产生的。

377b060a4e9af5d9300169b4a4d22fd4.gif

4e80181c767e33ca5e2a81aa4fdca57b.png

好啦,那我们今天的内容就到这了。大家可以自己尝试尝试,我们下期再见,88。

今天有位小伙伴让我放在github里,我举得是个好主意。回头我整理一下,都放github,也好分享。谢谢大家给的一些建议。

百无禁忌,下期见

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值