優化技術歷來是Altair的優勢所在,Altair擁有眾多優化工具,其中Altair HyperStudy™簡單易用、演算法高明,所以本文先介紹HyperStudy。此外,Altair最重要的優化工具當數Altair OptiStruct™,同時OptiStruct也是Altair Inspire™的優化內核,預計會在下一講給大家介紹。

HyperStudy相對簡單,本文篇幅不長,也相對簡單,但本文不過是個引子,文章最後有HyperMesh新介面中文教程、Templex語言,HyperStudy教程及Compose教程的下載連結,有興趣的可以下載後再系統學習。

 

 

【HyperMesh 寶典】之HyperStudy優化01

例一:

 

首先要優化的結構是由三個實心杆組成的支架,如下圖所示:

 

 

 

原始模型的性能水準如下:

 

工況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真正做的事情是:

✔  不斷生成新的模型

✔  把新生成的模型提交計算

✔  從新的得到的結果檔提取關心的結果

如下圖所示:

 

【HyperMesh 寶典】之HyperStudy優化01

例二:

 

下圖所示三維曲面結構在兩個零件交接處有條軌道,希望使用HyperStudy找到在考慮重力的情況下小車在哪個位置時應力最大,哪個位置時應力最小。最後在HyperView或者HyperMesh中畫個雲圖或者向量圖。這個例子的不同之處在於它的設計變數是離散的整數變數。

 

 

 

最常規的想法是在各個節點分別創建一個單獨的工況進行分析,但是這並不是本例想要介紹的。本例只創建一個工況,但是有很多load collector(每個裡面放一個節點的FORCE),讓HyperStudy運行的時候不斷更換工況中的load collector ID。其實還有更簡單的方法,只創建一個力,一個工況,讓HyperStudy運行的時候不斷更換力作用節點的ID。這個留給感興趣的人自己去嘗試(過程幾乎一模一樣,而且不用寫腳本了)。

考慮到這裡創建的load collector數量顯著大於10,可以寫幾行腳本搞定load collector的批量創建。腳本如下:

 

 

提供給HyperStudy的是一個fem檔。

需要在HyperStudyEditor工具中進行參數化。

 

 

 

此外,還需要創建一個文字檔告訴HyperStudy可選的load collectorid號都有哪些。格式是每個變數一列。本例只有一個變數,因此一列就夠了,部分資料如下:

 

4

5

6

7

8

 

注意:由於資料表示的是load collectorid,如果不小心寫了一個不存在的id,那OptiStruct求解器恐怕就要報錯退出了

如果有多列(多個變數,不同的列用空格分隔),檔的內容大致如下:

 

 

 

具體的操作過程很簡單,請看影片:

 

 

最後得到的結果是如下兩個位置:

 

 

可以使用Matrix BrowserHyperMesh中顯示一個雲圖(過程略):

 

 

 

或者在HyperView中畫一個更加直觀的向量圖(箭頭大小表示全模型最大應力的大小而不是箭頭所在位置的應力):

 

 

 

方法是將HyperStudy得到的結果寫成一個如下的hwascii格式文字檔。

PS:為什麼不用Compose或者python進行繪圖呢?因為它們顯示不了網格模型。

 

 

 

本例的目的是說明在HyperStudy中可以把ID號變成變數。類似的,HyperStudy中的變數還可以是節點、單元、梁截面、材料、屬性、載荷、工況等的id號。實際上有限元軟體中的幾乎所有資料都是以ID號作為識別號的,這樣一來換個材料、改個梁截面等等就都輕而易舉了。

HyperStudy中的變數還可以是字串,用的場合不多,這裡就不介紹啦~

 

 
 
 

 

HyperStudyEditor工具中進行參數化後得到的tpl檔實際上是一個程式原始程式碼(可能連很多HyperStudy資深用戶都沒有意識到這點),這門程式設計語言叫 templex,語法繼承自C語言,基底資料型別是矩陣(類似MATLAB)。HyperStudyHyperGraph / 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檔放在那裡,那就可以表示任意複雜的結構和載荷了。

 

根據零件厚度不同,本例中得到的單元卡片是如下兩種:

 

 

 

 

 

操作影片如下:

 

 

 

大家可以點擊下方按鈕下載本講教程文檔及HyperMesh 2019 新介面中文教程,Templex 教程,HyperStudy 教程以及Compose 教程:

點擊下載

 

 

 

 

 

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

 
arrow
arrow
    創作者介紹
    創作者 Altair Taiwan 的頭像
    Altair Taiwan

    Altair Taiwan Blog

    Altair Taiwan 發表在 痞客邦 留言(1) 人氣()