1 VDLOAD子程序接口
首先,还是去abaqus帮助文档找到VDLOAD的接口位置:2 VDLOAD形参
找到之后,需要做的就是了解子程序形参所表示的含义,这一步的工作,只需要老老实实把帮助文档读一读就行了,其实很多子程序的形参都有共同的地方,大家一开始写的时候,可能会比较困难,等你写得多了,就会大彻大悟了,什么样的子程序拿到手,都能很快上手(材料子程序除外啊,那个东西需要不少时间):大家可以把这些形参读一读,我挑几个比较重要的讲:每个Explicit子程序都有这么一个变量。这个有什么用,大家要明白,与Standard不同的是,Explicit求解过程是大增量步去代替迭代的过程,所以你会看到Explicit的增量步都非常的多,如果每个增量步的每个积分点都单独调用子程序,那时间将会非常的长。本来explicit的求解效率就很低了,时间再长,根本顶不住。所以,每个增量步只调用一次,这一次就把所有的积分点处理了,于是乎,就有了子程序接口开始的这么一句话,有个循环。而这个循环,就表示,一次调用把所有积分点的数据都处理了。这就是它与Standard的区别。standard的每个积分点都是独立调用子程序的。
搞清楚这一点之后,其实接下来的事,就和写Standard子程序,没有任何区别了。大家只要搞清楚子程序的形参之后。记住待定义的变量之后,就没有任何问题了。(擦,待定义的变量还没讲。。。。)
(2)ndim这个好理解,如果你的模型是二维的话,这个值就是2,如果三维模型,这个值就是3
(3)curCoords(nblock,ndim)这个变量也是常用的,是个二维数组。储存节点的坐标
剩下的形参,有些比较简单,有些不怎么用得到。如果有不理解的,把它写到文件里,然后看一下值是什么,有输入有输出,多练习,大家就明白是什么了。
3 待定义的变量(重要)没有什么比这个更重要了。这个是最最最最重要的,刻在心里。任何子程序,需要你定义的变量,都是非常重要的。
这个变量就是在VDLOAD里更新的,就是我经常说的,要牢记在心里,这就是的目的。你写程序的目标,其他形参都是你的工具,你要用那些工具,去做各种各样的操作,然后得到你想要的值,给它。这就是我们写子程序的初心。就是为了定义这个值的。
4 模型说完子程序的三个要素之后,解释一下我们今天的模型。100*100*2mm的板,材料随机。大家注意一下我这里的坐标原点在哪,你们做的时候,保证和我的位置要一样,因为我写的子程序是依照这个坐标原点来的。
step分析步建两个,时间都是0.001s,explicit的时间能给小一点就给小一点。算的快一点。
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算一下,看一下结果,没问题啦:其他的杂七杂八的颜色,应该是显示动力学的应力波互相干涉产生的。好啦,那我们今天的内容就到这了。大家可以自己尝试尝试,我们下期再见,88。
今天有位小伙伴让我放在github里,我举得是个好主意。回头我整理一下,都放github,也好分享。谢谢大家给的一些建议。
百无禁忌,下期见