本發(fā)明涉及到一種無限單元邊界建模方法,具體涉及一種基于inp文件的abaqus三維無限元邊界快速建模方法。
背景技術(shù):
計(jì)算機(jī)的出現(xiàn)和迅速發(fā)展,為工程分析提供了強(qiáng)有力的工具,從而為使用數(shù)值模擬求解許多大型工程實(shí)際問題成為可能。有限單元法作為最常用的數(shù)值模擬手段,廣泛用于巖土,結(jié)構(gòu),地震和水利等工程領(lǐng)域。采用有限元方法的面臨的問題是如何采用“有限”的模型模擬實(shí)際“無限”區(qū)域,常用的解決辦法是根據(jù)圣維南原理忽略“無限”區(qū)域邊界的影響,利用截?cái)噙吔缛 白銐虼蟆钡哪P统叽邕M(jìn)行幾何尺寸的有限元網(wǎng)格劃分,而在人為邊界上施加相應(yīng)的近似約束邊界條件。實(shí)際計(jì)算時(shí),這種“足夠大”的模型尺寸鑒定困難,區(qū)域較小時(shí)計(jì)算成本低,但結(jié)果精度差;區(qū)域較大時(shí)滿足一定精度要求,但是計(jì)算成本較高。特別是對于波動計(jì)算問題,常常由于網(wǎng)格邊界上波的反射和散射造成有限元計(jì)算結(jié)果的失真。
通過引入邊界單元建立合理的人工邊界,可以盡量減少人工截?cái)鄬?dǎo)致的有限元邊界對地基中各種波動在邊界上的反射,從而極大的減少單元的數(shù)量,提高計(jì)算效率。目前常見的人工邊界如黏性邊界、旁軸近似邊界、透射邊界、黏彈性邊界、無限元邊界等。
作為模擬無窮遠(yuǎn)區(qū)域一種方式,無限元的出現(xiàn)為克服有限元計(jì)算方法的缺陷,解決無限域邊界模擬的問題提供了重要途徑。無限元在概念上屬于有限元的延伸,其主要思想是通過幾何上無限大的“有限”單元,再對其在物理上進(jìn)行界定模擬無限域物理場。又由于無限元必須反映近場的邊界特征或與模擬近場的有限元結(jié)合,它實(shí)際上只在一個(gè)方向趨于無限,因而又被稱為半無限元。從廣義有限元概念上講無限元仍然屬于有限元的范疇??傊?,無限元為克服有限元在解決無界域問題時(shí)而提出,常常與常規(guī)有限元同時(shí)用來解決更復(fù)雜的無界問題,是對有限元方法的一種補(bǔ)充,因而它與有限元方法的“協(xié)調(diào)”與生俱在,比邊界元等其它求解無界域問題的數(shù)值方法更具有優(yōu)勢.
大量求解無限域問題的經(jīng)驗(yàn)表明:有限元與無限元耦合模型在求解工程實(shí)際問題方面有著廣泛的實(shí)用性。特別是在內(nèi)源波動問題的研究,諸如列車振動和爆破等,以及外源振動的地震動力學(xué)問題方面等,無限元在模擬和近似模擬無限域問題方面表現(xiàn)出明顯的優(yōu)越性。此外有限元和無限元耦合模型也廣泛用于電磁學(xué),熱力學(xué)以及聲學(xué)等領(lǐng)域,并取得了良好的模擬效果。大型有限元計(jì)算軟件abaqus和ansys中均提高了多種無限單元類型,模擬有限元計(jì)算的無限域問題。其中abaqus以其強(qiáng)大的動力非線性計(jì)算能力廣泛用于巖土工程領(lǐng)域的動力計(jì)算。
abaqus提供了一階和二階無限單元,包括平面應(yīng)變、平面應(yīng)力、軸對稱和三維無限元單元,這是基于zienkiewicz等靜力計(jì)算分析,以及l(fā)ysmer等動力響應(yīng)分析而開發(fā)的,可用于靜力無限域問題求解,以及作為無限元動力人工邊界求解域內(nèi)局部源振動問題,即對從有限域穿過人工邊界進(jìn)入無限域的外行波的模擬有效,而對外源入射問題通過abaqus無限元基礎(chǔ)上進(jìn)行二次開發(fā)也成功解決了地震動力學(xué)問題。abaqus無限元動力人工邊界常見的三維無限單元包括cin3d8,cin3d12r(s)和cin3d18r(s)等,這種單元可以與標(biāo)準(zhǔn)有限單元結(jié)合,用有限元模擬近場區(qū)域,而用無限元模擬遠(yuǎn)場區(qū)域。
盡管abaqus邊界無限單元為靜力無限元和動力人工邊界模擬提供了便利。但是由于無限單元中節(jié)點(diǎn)編號要保證單元的第一個(gè)面為有限元和無限元的交接面,以保證無限元單元的方向性,單元延伸方向是從近場到遠(yuǎn)場區(qū)。abaqus中不能直接定義無限單元,只能通過建模時(shí)預(yù)設(shè)建出無限元邊界部分,并采用其他單元類型以區(qū)分,導(dǎo)出到abaqus輸入文件(.inp),然后對比模型手動修改abaqus的輸入文件(.inp)的無限元邊界的單元節(jié)點(diǎn)順序。特別是對于三維邊界無限單元,修改過程繁瑣,尤其是分析任務(wù)量大時(shí),會耗費(fèi)更多的人力和時(shí)間,并且經(jīng)常會出現(xiàn)手動操作失誤而導(dǎo)致網(wǎng)格操作錯(cuò)誤的情況。
技術(shù)實(shí)現(xiàn)要素:
:
本發(fā)明所要解決的技術(shù)問題是提供一種基于inp文件的abaqus三維無限元邊界快速建模方法,克服abaqus現(xiàn)有邊界無限元模型建模過程繁瑣且建模效率低,考慮到abaqus無限單元特點(diǎn)及abaqus的輸入inp文件模型定義的特點(diǎn),操作簡單,自動化程度高,能夠在較短時(shí)間內(nèi)生成無限單元網(wǎng)格,極大地提高了abaqus的建模效率。
為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是:
根據(jù)abaqus三維無限單元(3dinfiniteelement)中單元節(jié)點(diǎn)定義規(guī)則,利用abaqus輸入文件(.inp)的單元和節(jié)點(diǎn)定義方法,并借助于python實(shí)現(xiàn)輸出abaqus無限單元定義的數(shù)據(jù)行,按照inp文件的語法規(guī)則完成模型定義的輸入文件,導(dǎo)入abaqus/cae生成邊界無限單元。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案包括以下步驟:
建立有限元模型并創(chuàng)建指定part邊界節(jié)點(diǎn)集作為無限元的近場節(jié)點(diǎn)集,導(dǎo)出該abaqus輸入文件(job-1.inp);
修改inp文件利用關(guān)鍵字(*ncopy)定義無限單元的遠(yuǎn)場節(jié)點(diǎn),并另存為新的inp文件(job-2.inp);
abaqus/cae導(dǎo)入修改后inp文件(job-2.inp),查看生成的無限元遠(yuǎn)場節(jié)點(diǎn)并導(dǎo)出新inp文件(job-3.inp);
inp文件(job-3.inp)指定位置插入關(guān)鍵字行(*element)定義無限單元,并另存為job-4.inp;
python編程構(gòu)建無限元邊界單元定義數(shù)據(jù)行并輸入到abaqus的輸入文件(job-4.inp)或者指定的inp文件;
通過abaqus模型導(dǎo)入的方式打開上述inp文件(job-4.inp),abaqus指定part三維無限單元邊界自動生成完畢。
進(jìn)一步的,建立有限元模型中無限元近場節(jié)點(diǎn)集的并導(dǎo)出abaqus輸入文件(job-1.inp)具體步驟包括:
建立abaqus/cae三維有限元模型,根據(jù)研究問題在part模塊下利用set工具建立指定part的邊界面上的節(jié)點(diǎn)集作為對應(yīng)邊界無限元的近場節(jié)點(diǎn)集,即無限單元第一個(gè)面上的四個(gè)節(jié)點(diǎn);
在job模塊下為上述問題的模型建立分析任務(wù)job-1,并在jobmanager上通過writeinput導(dǎo)出該abaqus輸入文件(job-1.inp)。
修改上述inp文件利用關(guān)鍵字(*ncopy)生成無限單元的遠(yuǎn)場節(jié)點(diǎn),并另存為新的inp文件(job-2.inp)主要內(nèi)容包括:
修改上述inp文件job-1.inp,根據(jù)不同的邊界區(qū)域在指定part定義行內(nèi)插入多行節(jié)點(diǎn)定義的關(guān)鍵字(*ncopy);
利用關(guān)鍵字(*ncopy)將近場節(jié)點(diǎn)復(fù)制偏移生成不同區(qū)域邊界無限元的遠(yuǎn)場節(jié)點(diǎn);
將上述修改后的inp文件另存為新的inp文件(job-2.inp);
abaqus/cae導(dǎo)入修改后inp文件job-2.inp,查看生成的無限元遠(yuǎn)場節(jié)點(diǎn)并導(dǎo)出新inp文件job-3.inp包括:
通過abaqus/cae的圖形用戶界面gui以file→import→model的方式導(dǎo)入修改后的inp文件job-2.inp,無限元的遠(yuǎn)場節(jié)點(diǎn)生成,但暫時(shí)無法顯示;
在part模塊條件下,通過view→partdisplayoptions→mesh下點(diǎn)選shownodelabels顯示單元節(jié)點(diǎn)號,查看生成的不同區(qū)域無限元遠(yuǎn)場節(jié)點(diǎn);
將所述導(dǎo)入模型在job模塊內(nèi),新建job-3任務(wù),通過jobmanager上的writeinput導(dǎo)出新的inp文件job-3.inp;
inp文件job-3.inp指定位置插入關(guān)鍵字行*element定義無限單元,并另存為job-4.inp包括:
編輯inp文件job-3.inp,在指定行插入關(guān)鍵字行*element進(jìn)行無限單元定義;
插入*element關(guān)鍵字行和數(shù)據(jù)行后的inp文件保存為新的inp文件job-4.inp。
進(jìn)一步的,利用關(guān)鍵字(*ncopy)將近場節(jié)點(diǎn)復(fù)制偏移生成不同區(qū)域邊界無限元的遠(yuǎn)場節(jié)點(diǎn)主要內(nèi)容包括:
節(jié)點(diǎn)定義的關(guān)鍵字行和數(shù)據(jù)行必須按照abaqus的inp文件的語法規(guī)則編輯;
通過*ncopy關(guān)鍵字行和數(shù)據(jù)行定義新節(jié)點(diǎn)。
進(jìn)一步的,關(guān)鍵字行和數(shù)據(jù)行必須按照abaqus的inp文件的語法規(guī)則編輯主要內(nèi)容是指:
1)遠(yuǎn)場節(jié)點(diǎn)定義關(guān)鍵字行(keywordline)為:
*ncopy,changenumber=n,oldset=near_field_nodesetname,newset=far_field_nodesetname,shift
2)遠(yuǎn)場節(jié)點(diǎn)定義數(shù)據(jù)行(dataline)為:
shifting-x,shifting-y,shifting-z
上述節(jié)點(diǎn)定義的關(guān)鍵字行和數(shù)據(jù)行插入位置必須位于無限元邊界所在part的定義結(jié)束行*endpart關(guān)鍵字之前,近場節(jié)點(diǎn)集合定義數(shù)據(jù)行之后。
通過*ncopy關(guān)鍵字行和數(shù)據(jù)行定義新節(jié)點(diǎn)主要是指:
通過近場節(jié)點(diǎn)復(fù)制偏移一定距離,定義無限元邊界遠(yuǎn)場節(jié)點(diǎn),新節(jié)點(diǎn)的節(jié)點(diǎn)號在原有節(jié)點(diǎn)號基礎(chǔ)上增加整數(shù)值n;
實(shí)現(xiàn)了同一無限單元延無限元方向上近場節(jié)點(diǎn)和遠(yuǎn)場節(jié)點(diǎn)一一對應(yīng),且單元號相差n;
數(shù)據(jù)行定義了新創(chuàng)建的遠(yuǎn)場節(jié)點(diǎn)在原有近場節(jié)點(diǎn)基礎(chǔ)上的坐標(biāo)偏移值。
進(jìn)一步的,編輯inp文件(job-3.inp),在指定位置插入關(guān)鍵字(*element)行進(jìn)行無限單元定義詳細(xì)內(nèi)容是指:
通過*element關(guān)鍵字行和數(shù)據(jù)行定義新無限單元;
無限單元定義的關(guān)鍵字行和數(shù)據(jù)行必須按照abaqus的inp文件的語法規(guī)則編輯;
上述單元定義的關(guān)鍵字行和數(shù)據(jù)行插入位置必須位于無限元邊界所在part的定義結(jié)束行*endpart關(guān)鍵字之前,遠(yuǎn)場節(jié)點(diǎn)集合定義數(shù)據(jù)行和有限元單元定義數(shù)據(jù)行之后。
進(jìn)一步的,通過*element關(guān)鍵字行和數(shù)據(jù)行定義邊界無限單元具體內(nèi)容包括:
abaqus的單元和節(jié)點(diǎn)的定義主要是通過其前處理器abaqus/cae,創(chuàng)建幾何形狀并劃分單元網(wǎng)格,形成單元節(jié)點(diǎn),這里的abaqus無限單元在inp文件中定義是通過手動編輯inp文件,插入*element關(guān)鍵字,給無限單元分配單元號,并通過指定單元節(jié)點(diǎn)號定義單元,同時(shí)可以給邊界無限元分組。
考慮到在裝配件(assembly)上分配的單元號不唯一,需要結(jié)合部件(part)區(qū)分,而在部件上分配的單元號唯一,所以邊界無限元的定義只在指定的part定義;
主要通過*element關(guān)鍵字定義無限單元,指定單元類型為cin3d8,并建立相應(yīng)邊界區(qū)域上無限邊界元集合;
無限單元定義的數(shù)據(jù)行是指定單元號和單元組成的節(jié)點(diǎn)號;
abaqus無限單元定義的數(shù)據(jù)行也可以從其他包含單元定義數(shù)據(jù)的inp文件中讀??;
上述數(shù)據(jù)行單元定義的節(jié)點(diǎn)號排列順序滿足abaqus幫助文檔中三維無限單元(cin3d8)定義的節(jié)點(diǎn)次序。
無限單元定義的關(guān)鍵字行和數(shù)據(jù)行必須按照abaqus的inp文件的語法規(guī)則編輯具體是指:
1)無限元邊界無限單元定義的關(guān)鍵字行(keywordline)有兩種方式,分別為:
①*element,type=cin3d8,elset=infinite_element_setname
②*element,type=cin3d8,elset=infinite_element_setname,input=filename.inp
2)相應(yīng)的無限單元定義數(shù)據(jù)行(dataline)可以由兩種方式,分別與上述關(guān)鍵字行對應(yīng):
①無限單元定義的數(shù)據(jù)行直接插入對應(yīng)區(qū)域無限元定義關(guān)鍵字所在位置的下一行,主要包括無限單元號和組成節(jié)點(diǎn)號,即:
infinite_element_num,nodep1,nodep2,nodep3,nodep4,nodep5,nodep6,nodep7,nodep8
②無限單元定義的數(shù)據(jù)行由filename.inp給定,該文件內(nèi)容只是包含預(yù)先完成輸入的當(dāng)前邊界區(qū)域無限單元定義的數(shù)據(jù)行—包括無限單元號和組成節(jié)點(diǎn)號,即:
infinite_element_num,nodep1,nodep2,nodep3,nodep4,nodep5,nodep6,nodep7,nodep8。
進(jìn)一步的,無限單元定義的數(shù)據(jù)行infinite_element_num,nodep1,nodep2,nodep3,nodep4,nodep5,nodep6,nodep7,nodep8相關(guān)約定包括:
根據(jù)權(quán)利要求5和6所述的遠(yuǎn)場四個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)號比對應(yīng)沿?zé)o限方向單元邊上近場節(jié)點(diǎn)(有限元邊界上節(jié)點(diǎn))的節(jié)點(diǎn)號值大n,即:
根據(jù)無限單元定義規(guī)則,無限單元第一面內(nèi)近場四個(gè)節(jié)點(diǎn)nodep1,nodep2,nodep3和nodep4,要滿足從無限單元遠(yuǎn)場向近場觀測時(shí)近場四個(gè)節(jié)點(diǎn)為逆時(shí)針方向的順序排列;
無限單元定義指定的單元號是由當(dāng)前part上有限單元個(gè)數(shù),已定義邊界區(qū)域無限單元個(gè)數(shù)以及區(qū)域內(nèi)無限單元定義的次序決定。
進(jìn)一步的,利用python編程構(gòu)建無限元邊界單元定義數(shù)據(jù)行并輸入到abaqus的輸入文件(job-4.inp)或者指定的inp文件具體包括以下步驟:
1)利用python編程讀取abaqus的輸入文件(job-4.inp)中的節(jié)點(diǎn)號及相應(yīng)坐標(biāo),單元號及組成節(jié)點(diǎn)號,并存儲在指定的列表中;
2)利用python編程讀取abaqus的輸入文件(job-4.inp)中無限單元定義的關(guān)鍵字行號并存儲在指定的變量中,或者讀取無限單元定義數(shù)據(jù)行寫入的input參數(shù)—abaqus讀取的inp文件filename.inp;
3)根據(jù)節(jié)點(diǎn)坐標(biāo)特點(diǎn)遍歷上述有限元模型的節(jié)點(diǎn)列表,根據(jù)各邊界節(jié)點(diǎn)坐標(biāo)值特點(diǎn)查找不同邊界上節(jié)點(diǎn),并添加到指定邊界節(jié)點(diǎn)列表;
4)通過遍歷上述有限元模型的單元列表,依據(jù)單元組成節(jié)點(diǎn)坐標(biāo)與邊界上節(jié)點(diǎn)坐標(biāo)特點(diǎn)的關(guān)系,查找邊界單元,并添加到指定的邊界單元列表;
5)遍歷指定邊界節(jié)點(diǎn)列表,并取出其中任意四個(gè)節(jié)點(diǎn)a,b,c和d,判斷這四個(gè)節(jié)點(diǎn)是否為邊界無限單元近場第一個(gè)面上的四個(gè)節(jié)點(diǎn);
6)若a,b,c和d四個(gè)節(jié)點(diǎn)是邊界無限單元近場第一個(gè)面上的四個(gè)節(jié)點(diǎn),則根據(jù)向量的數(shù)量積求向量夾角關(guān)系確定四個(gè)節(jié)點(diǎn)的相對位置關(guān)系;
7)利用向量間的向量積確定四個(gè)節(jié)點(diǎn)的逆時(shí)針方向的排列順序?yàn)閝1,q2,q3,q4;
8)無限單元序號由有限模型中指定part單元個(gè)數(shù)a,已定義邊界無限單元個(gè)數(shù)為b以及該區(qū)域內(nèi)無限單元定義次序c決定,則當(dāng)前無限單元號為q=a+b+c;
9)給出指定邊界單元無限元定義的數(shù)據(jù)行輸出:
q,q1,q2,q3,q4,q1+n,q2+n,q3+n,q4+n
其中:q為無限元單元號,q1,q2,q3,q4為近場四個(gè)節(jié)點(diǎn),q1+n,q2+n,q3+n,q4+n為遠(yuǎn)場四個(gè)節(jié)點(diǎn);
10)兩種無限單元定義數(shù)據(jù)行輸出方式,前者主要是針對無限單元定義采用關(guān)鍵字行①和數(shù)據(jù)行①,即單元定義數(shù)據(jù)行直接插入在job-4.inp中關(guān)鍵字定義位置的下一行并保存;
后者主要是針對無限單元定義采用關(guān)鍵字行②和數(shù)據(jù)行②,將單元定義的數(shù)據(jù)行寫入無限單元定義行中的input參數(shù)filename.inp文件中,abaqus在導(dǎo)入模型時(shí)會自動讀取filename.inp文件中的數(shù)據(jù)行,生成無限單元。
進(jìn)一步的,遍歷指定邊界節(jié)點(diǎn)列表,并取出其中任意四個(gè)節(jié)點(diǎn),判斷該節(jié)點(diǎn)是否為無限元模型近場第一個(gè)面上的四個(gè)節(jié)點(diǎn)具體步驟為:
利用python的成員測試功能,若邊界節(jié)點(diǎn)列表上取出的四個(gè)節(jié)點(diǎn)為邊界單元組成節(jié)點(diǎn)的其中四個(gè)節(jié)點(diǎn),則認(rèn)為這四個(gè)節(jié)點(diǎn)為邊界無限單元第一個(gè)面上的四個(gè)近場節(jié)點(diǎn)。
若a,b,c和d四個(gè)節(jié)點(diǎn)是邊界無限單元近場第一個(gè)面上的四個(gè)節(jié)點(diǎn),根據(jù)向量數(shù)量積求兩個(gè)向量夾角確定四個(gè)節(jié)點(diǎn)的相對位置關(guān)系,具體步驟包括:
以點(diǎn)a作為四邊形的第一個(gè)點(diǎn),利用向量數(shù)量積分別計(jì)算∠bac,∠bad和∠cad的大小并求和:
令sum=∠bac+∠bad+∠cad:
1)若sum=2∠bac,則點(diǎn)a和點(diǎn)d,點(diǎn)b和點(diǎn)c互為對角節(jié)點(diǎn),則節(jié)點(diǎn)逆時(shí)針方向順序?yàn)閍,b,d,c或者a,c,d,b;
2)若sum=2∠bad,則點(diǎn)a和點(diǎn)c,點(diǎn)b和點(diǎn)d互為對角節(jié)點(diǎn),則節(jié)點(diǎn)逆時(shí)針方向順序?yàn)閍,b,c,d或者a,d,c,b;
3)若sum=2∠cad,則點(diǎn)a和點(diǎn)b,點(diǎn)c和點(diǎn)d互為對角節(jié)點(diǎn),則節(jié)點(diǎn)逆時(shí)針方向順序?yàn)閍,d,b,c或者a,c,b,d。
利用向量間的向量積確定四個(gè)節(jié)點(diǎn)的逆時(shí)針方向的排列順序具體步驟包括:
確定邊界無限單元第一面內(nèi)的四個(gè)近場節(jié)點(diǎn)p1,p2,p3,p4相對位置關(guān)系后,通過四個(gè)節(jié)點(diǎn)中的任意三個(gè)相鄰節(jié)點(diǎn)首尾相接形成兩個(gè)向量,假設(shè)p1與p3,p2與p4互為角點(diǎn),以p1點(diǎn)為起始點(diǎn),相鄰節(jié)點(diǎn)必為p2和p4,則上述四個(gè)節(jié)點(diǎn)的逆時(shí)針順序?yàn)閜1,p2,p3,p4或者p1,p4,p3,p2,計(jì)算向量
若
則點(diǎn)p1,p2,p3為逆時(shí)針方向排列,四個(gè)節(jié)點(diǎn)的逆時(shí)針排列順序?yàn)閜1,p2,p3,p4;
若
則點(diǎn)p1,p2,p3為順時(shí)針方向排列,四個(gè)節(jié)點(diǎn)的逆時(shí)針排列順序?yàn)閜1,p4,p3,p2。
進(jìn)一步的,通過abaqus模型導(dǎo)入的方式打開上述inp文件(job-4.inp),abaqus指定part三維無限單元邊界自動生成完畢具體步驟包括:
打開abaqus/cae,通過file菜單下的模型導(dǎo)入方式(import→model),打開目標(biāo)文件夾下的inp文件(job-4.inp),完成邊界無限單元的建模過程,可在指定part下查看無限元建模效果。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本方法主要是根據(jù)abaqus三維無限單元中單元節(jié)點(diǎn)定義規(guī)則,利用abaqus輸入文件(.inp)的單元和節(jié)點(diǎn)定義方法,并輔以一定的python編程完成無限單元定義數(shù)據(jù)行的自動輸出,按照inp文件的語法規(guī)則完成模型定義的輸入文件,導(dǎo)入abaqus/cae生成邊界無限單元。本發(fā)明實(shí)施方案操作簡單,避免了傳統(tǒng)方法中的手動修改inp文件的繁瑣過程,自動化程度高,能夠在較短時(shí)間內(nèi)生成無限單元網(wǎng)格,極大地提高了abaqus的建模效率。
附圖說明
圖1是本發(fā)明技術(shù)方案流程圖。
圖2是abaqus三維有限元模型。
圖3是利用*ncopy生成的無限元遠(yuǎn)場節(jié)點(diǎn)。
圖4是生成無限單元效果圖。
圖5是模型底面邊界區(qū)域無限單元。
圖6是模型左側(cè)邊界區(qū)域無限單元。
圖7是模型右側(cè)邊界區(qū)域無限單元。
圖8是模型后端邊界區(qū)域無限單元。
圖9是模型前端邊界區(qū)域無限單元。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步詳細(xì)的說明。
如圖1所示,本發(fā)明實(shí)施例中基于inp文件的abaqus三維無限元邊界快速建模方法包括:
基于三維單元網(wǎng)格劃分完成的三維模型,并且所述三維模型的后面中心點(diǎn)位于坐標(biāo)系的原點(diǎn)上,坐標(biāo)系的x軸,y軸和z軸為其對稱軸;
101.建立有限元模型并創(chuàng)建指定part邊界節(jié)點(diǎn)集作為無限元的近場節(jié)點(diǎn)集,導(dǎo)出該abaqus輸入文件(job-1.inp);
建立abaqus/cae三維有限元模型如圖2所示,根據(jù)研究問題在part模塊下利用set工具建立指定part的邊界面上的節(jié)點(diǎn)集作為對應(yīng)邊界無限元的近場節(jié)點(diǎn)(無限單元第一個(gè)面上的四個(gè)節(jié)點(diǎn))集,不同邊界區(qū)域的節(jié)點(diǎn)集情況如表1所示;在job模塊下為上述問題的模型建立分析任務(wù)job-1,并在jobmanager上通過writeinput導(dǎo)出該abaqus輸入文件(job-1.inp)。
102.修改inp文件利用關(guān)鍵字(*ncopy)定義無限單元的遠(yuǎn)場節(jié)點(diǎn),并另存為新的inp文件(job-2.inp);
修改上述inp文件job-1.inp,根據(jù)不同的邊界區(qū)域在指定part定義行內(nèi)插入多行節(jié)點(diǎn)定義的關(guān)鍵字(*ncopy),命令如下所示
*ncopy,changenumber=2000,oldset=node-y1,newset=node-y2,shift
0.0,-40.0,0.0
*ncopy,changenumber=4000,oldset=node-x1,newset=node-x3,shift
-40.0,0.0,0.0
*ncopy,changenumber=6000,oldset=node-x2,newset=node-x4,shift
40.0,0.0,0.0
*ncopy,changenumber=8000,oldset=node-z1,newset=node-z3,shift
0.0,0.0,40.0
*ncopy,changenumber=10000,oldset=node-z2,newset=node-z4,shift
0.0,0.0,-40.0
*ncopy,changenumber=12000,oldset=node-x1z1,newset=node-x3z3,shift
-40.0,0.0,40.0
*ncopy,changenumber=14000,oldset=node-x1z2,newset=node-x3z4,shift
-40.0,0.0,-40.0
*ncopy,changenumber=16000,oldset=node-x2z1,newset=node-x4z3,shift
40.0,0.0,40.0
*ncopy,changenumber=18000,oldset=node-x2z2,newset=node-x4z4,shift
40.0,0.0,-40.0
利用關(guān)鍵字(*ncopy)將近場節(jié)點(diǎn)復(fù)制偏移指定距離生成不同區(qū)域邊界無限元的遠(yuǎn)場節(jié)點(diǎn)集如表2,將上述修改后的inp文件另存為新的inp文件(job-2.inp)。
通過近場節(jié)點(diǎn)復(fù)制偏移一定距離,定義無限元邊界遠(yuǎn)場節(jié)點(diǎn),新節(jié)點(diǎn)的節(jié)點(diǎn)號在原有節(jié)點(diǎn)號基礎(chǔ)上增加整數(shù)值n,實(shí)現(xiàn)同一無限單元延無限元方向上近場節(jié)點(diǎn)和遠(yuǎn)場節(jié)點(diǎn)一一對應(yīng),且單元號相差n,n值的選取要結(jié)合模型中節(jié)點(diǎn)總數(shù)選取,確保原有限元節(jié)點(diǎn)號與新生成節(jié)點(diǎn)號不重復(fù)。數(shù)據(jù)行定義了新創(chuàng)建的遠(yuǎn)場節(jié)點(diǎn)在原有近場節(jié)點(diǎn)基礎(chǔ)上的坐標(biāo)偏移值。
表1不同邊界區(qū)域無限元近場和遠(yuǎn)場節(jié)點(diǎn)集
103.abaqus/cae導(dǎo)入修改后inp文件(job-2.inp),查看生成的無限元遠(yuǎn)場節(jié)點(diǎn)并導(dǎo)出新inp文件(job-3.inp);
通過abaqus/cae的圖形用戶界面gui以file→import→model的方式導(dǎo)入修改后的inp文件(job-2.inp),無限元的遠(yuǎn)場節(jié)點(diǎn)生成,在part模塊條件下,通過view→partdisplayoptions→mesh下點(diǎn)選shownodelabels顯示單元節(jié)點(diǎn)號,可以查看生成的不同區(qū)域無限元遠(yuǎn)場節(jié)點(diǎn),如圖3所示,將上述導(dǎo)入模型在job模塊內(nèi),新建job-3任務(wù),通過jobmanager上的writeinput導(dǎo)出新的inp文件(job-3.inp)。
104.inp文件(job-3.inp)指定位置插入關(guān)鍵字行(*element)定義無限單元,并另存為job-4.inp;
按照abaqus的inp文件的語法規(guī)則編輯inp文件(job-3.inp),通過*element關(guān)鍵字行和數(shù)據(jù)行定義新單元,且上述單元定義的關(guān)鍵字行和數(shù)據(jù)行插入位置必須位于無限元邊界所在part的定義結(jié)束行*endpart關(guān)鍵字之前,遠(yuǎn)場節(jié)點(diǎn)集合定義數(shù)據(jù)行和有限元單元定義數(shù)據(jù)行之后。
abaqus的inp文件主要通過*element關(guān)鍵字定義無限單元,指定單元類型為cin3d8,并建立相應(yīng)邊界區(qū)域上無限邊界元集合;其數(shù)據(jù)行是指定單元號和單元組成的節(jié)點(diǎn)號,對于三維無限單元abaqus幫助文檔給出了其定義規(guī)則,該數(shù)據(jù)行也可以從其他包含單元定義數(shù)據(jù)的inp文件中讀取。
上述數(shù)據(jù)行單元定義的節(jié)點(diǎn)號排列順序滿足abaqus幫助文檔中三維無限單元(cin3d8)定義的節(jié)點(diǎn)次序。
abaqus的inp文件中利用*element進(jìn)行無限單元定義兩種方式:
1)無限單元定義的數(shù)據(jù)行直接插入對應(yīng)區(qū)域無限元定義關(guān)鍵字所在位置的下一行,命令如下所示;
*element,type=cin3d8,elset=bottomy
*element,type=cin3d8,elset=leftx
*element,type=cin3d8,elset=rightx
*element,type=cin3d8,elset=frontz
*element,type=cin3d8,elset=backz
*element,type=cin3d8,elset=leftfrontcorner
*element,type=cin3d8,elset=leftbackcorner
*element,type=cin3d8,elset=rightfrontcorner
*element,type=cin3d8,elset=rightbackcorner
*element,type=cin3d8,elset=frontleftcorner
*element,type=cin3d8,elset=frontrightcorner
*element,type=cin3d8,elset=backleftcorner
*element,type=cin3d8,elset=backrightcorner
2)無限單元定義的數(shù)據(jù)行由外部文件filename.inp給定,該文件內(nèi)容只是包含預(yù)先完成輸入的當(dāng)前邊界區(qū)域無限單元定義的數(shù)據(jù)行—包括無限單元號和組成節(jié)點(diǎn)號,命令如下所示。
*element,type=cin3d8,elset=bottomy,input=bottomy_element1.inp
*element,type=cin3d8,elset=leftx,input=leftx_element1.inp
*element,type=cin3d8,elset=rightx,input=rightx_element1.inp
*element,type=cin3d8,elset=frontz,input=frontz_element1.inp
*element,type=cin3d8,elset=backz,input=backz_element1.inp
*element,type=cin3d8,elset=leftfrontcorner,input=leftfrontcorner_element.inp
*element,type=cin3d8,elset=leftbackcorner,input=leftbackcorner_element.inp
*element,type=cin3d8,elset=rightfrontcorner,input=rightfrontcorner_element.inp
*element,type=cin3d8,elset=rightbackcorner,input=rightbackcorner_element.inp
*element,type=cin3d8,elset=frontleftcorner,input=frontleftcorner_element.inp
*element,type=cin3d8,elset=frontrightcorner,input=frontrightcorner_element.inp
*element,type=cin3d8,elset=backleftcorner,input=backleftcorner_element.inp
*element,type=cin3d8,elset=backrightcorner,input=backrightcorner_element.inp
105.python編程構(gòu)建無限元邊界單元定義數(shù)據(jù)行并輸入到abaqus的輸入文件(job-4.inp)或者指定的inp文件,其具體過程為:
1)利用python編程讀取abaqus的輸入文件(job-4.inp)中的節(jié)點(diǎn)號及相應(yīng)坐標(biāo),單元號及組成節(jié)點(diǎn)號,并存儲在指定的列表中;
2)利用python編程讀取abaqus的輸入文件(job-4.inp)中無限單元定義的關(guān)鍵字行號并存儲在指定的變量中,或者讀取無限單元定義數(shù)據(jù)行寫入的input參數(shù)filename.inp;
3)根據(jù)節(jié)點(diǎn)坐標(biāo)特點(diǎn)遍歷上述有限元模型的節(jié)點(diǎn)列表,根據(jù)各邊界節(jié)點(diǎn)坐標(biāo)值特點(diǎn)查找不同邊界上節(jié)點(diǎn),并添加到指定邊界節(jié)點(diǎn)列表;
4)通過遍歷上述有限元模型的單元列表,依據(jù)單元組成節(jié)點(diǎn)坐標(biāo)與邊界上節(jié)點(diǎn)坐標(biāo)特點(diǎn)的關(guān)系,查找邊界單元,并添加到指定的邊界單元列表;
5)遍歷指定邊界節(jié)點(diǎn)列表,并取出其中任意四個(gè)節(jié)點(diǎn)a,b,c和d,判斷這四個(gè)節(jié)點(diǎn)是否為邊界無限單元近場第一個(gè)面上的四個(gè)節(jié)點(diǎn);
6)若a,b,c和d四個(gè)節(jié)點(diǎn)是邊界無限單元近場第一個(gè)面上的四個(gè)節(jié)點(diǎn),則根據(jù)向量的數(shù)量積求向量夾角關(guān)系確定四個(gè)節(jié)點(diǎn)的相對位置關(guān)系;
7)利用向量間的向量積確定四個(gè)節(jié)點(diǎn)的逆時(shí)針方向的排列順序?yàn)閝1,q2,q3,q4;
8)無限單元序號由有限模型中指定part單元個(gè)數(shù)a,已定義邊界無限單元個(gè)數(shù)為b以及該區(qū)域內(nèi)無限單元定義次序c決定,則當(dāng)前無限單元號為q=a+b+c;
9)給出指定邊界單元無限元定義的數(shù)據(jù)行輸出:
q,q1,q2,q3,q4,q1+n,q2+n,q3+n,q4+n
其中:q為無限元單元號,q1,q2,q3,q4為近場四個(gè)節(jié)點(diǎn),q1+n,q2+n,q3+n,q4+n為遠(yuǎn)場四個(gè)節(jié)點(diǎn);
10)兩種無限單元定義數(shù)據(jù)行輸出方式,前者主要是針對無限單元定義采用關(guān)鍵字行①和數(shù)據(jù)行①,即單元定義數(shù)據(jù)行直接插入在job-4.inp中關(guān)鍵字定義位置的下一行并保存;
后者主要是針對無限單元定義采用關(guān)鍵字行②和數(shù)據(jù)行②,將單元定義的數(shù)據(jù)行寫入無限單元定義行中的input參數(shù)filename.inp文件中,abaqus在導(dǎo)入模型時(shí)會自動讀取filename.inp文件中的數(shù)據(jù)行生成無限單元。
106.通過abaqus模型導(dǎo)入的方式打開上述inp文件(job-4.inp),abaqus指定part三維無限單元邊界自動生成完畢。
打開abaqus/cae,通過file菜單下的模型導(dǎo)入方式(import→model),打開目標(biāo)文件夾下的inp文件(job-4.inp),完成邊界無限單元的建模過程,可在指定part下查看無限元建模效果,如圖4所示。圖5-圖9為不同邊界區(qū)域的生成的無限單元圖。