在 COMSOL Multiphysics 中执行弱形式

作者 Chien Liu

2015年 1月 6日

这篇博客是弱形式系列博客的组成部分,旨在帮助用户在最小的先决条件下理解弱形式。在第一篇博客中,我们学习了弱形式的基本概念。所有方程停留在解析形式。今天我们将使用 COMSOL Multiphysics 仿真软件来从数值上求解上述方程。我们在此强烈建议您打开 COMSOL 软件,随我们一起操作。

重述基本思想

在之前的介绍中,我们研究了一个简单的无热源一维稳态传热示例,其中温度 T 是在 1\le x\le 5 的域内区间内定义的关于位置 x 的函数。

弱形式使用试函数 \tilde{T}(x) 作为被积函数的局部采样函数对解进行约束并求积分,从而将传热物理场的微分方程转化为积分方程。对弱形式分部积分以降低求导阶数,从而更利于数值计算。同时还提供了一种非常自然的方法来通过热通量指定边界条件。对于以温度表示的固定边界条件,弱形式还是利用试函数和自然边界条件,在方程组中构建对应的附加项。

最后,我们得到如下的示范方程:

(1)

\int_1^5 \partial_x T(x) \partial_x \tilde{T}(x) \,dx = -2 \tilde{T}_1 -\lambda_2 \tilde{T}_2 -\tilde{\lambda}_2 (T_2-9)

其中左侧的积分只涉及温度的一阶导数,右侧的第一项将左端 (x=1 ) 的向外通量定义为 2,右侧的另外两项共同指定了右端 (x=5 ) 处的温度为 9。

弱形式偏微分方程接口

在 COMSOL Multiphysics 中执行方程 (1),需在模型向导中创建一个一维模型,并选择弱解型偏微分方程(w) 接口(数学>偏微分方程接口)和 稳态 研究。因变量可设为 T,表示我们方程中的待求解变量。对于几何,通过一个从 1 到 5 的间隔建立,缺省”弱解型偏微分方程 1″节点下的弱表达式为: -test(Tx)*Tx+1[m^-2]*test(T),其中第一项对应方程 (1) 中的被积函数,第二项对应热源,我们的简单示例不包含这一项,所以需要从输入栏中移除。

新的弱表达式如下:-test(Tx)*Tx,其中 Tx 是 COMSOL Multiphysics 温度的一阶导数 \partial_x T(x) test(Tx) 是试函数的一阶导数 \partial_x \tilde{T}(x)。负号是因为 COMSOL 中约定输入框中的表达式在等号(如设定窗口的“方程”栏所示)右侧,而上述我们推导的方程(1)中的积分则在等号左侧。

COMSOL Multiphysics 的弱解型偏微分方程接口。

弱贡献特征

右击弱解型偏微分方程(w) 节点,利用弱形式项来定义方程 (1) 右侧的边界条件。我们可以看到内置了诸如狄氏边界条件等边界特征,为方便用户访问,它们都被收录在弹出菜单中。因为我们对自定义方程很感兴趣,因此将鼠标移至弹出菜单中的更多项,并在接下来的弹出菜单中点击弱贡献

弱贡献特征。

在”弱贡献1″节点设定窗口的边界选择栏,在域(x=1)的左端选择边界 1,在设定窗口的弱贡献栏输入弱表达式:-2*test(T)。此步骤定义了方程 (1) 右端的第一项,指定边界 x=1 处的向外通量为 2。

固定边界条件

对于 x=5 处的固定边界条件,即方程 (1) 右侧的后两项所定义的 T=9,我们在边界 2 处增加另一个”弱贡献”节点,并在其下建立一个助因变量 子节点。

输入 lambda2 作为子节点中场变量的名称,然后输入弱表达式作为方程 (1) 中的后两项: -lambda2*test(T)-test(lambda2)*(T-9)

固定边界条件。

离散

COMSOL 软件通过创建网格对域进行离散。右击网格 1 节点选择,然后右击边 1 并选择分布。然后将”单元数”设为 4 并点击 全部构建。我们有意将单元数控制在较小的值,以便之后能更详细地讨论离散。

如何创建网格。

弱解型偏微分方程(w) 节点设定窗口中的离散栏,将”单元阶次”设为线性(点击模型开发器下的显示按钮,在弹出菜单中选择离散化离散化栏):

在设定窗口选择线性单元

使用 COMSOL Multiphysics 计算解

现在我们可以点击计算来检查解是否合理。

解表示为域内的一条直线,这与稳态无热源的温度场分布一致。直线的斜率为 2,这和边界条件 x=1 处的向外通量为 2 一致。x=5 处的温度为 9,符合固定边界条件的指定。因为没有热源,流出域的总热通量在稳态时的和应为零。因此,x=5 处的向外通量应为 -2。

我们可以轻松通过对热通量变量 lambda2 进行点求值来验证该过程,如下图所示:

对解进行计算的结果。

一些读者可能会疑惑是否每次都需要求解助变量 lambda2,即我们所称的拉格朗日乘子,尤其是在建模者并不需要时,而且求解该变量必然还需要更多计算资源。我们将在后续的博客中介绍 COMSOL Multiphysics 提供的其他特征,允许用户决定是否需要求解拉格朗日乘子。

总结及下一篇博客

今天我们重温了弱形式的概念并在 COMSOL Multiphysics 中执行了一个弱形式方程示例 (1)。利用简单物理参数得出的数值解与预期一致。

