COMSOL Multiphysics 5.1 版本针对瞬态研究新增了之前的解功能。该功能支持使用缺省的隐式时间步长算法对前一个时间步长的物理量进行评估。我们将分析该功能的执行以及如何用它来满足各类仿真需求。
瞬态建模和时间步进
求解瞬态模型时,COMSOL 软件缺省将使用隐式时间步长算法及自适应时间步长。这样做的优势是可以无条件在多类问题中保持稳定,并使软件能针对指定的求解器容差选择最优的时间步长大小,降低解的计算成本。
目前有两类时间步长算法:向后差分公式 (BDF) 和广义 α 方法。这类算法会使用前几个时间步长(至多五个)的解来数值估算场的时间导数,同时预测下一时间步长的解。
但模型内这些之前的解并不能缺省访问。之前的解操作将之前时间步长的解变为模型中可用的场变量。之前的解操作可用于根据连续性方法求解瞬态及稳态问题。我们将分析如何在 COMSOL Multiphysics 的瞬态模型中执行和使用之前的解操作。
在 COMSOL Multiphysics 中执行之前的解操作
如要使用之前的解操作,需要先在模型树中增加其他两项特征。您必须增加常微分和微分代数方程接口来存储您感兴趣的场,同时还要在瞬态求解器下增加之前的解特征。我们将通过瞬态传热示例来查看它的执行:利用移动热载荷对晶元进行激光加热,并在旋转坐标系中求解。
由于我们希望观察整体模型在之前时间步长中的解,所以第一步是向模型增加域常微分和微分代数方程接口。如果我们只对某条边界、边、点或某些全局物理量的之前的解感兴趣,也可以使用边界、边、点,全局常微分和微分代数方程接口。
用于观测之前时间步长中解的域常微分和微分代数方程接口。
上图显示了域常微分和微分代数方程接口的相关设定。注意:因变量和源项的单位均设为温度。设定好单位是一个非常好的建模习惯。离散化设为 Lagrange 二次,这与固体传热接口中的离散化设定相匹配。通常,我们要确保选择恰当的离散方法。这里左侧场变量的名称缺省为 “u”,不过您可按照个人习惯重命名。
域常微分和微分代数方程接口求解的方程。
上图所示的方程存储了之前时间步长中的温度解。方程可以写为:
u-nojac(T)=0
由于我们不希望该方程对 Jacobian(系统矩阵)产生贡献,因此将需要nojac()
算子。最后,我们需要指定在之前的时间步长计算该方程。这可以在求解器配置中完成。
求解器配置下新增的之前的解特征。
上图显示了瞬态求解器下新增的之前的解特征。增加这一特征后,您只需简单选择适合在之前的时间步长中计算的场变量。使用分离式求解器而非全耦合求解器可以实现更快的求解速度,不过这并非必选项。
这就是全部要做的工作。您现在可以像往常一样求解模型,并能在之前的计算时间步长中计算温度。
更实用的示例:观测最高温度
当然,使用之前时间步长的解本身并没什么意义,但除了存储解之外我们还可以实现其他一些功能。例如,我们可以直接在域常微分和微分代数方程接口应用逻辑表达式。考虑方程:
u-nojac(if(T>u,T,u))
方程可以读作:“如果之前时间步长的温度大于 u,将 u 设为等于温度。否则,保持 u 值不变。”
也就是说,它会在模拟域内的每个点处存储之前时间步长达到的最高温度。您现在可以评估模型内任一点处的变量 T 和 u,以便得到温度随时间的变化及所达到的最高温度。要得到最高温度,您希望得到之前时间步长的最高温度和当前时间步长的温度,可以在模型中引入一个变量:
MaxTemp = max(T,u)
这将得到截止该时间点的最高温度,如下图所示。
某点温度随时间的变化。同时还绘制了变量 MaxTemp,显示那一刻达到的最高温度。
小结
我们这里显示了如何在瞬态模型中执行新增的之前的解功能。该功能的前三个操作步骤是:
- 选择合适的常微分和微分代数方程接口及离散化。
- 输入合适的方程。
- 在求解器配置中增加之前的解特征。
本篇博客通过该示例演示了如何计算最高温度,其实我们还可以借助这一功能实现更多操作,请继续关注!
评论 (2)
万璋 付
2017-05-12您好 请问这个功能可以实现某个变量关于时间步长的迭代吗
宇航 秦
2017-05-31付万璋,您好!
感谢您的评论。
模型相关的问题,请您联系我们的技术支持团队:
在线支持中心:www.denkrieger.com/support
Email:support@comsol.com
谢谢!