Abaqus 曲面 getSequenceFromMask

Abaqus Surface getSequenceFromMask

我在 Abaqus 中编写脚本,在那里我用切圆(如奶酪)粉碎圆和正方形。我需要在零件之间放置接触,所以我需要表面。

宏管理器生成:

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, 万曼

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

根据 Abaqus 脚本参考指南 6.14 - 7.2.2,当涉及大量对象时,方法 getSequenceFromMask() 非常有效。但是,如果您尝试将日志文件自定义为 select 另一个要使用的几何元素,这不是很有帮助。有两种解决方案:

  1. 解决方法:粘贴命令

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

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

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

为了基本了解使用 Abaqus 的建模工作流程 Python API,我可以推荐 Puri, G.M., 2011。Python Abaqus 脚本:通过示例学习,第 1 版,而且它在大多数大学中几乎不可用。

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

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

为要为其创建曲面的边创建一个基于集合的集合 ("setName")。

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

查看 findAt() 或通过边界框选择区域 "getBoundingBox()"。看到这个,有点类似

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

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

回答晚了,但我找到了更简单的方法 select 通过给定坐标:

所有边
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 是制作盒子的两个坐标。