【发布时间】:2019-12-02 18:01:12
【问题描述】:
提出这个问题的全部目的源于尝试在 Abaqus/CAE 中对线性约束方程 (http://abaqus.software.polimi.it/v6.14/books/usb/default.htm?startat=pt08ch35s02aus129.html#usb-cni-pequation) 的创建进行多处理,以将周期性边界条件应用于网格模型。由于我的模型有超过一百万个元素,并且我需要对 1000 个此类模型执行蒙特卡罗模拟,因此我想并行化由于与 Abaqus 相关的许可和多线程限制而尚未找到解决方案的过程/CAE。这里有一些讨论:Python multiprocessing from Abaqus/CAE
我目前正在尝试使用创建的节点集在 Abaqus 之外执行方程定义,因为我知道输入文件的方程语法。
** Constraint: <name>
*Equation
<dof>
<set1>, <dof>, <coefficient1>.
<set2>, <dof>, <coefficient2>.
<set3>, <dof>, <coefficient3>.
e.g.
** Constraint: Corner_c1_Constraint-1-pair1
*Equation
3
All-1.c1_Node-1, 1, 1.
All-1.c5_Node-1, 1, -1.
RefPoint-3.SetRefPoint3, 1, -1.
除了直接将这些行写入 .inp 文件之外,我还可以将这些命令编写为单独的文件,并将其链接到模型的 .inp 文件中使用
*EQUATION, INPUT=file_name
我正在寻找 Abaqus Python 命令来将上述关键字写入 .inp 文件,而不是自己指定方程式约束。 上面链接的用户指南指示通过 GUI 指定这一点,但我在我的 Abaqus CAE 2018 版本中无法做到这一点。
Abaqus/CAE 用法:
交互模块:创建约束:方程:鼠标悬停在数据表上的同时点击鼠标键3,选择Read from File。
所以我正在从脚本参考手册中寻找一个命令来代替它。有一些命令可以解析输入文件 (http://abaqus.software.polimi.it/v6.14/books/ker/pt01ch24.html),但不能直接写入输入文件而不是通过脚本执行它。我知道我可以将它硬编码到输入文件中,但是我想要执行的模拟数量庞大,可以调用所有可能的自动化。我已经尝试使用适当的算法和 numpy 数组来优化代码,但是对于一个模型,预处理本身需要数小时。
附言这是我关于 SO 的第一篇文章 - 所以我不确定这个问题是否以适当的格式表达。希望对实际问题的任何答案或对在 Abaqus/CAE 中并行化预处理步骤的预期结果的任何其他解决方案。
【问题讨论】:
-
我在下面的回答将允许您将关键字写入作业输入文件。我一直在工作中做类似的事情。问:您的流程的哪一部分是您想要并行执行的瓶颈?确定方程的节点,还是运行分析?
-
感谢@MattP。那行得通。我的瓶颈是:(1)根据坐标对长方体模型相对面上的节点进行排序,(2)为每个匹配节点集创建约束方程以应用周期性边界条件。我目前正在使用本机 sorted() 函数,我想我可以通过桶排序实现进一步加快它。虽然还没有尝试过。至于创建约束方程,它是通过循环遍历节点集数组来串行完成的,我试图通过并行化过程在 CAE 之外自己编写方程。
-
太棒了!你介意标记/接受答案吗?
-
完成。您是否设法为您在另一篇文章 (stackoverflow.com/questions/44146116/…) 中尝试的多处理追求找到了解决方案?只是好奇!
-
(谢谢!)我选择以增加存储空间和组织良好的数据结构为代价优化串行代码的速度。之后的计算速度非常快。我得出的结论是,并行化可能是可能的,但并非没有在 Abaqus Python 内核之外执行操作。最后,我得到了一个我很满意的纯 Python 串行实现。
标签: python python-2.7 multiprocessing abaqus