我正在尝试编写一个Abaqus / Python脚本,它将选择“属于”某个面的所有元素。即将所有与网格立方体的一个面相连的元素(我将计算在该面上作用于力 - 位移或应力 - 应变曲线的总力)。
如果我使用GUI我这样做:
mdb.models['Model-1'].rootAssembly.Set(elements=
mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements.getSequenceFromMask(
mask=('[#0:5 #fff80000 #ff #f #ffe00000 #f000000f #3f',
' #0:6 #fffe #c0003f00 #3 #3fff8 #ffc00 ]', ), ), name='Set-1')
但是,getSequenceFromMask
在一般情况下不起作用。我尝试使用findat
但没有运气。
有办法吗?
答案 0 :(得分:1)
在零件或装配体上定义面集:
part.Set('facename',faces=part.faces.findAt(((1,0,0),),))
其中(1,0,0)
是脸部任意位置的坐标。 (不要在边缘/角落上使用一个点)
然后在网格划分后,您可以访问附加到该面的元素,例如:
instance.sets['facename'].elements
请注意,如果您想在运行分析后在odb上获取这些元素,则会有所不同:
instance.elementSets['FACENAME'].elements
请注意,设置名称已在odb上升。
答案 1 :(得分:1)
可以使用以下方法从其标签中选择特定元素:
mdb.models['model-name'].parts['part_name'].elements.getFromLabel(lable=element_id)
这样,就不必获取有关元素坐标的信息。仅元素ID足以访问它。
答案 2 :(得分:0)
我几天前就遇到过这个问题。也许我错了,但据我所知,没有办法直接选择特定元素。您可以使用“Bounding Box”或“Bounding Sphere”选择它们,也可以通过零件/实例面和单元格获取它们。如果需要以更具体的方式选择元素,则可以通过与其连接的节点获取元素。您可以对这些节点使用“findAt”命令,并通过“getElements()”命令获取元素。
这就是我解决它的方式,它的工作原理非常好。如果有其他方法可以解决这个问题,我会很高兴听到他们,因为这有时候真的令人沮丧。
干杯
答案 3 :(得分:0)
您显然是在使用Macro来获取曲面的位置,以便使用Python选择集合。问题是:宏工具默认情况下使用 getSequenceFromMask(),并且对用户不太友好...
幸运的是,可以更改此默认选项!一个人只需要运行以下代码行:
1 4
2 3
现在,当您使用MacroManager录制宏时,会得到 findAt()。
额外提示:
您可以在custom_v6.env文件的onCaeStartup()函数中包含这段代码。它将在您每次打开CAE时运行。
C:\ Program Files \ Dassault Systemes \ SimulationServices \ V6R2018x \ win_b64 \ SMA \ site \ custom_v6.env