【技术邻】Abaqus⾥应⽤Python的⼀些技巧
例如:cell4 = dels['block'].parts['crankcase'].cells[4],要把part模块中编号为4的体赋值给cell4,就需通过路径mdb→models→part→cells(4号体属性),其中'block'、'crankcase'、分别是model和part的名字。
在草图Sketch中画线:
s = dels[' block '].ConstrainedSketch(name='grid',
sheetSize=3.0)
s.Line(point1=(-1.275, 0.0), point2=(-1.125, 0.0))
s.Line(point1=(1.125, 0.0), point2=(1.275, 0.0))
执⾏任何⼀条命令都必须按照结构树的格式进⾏操作。我们所看到的python脚本繁杂的语句就是这样形成的。这样⼤量的命令不能在短时间内掌握,我们只需要根据⾃⼰的需要边建⽴模型边学习就可以了。
a = dels['Model-1'].rootAssembly
s = a.instances['Mount-1'].edges
side1Edges = s.findAt(((0.0475, 0.0, 0.0), ))
以上三⾏与下⾯的句⼦是等同的,即把findat到的edges赋值给side1Edges。分开来写简单明了,⼤⼤缩短了语句的长度。
side1Edges = dels['Model-1'].rootAssembly. instances['Mount-1'].edges. findAt(((0.0475, 0.0, 0.0), ))
a.Surface(side1Edges=side1Edges, name='Bottom'),这⾏语句设置side1Edges所对应的edge为名称'Bottom'的surface的set。
#===========================================================
3.模型参数分析技巧
Python脚本建模的好处就是可以进⾏参数分析,即改变我们要分析模型的⼏何尺⼨、材料属性等可变参数,对数值模型进⾏求解计算,从⽽对所分析的对象有更全⾯的了解。
1.对⾃⼰要进⾏参数分析的参数赋值:如⼏何尺⼨或材料属性等a1=20,b1=30,c1=40,命名要符合python规则。
2.cae与Python混合建模,不会的命令就利⽤cae⾃动⽣成,⽤Python reader记录命令然后进⾏修改,可以弥补不熟悉Python的缺点;
3.逐句修改Python脚本,可以去掉⼀些不必要的语句并在cae中逐句进⾏验证。
#===========================================================
4. ⼏个命令的体会
4.1 Set ( )
Set命令在python建模时要经常⽤到,对实体、surface、element等分组,⽅便加载、施加约束和单元⽣死等控制
4.2 Findat ( )
对cell、edge、face、vertice进⾏查,括号中参数为实体坐标
p = dels['Model-1'].parts['Mount']
f = p.faces
faces = f.findAt(((0.042303, 0.006937, 0.0), ))
pickedRegions =(faces, )
p.setElementType(regions=pickedRegions,
elemTypes=(elemType1, elemType2))
4.3 Len ( )
利⽤len命令可以实现对单元选取
p = dels['precast culvert'].parts['soil']
e = p.elements
len(e)
n1=len(e)
elements = e[1:n1] #单元数存放在e [ ]的⼀维数组⾥
p.Set(elements=elements, name='Set-3')
对单元进⾏编组set,可以进⾏⽣死单元的控制,我摸索了好久才想到这个办法,⽬前只在⼆维模型应⽤过,三维也应该没问题。Abaqus没有办法对单元编号进⾏编号控制,也没有像ansys那样有效的选择命令,怎样选择abaqus的单元就是很头疼的问题,我要做路堤的分层回填模拟,⼿动选取单元根本就没有可能。Abaqus的编号其实是有规则的,后划分的单元编号最⼩,先划分的单元编号最⼤;这样我们就可以每次划分单元后都采⽤len命令计算⼀次单元数量,并⽤参数记录下来,这样我们就能计算出每部分单元的数量以及他的起始和终⽌编号。根据elements = e[1:n1]、p.Set(elements=elements, name='Set-3')语句就可以把每部分单元设置成set,以后操作就很⽅便了。
#===========================================================
5. ⼀个Abaqus/Python例⼦
下⾯是⼀个Getting Started with Abaqus: Interactive Edition中的⼀个橡胶避震垫例⼦:☺号后语句表⽰我的注释,注释上⾯的句⼦。我也不懂的就没有注释,先熟悉⼀下Python的样⼦。在学习的时候可以co
py(Crtol + V)到cae下⾯的命令⾏中⼀句句的执⾏,并在cae视窗中查看命令执⾏情况,领会命令使⽤⽅法。
# Script for rubber mount example
☺“#”开头表⽰这⼀⾏为注释⾏,同ansys的“!”号
from abaqus import *
from abaqusConstants import *
from abaqusConstants import *
☺引⼊abaqus中的⼀些模块,这些模块是abaqus已事先存储在⽂件中,要引⼊才这些模块能运⾏相应的命令session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
session.journalOptions.setValues(replayGeometry=COORDINATE,
recoverGeometry=COORDINATE)
☺对cae视窗的操作命令;maximize()的括号好像是默认为当前值
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
Mdb()
#--------------------------------------------------------------------------------------------------
## Sketch profile of the mount
☺进⼊草图模块
s = dels['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=0.3)
☺建⽴⼀个sketch草图,草图的尺⼨为0.3个单位;这个句⼦算是⼀个标准的Python语句,具体后⾯解释
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.sketchOptions.setValues(decimalPlaces=3, viewStyle=AXISYM)
s.setPrimaryObject(option=STANDALONE)
☺设置草图为轴对称模式
s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))
s.FixedConstraint(entity=g[2])
☺建⽴辅助线及约束
☺sketch参数修改
☺画矩形
s.DistanceDimension(entity1=g[2], entity2=v[0],textPoint=(0.00998260825872421, -0.00830297358334064), value=0.01)
s.VerticalDimension(vertex1=v[0],vertex2=v[1],textPoint=(0.0,0.00851448811590672), value=0.03)
s.ObliqueDimension(vertex1=v[0],vertex2=v[3],textPoint=(0.025699570775032, -0.00830297358334064), value=0.05)☺标注图形尺⼨,还可以修改图形尺⼨,如拉伸、压缩等
s.CircleByCenterPerimeter(center=(0.085,0.025),point1=(0.06, 0.00740899052470922))
☺画圆
s.CoincidentConstraint(entity1=v[5], entity2=g[5])
s.DistanceDimension(entity1=g[2], entity2=v[4],textPoint=(0.0811913833022118, -0.023865295574069), value=0.1) s.VerticalDimension(vertex1=v[2], vertex2=v[4],textPoint=(0.115524396300316, 0.0262394621968269), value=0.0) s.ObliqueDimension(vertex1=v[5], vertex2=v[3],textPoint=(0.0519323498010635, 0.0), value=0.005)
☺修改圆尺⼨、移动位置―――没搞清楚修改尺⼨命令有什么实际意义,直接定义好尺⼨不就结了?
s.autoTrimCurve(curve1=g[7],point1=(0.124150268733501,-0.00965208746492863))
☺裁剪命令,其中g[7]是圆的线编号,ry
s.autoTrimCurve(curve1=g[5],point1=(0.0601795427501202,0.020298857241869))
s.autoTrimCurve(curve1=g[4],point1=(0.0557677671313286,0.030869778245687))
☺裁剪命令
s.RadialDimension(curve=g[8],textPoint=(0.0725325122475624,0.0207393132150173),radius=0.047169905660283) d[6].setValues(reference=ON)
☺标注命令,标注界⾯很漂亮
session.viewports['Viewport: 1'].view.fitView()
☺cae图形缩放的合适⼤⼩
p = dels['Model-1'].Part(name='Mount', dimensionality=AXISYMMETRIC, type=DEFORMABLE_BODY)
p = dels['Model-1'].parts['Mount']
☺命名model
p.BaseShell(sketch=s)
s.unsetPrimaryObject()
session.viewports['Viewport: 1'].setValues(displayedObject=p)
session.viewports['Viewport: 1'].setValues(displayedObject=p)
dels['Model-1'].sketches['__profile__']
☺显⽰model
#--------------------------------------------------------------------------------------------------
## Create material 'Rubber'
☺创建材料模型
0.1338), (0.254E6, 0.2210), (0.362E6, 0.3450), (0.459E6, 0.4600), (0.583E6, 0.6242), (0.656E6, 0.8510), (0.730E6,
1.4268)))
##
## Create material 'Steel'
##python 定义数组
##
## Create solid sections for the rubber and steel
##
material='Rubber', thickness=1.0)
material='Steel', thickness=1.0)
#-------------------------------------------------------------------
## Partition the part into two regions (rubber and steel regions)
☺切割体形成两个部分,从⽽可以赋予不同材料属性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论