Abaqus二次開發(fā)捕獲幾何元素方法歸納
在使用python腳本處理abaqus 仿真分析的模型時,一個不可避免的問題就是選取各種幾何元素并為之賦予集合,以滿足材料賦予、種子點指定、載荷/邊界條件/約束/接觸等操作的需求。賦予集合這一過程本身并無太多難度,但是幾何選取,尤其是復(fù)雜模型的幾何選取,有時會讓二次開發(fā)者頗費一番周章。本貼針對abaqus支持的幾何元素選取方法做一個梳理匯總,對其應(yīng)用范圍和注意事項進(jìn)行說明,以期對各位二次開發(fā)者有所幫助。
1.Abaqus中支持的幾何元素的種類

如圖所示,abaqus中支持的主要幾何元素有:cell(體)、edge(邊)、face(面)、vertex(頂點)、interesting points(關(guān)注點,包含三種:邊中點、弧中點和弧圓心),reference point(參考點),以及由虛擬拓?fù)鋲嚎s掉的點線(ignored vertex/edge)。我們?nèi)粘9ぷ髦谐S玫膸缀卧囟伎梢匀娓采w到了。同種幾何元素組成的序列,abaqus中專門稱之為geometry sequence對象,是一種類似list的數(shù)據(jù)結(jié)構(gòu)。生成Set時使用的幾何元素,實際上就是這種幾何元素的序列,哪怕這個序列里只有一個元素。
2.幾何元素捕捉
2.1.通過序號捕捉
通過序號捕捉其實有兩種方法。
第一種是經(jīng)典的index方法,一類幾何元素中的每個元素都有一個唯一的序號值,這個序號值可能和空間結(jié)構(gòu)有些關(guān)系,也可能沒有太多關(guān)聯(lián),而且在幾何模型發(fā)生變化后(比如做了一個partition),這些序號可能發(fā)生變化,因此當(dāng)你的模型是靜態(tài)的,不會再加入新特征,使用index來捕捉幾何元素還不失為一種方法。實際使用中,因為我們很難事先知道一個幾何元素的index,所以一般不直接憑空使用index來指定元素,往往是配合其他命令產(chǎn)生的index來尋找?guī)缀卧兀纾琧ell對象有一個方法是getFaces(),這個方法可以返回一個cell上所有面的index,利用這種方法就可以很輕松地找到包圍一個體的所有面。使用index尋找?guī)缀卧胤椒ǖ恼Z句非常簡單,和list的使用方法完全一致,可以單獨指定一個index,也可以進(jìn)行切片操作:
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里轉(zhuǎn)過來的腳本語句,當(dāng)你的腳本處理的幾何體相對固定,而幾何體的數(shù)量又較大,用index或其他方法一時表示不清楚幾何體時,可以使用這種mask字符串的方法。當(dāng)然,abaqus也提供了一種由幾何元素反推mask的方法:getMask(),提供了一種生成mask字符串的簡單方法。
如果事先知道想捕捉的幾何元素的序號或mask字符串,而且捕捉后幾何模型也不會發(fā)生變化時,用序號或者抽象化序號捕捉幾何元素是非常方便的。不過實際使用中我們往往并不事先知道序號,幾何模型也經(jīng)常變化導(dǎo)致序號發(fā)生變化,因此,用序號捕捉幾何體的應(yīng)用受到了很大限制。
2.2.通過空間所占位置捕捉
空間位置捕捉幾何元素的方法,可以分為兩種:findAt方法和其他方法。
findAt方法可以通過點坐標(biāo)來捕獲單獨的幾何元素或幾何元素序列,具體取決于提供給它的參數(shù)是一個簡單的只包含三個坐標(biāo)的tuple(元組),還是一個包含有多組坐標(biāo)點的tuple,即tuple的tuple。使用findAt需要注意的是一定要讓給出的點坐標(biāo)僅屬于一個幾何體,不要提供公共點的坐標(biāo),否則findAt函數(shù)會給出不確定的答案。例如尋找邊線時,最好用邊線的中點,而不是端點,因為一條邊線的端點往往也是另一條邊線的端點,無法保證唯一性。6.11之前的版本findAt功能在搜索幾何元素序列時,語法較為繁瑣,且和幫助文檔描述不太相符。6.14之后的版本則友好了很多。在找準(zhǔn)點的前提下,findAt功能十分好用,符合人的空間想象,不像index那樣不直觀。findAt功能便于編程實現(xiàn),代碼可讀性也較好。但是當(dāng)需要尋找的幾何元素非常多時,這種“坐標(biāo)點——幾何元素”的一一對應(yīng)關(guān)系會像index方法一樣,有些繁瑣。
此時就需要“其他方法”的登場。Abaqus提供了利用空間立方體、圓柱體、球體框選幾何元素的函數(shù),如下圖紅框所示。框選后得到的都是幾何元素序列,哪怕只框到了一個幾何元素。值得注意的是,abaqus還提供了一個框選函數(shù)的反函數(shù),即圖中綠框內(nèi)的getBoundingBox(),此函數(shù)可以獲得一個剛好能包裹住幾何元素的立方體。常用的場合有:添加外流場,添加顆粒增強(qiáng)復(fù)合材料的基底材料等等。

