Abaqus -Python 脚本开发有多难?

目录

  • 概述:从简单到具有挑战性的脚本

  • 第 1 级:完全重复之前所做的事情

  • 级别 2:修改参数

  • 第 3 级:循环参数

  • 第 4 级:更改位置

  • 第 5 级:更改(导入的)几何图形

  • 第 6 级:使脚本普遍适用

  • 总结

           

在 Abaqus 中编写脚本是减少工作时间并确保使用一致方法的有效方法。之前,我们已经给出了后处理的示例和入门技巧。现在我想通过使用示例来讨论哪些类型的问题对于编写脚本来说是容易的或更具挑战性的。希望这将使您更容易找到合适的问题并开始编写脚本。

概述:从简单到具有挑战性的脚本

在详细介绍之前,让我们先进行概述。我们将讨论的问题类型(从简单到具有挑战性)是:

  • 完全重复之前所做的事情

  • 修改参数

  •  循环参数

  •  修改位置

  • 更改(导入的)几何图形

  • 使脚本普遍适用

作为一个例子,我将使用弯曲梁,因为它很简单,而且机械工程师往往喜欢它😊。该模型是在 Abaqus/CAE 中创建的。梁的一侧受到限制,同时压力施加到顶部。使用钢材的特性。

Abaqus -Python 脚本开发有多难?的图1

图 1:模型设置。

第 1 级:完全重复之前所做的事情

要创建的最简单的脚本是那些完全重复之前完成的操作的脚本。这可以创建具有特定属性的材料(对于特定模型名称)、创建参考模型或进行后处理(当所有名称都相同时)。在这些情况下,我们可以简单地录制一个宏。这可以通过文件 --> 宏管理器来完成。

Abaqus -Python 脚本开发有多难?的图2

图 2:访问宏管理器。

单击“创建”创建一个新宏,为其命名并选择是将其存储在主目录中还是当前工作目录中。主目录中的宏始终可供用户访问,因此更适合一般用途,工作目录中的宏仅在当前工作目录中可用,因此更适合特定应用程序。

Abaqus -Python 脚本开发有多难?的图3

图 3:宏管理器对话框和创建宏对话框。在这种情况下,不存在现有的宏。创建后,它们将列在宏管理器中。

单击继续后,对您感兴趣的模型进行(修改)并停止记录。在本例中,我们将创建一种名为钢的材料,具有线弹性特性。createSteelMaterial 宏出现在宏管理器中。如果我们删除当前的钢铁材料模型并运行宏,材料将被重新创建。同样,如果我们打开一个新的模型数据库并运行宏,就会创建材质。

级别 2:修改参数

准确地再现所做的事情的宏通常不是很有用,因为它们并不普遍适用。在前面的示例中,对于钢材料模型,如果我们还可以使用不同的名称、不同的杨氏模量和/或在不同的模型中创建材料,那就太好了。通过稍微修改脚本即可轻松完成此操作。我们首先看一下之前创建的版本,在 Abaqus PDE 中打开它(文件 --> Abaqus PDE)。在 Abaqus PDE 中,选择文件 --> 打开并打开 abaqusMacros.py。它位于主目录或工作目录中,具体取决于您选择保存宏的位置。在代码中,我们可以识别模型名称、材料名称和材料属性。这些都可以被赋予名称和值。通过为这些参数填写不同的值,使得宏的适用性更加广泛。保存修改后的版本并重新加载并通过宏管理器运行它以进行尝试。

Abaqus -Python 脚本开发有多难?的图4

图 4:宏的原始版本,以及最后一部分的替代版本,其中模型名称、材料名称、杨氏模量和泊松比可以轻松修改。

在对话框中请求输入

为了使事情变得更加用户友好,最好弹出一个对话框来要求这些输入。这可以与 getInputs 函数一起使用。图 5 给出了一个示例。

Abaqus -Python 脚本开发有多难?的图5

图5:使用getInputs获取请求输入的对话框

生成的对话框如图 6 所示。

Abaqus -Python 脚本开发有多难?的图6


图 6:使用 getInputs 创建的对话框。

第 3 级:循环参数

如果多次运行略有不同的模型版本,通常可以获得脚本编写的最大好处。这意味着不像我们之前那样修改一次参数,而是自动填充不同的值并每次重新运行模型。该参数可以与任何事物相关。它可以是材料属性、壳体厚度、摩擦系数……:Abaqus/CAE 中用值描述的任何内容。该脚本通常只有几行代码。我们将展示一个重新运行模型的示例,所有刚度从 150,000 MPa 到 250,000 MPa,增量为 25,000。

建脚本基础的最简单方法是将 CAE 中完成的操作记录在宏或 .rpy 文件中。在本例中,当刚度从 210,000 MPa 更改为 190,000 MPa、创建新作业并提交作业时,我们记录一个宏。使用的确切值或名称并不重要,重点是我们可以看到用于修改刚度并运行作业的命令。

创建脚本来重复此过程:

现在,abaqusMacros.py 中添加了一个新函数(图 7)。

Abaqus -Python 脚本开发有多难?的图7

图 7:修改材料属性、创建作业并运行作业时记录的函数。


