【二次開發】VUAMP子程序_網球隨機發射模擬
還記得上次我們撿了幾個網球,今天用一個網球發射器來發射它們。
網球發射器建模
01
這個網球發射器可以左右、上下搖擺,以控制發球的側偏和俯仰角度,兩個滾輪通過轉動將網球加速,拋射出去。
在Abaqus中,這些機構的運動可以通過Connector來建模。
側偏和俯仰角度
儲球桶內的帶孔擋板以一定的角速度轉動,擋板的孔洞與桶底的孔洞重合時,網球落下,這樣保證定時落球。
定時落球機構
網球的氣體-結構(球皮)耦合行為通過Fluid Cavity來表征,需要創建一個氣動型流體腔,指定模型的通用氣體常數、設置內部空氣的摩爾質量等參數。
網球的流體腔模型
初始化之后,網球陸續落入滑道,通過滾輪發射出去。
網球發射器發球模型
這個時候,任務還沒完成,我們希望發球器每次拋出的球具有不同的落點,還要做些二次開發工作。
仿真中隨機性的引入
02
關于有限元仿真中是否有隨機性的問題我們之前討論過了,正常情況下,顯然是沒有的,同一個模型不改變參數,每一次的仿真結果必然都會一樣。
那么如何將隨機性引入仿真中呢?
一種方法是通過VUAMP子程序來實現,就是下面我用的方法。
需要注意的是,在子程序中調用隨機數時不能只考慮random_number,因為這樣只能生成偽隨機數,為了讓每一次仿真的結果都不同,比如讓Abaqus模擬擲骰子時每次運行都有新的點數,還要考慮用于生成隨機數的種子。
這部分Fortran代碼如下:
real :: t
call random_seed ()
call random_number(t)
Abaqus模擬擲骰子
為驗證這個模型是否具有隨機性,我寫了2個Python腳本,將同一個模型跑100次job、并批量處理了生成的100個odb文件,每個結果輸出一個渲染后的點數圖。
利用Python自動處理結果
結果表明,同一個模型運行100次,每次計算的結果都不一樣(100次模擬總有幾次點數一樣,但即使點數一樣,骰子最終落點的位置也不一樣,因此每一次的結果都不一樣),在不嚴格的意義下,可以認為這個有限元模型具備了一定的隨機性。
下面是從輸出的100張圖片中隨便選出的4個點數圖。
模擬結果點數圖
網球隨機發球器
03
現在,我們把擲骰子的模擬思路用在網球發射器模型上,通過VUAMP子程序定義滾輪在某個速度區間內的隨機轉動,每次拋球、每次仿真都有新的落點。
隨機發球
每次發射落點不一樣
每次運行結果不一樣
往期推薦
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















