Abaqus二次開發捕獲幾何元素方法歸納
作者:大磊abaqus(設備機械工程師,喜歡琢磨三維建模軟體使用中的「奇技淫巧」,懂一點CAE軟體應用和二次開發。)
本貼針對abaqus支持的幾何元素選取方法做一個梳理匯總,對其應用範圍和注意事項進行說明,以期對各位二次開發者有所幫助。在使用python腳本處理abaqus 模擬分析的模型時,一個不可避免的問題就是選取各種幾何元素並為之賦予集合,以滿足材料賦予、種子點指定、載荷/邊界條件/約束/接觸等操作的需求。賦予集合這一過程本身並無太多難度,但是幾何選取,尤其是複雜模型的幾何選取,有時會讓二次開發者頗費一番周章。
1.Abaqus中支持的幾何元素的種類
如圖所示,abaqus中支持的主要幾何元素有:cell(體)、edge(邊)、face(面)、vertex(頂點)、interesting points(關注點,包含三種:邊中點、弧中點和弧圓心),reference point(參考點),以及由虛擬拓撲壓縮掉的點線(ignored vertex/edge)。我們日常工作中常用的幾何元素都可以全面覆蓋到了。同種幾何元素組成的序列,abaqus中專門稱之為geometry sequence對象,是一種類似list的數據結構。生成Set時使用的幾何元素,實際上就是這種幾何元素的序列,哪怕這個序列里只有一個元素。
2.幾何元素捕捉
2.1.通過序號捕捉
通過序號捕捉其實有兩種方法。
第一種是經典的index方法,一類幾何元素中的每個元素都有一個唯一的序號值,這個序號值可能和空間結構有些關係,也可能沒有太多關聯,而且在幾何模型發生變化後(比如做了一個partition),這些序號可能發生變化,因此當你的模型是靜態的,不會再加入新特徵,使用index來捕捉幾何元素還不失為一種方法。實際使用中,因為我們很難事先知道一個幾何元素的index,所以一般不直接憑空使用index來指定元素,往往是配合其他命令產生的index來尋找幾何元素,例如,cell對象有一個方法是getFaces(),這個方法可以返回一個cell上所有面的index,利用這種方法就可以很輕鬆地找到包圍一個體的所有面。使用index尋找幾何元素方法的語句非常簡單,和list的使用方法完全一致,可以單獨指定一個index,也可以進行切片操作:
mdb.models[name].parts[name].edges[i]
mdb.models[name].parts[name].edges[1:100]
第二種方法是第一種方法的抽象版,abaqus里的journalOption 對象裡面把這種方法稱之為COMPRESSEDINDEX,顧名思義,可以理解為一種壓縮後的index,用一串字元串來代表一系列的index。下面用實例來比較一下index和COMPRESSEDINDEX:
Index:
cells=c[4:5]+c[6:7]+c[14:15]+c[16:18]+c[19:20]+c[31:34]+c[36:37]+c[40:41]+
c[42:43]+c[51:52]+c[54:55]+c[63:64]+c[65:66]+c[69:70]+c[80:81]+c[84:85]+
c[88:89]+c[92:93]+c[100:101]+c[102:103]+c[104:105]+c[112:113]+c[114:115]+
c[119:120]+c[124:125]+c[126:127]+c[132:133]+c[137:138]+c[141:142]+
c[146:147]+c[151:153]+c[163:164]+c[166:167]+c[170:171]+c[173:174]+
c[175:176]+c[177:178]+c[181:184]+c[185:186]+c[187:188]+c[189:192]
COMPRESSED INDEX:
cells = c.getSequenceFromMask(mask=([#800b4050 #80480513 #11110022 #50850150 #1842210 #eae2a448 ], ), )
從例子中可以看出,index方法傻傻地把一些index的切片加起來,而getSequenceFromMask方法可以僅用一串mask字元串指代這些切片。getSequenceFromMask的壞處是:代碼可讀性很差,沒辦法知道這一串mask字元到底指代的是哪些index。因此,在實際使用中,很少有人自己去編寫這串字元串,往往是照搬那些從rpy里轉過來的腳本語句,當你的腳本處理的幾何體相對固定,而幾何體的數量又較大,用index或其他方法一時表示不清楚幾何體時,可以使用這種mask字元串的方法。當然,abaqus也提供了一種由幾何元素反推mask的方法:getMask(),提供了一種生成mask字元串的簡單方法。
如果事先知道想捕捉的幾何元素的序號或mask字元串,而且捕捉後幾何模型也不會發生變化時,用序號或者抽象化序號捕捉幾何元素是非常方便的。不過實際使用中我們往往並不事先知道序號,幾何模型也經常變化導致序號發生變化,因此,用序號捕捉幾何體的應用受到了很大限制。
2.2.通過空間所佔位置捕捉
空間位置捕捉幾何元素的方法,可以分為兩種:findAt方法和其他方法。
findAt方法可以通過點坐標來捕獲單獨的幾何元素或幾何元素序列,具體取決於提供給它的參數是一個簡單的只包含三個坐標的tuple(元組),還是一個包含有多組坐標點的tuple,即tuple的tuple。使用findAt需要注意的是一定要讓給出的點坐標僅屬於一個幾何體,不要提供公共點的坐標,否則findAt函數會給出不確定的答案。例如尋找邊線時,最好用邊線的中點,而不是端點,因為一條邊線的端點往往也是另一條邊線的端點,無法保證唯一性。6.11之前的版本findAt功能在搜索幾何元素序列時,語法較為繁瑣,且和幫助文檔描述不太相符。6.14之後的版本則友好了很多。在找準點的前提下,findAt功能十分好用,符合人的空間想像,不像index那樣不直觀。findAt功能便於編程實現,代碼可讀性也較好。但是當需要尋找的幾何元素非常多時,這種「坐標點——幾何元素」的一一對應關係會像index方法一樣,有些繁瑣。
此時就需要「其他方法」的登場。Abaqus提供了利用空間立方體、圓柱體、球體框選幾何元素的函數,如下圖紅框所示。框選後得到的都是幾何元素序列,哪怕只框到了一個幾何元素。值得注意的是,abaqus還提供了一個框選函數的反函數,即圖中綠框內的getBoundingBox(),此函數可以獲得一個剛好能包裹住幾何元素的立方體。常用的場合有:添加外流場,添加顆粒增強複合材料的基底材料等等。
框選函數可以方便的框取大量幾何元素,但是也容易「多管閑事」,因為只要是在框內的幾何元素都會被框取進來,其中有些元素可能不是我們想要的。遇到這種情況,要麼需要精心選取框選的類型和大小,要麼就得回到findAt的老路上去,findAt雖然略微繁瑣,但是也勝在靈活,幾何元素必有可以唯一標識的點,只要能把所有標識點找到,幾何元素也就找到了。而幾何元素序列類似list的特性,可以讓你輕鬆地用一個「+」號把多個序列拼接起來。
2.3.通過幾何元素相互關係捕捉
正常情況下,幾何體中的「點、線、面、體」都不是孤立存在的,而是有相互關聯,通過一條線可以找到「使用」這條線的若干個面,通過一個面又能找到圍成這個面的所有的邊線, 等等。「高級」幾何元素,例如cell,可以找到自身的所有表面,邊線,頂點。而相對「低級」的頂點,則只能反推自己的上一級幾何元素,按照家族圖譜來理解,其實可以這麼類比:爺爺直接知道自己的所有兒輩和孫輩,而孫輩只直接知道自己的父輩,不能直接獲取自己的爺爺輩。如圖中紅框所示:
圖中綠色框給出了另一種通過相互關係尋找幾何元素的方法,即尋找毗鄰的「同輩」幾何元素,例如實體可以找到另一個相鄰實體(所謂相鄰實體,即兩個實體有公共面)。
2.4.通過特徵捕捉
特徵捕捉功能和上一節的相互關係捕捉法一樣,脫離了空間位置的束縛,我們不再需要費心思去找那些坐標點或是尋找一個合適的框選工具,我們建立了一個特徵,自然就產生了幾何元素,這種天然的聯繫,可以大加利用。下圖即為通過特徵捕獲點線面體的四個函數,這四個函數不同於「相互關係捕捉法」的一點是,它們直接返回幾何元素,而不是幾何元素的index,在使用中更加方便。
值得注意的是,在Help文檔里,這四個函數並不屬於Basic Geometry Command章節,而是屬於Part Commands章節。
幾何體的特徵一般都具有父子關係,父子關係可謂是特徵捕捉法的最大障礙,使用者需要理清頭緒方能發揮特徵捕捉法的最大威力。以下介紹一些我在實踐中摸索的經驗:
1.和其他方法一樣,捕獲工作應當留到幾何模型建立完畢後再執行,因為新的特徵產生的幾何元素變動會影響舊特徵生成的幾何元素。
2.直觀上說,通過一個特徵捕捉到的元素,都是由該特徵「新增」出來的元素。
點擊此處查看更多推薦閱讀:
※關於應力客觀率(二)
※基於 ABAQUS 的連接器端子件優化設計
※如果設計不相信你的CAE分析結果怎麼辦?
※【視頻】免費視頻之結構CAE-abaqus系列教程之草圖模塊
TAG:Abaqus |