基于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],然后进行偏置,这样做的优点是可以一键生成拆分,而且修改方便。不过这个方法只适用于简单模型,复杂模型的拆分并不适用。

拆分

基于python对abaqus模型进行拆分的评论5条

基于python对abaqus模型进行拆分的相关案例教程

例如:cell4 = mdb.models['block'].parts['crankcase'].cells[4],要把part模块中编号为4的体赋值给cell4,就需通过路径mdb→models→part→cells(4号体属性),其中'block'、'crankcase'、分别是model和part的名字。 在草图Sketch中画线: s = mdb.models[' block '].Co
前面推荐了一些ABAQUS二次开发小工具,不知道大家是否已经安装使用。 后面以一些小案例带大家熟悉ABAQUS前后处理相关的Python库,以及使用技巧。 星哥开发的插件大多集中在非均质相关断裂问题,相信关注公众号的很多朋友也都是做这方面,那么我们从最初始的非均质几何模型的案例出发,来演示一个随机颗粒模型的代码编写的全过程,效果如下所示: 在这个案例中,最大的帮手是PythonReader,它能让
3.3.1 DatumPlaneByOffset(...) This method creates a Feature object and a DatumPlane object offset by a specified distance from an existing plane. Path mdb.models[name].rootAssembly.DatumPlaneByOffset
from abaqus import * from abaqusConstants import * backwardCompatibility.setValues(includeDeprecated=True,reportDeprecated=False) # Create a model. myModel = mdb.Model(name='Beam') # Create a new view
在讲解 findAt() 方法之前,先让我们简单回顾一下Abaqus中需要指定区域(region)的情况吧~ Load命令:使用region参数指定施加荷载的区域 Mesh命令:使用region参数指定单元类型、网格种子的定义区域 Set命令:使用region参数定义节点集、单元集 当我们在CAE中建立模型后,软件会自动为他们进行编号,如节点编号、单元编号、各条边等,如果我们在编写脚本的时候选用模
影响力
粉丝
内容
获赞
收藏
    项目客服
    培训客服
    5 8