Abaqus二次開發捕獲幾何元素方法歸納
在使用python腳本處理abaqus 仿真分析的模型時,一個不可避免的問題就是選取各種幾何元素并為之賦予集合,以滿足材料賦予、種子點指定、載荷/邊界條件/約束/接觸等操作的需求。賦予集合這一過程本身并無太多難度,但是幾何選取,尤其是復雜模型的幾何選取,有時會讓二次開發者頗費一番周章。本貼針對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.直觀上說,通過一個特征捕捉到的元素,都是由該特征“新增”出來的元素。
3.建立新特征后,如果舊特征的一部分幾何元素被新特征所修改(比如一個面被切分為兩個面,或是一個面被切掉一部分),舊特征依舊能捕獲到屬于自己的幾何元素,盡管它們被修改了。
4.被新特征整個抹除的幾何元素,無法被捕獲,例如被整個拉伸刪除的面,在sweep建模中被整條合并的wire等等。
5.新特征增長出來的舊特征的幾何元素,仍舊屬于舊特征所有。例如:一個拉伸實體上又做了一個拉伸且兩個拉伸出來的實體之間沒有內部邊界,那么事實上兩個拉伸只產生了一個實體,這個實體屬于舊特征,而不是新特征。這一點可以認為是第二點的特例。
3.結語
我在使用python腳本對abaqus進行二次開發時頻頻需要對一些較為復雜的幾何元素進行選取,在實踐過程中我也總結了如前文所述的一些個人心得和方法,希望對各位二次開發者有所助益。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















