優化技術歷來是Altair的優勢所在,Altair擁有眾多優化工具,其中Altair HyperStudy™簡單易用、演算法高明,所以本文先介紹HyperStudy。此外,Altair最重要的優化工具當數Altair OptiStruct™,同時OptiStruct也是Altair Inspire™的優化內核,預計會在下一講給大家介紹。
因HyperStudy相對簡單,本文篇幅不長,也相對簡單,但本文不過是個引子,文章最後有HyperMesh新介面中文教程、Templex語言,HyperStudy教程及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檔放在那裡,那就可以表示任意複雜的結構和載荷了。
根據零件厚度不同,本例中得到的單元卡片是如下兩種:


操作影片如下:
但願更多的人用上HyperStudy,挑戰工作中的高精尖,你一定會獲得豐厚的回報 ~