本講假設求解器是Altair OptiStruct,但是對ANSYS,NASTRAN等一系列求解器也適用。
《唐伯虎點秋香》裡,唐伯虎進華府做下人的時候,他的編號是9527,為什麼不用名字而用編號呢?大概這樣管家可以少用一點記憶體😄。

回到HyperMesh中來,HyperMesh中的物件除了以下37種物件有名字之外,其餘類型的物件都只有編號。

名字基本上是前處理的概念,幾乎所有物件到了求解器就只剩ID號了。
求解器讀取fem檔的時候是自動跳過這些資訊的(fem檔的注釋)。大部分時候我們都希望名字裡面能包含比較多的資訊,比如component的名字要包含材料厚度資訊,工況名字要包含工況的物理意義等。
不同的應用場景會對名字和ID號有不同的要求,本文通過9個虛擬應用場景展開講解,方便大家理解。
-
場景1:增加/修改/刪除asm/component/material/
prop名的字尾碼或者首碼
-
場景2:將prop的名字修改為component的名字,如果prop同時賦給了多個component,需要分別複製一份
-
場景3:比場景2再進一步,把屬性按照單元進行分拆
-
場景4:把component的ID號改為屬性的ID號
-
場景5:按照空間位置的排列進行編號
-
場景6:基於相鄰單元的連接關係對單元和節點進行重新編號
-
場景7:載荷工況是標準化的include檔,要求網格檔中的載入點有確定的ID號
-
場景8:為各個include檔指定不重疊的id範圍
-
場景9:沒有include檔,但希望各個component的單元ID號放在規定的ID號範圍內
名字
場景1:增加/修改/刪除asm/component/material/
prop名的字尾碼或者首碼
Step 1
運行腳本syncTools8.tcl
Step 2
找到最後的工具並填寫相應的尾碼/首碼

Step 3
點擊rename並在彈出的介面下選中要修改名稱的component,在model browser裡面看到已經完成了名字的修改

思考 會寫tcl腳本的同學可以想一想,如何避免對本來就是prt_開頭的零件不追加首碼? |
場景2:將prop的名字修改為component的名字,如果prop同時賦給了多個component,需要分別複製一份
模型如下:

它們的prop都是同一個叫做frm的殼單元屬性。
Step 1
運行腳本syncTools8.tcl
Step 2
找到工具

運行腳本後實現了屬性按照零件進行分拆

場景3:比場景2再進一步,把屬性按照單元進行分拆
Step 1
先為每一個單元創建一個component,並將該單元move進去。
開始時模型是這樣的一個component,只有一個屬性frm

運行如下tcl命令,為每個單元創建一個component

運行結果如下:
接下來選中這些components,並把frm1屬性賦給
所有選中的components,這在HyperMesh2017
版本中很容易實現。

Step 2
運行腳本syncTools8.tcl中的功能後結果如下(只顯示了一小部分)

ID
名字是給人看的,而ID號基本上是給程式用的。
在開始正式介紹各種ID管理功能之前,先說一下控制ID號有什麼應用上的價值。
1
方便選擇
HyperMesh在選擇物件的時候總是可以按照ID號進行選擇,比如1-10000,選擇後你可以複製、移動、載入、創建幾何等等各種操作。
HyperMesh支援各種書寫方式,總的規則是由5個部分組成:
<start number> - <end number> by <increment value>
後面的4個部分都是可以省略的
-可以用through或thru或t簡寫
by可以寫成b
以下是一些例子:
127
127 – 722
300 through 600
300 thru 600
300 t 600
1000 - 2000 by 100
1000 - 2000 b 100
另外,也可以使用英文的逗號將多個列表連接起來。
例如:
1, 3, 4, 5, 100
3, 5, 8 - 10, 800, 850
1 - 100 by 2, 77, 400 t 500 b 3
2
方便寫腳本
大部分HyperMesh使用者都是通過交互的方式使用軟體,但是對於腳本開發人員來說很多時候在腳本運行期間需要通過命令自動選中需要的物件。
如果ID號的規律是事先知道的,那腳本中就不需要再處理ID號了。
3
模型的重用
如果ID號是彼此分開的,模型的網格和工況只需要通過include檔就可以實現重用。
場景4:把component的ID號改為屬性的ID號(當然這就要求每個component有專屬的屬性,否則就會有ID號重複的錯誤了)
這個工具也是在這個腳本裡面

