Abaqus Surface getSequenceFromMask

问题描述 投票:0回答:4

我正在 Abaqus 中编写脚本,我用切好的圆压碎圆形和正方形(就像奶酪一样)。我需要在零件之间放置接触,所以我需要 Surface。

宏管理器生成:

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

问题是: getSequenceFromMask(mask=('[#1 ]', ), ) 如何获得#1?我可以更换它吗?我搜索很少,有一些想法可以使用:“查找”、“脸部”、“坐标”,但我无法管理它。 请帮我。我梦想得到一个简单的例子,如何使用 X、Y 或无论如何提取这个表面。

BR, 旺曼

python mask surface abaqus
4个回答
8
投票

您使用宏管理器和默认日志选项记录了上述日志。因此,变量

side1Edges1
是使用
getSequenceFromMask()
方法在您的日志中定义的。此方法是记录您在记录过程中通过单击 GUI 执行的选择。这意味着您单击 GUI 选择一条边,结果是作用于
getSequenceFromMask()
s1
方法,该方法是实例
'kolo-1'
的所有边的集合。

根据 Abaqus 脚本参考指南 6.14 - 7.2.2,当涉及大量对象时,方法

getSequenceFromMask()
非常高效。但是,如果您尝试自定义日志文件以选择要使用的另一个几何元素,这并不是很有帮助。解决办法有两种:

  1. 解决方案:粘贴命令

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

    进入 Abaqus CAE 底部的 Abaqus 命令行,将 JournalOptions 对象的成员

    replayGeometry
    recoverGeometry
    设置为
    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
    ,以便在后续建模步骤中使用。

要基本了解使用 Abaqus Python API 的建模工作流程,我可以推荐 Puri, G. M., 2011。Abaqus 的 Python 脚本:通过示例学习,第 1 版,而且大多数大学都很难提供。

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


2
投票

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

为要为其创建曲面的边创建基于装配的集合(“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答案,有点相似。

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

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

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


0
投票

还有一点,getByBoundingBox函数返回一个掩码字符串(如果元素集不为空),可以在getSequenceFromMask中使用它来创建集合和曲面。

© www.soinside.com 2019 - 2024. All rights reserved.