框選函數(shù)可以方便的框取大量幾何元素,但是也容易“多管閑事”,因為只要是在框內(nèi)的幾何元素都會被框取進(jìn)來,其中有些元素可能不是我們想要的。遇到這種情況,要么需要精心選取框選的類型和大小,要么就得回到findAt的老路上去,findAt雖然略微繁瑣,但是也勝在靈活,幾何元素必有可以唯一標(biāo)識的點,只要能把所有標(biāo)識點找到,幾何元素也就找到了。而幾何元素序列類似list的特性,可以讓你輕松地用一個“+”號把多個序列拼接起來。
2.3.通過幾何元素相互關(guān)系捕捉
正常情況下,幾何體中的“點、線、面、體”都不是孤立存在的,而是有相互關(guān)聯(lián),通過一條線可以找到“使用”這條線的若干個面,通過一個面又能找到圍成這個面的所有的邊線, 等等。“高級”幾何元素,例如cell,可以找到自身的所有表面,邊線,頂點。而相對“低級”的頂點,則只能反推自己的上一級幾何元素,按照家族圖譜來理解,其實可以這么類比:爺爺直接知道自己的所有兒輩和孫輩,而孫輩只直接知道自己的父輩,不能直接獲取自己的爺爺輩。如圖中紅框所示:

圖中綠色框給出了另一種通過相互關(guān)系尋找?guī)缀卧氐姆椒ǎ磳ふ遗彽摹巴叀睅缀卧兀鐚嶓w可以找到另一個相鄰實體(所謂相鄰實體,即兩個實體有公共面)。
2.4.通過特征捕捉
特征捕捉功能和上一節(jié)的相互關(guān)系捕捉法一樣,脫離了空間位置的束縛,我們不再需要費心思去找那些坐標(biāo)點或是尋找一個合適的框選工具,我們建立了一個特征,自然就產(chǎn)生了幾何元素,這種天然的聯(lián)系,可以大加利用。下圖即為通過特征捕獲點線面體的四個函數(shù),這四個函數(shù)不同于“相互關(guān)系捕捉法”的一點是,它們直接返回幾何元素,而不是幾何元素的index,在使用中更加方便。

值得注意的是,在Help文檔里,這四個函數(shù)并不屬于Basic Geometry Command章節(jié),而是屬于Part Commands章節(jié)。
幾何體的特征一般都具有父子關(guān)系,父子關(guān)系可謂是特征捕捉法的最大障礙,使用者需要理清頭緒方能發(fā)揮特征捕捉法的最大威力。以下介紹一些我在實踐中摸索的經(jīng)驗:
1.和其他方法一樣,捕獲工作應(yīng)當(dāng)留到幾何模型建立完畢后再執(zhí)行,因為新的特征產(chǎn)生的幾何元素變動會影響舊特征生成的幾何元素。
2.直觀上說,通過一個特征捕捉到的元素,都是由該特征“新增”出來的元素。
3.建立新特征后,如果舊特征的一部分幾何元素被新特征所修改(比如一個面被切分為兩個面,或是一個面被切掉一部分),舊特征依舊能捕獲到屬于自己的幾何元素,盡管它們被修改了。
4.被新特征整個抹除的幾何元素,無法被捕獲,例如被整個拉伸刪除的面,在sweep建模中被整條合并的wire等等。
5.新特征增長出來的舊特征的幾何元素,仍舊屬于舊特征所有。例如:一個拉伸實體上又做了一個拉伸且兩個拉伸出來的實體之間沒有內(nèi)部邊界,那么事實上兩個拉伸只產(chǎn)生了一個實體,這個實體屬于舊特征,而不是新特征。這一點可以認(rèn)為是第二點的特例。
3.結(jié)語
我在使用python腳本對abaqus進(jìn)行二次開發(fā)時頻頻需要對一些較為復(fù)雜的幾何元素進(jìn)行選取,在實踐過程中我也總結(jié)了如前文所述的一些個人心得和方法,希望對各位二次開發(fā)者有所助益。
工程師必備
- 項目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















