4. CAE前处理参数化
前处理参数化是参数化仿真链条中最容易被低估、却最影响自动化成败的一环。几何参数化解决“形状怎么变”,而前处理参数化解决“模型怎么被离散、赋予属性、施加约束与载荷”。如果网格尺寸、材料常数、边界位置、载荷大小仍以硬编码方式写死在脚本或 GUI 操作记录里,那么几何一变,网格质量、约束位置、载荷作用面就可能全部失配,自动更新随之失效。本节围绕四类前处理参数——网格参数、材料参数、边界条件参数、载荷参数——说明它们如何被抽取为设计变量、如何与几何变量建立联动,以及如何保证模型随设计变量自动更新。
一、四类前处理参数的参数化对象与抽取方式
前处理参数化的本质,是把“数值”和“选择集”两类信息从模型中剥离出来,交给变量系统管理。数值类参数包括单元尺寸、材料弹性模量、泊松比、密度、集中力大小、压力值、转速等;选择集类参数包括施加约束的节点/面集合、施加载荷的边/面集合、接触对、螺栓预紧面等。前者容易参数化,后者才是难点——因为几何拓扑一旦改变,原先按面编号或节点编号记录的选择集可能指向错误对象。
因此,选择集参数化必须基于“几何特征”而非“编号”。常见做法是:在几何层用命名选择(Named Selection)按位置、法向、面积阈值或与坐标平面的关系定义集合,例如“所有 z=0 的底面”“半径大于 8 mm 的圆柱面”“与基准轴距离小于 15 mm 的节点”。这样即使几何尺寸变化,选择逻辑仍能重新求值,得到语义一致的新集合。下表给出四类参数的典型抽取方式与联动对象。
| 参数类别 | 典型参数 | 抽取/定义方式 | 联动对象 |
|---|---|---|---|
| 网格参数 | 全局单元尺寸、局部细化尺寸、层数、增长率 | 命名选择 + 尺寸控制对象 | 几何尺寸、曲率、圆角半径 |
| 材料参数 | E、ν、ρ、屈服强度、本构曲线 | 材料库引用 + 变量覆盖 | 设计变量、温度、工况 |
| 边界条件 | 固定面、对称面、远程位移、弹簧刚度 | 按几何特征命名选择 | 几何位置、装配关系 |
| 载荷参数 | 力、压力、力矩、转速、温度、加速度 | 变量表达式 + 作用面选择集 | 设计变量、时间/频率 |
二、网格参数化:尺寸控制与质量约束的平衡
网格参数化不是简单地把单元尺寸设成一个变量。若把全局尺寸从 2 mm 改为 1 mm,单元数约增至 8 倍,求解时间可能增加一个数量级;若几何同时变薄,还可能因尺寸过大导致厚度方向只有一层单元,弯曲刚度被严重高估。因此,网格参数化通常采用“全局尺寸 + 局部控制”的组合策略:全局尺寸随模型最小特征尺寸按比例缩放,局部在圆角、孔边、接触面附近设置细化,并约束厚度方向至少 2~3 层单元。
一个可复用的做法是把网格尺寸写成几何变量的函数,例如 global_size = min_feature / 6,其中 min_feature 由几何参数计算得到;圆角处细化尺寸取 fillet_r / 3,并设置增长率不超过 1.2,避免相邻单元尺寸突变。这样几何一变,网格密度自动跟随,既不会过疏也不会过密。参数化网格还需关注质量指标:雅可比、翘曲度、长宽比应设阈值,更新后自动检查,超限则触发重划或报警。
三、材料、边界与载荷的参数化联动
材料参数化相对直接:把材料库中的 E、ν、ρ 等映射为变量,或按工况切换材料卡片。需要注意的是,材料非线性参数(如塑性段)若以表格形式给出,应保证表格随变量整体缩放或整体替换,而不是只改一个点导致曲线畸变。边界条件参数化的关键是“约束语义不变”:固定端始终固定在几何的某个特征面上,而不是固定在某个面编号上。对于对称结构,可把对称面定义为“法向为 X 且位于 x=0 的面”,几何对称性保持时该定义始终有效。
载荷参数化则要区分“大小”和“位置”。力的大小可直接设为变量,位置则通过选择集绑定。例如悬臂梁自由端施加 500 N 向下集中力,可定义载荷面为“x 最大的端面”,力方向为全局 -Y,大小由变量 F 控制。若几何长度变化,端面位置自动移动,载荷仍作用在自由端。压力载荷、转速、重力加速度同理。对于多工况,可用工况表把载荷组合与设计变量关联,实现一次更新、多工况重算。
四、实现自动更新的关键机制
要让模型随设计变量自动更新,需要建立“变量—几何—前处理—求解—结果”的完整重算链。以常见的脚本化流程为例,更新过程大致如下:读取变量表,重建或更新几何,按几何特征重新求值命名选择,依据变量重设网格尺寸与局部控制,重新划分网格并检查质量,更新材料常数与载荷数值,提交求解,提取结果并写回变量表。若使用 Workbench 参数集或类似机制,这一链条可由参数管理器统一驱动,几何、网格、边界、载荷、结果各环节只需暴露参数接口。
# 示例:前处理参数更新伪代码(教学示例)
params = read_variable_table("design_vars.csv")
geom = update_geometry(L=params.L, t=params.t, r=params.r)
sel_fixed = named_selection("face_x_min") # 按几何特征重求值
sel_load = named_selection("face_x_max")
mesh.set_global_size(params.t / 3.0)
mesh.set_local_size(sel_fillet, params.r / 3.0)
mesh.set_growth_rate(1.2)
mesh.generate()
check_mesh_quality(jacobian_min=0.3, aspect_max=8.0)
material.assign(E=params.E, nu=params.nu, rho=params.rho)
bc.fix(sel_fixed)
load.force(sel_load, magnitude=params.F, direction=(0,-1,0))
solve()
results = extract(max_stress, max_deformation)
write_results(results, "results.csv")
这段流程中最容易出问题的是选择集重求值。若几何更新后某个面消失、分裂或合并,命名选择可能返回空集或错误集合,导致约束缺失、载荷悬空,求解器报奇异或结果异常。因此每次更新后应检查选择集的对象数量与总面积是否在合理范围,必要时给出警告。另一个常见问题是网格尺寸与几何最小特征失配:当 t 减小到 2 mm 而全局尺寸仍为 2 mm 时,厚度方向只剩一层单元,弯曲应力明显偏大。解决办法是把网格尺寸写成 t/3 这类与几何联动的表达式,并设置最小尺寸下限。
五、参数化设置的工程判断
并非所有前处理细节都值得参数化。圆角半径、孔径、板厚这类直接影响响应且经常调整的参数应优先参数化;而倒角、小孔、装饰性特征可简化或固定,避免网格与选择集频繁失效。边界条件与载荷的作用位置若随几何移动,必须用几何特征定义;若位置固定不变,则可用坐标定义。材料参数若来自标准库且不随设计变化,可只暴露一个材料名称变量,减少变量表冗余。
最终目标是形成一份可复用的前处理参数化模板:变量表清晰、选择集语义稳定、网格规则与几何联动、材料与载荷集中管理、更新后自动检查。这样,当设计变量变化时,仿真模型才能真正“自动更新”,而不是每次都需要人工修补网格、重选面、重加载荷。前处理参数化做扎实,后续的灵敏度分析、优化迭代和 DOE 才能稳定运行。