在未来的博客中,我们会从”内部”观察类似方程 (1) 的弱形式是如何被离散和数值求解的。我们还将看到如何通过不同的方式对这一问题求解,以及如何为不同种类的问题设定不同的边界条件。

敬请期待!

博客分类


评论 (20)

正在加载...
峰 程
峰 程
2016-04-05

“T的试函数的一阶导数”与“T的一阶导数的试函数”是一样的吗?
(1)中的试函数的一阶导数作者用test(Tx)表示,但是这个看上去更像是“T的一阶导数的试函数”

Chien Liu
Chien Liu
2016-04-06

Dear 峰 程,

Yes the test function of a gradient is the same as the gradient of a test function. You can think of the test operator as a generalization of the variation operator in variational calculus.

Sincerely,

Chien

Yang Zhao
Yang Zhao
2016-11-29

刘老师,

您好。在选择weak form boundary PED 的时候,假设变量是u,为什么在weak expression里面输入ux,会显示unknown variable?

而选择weak form PED 的时候,假设变量是u,在weak expression可以使用ux?

Yuansheng Zheng
Yuansheng Zheng
2016-11-29

Yang, 您好!
感谢您的评论,模型相关的问题,请您联系我们的技术支持团队:
在线支持中心:https://www.comsol.com/support
Email: support@comsol.com
谢谢!

Yuansheng

丽娟 周
丽娟 周
2016-12-15

刘老师:
您好!
请问我在求解的时候提示lambda2为未定义变量,请问是怎么回事啊。
谢谢!

振海 刘
振海 刘
2021-04-15

尝试设置辅助因变量,把辅助因变量定义为lambda。

Yuansheng Zheng
Yuansheng Zheng
2016-12-15

丽娟, 您好!
感谢您的评论,模型相关的问题,请您联系我们的技术支持团队:
在线支持中心:https://www.comsol.com/support
Email: support@comsol.com
谢谢!

Yuansheng

王 刚
王 刚
2018-11-08

一般情况下,弱形式 PDE 用于求解域级别,边界弱形式 PDE 则用于边界级别。

在域级别,ux 等代表在 x 方向的梯度;
然而,在边界级别,通常需要使用切向矢量,因此常用的变量梯度形式为 uTx 等。

详情可以查阅 Reference Manual 中的相关章节:An Example of Lagrange Element Variables。

Zon K
Zon K
2021-10-20

您好
1.弱贡献的辅助因变量作用是什么?可以和因变量一样吗
2.在对额外维度使用弱贡献时,怎么输入额外维度的偏导?比方说变量c对一维坐标的偏导,我只能输入cx,但是x是基本几何的坐标,不是额外维度的,若我输入cx1,则提示我没有定义。

hao huang
hao huang
2021-10-21 COMSOL 员工

您好
1. 关于弱贡献和辅助因变量的理解,您可以参考博客:https://cn.comsol.com/blogs/nonstandard-constraints-and-the-power-of-weak-contributions/
2. 若想计算变量 c 对一维坐标的偏导,需要使用求导算子 d(c,x)。如果 c 为因变量,才可写为 cx 这种形式。

c d
c d
2022-04-21

您好,

我输入的弱形式含有(u·∇)算子,计算的时候报错(Expressions of the Nabla operator is not supported.),应该怎么解决呢?

Qihang Lin
Qihang Lin
2022-05-09 COMSOL 员工

不清楚您具体是如何设置该算子得到的这个报错信息。一般而言该项并未在PDE建模的算式左边部分有对应可以填入的位置,因此可以考虑将其拆分整理后挪至右边源项写入您的表达式中。

Ying Li
Ying Li
2022-05-18

请问我在进行热电模块中,注意到电流模块的弱形式中乘了有一个ec.d贡献因子的量((具体,ec.Jx*test(Vx)+ec.Jy*test(Vy)+ec.Jz*test(Vz))*ec.d),请问这个量具体作用时什么?调整ec.d的物理意义是什么,谢谢啦~

Kaixi Tang
Kaixi Tang
2022-06-01 COMSOL 员工

您好,ec.d 可以理解为二维模型中平面外的厚度,它会影响仿真中的总能量的计算。

Yonghao Wen
Yonghao Wen
2023-02-24

你好,我想知道comsol中是否可以计算行列式的值

Qihang Lin
Qihang Lin
2023-07-25 COMSOL 员工

行列式建议请拆开化简后再输入至软件中。

鑫 周
鑫 周
2023-08-24

请问最后的-2是通过什么操作显示出来的

Kaixi Tang
Kaixi Tang
2023-08-29 COMSOL 员工

您好,可以在该点上对变量“lambda2”做派生值计算得到。它对应的是,使得定义在该点的狄式边界得以精确满足的拉格朗日乘子的大小,即“通量”的大小。

若倩 林
若倩 林
2024-02-27

您好,请问弱贡献-2test(T)替换成狄拉克雷边界条件-2(或者2,2testT等),计算出结果不一样,并且前者lambda为-2,后者为-1.75。

若倩 林
若倩 林
2024-02-27

您好,请问弱贡献-2test(T)替换成狄拉克雷边界条件-2(或者2,2testT等),计算出结果不一样,并且前者lambda为-2,后者为-1.75

浏览 COMSOL 博客