Abaqus二次開(kāi)發(fā):python參數(shù)化建模方法(文末附復(fù)材屈曲分析腳本源代碼)

近期公眾號(hào)推送了一些Python開(kāi)發(fā)的建模工具,另外,過(guò)去幾年平臺(tái)發(fā)布的Abaqus的建模插件以及快捷建模腳本也都是基于Python語(yǔ)言開(kāi)發(fā),后臺(tái)常有一些同學(xué)詢問(wèn)Python程序開(kāi)發(fā)的問(wèn)題。作為一種開(kāi)源平臺(tái),Python積累的各種庫(kù)已非常豐富,在科學(xué)計(jì)算、可視化、大數(shù)據(jù)、人工智能等領(lǐng)域都得到了廣泛的應(yīng)用。
時(shí)間一晃,Python陪伴小編都十年之久了,它見(jiàn)證了一個(gè)翩翩少年變成油膩大叔的心酸歷程,那時(shí)候Python還不像現(xiàn)在這么火,寫點(diǎn)小程序小工具比較方便,也正是因?yàn)槠涓咝?、?jiǎn)潔的特點(diǎn)吸引了許多人。對(duì)于小編這種非計(jì)算機(jī)專業(yè)科班出身的工科男,編程效率第一位,人生苦短,我用Python。
下面講一下Abaqus中如何快速創(chuàng)建Python腳本
1.如何快速創(chuàng)建參數(shù)化腳本
我們?cè)诓僮鰽baqus/CAE時(shí),所有動(dòng)作指令都存儲(chǔ)在工作目錄下的abaqus.rpy文件中,abaqus.rpy是實(shí)時(shí)更新的,每操作一步就會(huì)更新一下,包括對(duì)視圖的操作都會(huì)記錄在內(nèi),因此可以直接修改abaqus.rpy文件來(lái)獲得參數(shù)化建模腳本。
另外,當(dāng)保存自己創(chuàng)建的CAE模型時(shí),與模型同名的會(huì)出現(xiàn)一個(gè).jnl的文件,該文件記錄的也是建模過(guò)程中的操作指令,不過(guò)不包含一些視圖操作。代碼更為簡(jiǎn)練,用戶同樣可以修改此文件來(lái)獲取腳本。
例如,下面幾句是rpy中獲得的指令:
p = mdb.models['Model-1'].parts['Ball']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=ON,
??? engineeringFeatures=ON)
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
??? referenceRepresentation=OFF)
p = mdb.models['Model-1'].parts['Bulk']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
a = mdb.models['Model-1'].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=a)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(
optimizationTasks=OFF, geometricRestrictions=OFF, stopConditions=OFF)
?
下面幾句則是.jnl文件中的指令格式:
from part import *
from material import *
from section import *
from optimization import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *
mdb.jobs['Job-1']._Message(STARTED, {'phase': BATCHPRE_PHASE,
??? 'clientHost': 'taishanbuzuo-PC', 'handle': 0, 'jobName': 'Job-1'})
mdb.jobs['Job-1']._Message(ODB_FILE, {'phase': BATCHPRE_PHASE,
??? 'file': 'D:\\temp\\Job-1.odb', 'jobName': 'Job-1'})
mdb.jobs['Job-1']._Message(COMPLETED, {'phase': BATCHPRE_PHASE,
??? 'message': 'Analysis phase complete', 'jobName': 'Job-1'})
mdb.jobs['Job-1']._Message(STATUS, {'totalTime': 0.0, 'attempts': ' 1U',
??? 'timeIncrement': 0.0001, 'increment': 1, 'stepTime': 0.0, 'step': 1,
??? 'jobName': 'Job-1', 'severe': 1, 'iterations': 12, 'phase': STANDARD_PHASE,
??? 'equilibrium': 11})
2.python腳本的格式控制
在修改由.rpy或者.jnl文件獲取的代碼時(shí),經(jīng)常會(huì)出現(xiàn)下面這種格式的語(yǔ)句:
p?=?mdb.models['Model-1'].parts['Part-1']
f?=?p.faces
faces?=?f.getSequenceFromMask(mask=('[#2 ]',?),?)?
p.Set(faces=faces,?name='Set-2')
上述語(yǔ)句中對(duì)于一個(gè)和特征的索引采用的是一種掩碼的方式,即getSequenceFromMask()函數(shù),我們是無(wú)法確定自己所需對(duì)象的掩碼的。因此,就需要采用其他更直觀的方式獲取用戶所需要的對(duì)象。下面將介紹如何轉(zhuǎn)換.rpy文件以及.jnl文件的指令輸出格式。
第一種,在CAE主視圖下方的命令交互行輸入以下指令:
>>>session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry= COORDINATE)
運(yùn)行上述指令之后,在CAE中重復(fù)上述set的建立過(guò)程,將set命名為“set-3”,類型選擇Geometry,且仍舊選擇同一平面作為該集合對(duì)象。操作完成后,重新查閱當(dāng)前工作目錄下的Abaqus.rpy文件,代碼會(huì)變成如下形式:
p?=?mdb.models['Model-1'].parts['Part-1']
f?=?p.faces
faces?=?f.findAt(((20.211912,?3.333333,?20.0),?))
p.Set(faces=faces,?name='Set-3')
此時(shí)對(duì)象faces的索引方式已經(jīng)轉(zhuǎn)換為findAt()函數(shù)配合點(diǎn)坐標(biāo)的方式。
第二種:在Abaqus GUI命令行交互窗口輸入以下指令:
>>>session.journalOptions.setValues(replayGeometry=INDEX,recoverGeometry=INDEX)
????上述命令執(zhí)行完后,再次重復(fù)建立一個(gè)集合,命名為“set-4”,集合類型和對(duì)象同上。再次查看工作目錄下的Abaqus.rpy文件,其最新更新內(nèi)容如下:
p?=?mdb.models['Model-1'].parts['Part-1']
f?=?p.faces
faces?=?f[1:2]???????????????????????????????????
p.Set(faces=faces,?name='Set-4')
此時(shí)選取對(duì)象faces的索引方式已經(jīng)轉(zhuǎn)換為實(shí)際特征索引號(hào)的方式。按照同樣的道理,讀者可以建立相同的單元集合或者節(jié)點(diǎn)集合來(lái)檢驗(yàn)上述區(qū)別,一般地,在Abaqus的GUI程序開(kāi)發(fā)中,優(yōu)先選擇這兩種對(duì)象索引方式,更具有通用性。
3.python腳本的執(zhí)行
一種是在Abaqus/CAE主界面下方命令行輸入,如下圖所示。

另一種,將自己的腳本存為.py文件,然后在File→Run Script中選擇該文件運(yùn)行。

給大家分享一個(gè)Abaqus幫助文檔中的復(fù)合材料特征值屈曲分析案例的建模腳本,包含幾何、材料、屬性、網(wǎng)格、分析步、網(wǎng)格、裝配、邊界載荷、任務(wù)提交等完整建模過(guò)程,感興趣的可以關(guān)注“復(fù)合材料力學(xué)”微信公眾號(hào),后臺(tái)回復(fù)“打擊盜版003”即可獲取源代碼下載鏈接,關(guān)鍵字太長(zhǎng)可以直接復(fù)制。

代碼執(zhí)行效果:

代碼結(jié)尾是自動(dòng)提交計(jì)算的指令,如果不想讓它自動(dòng)提交,可以部分刪除,計(jì)算結(jié)果如下:
