3. CAE软件二次开发接口与脚本封装
CAE自动化平台能否真正落地,很大程度上取决于能否稳定地“驱动”底层求解器。Abaqus、ANSYS、Nastran 这些主流软件都提供了二次开发接口,但它们的语言、调用方式和数据组织方式差异很大。本节的目标不是逐一罗列 API,而是建立一套统一的封装思路:把不同求解器的接口差异收敛到平台内部,对外只暴露一致的参数输入与结果输出。
三类主流接口的定位差异
Abaqus 的核心脚本接口是 Python。它通过 abaqus cae noGUI=script.py 或 abaqus python 启动,脚本中可调用 mdb(模型数据库)、session(会话对象)和 odbAccess(结果数据库访问)。参数化建模通常直接操作 mdb.models['Model-1'] 下的 Part、Material、Assembly、Step 等对象;结果提取则通过 openOdb() 打开 odb 文件,读取 steps['Step-1'].frames[-1].fieldOutputs['S'] 这类字段输出。
ANSYS 传统界面以 APDL 为主,参数化能力体现在 *SET、*GET、数组与 *DO 循环上。APDL 脚本可直接在批处理模式下运行:ansys -b -i model.mac -o out.log。较新的 ANSYS 版本同时提供 PyMAPDL 与 PyAnsys 系列库,允许用 Python 调用 MAPDL 实例,但大量既有模型仍以 APDL 宏形式存在,封装时往往需要“Python 生成 APDL 再提交”的混合模式。
Nastran 本身是求解器,输入文件为 BDF/DAT 格式,二次开发更多体现为“卡片级参数化”:用脚本生成或修改 BDF 中的 GRID、CTRIA3、PSHELL、MAT1、SPC、LOAD 等卡片,再调用求解器执行,最后解析 F06/OP2 结果文件。因此 Nastran 的封装重点不在 API 调用,而在文本模板与结果解析。
参数化建模脚本的编写要点
参数化建模的关键是“把几何与工况中会变的量抽成参数”,而不是把整个建模过程录制成宏。以 Abaqus 为例,一个可复用的建模脚本通常接收一个参数字典,例如 {"L": 200.0, "H": 50.0, "t": 4.0, "E": 210000.0, "nu": 0.3, "load": 1200.0},脚本内部用这些变量驱动草图尺寸、材料属性、截面厚度和载荷幅值。这样同一份脚本可以覆盖一批尺寸组合,而不需要为每个方案单独维护模型。
APDL 侧同理,应把尺寸、网格密度、载荷步写成 *SET 参数,并在宏开头集中声明,避免参数散落在建模命令之间。Nastran 则建议维护一份带占位符的 BDF 模板,例如用 {{THICK}}、{{LOAD}} 标记需要替换的字段,由 Python 读取模板后渲染成实际输入文件。
求解脚本的提交与监控
求解阶段的核心是“可等待、可判断、可回收”。Abaqus 可用 subprocess.run(["abaqus", "job=Job-1", "input=model.inp", "cpus=4", "interactive"]) 同步等待;ANSYS 用 ansys -b -i model.mac -o out.log 批处理;Nastran 用 nastran model.bdf scr=yes。封装组件需要捕获返回码、扫描日志中的 ERROR/FATAL 关键字,并把“求解成功但结果异常”与“求解失败”区分开。
结果自动提取与归一化
结果提取最容易出现“每个求解器一套写法”的问题。Abaqus 从 odb 读取场输出,ANSYS 从 *.rst 或通过 *GET 提取,Nastran 解析 F06 中的应力/位移表。封装层应把三者统一成同一结构,例如:
{
"max_stress": 187.4, # MPa
"max_disp": 1.26, # mm
"safety_factor": 1.42,
"status": "ok",
"source": "Job-1.odb"
}
这样上层参数扫描、优化或报告模块只依赖这套字段,不需要关心底层是 Abaqus 还是 Nastran。单位、坐标系和提取位置必须在封装层显式声明,避免不同求解器默认约定不一致导致结果误读。
封装为可复用组件的实践建议
- 接口统一:所有求解器适配器实现同一组方法,如
build(params)、solve(params)、extract(params),平台按名称选择适配器。 - 参数校验前置:在调用求解器前检查参数范围与必填项,避免无效任务占用计算资源。
- 模板与脚本分离:把 BDF/APDL/Python 模板作为资源文件管理,代码只负责渲染与调用。
- 日志与产物归档:每次任务保留输入文件、求解日志和结果文件路径,便于复现与排障。
- 版本可追溯:记录求解器版本与脚本版本,避免因环境变化导致结果不可比。
把上述内容收敛到一个 SolverAdapter 抽象类中,Abaqus、ANSYS、Nastran 各自实现具体子类,平台侧只面向统一接口编程。这样新增求解器时只需增加一个适配器,而不需要改动参数扫描、结果入库和报告生成等上层逻辑,二次开发成果才真正具备工程可复用性。