Abaqus用户子程序DLOAD与Fortran子程序介绍

    hello, 小伙伴们大家好。前些天看到粉丝的留言说等我出子程序的教程,那么今天就写一期关于子程序的教学。也确实没写过关于子程序的教程,是该写点了(其实是想满足粉丝的需求,咳咳)。

    我们今天的任务有两个,一个是解释一下,什么是fortran的子程序,一个是解释一个abaqus的DLOAD子程序。

cut-off

1 什么是fortran子程序

    大家可能觉得我说这个是废话,因为能阅读到这篇专栏的人,都是写过abaqus用户子程序的做过二次开发的程序大佬,难道还不知道什么是fortran子程序吗?你说这玩意不是班门弄斧吗。其实不然,也不见得全都是废话。大家且听我细细道来。(一个人自言自语ing,快快乐乐 ^_^)

    首先,相必大家都知道什么是子程序什么是函数了,这两个在任何程序语言中,都是负责实验某一功能的程序块。而子程序与函数之间的区别在于,一般用函数只是为了获取一个返回值,而不改变其他变量。子程序不同,子程序可以没有返回值,它是操作调用的参数和全局变量,可以理解为数据进子程序之后,加个工,然后返回主程序。。。我在说什么,一脸懵逼。。把我自己都绕晕了。讲个例子解释一下吧,我喜欢例子

1.1 子程序小例子

    我这里写了一个相加的subroutine add(形参),形式参数大家应该都明白吧,就相当于只是个变量的名字,主程序的实际参数(实参)是带值的变量。

子程序

那么它有那些特点,我这里列一下:

1 它的形参在子程序里是可以不用申明变量类型的,而其他变量,一定一定一定要申明变量类型,申明类型是一定不会出错的,这是个好习惯,fortran与python不同,这个特点不要忘了,像我,写子程序就容易忘记申明变量类型,然后找错找到裂开,你们千万不能学我。

2 子程序的形参,有些是传入进来供你操作的,有些是储存计算后的数据,然后返回主程序做操作的。这一点有点像函数的返回值,但是必返回值更加精简,容易操作具有多个返回值的对象。

cut-off

1.2 Abaqus子程序框架

    我说完了,是不是大家觉我说的还是废话,说的都是你们知道的内容。好,那我再带你看个例子。

    这是abaqus中号称子程序的天花板的程序UMAT。我相信如果大家初次看到这个的时候,肯定是一脸懵逼的,这是什么鬼玩意。。。我是谁?我在哪?我要干什么???

    我的重点是,我想说的是,你别忘了,即便它是天花板的子程序,它依然是个子程序,依然有着子程序的框架和特点。

    它有着形参,变量声明,和变量处理。大家懵逼的是,看到了这么多变量,一个都不知道是什么意思,便无从下手,甚至忘记了它的构架。所以,在你写子程序的时候,一定牢记,它没有什么大不了,它只是个子程序而已。你要清楚,子程序的框架。你要做的是如下:

(1)牢记子程序的构架;

(2)形参的每一个变量是什么意思,在abaqus子程序里,每个形参都是有意义的,你得弄清楚它表示什么意思;

(3)最最重要的是,时刻牢记,你要对哪些变量做处理,而导入进来的形参就是最重要的数据,你要选择你需要的数据,做处理,然后赋值给对应的变量。

(4)一定要忍受我说了一大堆话。哈哈

cut-off

2 DLOAD

    如果你看完了我上面说的许多话,那么,下面的内容就很清楚了。首先,我们打开abaqus帮助文档。在reference找到Usersubroutine一栏

    进去找到DLOAD。找到之后,下滑找到User subroutine interface。

    把代码复制到VS2019里。

    这就是我们的DLOAD接口了。相信大家已经很清楚它的构架了。形参,变量声明与变量赋值。

    我们在这里首先要搞清楚,我们要操作的变量是什么,abaqus已经非常明显的跟你说了,user coding to define F(使用者代码来定义F),(咳咳,一看我这翻译就非常的地道,看得出来哈,英语的基本功非常的扎实) ,F是什么意思,在帮助文档里也写的非常清楚了,只不过是英文的,需要大家有这像我一样非常扎实的英语基本功才行。哈哈

    F的单位是 力/长度**2或者力/长度**3,这个很明显是压强单位。结合前处理的DLOAD调用界面可以看出,F其实就是Presseure的大小。

    知道了要定义的变量是什么之后,牢记牢记牢记,时时刻刻想着它,把它当成过马路时的女朋友的手,紧紧抓牢着。千万别忘记了。(像我家的傻狍子一样过马路非常怕死的,手可以稍微松一松)

    好了,现在需要了解剩下的形参表示什么意思了。(F也是其中的形参)贴心的abaqus当然也解释清楚了,你所想了解的任何操作,其实abaqus都已经写出来了,只是需要大家多阅读和实战,不要让语言成为你阻拦你前进的拦路大山,它只是一个工具语言,是让你站的更高的工具。其实没有多少单词,突破自己的心里障碍,阅读它,它会是你学习abaqus,子程序,脚本最好的教程,没有之一。哎哎哎,记得还有我的文章哈,我也是你们学习路上的助力,咱们不能过河拆桥啊,别忘了我,😭😭。

    严肃点,严肃点,好啦,言归正传。这就是帮助文档对于形参的解释

    贴心的我,今天给大家翻译了一下:

