1. Abaqus Python二次开发全景认知
Abaqus 的二次开发并不是“在 Abaqus 外面再写一个 Python 程序”这么简单。要真正把 Python 用起来,首先必须弄清楚一件事:Python 在 Abaqus 里究竟以什么身份存在、它能碰到哪些对象、这些对象又通过什么通道被操作。本章不急于写代码,而是先建立一张“全景地图”,让后续每一章的脚本都能在这张地图上找到自己的位置。
1.1 Abaqus 脚本接口体系:三层结构
Abaqus 的脚本接口(Abaqus Scripting Interface,ASI)本质上是把 Abaqus/CAE 的内核命令用 Python 重新封装了一层。它由三个层次构成:最底层是 Abaqus 内核命令,即 CAE 图形界面每一次点击背后真正执行的命令;中间层是 Python 解释器,Abaqus 内置了 Python 运行环境,无需额外安装;最上层是 用户脚本,也就是我们编写的 .py 文件。用户脚本通过 Python 调用内核命令,内核命令再驱动 CAE 的几何、网格、材料、载荷等模块。
需要特别区分的是 Abaqus/CAE 的 Python 与 Abaqus/Standard、Explicit 求解器输入文件。前者操作的是模型数据库(Model Database,MDB),后者是求解器读取的 .inp 文件。Python 脚本既可以建模,也可以通过 writeInput() 把模型导出为 .inp,再提交求解。理解这条“脚本 → 模型数据库 → 输入文件 → 求解器 → 结果数据库(ODB)”的链路,是后续所有开发工作的基础。
1.2 Python 在 Abaqus 中的角色定位
Python 在 Abaqus 中扮演三种角色,理解它们的差异能避免走弯路。
角色一:CAE 的“遥控器”。这是最常用的方式。在 CAE 界面中通过 File → Macro Manager 录制操作,Abaqus 会自动生成对应的 Python 代码。例如手动创建一个部件,录制结果大致如下:
from abaqus import *
from abaqusConstants import *
myModel = mdb.Model(name='Model-1')
s = myModel.ConstrainedSketch(name='Profile', sheetSize=200.0)
s.rectangle(point1=(0.0, 0.0), point2=(100.0, 50.0))
p = myModel.Part(name='Plate', dimensionality=TWO_D_PLANAR,
type=DEFORMABLE_BODY)
p.BaseShell(sketch=s)
这段代码创建了一个 100×50 的二维矩形板部件。注意 sheetSize=200.0 是草图板尺寸,必须大于几何尺寸,否则草图会被裁剪。这类脚本适合把重复建模动作固化下来。
角色二:参数化建模引擎。把尺寸、材料、载荷写成变量,用循环批量生成模型。例如把板厚从 5 mm 到 20 mm 分 4 档,每档生成一个模型并提交计算,这在优化设计中非常常见。
角色三:后处理自动化工具。通过 odbAccess 模块读取 ODB 结果,提取节点位移、单元应力、支反力等,写入 CSV 或直接绘图。例如提取某节点最大位移:
from odbAccess import openOdb
odb = openOdb('Job-1.odb')
step = odb.steps['Step-1']
frame = step.frames[-1]
u = frame.fieldOutputs['U']
node = odb.rootAssembly.instances['PART-1-1'].nodes[0]
print(u.getSubset(region=node).values[0].data)
这里 frames[-1] 表示取最后一帧,即分析结束时刻的结果;values[0].data 返回位移分量。实际使用时要注意 ODB 中实例名与装配体命名一致,否则会报 KeyError。
1.3 典型工程场景
二次开发在工程中主要解决四类问题:批量建模(如 50 组不同孔径的带孔板)、参数扫描(材料弹性模量按梯度变化)、结果自动提取(从 100 个 ODB 中汇总最大应力)、定制前后处理(自动生成云图、曲线、报告)。这些场景的共同点是:手工操作重复度高、参数之间存在规律、结果需要结构化输出。只要满足其中任意两条,就值得用 Python 替代手工。
1.4 学习路线图
建议按“先会用、再会改、最后会造”的节奏推进。第一阶段熟悉 CAE 录制脚本,能读懂并修改自动生成的代码;第二阶段掌握 mdb 对象树和 odbAccess 的常用方法,能独立完成参数化建模与结果提取;第三阶段学习 GUI 插件开发(RSG 对话框)与批处理调度,把脚本封装成团队可用的工具。每一阶段都应以一个真实小任务收尾,例如“用脚本生成 10 个不同厚度的板并输出最大位移表”,而不是只看语法。
abaqus 模块只能在 Abaqus 环境中导入,脱离 Abaqus 直接运行会失败。