結果如下:



等一等,這個腳本並不是標準HyperMesh的一部分,你需要下載一下 ⬇
下載地址:https://pan.baidu.com/s/16QsCfUkr_st3nE_mFWG-og
除了以上功能該腳本還提供了很多別的功能 ⬇
01
同步HyperMesh資料庫id和求解器id,二次開發的人會關心,主要是對顯式分析求解器有影響,不搞二次開發的放心跳過。
02
各種rename功能,看名字就知道怎麼用了

03
通過屬性創建component

一個腳本不可能解決所有問題,如果你在實際工作中遇到其它類似的問題又沒有解決方式,記得聯繫澳汰爾公司的技術支援。
場景5:按照空間位置進行編號。這部分內容可以從説明檔找到。用這種方法可以在使用者定義的局部坐標系(笛卡爾座標或柱狀座標)兩個相互垂直的方向上對四邊形單元或節點進行重編號。
使用該工具需要先把user profile選擇為Aerospace

然後就可以在新增的Aerospace下拉式功能表中找到Spatial ID manager

重新編碼前單元的ID如下:

按坐標系重編號的步驟如下:
Step 1. 選擇需要重新編號的一組節點或者單元;
Step 2. 選擇局部坐標系;
Step 3. 在Start Id那欄填入一個數字ID編號,新編號範圍不能與與現有的編號衝突;
Step 4. 指定第一根軸方向、容差和ID編號增量1;
Step 5. 指定第二根軸方向、容差和ID編號增量100。

Step 6. 點擊Renumber單元重新編碼後X增量為1,Y增量為100。

如果是回轉結構,需要使用圓柱坐標系。
操作方法類似

結果如下圖:

場景6:基於相鄰單元的連接關係對單元和節點進行重新編號
有時單元和節點的重新編號是基於單元/節點的連接方向而不是局部坐標系方向。
這時場景5的方法就無法使用了。這時需要讓HyperMesh根據單元的相鄰關係來實現ID號的遞增。用這種方法必須選擇起始單元或節點和臨近的連接單元或節點來指示第一方向和第二方向(類似於坐標系的原點/第一軸/第二軸)。
這些被重新編號的單元必須是彼此相連的,而且必須是映射模式的四邊形單元。

操作過程如下:
1. 將類型(Type)選為Adjacent。
2. 為Select Entities指定單元或節點,輸入Start Id即開始編號的數字。
3. 選擇第一方向的單元或節點、指定ID編號增量。此時選擇的單元或節點需要與起始的具有連接關係。
4. 選擇第二方向的單元或節點、指定ID編號增量。此時選擇的單元或節點也需要與起始的具有連接關係。

點擊Renumber按鈕實現單元(或節點)重新編號

說明:容差的設置對重新編號的影響
容差是用來將節點或單元組合起來,以得到正確有序的重新編號的一種方法。例如,你有一個簡單的結構化網格,該網格在局部X方向上,節點間距為5mm,在局部Y方向上,節點間距為2mm。你想以101為起始編號,重新對節點進行編號。並且在局部X方向上,編號增量為1(例如101,101+1,101+2等等),在局部Y方向上,編號增量為10(例如101,101+10,101+20等等)。

如果你用的容差為1mm(該值<5mm並且<2mm的節點間隙),重新編號結果如下:

在實際場景中,很少能得到上述例子中那樣的網格,因為通常節點間的間隙是變化的,會如下圖所示。現在你想得到一樣的重新編號,用了同樣的容差(1mm)

得到的結果會是這樣的:

正如你在上圖所看到的,重新編號的效果不符合預期。這是因為節點間的最小間隙是0.5mm,小於了1mm的容差。如果你將容差減小到0.1mm,就會得到正確的重新編號。
我們要介紹的最後一種ID管理工具ID manager,它可以規定每一個include檔的範圍,鎖定id,保留id給未來使用等,ID manager的介面如下:

