Abaqus:用于选择曲面上元素的脚本

时间:2016-05-05 10:52:20

标签: python scripting abaqus

我正在尝试编写一个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但没有运气。

有办法吗?

4 个答案:

答案 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