HyperStudy優化 附OptiStruct&HyperStudy理論基礎與工程應用下載
優化技術歷來是Altair的優勢所在,Altair擁有眾多優化工具,其中Altair HyperStudy?簡單易用、算法高明,所以本文先介紹HyperStudy。此外,Altair最重要的優化工具當數Altair OptiStruct?,同時OptiStruct也是Altair Inspire?的優化內核,預計會在下一講給大家介紹。
因HyperStudy相對簡單,本文篇幅不長,也相對簡單,但本文不過是個引子,文章最后有HyperMesh新界面中文教程、Templex語言,HyperStudy教程及Compose教程的下載鏈接,有興趣的可以下載后再系統學習。
順便說一句題外話,本文作者方獻軍老師表示:“我最喜歡的是Altair Compose?。”(可以在文末推薦鏈接查看Compose相關文章~)
例一:
首先要優化的結構是由三個實心桿組成的支架,如下圖所示:
原始模型的性能水平如下:
工況1最大位移:22.85mm
工況2最大位移:75.72mm
體積:7656850mm3
(應力很小,不必考慮~)
優化三要素:
優化目標:最小化體積
優化約束:
工況1連接點最大變形量 < 22.0mm
工況2連接點最大變形量 < 75.0mm
設計變量:
1、 連接點可以在虛線框內任意移動
2、 三個桿的截面積變化范圍如圖中所示
形狀變量需要使用HyperMorph創建,橫向和縱向各一個。
截面積變量需要通過創建parameters得到。
最后,通過快捷鍵Ctrl+f搜索study進入HyperStudy,但是要注意不要關閉HyperMesh,因為HyperStudy需要利用HyperMesh進行模型更新。優化結果如下:
在這個例子中用到了網格變形(雖然只有一個點在動)和參數變量(雙精度浮點數類型),實際上哪怕是更多的變量數目也不要緊,只不過是HyperMorph的操作會更加麻煩一些(文末鏈接中提供了培訓資料下載),求解器的計算量會更大。對HyperStudy來說,任何求解器都只是一個黑盒,HyperStudy真正做的事情是:
? 不斷生成新的模型
? 把新生成的模型提交計算
? 從新的得到的結果文件提取關心的結果
如下圖所示:
例二:
下圖所示三維曲面結構在兩個零件交接處有條軌道,希望使用HyperStudy找到在考慮重力的情況下小車在哪個位置時應力最大,哪個位置時應力最小。最后在HyperView或者HyperMesh中畫個云圖或者矢量圖。這個例子的不同之處在于它的設計變量是離散的整數變量。
最常規的想法是在各個節點分別創建一個單獨的工況進行分析,但是這并不是本例想要介紹的。本例只創建一個工況,但是有很多load collector(每個里面放一個節點的FORCE),讓HyperStudy運行的時候不斷更換工況中的load collector ID。其實還有更簡單的方法,只創建一個力,一個工況,讓HyperStudy運行的時候不斷更換力作用節點的ID。這個留給感興趣的人自己去嘗試(過程幾乎一模一樣,而且不用寫腳本了)。
考慮到這里創建的load collector數量顯著大于10,可以寫幾行腳本搞定load collector的批量創建。腳本如下:
提供給HyperStudy的是一個fem文件。
需要在HyperStudy的Editor工具中進行參數化。
此外,還需要創建一個文本文件告訴HyperStudy可選的load collector的id號都有哪些。格式是每個變量一列。本例只有一個變量,因此一列就夠了,部分數據如下:
4
5
6
7
8
注意:由于數據表示的是load collector的id,如果不小心寫了一個不存在的id,那OptiStruct求解器恐怕就要報錯退出了。
如果有多列(多個變量,不同的列用空格分隔),文件的內容大致如下:
最后得到的結果是如下兩個位置:
可以使用Matrix Browser在HyperMesh中顯示一個云圖(過程略):
或者在HyperView中畫一個更加直觀的矢量圖(箭頭大小表示全模型最大應力的大小而不是箭頭所在位置的應力):
方法是將HyperStudy得到的結果寫成一個如下的hwascii格式文本文件。
PS:為什么不用Compose或者python進行繪圖呢?因為它們顯示不了網格模型。
本例的目的是說明在HyperStudy中可以把ID號變成變量。類似的,HyperStudy中的變量還可以是節點、單元、梁截面、材料、屬性、載荷、工況等的id號。實際上有限元軟件中的幾乎所有數據都是以ID號作為識別號的,這樣一來換個材料、改個梁截面等等就都輕而易舉了。
HyperStudy中的變量還可以是字符串,用的場合不多,這里就不介紹啦~
在HyperStudy的Editor工具中進行參數化后得到的tpl文件實際上是一個程序源代碼(可能連很多HyperStudy資深用戶都沒有意識到這點),這門編程語言叫 templex,語法繼承自C語言,基本數據類型是矩陣(類似MATLAB)。HyperStudy和HyperGraph / HyperView 等模塊都會用它。實際上大家日常工作中在HyperGraph里面使用的函數和操作都是基于templex的。
我們先來看一下HyperGraph中怎么使用:比如希望得到多條曲線的上包絡線,由于templex的強大功能,自己只需要寫一點點代碼,如下:
可以把得到的新曲線的數值直接放在{}里面進行繪圖(當然,也可以變成HyperGraph的一部分),下圖中的實線是sin(x)和cos(x)曲線,點是上包絡得到的結果:
如果需要處理的問題比較復雜,建議使用HyperWorks中的Compose,理由是:
Compose可以使用HyperGraph的讀取接口
兼容了MATLAB的編程語法(好處是很多編程問題在網上一搜就找到答案了)
可以和python共享變量,只要能通過python解決的問題都可以解決了。
比如你要繪制各種漂亮的圖表,python很擅長。你可以在下面這個網站找到幾千種不同類型的圖表(帶源代碼)。
網址:
https://matplotlib.org/gallery/index.html
因為templex是編程語言,具有很大的靈活性,可以配合HyperStudy完成各種稀奇古怪匪夷所思的工作。這里拋磚引玉介紹一個比較特別的例子,下圖是本例的簡單模型。
本例的特別之處是:在tpl中通過templex語句實現了如果零件厚度這個設計變量大于1.1mm,單元7將從零件中移除掉(類似求解器的生死單元)。之所以選擇這樣簡單的模型是希望大家看明白編程語言的關鍵,不被復雜的模型所蒙蔽。語句很簡單,就是很普通的一句if語句。如下:
想象一下第二行可以換成任意多行的有限元卡片或者把include文件放在那里,那就可以表示任意復雜的結構和載荷了。
根據零件厚度不同,本例中得到的單元卡片是如下兩種:
下載地址:OptiStruct&HyperStudy理論基礎與工程應用
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















