首页/文章/ 详情

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

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

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

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

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


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



































































#!/user/bin/python# -* - coding:UTF-8 -*-# 导入脚本中使用的各个模块from abaqus import *from abaqusConstants import *from caeModules import *#创建新模型 Model-1myModel = 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.rootAssemblydoorInstance = 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'].rootAssemblyv1 = a1.instances['Part-1-1'].verticesverts1 = v1.findAt(((5.0,5.0,200.0),))region = a1.Set(vertices=verts1, name='Set-2')


选择一条弧线进行加载:










import mathcood_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'].rootAssemblyv1 = a1.instances['Part-1-1'].verticesverts1 = 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,会出现如图所示:


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

View-Graphics Options-Viewport Background

这时会出现这样的画面:

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



往期推荐

   相关文章,在仿真秀官网搜索:

Python二次开发—创建输出数据库并添加数据

 
   

Python脚本——输出场输出数据

 
   

ABAQUS自定义插件制作

 
   

Abaqus二次开发之Python(1)

来源:易木木响叮当
Abaqus二次开发python控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-01
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 218粉丝 253文章 348课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