3. CAE仿真流程与数据生成
AI模型能否在CAE设计空间探索中发挥作用,很大程度上不取决于算法本身,而取决于喂给它的数据集是否干净、一致、可追溯。本节围绕“为AI建模准备数据集”这一目标,把典型CAE仿真流程拆解为可批量执行、可管理、可校验的工程链路,重点讲清楚批量任务如何组织、输入输出数据如何管理、结果如何提取,以及质量检查该看哪些指标。
典型CAE仿真流程的四个阶段
无论是结构静力、模态、热分析还是流场计算,一次完整的CAE仿真通常都经历四个阶段:前处理(几何清理、网格划分、材料与边界条件定义)、求解(提交求解器计算)、后处理(提取位移、应力、频率、温度等结果)、结果判定(收敛性、守恒性、量级合理性检查)。对AI数据集而言,真正有价值的不只是最终结果,还包括每个样本对应的几何参数、网格规模、边界条件、求解设置等输入特征,它们共同构成“输入—输出”配对。
以某支架结构的多工况静力分析为例:设计变量为三个加强筋厚度 t1、t2、t3,取值范围 2~6 mm,步长 1 mm,共 5³=125 个样本;载荷工况为 500 N、1000 N、1500 N 三种,则总样本数为 375。每个样本需要记录几何参数、载荷、最大等效应力、最大位移、一阶固有频率等字段。这个规模用人工点选完成不现实,必须走批量仿真。
批量仿真任务的组织方式
批量仿真的核心是把“一个模型 + 一组参数”变成“一批任务 + 统一调度”。常见做法有三种:参数化脚本驱动(用Python调用ANSYS APDL、Abaqus Python API或COMSOL LiveLink,循环修改参数并提交)、模板+批处理文件(固定求解器输入文件模板,用脚本替换参数行后批量调用求解器)、任务队列调度(把每个样本封装为独立作业,交给PBS、Slurm或本地多进程池执行)。
下面是一个参数化批量提交的简化示例,用Python生成任务清单并调用求解器:
import itertools, subprocess, os
t_values = [2, 3, 4, 5, 6]
loads = [500, 1000, 1500]
tasks = list(itertools.product(t_values, t_values, t_values, loads))
for i, (t1, t2, t3, F) in enumerate(tasks):
case_id = f"case_{i:04d}"
workdir = f"./runs/{case_id}"
os.makedirs(workdir, exist_ok=True)
# 生成求解器输入文件(模板替换)
with open("template.inp") as f:
content = f.read()
content = content.replace("{{T1}}", str(t1))
content = content.replace("{{T2}}", str(t2))
content = content.replace("{{T3}}", str(t3))
content = content.replace("{{LOAD}}", str(F))
with open(f"{workdir}/model.inp", "w") as f:
f.write(content)
# 提交求解(示例为Abaqus命令)
subprocess.run(["abaqus", "job=model", "input=model.inp"],
cwd=workdir, check=True)
这段代码的关键点在于:每个样本有独立工作目录,避免文件互相覆盖;参数替换基于模板,保证边界条件、网格设置完全一致,只有设计变量变化;任务编号 case_0000 到 case_0374 与参数组合一一对应,便于后续追溯。实际工程中还应加入失败重试、超时控制和日志记录,避免单个样本崩溃导致整批中断。
输入输出数据管理
批量仿真会产生大量文件,如果不加管理,很快就会出现“找不到哪个结果对应哪组参数”的问题。推荐采用“一样本一目录 + 统一索引表”的结构:每个样本目录下存放输入文件(model.inp)、求解日志(model.log)、结果文件(model.odb 或 model.dat)、提取后的结果(result.json);根目录维护一张 index.csv,记录 case_id、t1、t2、t3、F、状态、最大应力、最大位移、频率、完成时间等字段。
索引表是数据集的核心资产。它把分散的文件变成结构化表格,AI建模时直接读取 index.csv 即可获得特征与标签。字段命名要统一,单位要明确(如应力用MPa、位移用mm、频率用Hz),缺失值用空或NaN标记,不要用0代替,否则会污染训练数据。
仿真结果提取与质量检查
结果提取不能只看云图,要落到具体数值。对结构分析,通常提取最大等效应力、最大位移、指定节点应力、一阶固有频率;对热分析,提取最高温度、温度梯度;对流场,提取压降、最大流速、流量。提取方式可以用求解器自带的后处理脚本(如Abaqus Python脚本读取ODB),也可以用命令行工具导出文本后解析。
质量检查是数据集能否用于AI建模的分水岭。建议至少检查以下五项:
- 求解收敛性:日志中是否出现“converged”或收敛残差是否低于阈值;不收敛的样本必须剔除或标记。
- 物理合理性:应力、位移、温度是否在合理量级;例如支架最大应力若出现 10⁶ MPa,说明单位或约束有误。
- 守恒性:静力分析中反力之和是否与外力平衡;热分析中能量是否守恒。
- 参数覆盖完整性:检查 index.csv 中每个设计变量组合是否都有对应样本,避免漏算。
- 重复性与一致性:同一参数重复提交两次,结果差异应在数值误差范围内;若差异过大,说明求解设置不稳定。
从仿真数据到AI数据集
经过上述流程,最终得到的是一个结构化的数据集:每一行是一个样本,列包括设计变量(t1、t2、t3、F)、几何/网格特征(可选)、仿真结果(最大应力、最大位移、频率)以及质量标记(是否收敛、是否通过检查)。这个数据集可以直接用于训练代理模型(如Kriging、神经网络)或分类模型(如判断是否满足强度要求)。
需要强调的是,AI建模对数据的要求与单次仿真不同:它要求样本之间同分布、同口径、同精度。因此批量仿真时必须锁定网格划分策略、求解器版本、收敛准则和单位制,任何一项变化都应在索引表中记录,否则模型学到的可能是“设置差异”而不是“设计规律”。
把上述链路走通之后,仿真数据就不再是散落在各个目录里的结果文件,而是一份可查询、可校验、可直接送入AI训练流程的结构化数据集。下一阶段的设计空间探索,无论是代理模型预测还是优化搜索,都建立在这份数据集的质量之上。