如何使用 COMSOL Multiphysics® 中的状态变量特征

作者 Walter Frei

2020年 5月 20日

COMSOL Multiphysics® 软件 5.5 版本新增了一项可以跟踪模型的状态或历史的功能:状态变量 特征,它简化了对一个随时间变化的场的历史追踪。这些变量还可用来影响其他物理场,例如材料属性,因此可用于在模型中实现滞后性。今天这篇博文,让我们一起了解这个功能,看看如何使用它。

状态变量接口

模型开发器 中启用变量实用程序 选项时,就可以使用 状态变量 接口,如下面的屏幕截图所示。

A screenshot showing the Show More Options dialog box with the Variable Utilities option selected.
如何启用 变量实用程序 选项。

启用该选项后,我们将在 定义 功能区中看到 变量实用程序 按钮,右键单击模型树中的 组件>定义 分支时就会看到 变量实用程序 子菜单。添加这项功能后,我们就可以在任何级别的几何实体上定义变量,包括:

  • 边界

下面的屏幕截图显示了这项特征的设置。

A screenshot of the Settings window for the State Variables functionality in COMSOL Multiphysics.

状态变量设置。

这里需要查看的设置并不多,但是我们可以使用这个特征做很多事情。

我们从窗口底部的设置开始。状态变量可以在每个时间步(或参数步)之前或之后更新。如果需要复值,可以启用允许复值 选项。

接下来, 阶次 控制每个单元中上有多少个点的状态变量被保存。这个阶次与高斯点数据单元的阶次相对应。阶次为 0 意味着在每个单元上只定义了一个状态变量。默认阶次为 4,对应于大多数物理场使用的二次阶次所使用的高斯积分点,但如果使用不同的单元阶次,可以将此设置调整为单元阶次的两倍。

最后,状态组件 设置允许您定义多个状态变量、它们的初始条件以及它们应该如何更新。

接下来,让我们看一些有关如何使用这项特征的示例。

追踪最大场值

假设我们有一个瞬态模型,温度随时间波动。COMSOL 案例库中的硅晶片激光加热就是一个很好的示例。我们可以通过定义一个状态变量 MaxT 来追踪零件达到的最高温度,初始值为 0(或任何低于或等于初始温度场的值),并使用此变量通过更新表达式存储最高温度:

if(T>MaxT,T,MaxT)

无论何时何地,当温度场 T 大于 MaxT 时,此 if 语句的计算结果为真, MaxT
就采用此时的温度值。否则,MaxT 仍然等于其当前值。在这种情况下,我们希望在每一步之后更新变量。因此,正如温度场在空间和时间上发生变化一样,状态变量也会发生变化。

A screenshot showing how to define a state variable, MaxT, in the State Variable Settings window.
状态变量 MaxT 的定义

当绘制 MaxT 场时,这些状态变量不会追踪单位,而是数据,这些数据是存储在高斯点上的,是在整个单元上进行外推和内插得到的,因此这个场看起来可能与温度场略有不同,温度场是被存储在节点上并通过内插绘制。下图是我们的仿真结果。

Simulation results showing the peak temperature over an entire simulation, tracked via a state variable.
追踪在整个仿真时间跨度内达到的峰值温度的状态变量图。

使用状态变量影响物理场

接下来,让我们使用状态变量 特征来影响相同的激光加热模型。

假设晶片顶部有一层会强烈影响表面发射率的薄涂层。但当表面温度超过 200°C 时,薄涂层基本上会立即蒸发。

我们的激光加热模型已经定义了一个名为 emissivity全局参数,它是一个常数值 0.8,在模型中用于定义吸收热量和辐射热量。我们可以删除这个常量全局定义,而是在表面上定义一个同名的状态变量,初始值为 0.8,更新表达式为:

if(T>200[degC],0.2,emissivity)

这个 if 语句将触发状态变量的永久更改,变量 emissivity 在晶片表面上定义并通过热通量表面到环境辐射 功能使用。我们希望在每一步之前更新这个变量。

一个滞后模型示例

最后,我们以一个更复杂的滞后模型示例来结束这篇文章。

我们还是求解温度场,在之前的博客文章“具有滞后的相变材料的热建模”中我们讨论过这个主题,其中展示了可以通过使用两个不同的比热温度函数对热滞进行建模,这取决于材料是从固态转变为液态,还是从液态转变为固态。一旦材料变纯液态或纯固态,我们将需要切换用于定义材料属性的函数。

A schematic showing the phase change process of hysteresis.

为了执行这样的模型,我们需要引入一个切换状态变量来决定我们应该遵循下分支还是上分支。这种转换可以基于温度是升高于还是降低于两个标记的转变温度。因此,引入一个初始值为 1 的状态变量 SorL,(假设材料最初是固态)并更新表达式:

if((T>T_top),0,if(T<T_bot,1,SorL))

这个嵌套的 if 语句将在温度上升到上限阈值以上时将 SorL 值切换到 0,只有在温度下降到下限阈值以下时才将其切换回 1。然后,材料属性取决于 SorL 状态变量。例如,在这种情况下,热容可以通过 if 语句定义为:

if(SorL,SolidtoLiquid(T),LiquidToSolid(T))

其中,SolidtoLiquid(T) LiquidToSolid(T) 是与两个不同分支相关的两个不同的温度函数。

结束语

状态变量 特征使得我们的一些建模工作变得更加方便和更容易。鼓励您动手尝试一下,看看您还能想出哪些其他的应用。祝您建模快乐!

自己尝试

单击下面的按钮下载本博客文章中的两个示例。

获取 MPH 文件


评论 (0)

正在加载...
浏览 COMSOL 博客