2. COMSOL优化建模环境与参数体系

在COMSOL Multiphysics中做参数优化,第一步不是急着打开优化求解器,而是先把“参数”这件事理清楚。很多优化失败、扫描结果无法复用、模型改一个尺寸就报错,根源往往不在求解器,而在于参数体系混乱:全局参数和局部参数混用、扫描变量与优化变量重叠、模型开发器里到处是硬编码数字。本节围绕全局参数、局部参数、参数扫描、优化接口与模型开发器这五个对象,讲清它们各自管什么、如何连接,并给出一套可复用的参数化建模规范。

五个对象的分工与层级

COMSOL的参数体系可以理解为三层结构。最上层是全局参数(Global Parameters),定义在“全局定义”节点下,作用域覆盖整个模型,是几何尺寸、材料属性、物理场系数、边界条件的统一入口。中间层是局部参数,包括组件定义下的参数、几何序列中的局部变量、物理场节点内的局部参数,它们只在所属节点内生效,用于表达某个组件或某个物理场特有的量。最下层是参数扫描与优化接口,它们不定义参数本身,而是“消费”参数——扫描按列表或区间遍历参数取值,优化则按目标函数和约束自动调整参数取值。

模型开发器是承载这一切的容器。它按“全局定义→组件→几何→材料→物理场→网格→研究”的顺序组织节点,参数在树中的位置决定了它的作用域和可见性。理解这一点,就能理解为什么同一个参数名在全局和局部同时存在时,局部会覆盖全局。

COMSOL 参数体系与模型开发器层级关系 模型开发器(Model Builder) 全局定义层 全局参数 L=0.2, w=0.05, k=45 全局变量 / 函数 插值、阶跃、解析函数 材料库 / 默认材料 属性可被参数覆盖 组件层(Component) 几何序列 参数化尺寸 局部参数 / 变量 物理场接口 局部参数 边界条件系数 网格序列 尺寸参数 细化区域 研究 / 求解器 稳态 / 瞬态 参数化扫描 参数消费层 参数扫描 列表 / 区间 / 辅助扫描 遍历参数取值 优化接口 目标函数 / 约束 控制变量 / 梯度 结果与导出 目标值 / 参数表 最优解回填 最优解回填全局参数

全局参数与局部参数:作用域决定复用性

全局参数写在“全局定义→参数”节点中,语法为“名称 表达式 描述”,例如 L 0.2 "梁长[m]"、w 0.05 "梁宽[m]"、k 45 "导热系数[W/(m·K)]"。它的价值在于:几何、材料、物理场、网格、研究都可以直接引用同一个名字,改一处全模型联动。凡是需要被优化或扫描的量,必须放在全局参数里,因为优化接口和参数扫描只能识别全局参数。

局部参数则用于表达“只属于某个节点”的量。例如几何序列中某个圆角半径 r_fillet,只在几何节点内使用;物理场中某个对流换热系数 h_conv,只在该边界条件内使用。局部参数的好处是避免全局命名污染,坏处是无法被优化接口直接引用。因此规范做法是:凡是可能成为优化变量或扫描变量的量,一律提升为全局参数;纯几何构造用的中间量、只在单个节点内使用的系数,才留在局部。

判断标准很简单:问自己“这个量会不会在优化或扫描中被改变?”会,就放全局;不会,且只在一个节点内用,就放局部。两者都不要硬编码数字。

参数扫描与优化接口:消费参数的两条路径

参数扫描在“研究→参数化扫描”中配置,适合“已知参数范围、想看响应趋势”的场景。例如研究梁长 L 从 0.15 m 到 0.25 m、步长 0.01 m 时,最大挠度的变化。扫描会依次求解每个取值,结果以参数化数据集形式保存,可以画出一维曲线。扫描的输入是参数列表或区间,输出是每个参数点对应的解。

优化接口则在“研究→优化”中添加,适合“给定目标、让求解器自动找最优参数”的场景。以“优化→参数估计”或“优化→通用优化”为例,需要设置:控制变量(从全局参数中选,如 L、w)、目标函数(如最小化最大挠度 comp1.wmax)、约束(如 L >= 0.15、w <= 0.08)、求解器(SNOPT、MMA、IPOPT 等)。优化接口不定义参数,它只是反复调用模型、读取目标值、调整控制变量,直到收敛。

两者的关键区别:扫描是“穷举”,优化是“搜索”。扫描适合参数少、范围明确、需要看全局趋势;优化适合参数多、目标明确、需要快速逼近最优。工程上常先用扫描粗定位,再用优化精调。

可复用的参数化建模规范

把上述关系固化成规范,才能让模型在多次优化中稳定复用。以下是一份可直接参照的参数表模板,字段和取值均为教学示例:

参数名表达式单位/描述作用域是否优化变量
L0.20梁长 [m]全局是
w0.05梁宽 [m]全局是
t0.008梁厚 [m]全局否
k45导热系数 [W/(m·K)]全局否
h_conv12对流换热系数 [W/(m²·K)]局部(物理场)否
r_fillet0.003圆角半径 [m]局部(几何)否

配套的操作要点:第一,所有几何尺寸用参数名表达,禁止在几何序列中直接输入数字;第二,材料属性优先引用全局参数,材料库中的默认值只作为兜底;第三,物理场系数若需参与优化,必须提升为全局参数;第四,参数扫描和优化接口中引用的变量名必须与全局参数完全一致,大小写敏感;第五,每次优化完成后,把最优解回填到全局参数并另存模型版本,形成“参数快照”,便于复现和对比。

常见错误:在优化接口中直接填写数字作为控制变量初值,而不是引用全局参数名。这样优化结果无法回填,也无法在参数扫描中复用。正确做法是控制变量栏填写参数名,初值由全局参数提供。

从建模到优化的完整链路

以一个散热器翅片优化为例:全局参数定义翅片高度 H=0.03、间距 p=0.006、厚度 t=0.0015;几何序列用这些参数生成阵列;物理场设置对流换热系数 h_conv=15(局部);研究先做参数扫描,令 H 从 0.02 到 0.04、p 从 0.004 到 0.008,观察热阻变化;再用优化接口,以最小化热阻为目标,约束 H<=0.04、p>=0.004,控制变量为 H 和 p。优化收敛后,把最优的 H、p 写回全局参数,保存为“散热器_最优_v2.mph”。整个过程,模型开发器中的节点树不变,变的只是全局参数的值——这就是参数化建模规范带来的复用能力。

掌握这五个对象的关系,本质上是在建立一种“参数先行”的建模习惯:先想清楚哪些量要变、哪些量固定、哪些量被谁消费,再动手建几何和物理场。这样建出的模型,才能在一次又一次的扫描与优化中稳定运行,而不是每次改参数都推倒重来。