2. CAE前处理模板自动套用
为什么“模板套用”不能靠复制粘贴
系列化产品的几何拓扑一致,但尺寸、位置和命名会变化。手工前处理时,工程师通常重复做三件事:按同一套规则划网格、赋同一组材料、加同一类边界条件。问题在于,几何一旦重建,面/边/体的编号和坐标都会变,直接复制旧模型的网格与边界会错位。因此自动化套用的核心不是“复制”,而是用稳定的选择规则重新定位几何对象,再把模板参数重新绑定上去。
模板套用的对象映射关系
把模板拆成三类可复用资产:网格控制模板、材料属性模板、边界条件模板。每类模板都需要一个“锚点”来定位到新几何上。常用锚点包括:命名面(Named Selection)、几何特征(圆柱面、平面、边)、坐标范围、以及拓扑邻接关系。下图给出模板资产与新几何之间的映射链路,以及套用失败时的回退判断。
模板套用的关键实现步骤
以下以 Python 驱动 CAE 前处理为例,展示模板套用的核心逻辑。假设几何已通过命名面(Named Selection)保留了锚点信息,模板以 JSON 格式存储。
import json
# 模板定义:锚点名称 → 模板参数
TEMPLATE = {
"mesh": {
"global_size": 2.0,
"local_refine": {"MountFace": 0.5, "LoadFace": 0.8},
"boundary_layer": {"EdgeSym": {"layers": 3, "growth": 1.2}}
},
"material": {
"Body": {"name": "Steel_AISI_1045", "E": 205000, "nu": 0.29, "rho": 7.85e-9}
},
"boundary": {
"MountFace": {"type": "fixed"},
"LoadFace": {"type": "force", "magnitude": 1500, "direction": [0, -1, 0]}
}
}
def apply_template(geo, template):
"""将模板套用到新几何上,返回映射日志"""
log = []
# 1. 网格控制
mesh = template["mesh"]
geo.set_global_mesh_size(mesh["global_size"])
for face_name, size in mesh["local_refine"].items():
face = geo.get_named_face(face_name)
if face is None:
log.append(f"[WARN] 网格锚点缺失: {face_name}")
continue
geo.set_local_mesh_size(face, size)
log.append(f"[OK] 网格加密: {face_name} -> {size}")
# 2. 材料赋值
for body_name, mat in template["material"].items():
body = geo.get_named_body(body_name)
if body is None:
log.append(f"[WARN] 材料锚点缺失: {body_name}")
continue
geo.assign_material(body, mat)
log.append(f"[OK] 材料赋值: {body_name} -> {mat['name']}")
# 3. 边界条件
for face_name, bc in template["boundary"].items():
face = geo.get_named_face(face_name)
if face is None:
log.append(f"[WARN] 边界锚点缺失: {face_name}")
continue
geo.add_boundary_condition(face, bc)
log.append(f"[OK] 边界条件: {face_name} -> {bc['type']}")
return log
# 执行套用
# geo = load_geometry("variant_003.step")
# log = apply_template(geo, TEMPLATE)
# for line in log:
# print(line)
锚点稳定性建议:优先使用命名面而非几何 ID。命名面在几何重建后若拓扑一致,名称通常能保留;若名称丢失,可退化为“按坐标范围 + 面类型”匹配,但需在日志中标记为降级匹配,便于后续人工复核。
套用结果验证
套用完成后,不能只看脚本是否跑通,还要验证三件事:网格是否覆盖全部体、材料是否赋到正确体、边界条件是否落在正确面上。建议输出一份映射日志,逐条记录“锚点名称 → 匹配结果 → 参数值”。若某条记录为 WARN,则该模型需人工介入。
| 检查项 | 通过条件 | 异常处理 |
|---|---|---|
| 网格锚点匹配数 | 等于模板中定义的局部加密面数量 | 缺失面记录到日志,不中断整体流程 |
| 材料赋值体数 | 等于模板中定义的体数量 | 未匹配体保持默认材料,标记待确认 |
| 边界条件面数 | 等于模板中定义的边界面数量 | 缺失面跳过,输出异常清单 |
| 网格质量 | 雅可比 > 0.3,无负体积 | 触发局部重划或调整全局尺寸 |
常见坑:几何重建后,如果命名面在 CAD 端未同步更新,CAE 端会直接找不到锚点。建议在几何重建脚本中同步维护命名面,或在套用前先执行一次“命名面完整性检查”,确认所有锚点存在后再进入模板套用。