现在,我们将文件保存为一个不同的名称,作为 python 脚本(.py 扩展名)。除了我们当前感兴趣的宏之外的所有宏都可以删除。请将导入语句保留在文件顶部。删除包含“def”的行以及其余行的缩进,因此代码不再位于函数内部。然后我们可以添加循环,一个 for 循环。在 python 中,语法如图 8 所示。如您所见,没有代码来表示 for 循环的结束;这是很清楚的,因为压痕停止了。因此,缩进在Python中非常重要。

Abaqus -Python 脚本开发有多难?的图8

图 8:运行模量从 150000 到 250000 且增量为 25000 的模型的代码。为作业定义一个名称会更优雅,就像上一节中为模型名称和材料名称所做的那样。显示此版本是因为它对原始代码的修改最少。

变量 i 取 150,000 到 250,001(不包括 250,001)范围内的所有变量,增量为 25,000。然后,该变量用于指定刚度(循环中的第一行)并定义作业名称。使用这种方法,所有作业都具有不同且合理的名称,并且数据不会被覆盖。在这种情况下,您通常需要等待第一个作业完成后再开始第二个作业。函数 waitForCompletion 执行此操作。因此,只需对宏进行一些修改,我们就可以运行多个模型,而无需用户进一步干扰。

第 4 级:更改位置

在更改参数之前的示例中,在 Abaqus 中用值表示的内容。我们可以使用相同的方法并修改载荷的位置,而不是材料的刚度。这给出了如图 9 所示的函数。

Abaqus -Python 脚本开发有多难?的图9

图 9:摘录自宏,用于更改使用默认设置施加载荷的表面。

该脚本使用 getSequenceFromMask 命令来指定施加载荷的面。这是非常有效的,但人类很难解释。

您可以选择 Abaqus 在重播文件中定义几何的方式:通过 COORDINATE、INDEX 或 COMPRESSEDINDEX(默认)。您可以通过输入以下内容将其设置为协调:

session.journalOptions.setValues(replayGeometry=COORDINATE)

在命令行界面中。[命令行界面与消息区域占用相同的空间,位于视口下方。默认情况下它是隐藏的,可以通过单击消息区域左侧的 >>> 图标来访问。]。

当 replayGeometry 设置为 COORDINATE 并采取与之前相同的步骤时,生成的宏如图 10 所示。

Abaqus -Python 脚本开发有多难?的图10

图 10:摘自宏,使用 replayGeometry=COORDINATE 更改施加载荷的表面

现在代码更容易理解和修改:如果要找到不同的面,我们可以填写该面上的点的 X-Y-和 Z-坐标。此点不应与其他面孔共享。

第 5 级:更改(导入的)几何图形

到目前为止,我们只更改了模型的一部分,并使用相对较短的脚本来实现这一目标。希望在不同的几何体上具有相同的模拟条件是很常见的。我们怎样才能做到这一点?

如果我们在 Abaqus/CAE 中手动执行此操作,那么如果导入了几何图形(通常是这种情况),我们需要重做模型设置,例如重新分配边界条件和载荷的截面和位置。

这意味着脚本会更长。在这个非常简单模型的示例中,当更改几何形状时,我已经有 58 行代码(不包括 import 语句),而前面的示例最多有 15 行代码。对于具有多个零件、接触条件等的更复杂的模型,这会更多。我们需要使用之前显示的技术(第 4 级)来定位相关位置并使脚本也适用于新的几何体。做到这一点有多困难或容易,取决于预期的几何形状的变化;稍后会详细介绍(第 6 级)。

创建这样的脚本可能非常耗时。在某些情况下,特别是当几何结构很简单时,例如在轴对称模型中,在 Abaqus 中绘制几何结构可能会更有效,这样,要改变的尺寸就是几何参数。如果修改这些,表面 ID 不会改变。应用于它们的载荷、边界条件或相互作用会自动更新。这在初始模型的设置过程中需要更多时间,但允许您使用级别 2(而不是级别 4)中提到的技术进行几何修改;这要容易得多。

第 6 级:使脚本普遍适用

创建脚本最具挑战性的方面通常是使其普遍适用。我们对脚本应应用的模型了解得越多,创建脚本就越容易。如果我们知道材料的名称和所使用的材料模型,那么更改一些参数就很简单了。如果我们不知道材料的类型——它可能是例如超弹性橡胶或塑料金属——那么脚本中就有更多选择。

特别是几何位置可能难以以普遍适用的方式指定。如果我们知道在指定位置有一张脸,就很容易编写脚本(如第 4 级所示)。如果我们需要的表面由未知数量的面组成,并且我们不知道确切的位置,那就更具挑战性。必须提供面的定义。这并不总是直接明显的,并且可以是诸如与具有最大 z 坐标的 xy 平面平行的面之类的东西。一旦推导出这个定义,就必须将其转换为代码,这本身就是一个挑战。

总结

开始使用 Python 脚本编写并不一定具有挑战性:难度取决于手头的问题。宏通常是脚本的良好起点。预期结果越接近宏,编写脚本就越容易。更改参数往往很简单,更改几何图形往往很困难,特别是如果脚本应该普遍适用并且对预期几何图形的了解有限。

                     

文章来源:ABAQUS仿真世界

(1条)
默认 最新
优秀,第一遍还没有完全看明白,等后续看着操作一下看看。
评论 点赞
点赞 7 评论 1 收藏 10
关注