2. COMSOL优化建模环境与参数体系
在COMSOL Multiphysics中做参数优化,第一步不是急着打开优化求解器,而是先把“参数”这件事理清楚。很多优化失败、扫描结果无法复用、模型改一个尺寸就报错,根源往往不在求解器,而在于参数体系混乱:全局参数和局部参数混用、扫描变量与优化变量重叠、模型开发器里到处是硬编码数字。本节围绕全局参数、局部参数、参数扫描、优化接口与模型开发器这五个对象,讲清它们各自管什么、如何连接,并给出一套可复用的参数化建模规范。
五个对象的分工与层级
COMSOL的参数体系可以理解为三层结构。最上层是全局参数(Global Parameters),定义在“全局定义”节点下,作用域覆盖整个模型,是几何尺寸、材料属性、物理场系数、边界条件的统一入口。中间层是局部参数,包括组件定义下的参数、几何序列中的局部变量、物理场节点内的局部参数,它们只在所属节点内生效,用于表达某个组件或某个物理场特有的量。最下层是参数扫描与优化接口,它们不定义参数本身,而是“消费”参数——扫描按列表或区间遍历参数取值,优化则按目标函数和约束自动调整参数取值。
模型开发器是承载这一切的容器。它按“全局定义→组件→几何→材料→物理场→网格→研究”的顺序组织节点,参数在树中的位置决定了它的作用域和可见性。理解这一点,就能理解为什么同一个参数名在全局和局部同时存在时,局部会覆盖全局。
全局参数与局部参数:作用域决定复用性
全局参数写在“全局定义→参数”节点中,语法为“名称 表达式 描述”,例如 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 等)。优化接口不定义参数,它只是反复调用模型、读取目标值、调整控制变量,直到收敛。
两者的关键区别:扫描是“穷举”,优化是“搜索”。扫描适合参数少、范围明确、需要看全局趋势;优化适合参数多、目标明确、需要快速逼近最优。工程上常先用扫描粗定位,再用优化精调。
可复用的参数化建模规范
把上述关系固化成规范,才能让模型在多次优化中稳定复用。以下是一份可直接参照的参数表模板,字段和取值均为教学示例:
| 参数名 | 表达式 | 单位/描述 | 作用域 | 是否优化变量 |
|---|---|---|---|---|
| L | 0.20 | 梁长 [m] | 全局 | 是 |
| w | 0.05 | 梁宽 [m] | 全局 | 是 |
| t | 0.008 | 梁厚 [m] | 全局 | 否 |
| k | 45 | 导热系数 [W/(m·K)] | 全局 | 否 |
| h_conv | 12 | 对流换热系数 [W/(m²·K)] | 局部(物理场) | 否 |
| r_fillet | 0.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”。整个过程,模型开发器中的节点树不变,变的只是全局参数的值——这就是参数化建模规范带来的复用能力。
掌握这五个对象的关系,本质上是在建立一种“参数先行”的建模习惯:先想清楚哪些量要变、哪些量固定、哪些量被谁消费,再动手建几何和物理场。这样建出的模型,才能在一次又一次的扫描与优化中稳定运行,而不是每次改参数都推倒重来。