場景7:載荷工況是標準化的include檔,要求網格檔中的載入點有固定的ID號。
原始模型如下(只看最下面的4個載入點)

Step 1
先用renumber面版將4個載入點分別renumber到1000000,2000000,3000000,4000000

結果如下:

Step 2
打開ID Maganer,在node那一行右擊選擇
lock>Discrete IDs

選擇4個節點後,後面#Locks一列多了一個數字

這樣這4個節點就不會受renumber操作的影響了,除非在相同的介面右擊進行unlock。這樣就可以放心大膽地把載荷工況做成固定ID號的include檔了。。
場景8:為各個include檔指定不重疊的id範圍。
目的是避免在導入的時候發生ID號衝突及自動renumber(HyperMesh會進行重新編號,把衝突的ID號放在當前最大ID號的後面)。
因為id管理經常和include檔一起出現,所以先介紹一下include檔的概念和基本操作。
include檔是為了方便對大模型的各個子系統分別進行創建和管理。比如汽車的底盤、車身、車門等子系統分別保存在各自的include中,載荷工況資料也可以保存在單獨的include檔中,材料資料也可以是單獨的include檔。


整車分析的時候只需要把各個子系統的include檔包含進來並進行連接(在整車模型中通常是在兩個RBE2的獨立節點之間創建cbush單元),然後再加上整車的工況include檔就可以進行整車級的分析了。
include檔案格式和普通的求解器檔完全一致。順便提一句,有限元中的include檔和c語言中的#include標頭檔是一樣的。
例如python的c語言介面標頭檔是開頭幾行是這樣的 ⬇⬇

意思是把尾碼為.h的三個檔的內容粘貼到這裡。程式設計檔的標頭檔可以進行任意級嵌套,有限元的include檔也是如此,只不過除非是超級複雜的裝配模型,很少有人真的會去創建很多級的嵌套。
以下是一個簡單的include檔例子。
有如下兩個OptiStruct求解檔,其中input.fem是主文件(也就是提交求解的時候被選擇的文件),sub2.inc是include文件,提交求解的時候只需要放在相應的目錄即可。

求解器實際讀取到的內容相當於用sub2.inc的檔內容替代INCLUDE那一行
創建include檔在HyperMesh中只需要在model browser中右擊並選擇Create >Include File

將檢視類型調整到include view

就可以編輯include檔的存放路徑以及include檔的類型是模型/工況/IO了。
然後把要放入某一個include檔的物件用滑鼠拖拽到include檔的名字上就可以了。
下例中已經把模型中的各個零件按照include檔進行了整理。

接下來為各個include檔指定不同的ID號範圍(不允許有重疊)
Step 1
打開ID manager

Step 2
依次右擊每一個include檔,選擇edit,在對話方塊中輸入要求的id範圍。如果現有的物件id有不在該範圍的會出現在#Overflow列中。

編輯後的結果如下:

Step 3
消除overflow
右擊Correct overflow即可完成
完成後的id情況如下 ⬇

為了避免重複勞動,可以在空白處按右鍵將所有id管理的資訊匯出到csv檔進行保存。下次直接導入csv檔即可完成ID號的設定。

更詳細的ID Manager使用方法請參考幫助檔。
場景9:希望把各個component的單元ID號放在規定的ID號範圍內,但是沒有include檔。
如果可以使用空間某個局部坐標系將各個component區分開,可以使用前面場景5的方法,否則需要使用renumber面板進行多次renumber。
Step 1
將所有物件renumber到很大的ID號。目的是把後面步驟要用的ID段空出來。

Step 2
對每個component分別進行renumber(略)
如果,模型很小,這樣的手工操作是可以的,如果零件數量很多,可以考慮寫一個腳本
本文介紹的名字和ID都是很不起眼的工具,你可以完全忽略這些知識,但是技多不壓身,先收藏著也無妨,萬一哪天發現需要了可以再翻出來看看呢是不? |