基于python對abaqus模型進行拆分

更新:

最近工作量比較大,逐漸意識到之前用.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()

基于python對abaqus模型進行拆分的圖1~DECOZAZ(LMW)TC3QM6JN_M.png

基于python對abaqus模型進行拆分的圖2

----------------------分割線-----------------------------

在abaqus實際使用中,經常需要大量的重復操作,比如將abaqus中的模型拆分成十幾個區域,此時在cae中操作很復雜,可以通過python二次開發進行批量操作。

基于python對abaqus模型進行拆分的圖31609990040(1).jpg

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下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

10
5
9