Python二次开发——findAt方法的正确食用方法

在讲解 findAt() 方法之前,先让我们简单回顾一下Abaqus中需要指定区域(region)的情况吧~

Load命令:使用region参数指定施加荷载的区域

Mesh命令:使用region参数指定单元类型、网格种子的定义区域

Set命令:使用region参数定义节点集、单元集

当我们在CAE中建立模型后,软件会自动为他们进行编号,如节点编号、单元编号、各条边等,如果我们在编写脚本的时候选用模型的编号,一旦修改模型,编号将会全部打乱重新排列,会使脚本命令出现异常。另外Abaqus的新版本与老版本节点、单元编号顺序可能也会出现不一样。这时就体现出findAt方法的重要性啦~Python二次开发——findAt方法的正确食用方法的图1
使用findAt方法可以捕捉包含该坐标的边、面或者模型中任意的点,也可以是点的x、y、z坐标(有没有很强大!)
下面以曹老师书中的代码为例详细讲解以下创建区域命令和findAt()方法的使用

#!/user/bin/python

# -* - coding:UTF-8 -*-

# 导入脚本中使用的各个模块

from abaqus import *

from abaqusConstants import *

from caeModules import *

#创建新模型 Model-1

myModel = mdb.models['Model-1']

# 创建新的视口

myViewport=session.Viewport(name='Region syntax', 

               origin=(20, 20), width=200, height=100)

# 创建一个草图,并绘制两个矩形 

mySketch = myModel.ConstrainedSketch(name='Sketch A',

    sheetSize=200.0)

mySketch.rectangle(point1=(-40.0, 30.0),

    point2=(-10.0, 0.0))

mySketch.rectangle(point1=(10.0, 30.0),

    point2=(40.0, 0.0))

# 对上面创建的两个矩形进行拉伸操作,生成三维部件

door = myModel.Part(name='Door',

    dimensionality=THREE_D, type=DEFORMABLE_BODY)

door.BaseSolidExtrude(sketch=mySketch, depth=20.0)

# 创建部件实例

myAssembly = myModel.rootAssembly

doorInstance = myAssembly.Instance(name='Door-1',

    part=door, dependent=OFF)

# 选择两个顶点

pillarVertices = doorInstance.vertices.findAt(

    ((-40,30,0),), ((40,0,0),) )

# 创建静力分析步(static)

myModel.StaticStep(name='impact',

    previous='Initial', initialInc=1, timePeriod=1)

# 在选择的顶点上施加集中力

myPillarLoad = myModel.ConcentratedForce(

    name='pillarForce', createStepName='impact',

    region=(pillarVertices,), cf1=12.50E4)

# 选择两个面

topFace = doorInstance.faces.findAt(((-25,30,10),))

bottomFace = doorInstance.faces.findAt(((-25,0,10),))

# 在选择的面上施加压力(pressure)

# 对于同一部件实例的相同类型的实体,可以使用 + 号

myFenderLoad = myModel.Pressure(

    name='pillarPressure', createStepName='impact',

    region=((topFace+bottomFace, SIDE1),),

    magnitude=10E4)

# 在同一部件实例上选择两条边

myEdge1 = doorInstance.edges.findAt(((10,15,20),))

myEdge2 = doorInstance.edges.findAt(((10,15,0),))

# 对一个面、两条边和两个顶点施加边界条件

myDisplacementBc= myModel.DisplacementBC(

    name='xBC', createStepName='impact',

    region=(pillarVertices, myEdge1+myEdge2,

    topFace), u1=5.0)

# 使用面上的任意点选择两个面

faceRegion = doorInstance.faces.findAt(

    ((-30,15,20), ), ((30,15,20),))

# 创建包含两个面(face)的表面(surface)

mySurface = myModel.rootAssembly.Surface(

    name='exterior', side1Faces=faceRegion)

# 使用这个表面来创建弹性地基(elastic foundation)

myFoundation = myModel.ElasticFoundation(

     name='elasticFloor', createStepName='Initial',

     surface=mySurface, stiffness=1500)

# 显示施加荷载和边界条件后的装配件

myViewport.setValues(displayedObject=myAssembly)

myViewport.assemblyDisplay.setValues(step='impact', 

    loads=ON, bcs=ON, predefinedFields=ON)

重点讲解:

28:调用findAt()方法时,里面点的坐标应是三维坐标,在二维平面内绘制草图时z坐标应为0;

42~45:在同一部件实例中,相同类型实体(topFace和bottomFace均为表面),可以使用“+”进行合并。

补充:用findAt捕捉点:

a1 = mdb.models['Model-1'].rootAssembly

v1 = a1.instances['Part-1-1'].vertices

verts1 = v1.findAt(((5.0,5.0,200.0),))

region = a1.Set(vertices=verts1, name='Set-2')

选择一条弧线进行加载:

import math

cood_x=5.0*math.sin(45.0/180.0*math.pi)

cood_y=5.0*math.cos(45.0/180.0*math.pi)

side1Edges3 =s1.findAt(((cood_x,cood_y,0.0),))

region3 = a.Surface(side1Edges=side1Edges3, name='Surf-1')

mdb.models['Model-1'].Pressure(name='Load-1', createStepName='Step-1', 

  region=region3, distributionType=UNIFORM, field='', magnitude=-pp, 

  amplitude=UNSET)

选择四个点施加集中力:

a1 = mdb.models['Model-1'].rootAssembly

v1 = a1.instances['Part-1-1'].vertices

verts1 = v1.findAt(((5.0,5.0,200.0),),((5.0,-5.0,200.0),),((-5.0,-5.0,200.0),),((-5.0,5.0,200.0),))

region = a1.Set(vertices=verts1, name='Set-2')

mdb.models['Model-1'].ConcentratedForce(name='Load-1', createStepName='Step-1', 

    region=region, cf3=1000.0, distributionType=UNIFORM, field='', 

    localCsys=None)

对于刚开始接触Python二次开发的童鞋们,强烈推荐大家一个利器:Python Reader

公众号内回复:reader即可自动获取

Pyhton Reader的用法:

打开Abaqus后,点击运行Python Reader,会出现如图所示:

Python二次开发——findAt方法的正确食用方法的图2


右边那个框框就是PythonReader的界面,同学们先不要被这么多命令流吓到哈,这个小软件做的特别良心,你在软件里每操作一步,小框框里就会显示相应的命令流,并进行高亮,所以我们刚开始接触Python二次开发的时候这个小软件会帮助我们不少忙。给大家示范一下:把背景换为白色

View-Graphics Options-Viewport Background

这时会出现这样的画面:

Python二次开发——findAt方法的正确食用方法的图3

小框框内高亮的部分即为刚刚的操作,将它复制到软件下面命令行,即可通过命令流控制背景颜色了。

Python二次开发——findAt方法的正确食用方法的图4

以上就是木木今天所要分享的内容了

木木自费搞了个小抽奖,大家有兴趣可以参加哦~在公众号(易木木响叮当)内回复“木木向上冲!”即可参与

(1条)
默认 最新
评论 点赞
点赞 7 评论 1 收藏 25
关注