基于python對abaqus模型進行拆分
瀏覽:3931 評論:5 收藏:9
更新:
最近工作量比較大,逐漸意識到之前用.py文件進行宏錄制的局限性,對這個程序進行了一部分改進,使它能夠更方便的調用。之前的程序是將拆分間距和model名、part名確定的,每次調用都要更改里面的數據,我參照了知乎一位大佬的方法(鏈接https://zhuanlan.zhihu.com/p/84749135),做了如下改進:
from abaqus import *
from abaqusConstants import *
from caeModules import *
viewportName = session.currentViewportName#獲取當前模型名
cobject=session.viewports[viewportName].displayedObject#cobject實際上是一個字典,里面包括當前模型的全部信息
modelNameDE=cobject.modelName#利用modelname函數將cobject中的模型名提取出來
# partNameDE=cobject.name #應用part的方法和model方法類似
# print(modelNameDE)
# print(partNameDE)
modelname=getInput('Are U sure that it is this model',modelNameDE)
number=getInput('what is the number of OCA','0.05')#getinput函數彈出一個對話框,給對話框提供一個默認值,可以簡化操作
from driverUtils import executeOnCaeStartup
p = mdb.models[modelNameDE].parts['pad']
f, e, d = p.faces, p.edges, p.datums
t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=(
-124.940785, -0.053036, 0.0))
s = mdb.models[modelNameDE].ConstrainedSketch(name='__profile__',
sheetSize=588.26, gridSpacing=14.7, transform=t)
g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p = mdb.models[modelNameDE].parts['pad']
p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)
session.viewports['Viewport: 1'].view.setValues(nearPlane=426.19,
farPlane=750.334, width=2.07316, height=0.843045, cameraPosition=(20.0515,
-0.17324, 588.262), cameraTarget=(20.0515, -0.17324, 0))
s.offset(distance=0.03, objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.055, objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.055+float(number), objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.077+float(number), objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.09+float(number), objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.09+float(number)+float(number), objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.12+float(number)+float(number), objectList=(g[5], g[4]), side=LEFT)
s.offset(distance=0.12+float(number)+float(number)+float(number), objectList=(g[5], g[4]), side=LEFT)
p = mdb.models[modelNameDE].parts['pad']
f = p.faces
pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), )
e1, d2 = p.edges, p.datums
p.PartitionFaceBySketch(faces=pickedFaces, sketch=s)
s.unsetPrimaryObject()

----------------------分割線-----------------------------
在abaqus實際使用中,經常需要大量的重復操作,比如將abaqus中的模型拆分成十幾個區域,此時在cae中操作很復雜,可以通過python二次開發進行批量操作。
rom abaqus import *
from abaqusConstants import *
from caeModules import *
from driverUtils import executeOnCaeStartup
#THERE IS A TEMP
f, e, d = p.faces, p.edges, p.datums
t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=(
-124.940785, -0.053036, 0.0))
s = mdb.models[''].ConstrainedSketch(name='__profile__',
sheetSize=588.26, gridSpacing=14.7, transform=t)
g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
##THERE IS A TEMP
p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)
s.offset(distance=0.025, objectList=(g[4], g[3]), side=LEFT)
s.offset(distance=0.075, objectList=(g[4], g[3]), side=LEFT)
s.offset(distance=0.110, objectList=(g[4], g[3]), side=LEFT)
s.offset(distance=0.160, objectList=(g[4], g[3]), side=LEFT)
s.offset(distance=0.190, objectList=(g[4], g[3]), side=LEFT)
s.offset(distance=0.240, objectList=(g[4], g[3]), side=LEFT)
p = mdb.models['oca_50um_30mm'].parts['pad']
f = p.faces
pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), )
e1, d2 = p.edges, p.datums
p.PartitionFaceBySketch(faces=pickedFaces, sketch=s)
s.unsetPrimaryObject()
黑體為需要修改的語句
上圖是一個拆分的簡單例子,核心思路是:利用草圖拆分功能,將底邊向上偏置,進行模型的劃分。python的二次開發實際上就是批量操作,具體操作是,首先通過abaqus.py文件,獲取模型的底邊數組為g[3],g[4],然后進行偏置,這樣做的優點是可以一鍵生成拆分,而且修改方便。不過這個方法只適用于簡單模型,復雜模型的拆分并不適用。
技術鄰APP
工程師必備
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP
10
5
9




