(1) F

    F值是需要用户自定义的变量。

(2)KSTEP

    分析步编号,表示第几个分析步

(3)KINC

    增量步编号

(4)TIME

    时间。TIME是个长度为2的一维数组,其中TIME(1)表示当前分析步的时间,TIME(2)表示总时间

(5)NOEL

    单元编号

(6)NPT

    载荷积分点编号

(7)LAYER

    层数。用到的好像很少。。。

(8)KSPT

    当前层界面点编号,

(9)COORDS

    积分点的坐标,一维数组,3个元素,COORDS(1)、COORDS(2)、COORDS(3)分别代表积分点的x、y、z三个坐标值,这个用到的会多一点。

(10)JLTYP

    载荷类型。

(11)SNAME

    加载面的名字

    

cut-off

    好啦,大家要记得,我们要定义的变量只有F值,其他的形参,只是作为数据给我们使用的,一定要牢记。有时候写着写着就忘记了,逻辑容易乱。所以,剩下的形参,取对你有用的即可,没用的忽略。

    比如我们今天想做一个例子,这个例子我来描述一下:模拟小汽车行驶路面的过程。地面模型是400*80*5mm,假设轮胎压在地面的大小为15*5mm,左右距离40mm,前后距离45mm。别问我为什么车这么短啊,其实我是想用玩具小汽车压一压。

    由于轮胎的压在地面的位置跟两个变量有关,一个是位置,一个是时间,所以,我们的形参只需要用到TIME和COORDS。其他的形参用不到,就不用管了。那,开始写吧:

cut-off

3 代码步骤

    好,大家再写代码的时候,一定要从简单到复杂。每做一步,测试一下,确保你的简单代码没问题之后,才可以继续往下写。

    上图可以看出,我们的车轨是沿着两道轨迹运动的,尺寸我已经标注了,大家看完之后可以自己尝试尝试。

    现在我们测试一个简单的,模型的的空间如下图,载荷加在上表面。

(1)怎么让载荷只加载在车轨的范围内,这就需要对坐标进行限制了,如果积分点的坐标在某个范围内,给F赋值,其他所有F值为0,就可以实现了。大家应该懂我意思吧。比如我们这个模型,x方向的坐标应该在(17.5,23.5)或者(57.5,62.5)

coords(1)就表示积分点的x坐标,如果这个值在上面的区间范围,说明这个积分点就在车轨范围内,那么给值,其余为0,这段判断语句就是实现这个功能。写完之后,记得在vs里调试一下,检查一下语法错误。

    大家在建Job的时候,记得选上你的子程序文件。

   计算一下,很快。大家可以看到,确实是这两个区域有压力。表明我们的程序没有写错,对吗?

(2)当限制了x之后,现在就要开始限制z值了,而z值的范围与时间相关。由于是静力学分析步,时间为1s,跑完400mm,需要的速度400mm/s。假设,现在只考虑两个轮子的情况,在程序的实现代码为:

计算的结果如下:程序没问题。

(3)接下来就是最后一步,把后两个轮子的压力加上去,其实,也就是多了个范围而已,z坐标除了在区间(move-15,move)之外,在(move-60,move-15)也是满足条件的,因为前后轮子相差45。所以,只需要在子程序中加一句即可。

    最终结果演示,用DLOAD做完的结果如下图所示:

cut-off

4 总结

    每篇一小结

(1)大家的脑海里,一定要有子程序的构架;

(2)要时刻记住,待定义的变量是什么;

(3)要理解每个形参的意义,选择自己需要的数据;

cut-off

    好啦,今天的子程序讲完啦,我们下期再见。88(有写的不清楚的地方,记得跟我说一下)

荆轲刺秦王

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

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

* 公司名称:

姓名不为空

手机不正确

公司不为空