Abaqus二次開發系列 (一)python參數化建模的快捷方法簡介
Abaqus二次開發系列
(一)Abaqus python參數化建模的快捷方法簡介
1.如何快速創建參數化腳本
我們在操作Abaqus/CAE時,所有動作指令都存儲在工作目錄下的abaqus.rpy文件中,abaqus.rpy是實時更新的,每操作一步就會更新一下,包括對視圖的操作都會記錄在內,因此可以直接修改abaqus.rpy文件。
另外,當保存自己創建的CAE模型時,與模型同名的會出現一個.jnl的文件,該文件記錄的也是建模過程中的操作指令,不過不包含一些視圖操作。代碼更為簡練,用戶同樣可以修改此文件來獲取腳本。
例如,下面幾句是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文件獲取的代碼時,經常會出現下面這種格式的語句:
p = mdb.models['Model-1'].parts['Part-1']
f = p.faces
faces = f.getSequenceFromMask(mask=('[#2 ]', ), )
p.Set(faces=faces, name='Set-2')
上述語句中對于一個和特征的索引采用的是一種掩碼的方式,即getSequenceFromMask()函數,我們是無法確定自己所需對象的掩碼的。因此,就需要采用其他更直觀的方式獲取用戶所需要的對象。下面將介紹如何轉換.rpy文件以及.jnl文件的指令輸出格式。
第一種,在CAE主視圖下方的命令交互行輸入以下指令:
>>>session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry= COORDINATE)
運行上述指令之后,在CAE中重復上述set的建立過程,將set命名為“set-3”,類型擇Geometry,且仍舊選擇同一平面作為該集合對象。操作完成后,重新查閱當前工作目錄下的Abaqus.rpy文件,代碼會變成如下形式:
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')
此時對象faces的索引方式已經轉換為findAt()函數配合點坐標的方式。
第二種:在Abaqus GUI命令行交互窗口輸入以下指令:
>>>session.journalOptions.setValues(replayGeometry=INDEX,recoverGeometry=INDEX)
上述命令執行完后,再次重復建立一個集合,命名為“set-4”,集合類型和對象同上。再次查看工作目錄下的Abaqus.rpy文件,其最新更新內容如下:
p = mdb.models['Model-1'].parts['Part-1']
f = p.faces
faces = f[1:2]
p.Set(faces=faces, name='Set-4')
此時選取對象faces的索引方式已經轉換為實際特征索引號的方式。按照同樣的道理,讀者可以建立相同的單元集合或者節點集合來檢驗上述區別,一般地,在Abaqus的GUI程序開發中,優先選擇這兩種對象索引方式,不推薦使用掩碼的方式,該方式一般不具有通用性。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















