Abaqus Surface getSequenceFromMask

时间:2017-11-14 18:58:41

标签: python mask surface abaqus

我在Abaqus写剧本,在那里我用圆圈(像奶酪)粉碎圆圈和正方形。我需要在部件之间放置接触,所以我需要Surface。

宏管理器生成:

s1 = a.instances['kolo-1'].edges
side1Edges1 = s1.getSequenceFromMask(mask=('[#1 ]', ), )
a.Surface(side1Edges=side1Edges1 , name='kolkoSurf')

问题是:getSequenceFromMask(mask =('[#1]',),) 如何获得这个#1?我可以更换吗?我搜索得很少,并且有一些想法可以使用:'find','face','COORDS',但我无法管理它。 请帮我。我梦想得到一个简单的例子,说明如何使用X,Y或者无论如何提取这个Surface。

BR, Wonman

3 个答案:

答案 0 :(得分:3)

您使用带有默认日记选项的宏管理器录制了上述日记。因此,变量side1Edges1是使用getSequenceFromMask() - 方法在您的日记中定义的。此方法是在录制期间通过单击GUI记录您执行的选择。这意味着您单击GUI以选择边缘,结果是getSequenceFromMask() - 作用于s1的方法,该方法是实例'kolo-1'的所有边的集合。

根据Abaqus Scripting Reference Guide 6.14 - 7.2.2,当涉及大量对象时,方法getSequenceFromMask()非常有效。但是,如果您尝试自定义日志文件以选择要使用的其他几何元素,则这不是很有用。有两种解决方案:

  1. 解决方案:粘贴命令

    session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)
    

    进入Abaqus CAE底部的Abaqus命令行,将JournalOptions对象的成员replayGeometryrecoverGeometry设置为COORDINATE,并重复记录您的日记。 在大多数情况下,您可以在发出上述命令后通过执行旧日志省略再次单击GUI。 然后,您可以使用新名称保存项目,并使用新创建的日记帐。 在新日记中,命令getSequenceFromMask(mask=('[#1 ]', ), )将替换为基于坐标的选择,以表示您记录的GUI点击。 然后,您可以修改坐标以自定义日志文件,并选择您希望在后续建模步骤中使用的边缘。

  2. 解决方案:使用您在python脚本前面几行中从Scratch定义的变量来定义side1Edges1。我建议使用日志文件作为蓝图,其中所有点击事件都必须使用您自己定义的众所周知的变量进行替换。例如,使用您自己的逻辑定义点列表myPoints = [(0,0), (0,1) ],然后将这些点用作方法的参数,例如: myLine = mySketch.Line(point1=myPoints[0], point2=myPoints[1]),构建新变量,例如myLine,以便在后续建模步骤中使用。

  3. 为了使用Abaqus Python API对建模工作流程有一个基本的了解,我建议 Puri,G。M.,2011。Abaqus的Python脚本:通过示例,第1版学习,在大多数大学中几乎没有。

    查看Abaqus基准指南可能会有所帮助,因为一些较新的基准测试包含Python脚本(例如断裂力学)。

答案 1 :(得分:1)

我想你正在创建一个基于边缘的曲面。有很多方法可以做到,最简单的方法是

为要为其创建曲面的边创建基于装配的集(" setName")。

instance=mdb.rootAssembly.instances["InstanceName"]
set_for_surface=instance.sets["setName"].edges
assembly.Surface(side1Edges=set_for_surface, name="surf_name")

查看findAt()或通过边界框" getBoundingBox()"选择区域。请参阅此SO answer,这有点类似。

编辑:如果集合是基于程序集的集合,则直接从程序集而不是实例访问它。然后,使用相同的程序。

mdb.rootAssembly.sets['Set_name'].edges

答案 2 :(得分:0)

回答晚了,但我发现通过给出坐标来选择所有边的更简单方法:

p = mdb.models['Model-1'].parts['Part-1']
e = p.edges
edges = e.getByBoundingBox(x1,y1,z1,x2,y2,z2)
p.Set(edges=edges, name='AllPartSet')

x、y 和 z 是制作盒子的两个坐标。