2. Abaqus Python脚本基础

在Abaqus中,Python脚本不是外挂工具,而是与CAE内核直接对话的接口。理解脚本如何生成、对象如何组织、API如何调用,是参数化建模与自动优化的起点。本节围绕脚本录制与回放、对象模型、会话对象、部件与装配体操作、常用API函数与调试方法展开,目标是让你能独立写出可运行、可修改、可复用的建模脚本。

一、脚本录制与回放:从操作到代码的映射

Abaqus/CAE提供宏录制功能,路径为 File → Macro Manager → Create。录制期间,所有GUI操作会被翻译为Python命令并写入 .py 文件。例如,创建一个名为 Plate 的矩形部件,录制结果大致如下:

from abaqus import *
from abaqusConstants import *
import sketch
import part

mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].rectangle(
    point1=(0.0, 0.0), point2=(100.0, 50.0))
mdb.models['Model-1'].Part(
    name='Plate', dimensionality=TWO_D_PLANAR, type=DEFORMABLE_BODY)
mdb.models['Model-1'].parts['Plate'].BaseShell(
    sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']

回放时,可通过 File → Run Script 选择该文件执行,也可在命令行中使用 abaqus cae script=macro.py 启动。录制脚本的价值在于提供“可运行的正确语法”,但直接录制得到的代码往往包含大量冗余的GUI状态设置,且尺寸、坐标、名称均为硬编码。因此,回放后的第一步通常是参数化改造:把 100.0、50.0 替换为变量,把 'Plate' 替换为可配置名称,删除不必要的视图刷新和选择操作。

录制脚本适合作为语法参考,不建议直接作为最终交付脚本。每次录制后应手动清理 session.viewports、session.graphicsOptions 等与建模逻辑无关的语句。

二、对象模型:mdb、session与odb的层级关系

Abaqus脚本的核心对象模型分为三层:mdb(模型数据库)、session(会话对象)和 odb(输出数据库)。mdb 保存模型、部件、材料、装配、分析步等持久化数据;session 管理视图、视口、颜色、显示状态等交互信息;odb 在分析完成后读取结果。三者关系可用下图表示:

Abaqus Python 对象模型与数据流 mdb(模型数据库) models['Model-1'] parts['Plate'] rootAssembly materials / sections steps / loads / bc 持久化:保存于 .cae / .inp session(会话对象) viewports['Viewport:1'] graphicsOptions xyData / xyPlots colors / displayGroups 临时性:关闭CAE即丢失 odb(输出数据库) steps['Step-1'] frames[-1] fieldOutputs['S'] historyOutputs['U1'] 只读:由Job写入 .odb 交互 Job提交

访问路径遵循“从根到叶”的原则:mdb.models['Model-1'].parts['Plate'] 表示模型库中某模型下的某部件;session.viewports['Viewport:1'] 表示当前视口;odb.steps['Step-1'].frames[-1].fieldOutputs['S'] 表示结果库中最后一帧的应力场。脚本中应避免使用 mdb.models.keys()[0] 这类依赖顺序的写法,而应显式指定名称,否则模型重建后极易出错。

三、部件与装配体操作

部件(Part)是几何与网格的载体,装配体(Assembly)是部件的实例化与定位。创建部件时,Part(name, dimensionality, type) 的三个参数必须明确:dimensionality 可取 THREE_D、TWO_D_PLANAR、AXISYMMETRIC;type 可取 DEFORMABLE_BODY 或 DISCRETE_RIGID_BODY。几何创建通常借助草图:先 ConstrainedSketch 绘制轮廓,再调用 BaseShell(壳/平面)或 BaseSolidExtrude(实体拉伸)。

装配体操作的核心是 Instance。以下代码将 Plate 实例化并平移:

a = mdb.models['Model-1'].rootAssembly
p = mdb.models['Model-1'].parts['Plate']
a.Instance(name='Plate-1', part=p, dependent=ON)
a.translate(instanceList=('Plate-1',), vector=(0.0, 0.0, 0.0))

若需旋转,使用 a.rotate(instanceList, axisPoint, axisDirection, angle),角度单位为度,遵循右手定则。多个实例可通过 a.instances.keys() 遍历。装配体中的集合(Set)和面(Surface)是后续加载与边界条件的直接对象,建议在脚本中显式创建并命名,例如 a.Set(name='FixEnd', edges=...),避免依赖GUI拾取。

四、常用API函数与调试方法

建模脚本中高频出现的API包括:mdb.models['Model-1'].Material() 定义材料,HomogeneousSolidSection() 定义截面,SectionAssignment() 赋予截面,StaticStep() 创建分析步,DisplacementBC() 与 Pressure() 施加边界条件和载荷,MeshControl() 与 seedPart() 控制网格。这些函数的参数较多,建议通过 help() 或CAE的 Command Line Interface 实时查询。

调试脚本时,最直接的方式是在CAE命令行中逐段粘贴执行,观察报错位置。常见错误包括:对象名称拼写错误、维度参数不匹配、集合为空导致 IndexError、以及 del 删除草图后仍被引用。对于复杂脚本,可在关键节点插入 print 输出对象类型与数量,例如:

print('Parts:', mdb.models['Model-1'].parts.keys())
print('Instances:', a.instances.keys())
print('Faces of Plate-1:', len(a.instances['Plate-1'].faces))

若脚本在批处理模式下运行,可使用 abaqus cae noGUI=script.py,此时 session 相关操作可能不可用,需确保脚本不依赖视图刷新。另一种调试手段是捕获异常并写入日志:

try:
    a.Instance(name='Plate-1', part=p, dependent=ON)
except Exception as e:
    with open('debug.log', 'a') as f:
        f.write('Instance failed: %s\n' % str(e))
在 noGUI 模式下,session.viewports 可能不存在,所有与显示、颜色、视口相关的语句都应删除或加条件判断,否则脚本会在无界面环境中中断。

掌握以上内容后,你已具备编写基础参数化建模脚本的能力。下一步是将尺寸、材料、载荷等变量抽取为函数参数,使同一脚本能批量生成不同模型,为后续自动优化循环做好准备。