【二次开发】VUAMP子程序_网球随机发射模拟

【二次开发】VUAMP子程序_网球随机发射模拟的图1

还记得上次我们捡了几个网球,今天用一个网球发射器来发射它们。


网球发射器建模

【二次开发】VUAMP子程序_网球随机发射模拟的图2

01

这个网球发射器可以左右、上下摇摆,以控制发球的侧偏和俯仰角度,两个滚轮通过转动将网球加速,抛射出去。


在Abaqus中,这些机构的运动可以通过Connector来建模。

【二次开发】VUAMP子程序_网球随机发射模拟的图3

侧偏和俯仰角度


储球桶内的带孔挡板以一定的角速度转动,挡板的孔洞与桶底的孔洞重合时,网球落下,这样保证定时落球。

【二次开发】VUAMP子程序_网球随机发射模拟的图4

定时落球机构


网球的气体-结构(球皮)耦合行为通过Fluid Cavity来表征,需要创建一个气动型流体腔,指定模型的通用气体常数、设置内部空气的摩尔质量等参数。


【二次开发】VUAMP子程序_网球随机发射模拟的图5

网球的流体腔模型


初始化之后,网球陆续落入滑道,通过滚轮发射出去。


【二次开发】VUAMP子程序_网球随机发射模拟的图6

网球发射器发球模型


这个时候,任务还没完成,我们希望发球器每次抛出的球具有不同的落点,还要做些二次开发工作。


仿真中随机性的引入

【二次开发】VUAMP子程序_网球随机发射模拟的图7

02


关于有限元仿真中是否有随机性的问题我们之前讨论过了,正常情况下,显然是没有的,同一个模型不改变参数,每一次的仿真结果必然都会一样。


那么如何将随机性引入仿真中呢?


一种方法是通过VUAMP子程序来实现,就是下面我用的方法。


需要注意的是,在子程序中调用随机数时不能只考虑random_number,因为这样只能生成伪随机数,为了让每一次仿真的结果都不同,比如让Abaqus模拟掷骰子时每次运行都有新的点数,还要考虑用于生成随机数的种子。


这部分Fortran代码如下:


real :: t
call random_seed ()
call random_number(t)

【二次开发】VUAMP子程序_网球随机发射模拟的图8

Abaqus模拟掷骰子

为验证这个模型是否具有随机性,我写了2个Python脚本,将同一个模型跑100次job、并批量处理了生成的100个odb文件,每个结果输出一个渲染后的点数图。

【二次开发】VUAMP子程序_网球随机发射模拟的图9

利用Python自动处理结果


结果表明,同一个模型运行100次,每次计算的结果都不一样(100次模拟总有几次点数一样,但即使点数一样,骰子最终落点的位置也不一样,因此每一次的结果都不一样),在不严格的意义下,可以认为这个有限元模型具备了一定的随机性。

下面是从输出的100张图片中随便选出的4个点数图。

【二次开发】VUAMP子程序_网球随机发射模拟的图10

模拟结果点数图


网球随机发球器

【二次开发】VUAMP子程序_网球随机发射模拟的图11

03


现在,我们把掷骰子的模拟思路用在网球发射器模型上,通过VUAMP子程序定义滚轮在某个速度区间内的随机转动,每次抛球、每次仿真都有新的落点。


【二次开发】VUAMP子程序_网球随机发射模拟的图12

随机发球


【二次开发】VUAMP子程序_网球随机发射模拟的图13

每次发射落点不一样


【二次开发】VUAMP子程序_网球随机发射模拟的图14

次运行结果不一样

【二次开发】VUAMP子程序_网球随机发射模拟的图15

往期推荐



Abaqus纤维缠绕模拟之“草木皆可为剑”

如何理解应力三轴度?Abaqus怎么输出Stress Triaxiality

Abaqus DEM进阶技术,指定颗粒级配

Abaqus与听觉,听到仿真的声音

为啥你总是抓不到娃娃?暴利娃娃机揭秘


(18条)
默认 最新
优质内容应该多出视频教程,希望老师能安排上😁
评论 点赞 5
优质内容应该多出视频教程,希望老师能安排上
评论 点赞 1

查看更多评论 >

点赞 30 评论 19 收藏 13
关注