FESTUNG - 3. 采用 HDG 方法求解对流问题[1]

1. 控制方程

线性对流问题控制方程为

\[\begin{array}{ll}
\partial_t c + \nabla \cdot f = h, & \mathrm{in} \; J \times \Omega \\
c(x, 0) = c_0(x), & \mathrm{on} \; {0} \times \Omega \\
c(x, t) = c_D, & \mathrm{on} \; J \times \partial \Omega_{in}
\end{array}
\]

其中 \(f = [u^1, u^2]^\top c\) 为通量项。

2. 数值离散

2.1. 空间离散

采用间断有限元方法对控制方程进行离散,包括进行一次分部积分并采用 Green-Gauss 公式导出面积分项,可得

\[\int_{T_{k}} \partial_{t} c_{h} \varphi_{h} \mathrm{d} \mathbf{x}-\int_{T_{k}} \mathbf{f}\left(c_{h}\right) \cdot \nabla \varphi_{h} \mathrm{d} \mathbf{x}+\int_{\partial T_{k}} \hat{\mathbf{f}}\left(\lambda_{h}, c_{h}^{-}\right) \cdot \boldsymbol{v} \varphi_{h}^{-} \mathrm{d} s=\int_{T_{k}} h \varphi_{h} \mathrm{d} \mathbf{x},
\quad \forall \varphi_{h} \in V_{h}
\]

其中面积分中引入近似通量项 \(\hat{\mathbf{f}}\left(\lambda_{h}, c_{h}^{-}\right)\) 表达式为

\[\hat{\mathbf{f}}\left(\lambda_{h}, c_{h}^{-}\right) :=\mathbf{f}\left(\lambda_{h}\right)-\alpha\left(\lambda_{h}-c_{h}^{-}\right) \boldsymbol{v},
\]

\(\lambda_h\) 为计算边界上引入对应的未知解。为了对 \(\lambda_h\) 进行求解,需要引入附加的边界积分方程

\[\int_{E_{\overline{k}} \in \mathcal{E}_{\text { int }}} \alpha \mu_{h}\left(2 \lambda_{h}-c_{h}^{-}-c_{h}^{+}\right) \mathrm{d} s+\int_{E_{\overline{k}} \in \mathcal{E}_{\mathrm{bc}}} \mu_{h}\left(\lambda_{h}-c_{\partial \Omega}\left(c_{h}^{-}\right)\right) \mathrm{d} s=0,
\quad
\forall \mu_{h} \in M_{h}.
\]

将计算域划分为 \(K\) 个互不重叠的三角形单元,在单元和边界上分别定义多项式空间

\[V_{h} :=\left\{\varphi_{h} : \overline{\Omega} \rightarrow \mathbb{R} : \forall T \in \mathcal{T}_{h},\left.\varphi_{h}\right|_{T} \in \mathbb{P}_{p}(T)\right\}, \\
M_{h} :=\left\{\mu_{h} : \Gamma \rightarrow \mathbb{R} : \forall E \in \mathcal{E}_{h},\left.\mu_{h}\right|_{E} \in \mathbb{P}_{p}(E)\right\}.
\]

将 \(c_h\) 和 \(\lambda_h\) 分别用单元和边界上多项式进行近似

\[c_h = \sum_{j=1}^N c_{kj} \varphi_{kj}, \quad \lambda_h = \sum_{j=1}^{\hat{N}} \Lambda_{\hat{k} j} \mu_{\hat{k} j}.
\]

将上述近似公式代入积分方程中,可得

\[\begin{array}{r}
\underbrace{ \sum_{j=1}^{N} \int_{T_{k}} \varphi_{k i} \varphi_{k j} }_{\mathcal{M}_{\varphi}} \partial_{t} C_{k j} -
\underbrace{ \sum_{j=1}^{N} \sum_{m=1}^{2} \int_{T_{k}} u^{m}(t, \mathbf{x}) \partial_{x^{m}} \varphi_{k i} \varphi_{k j} }_{- \mathcal{G}^2 - \mathcal{G}^2} C_{k j} \\
+ \underbrace{ \sum_{j=1}^{\overline{N}} \int_{\partial T_{k} \backslash \partial \Omega} \varphi_{k i} (\mathbf{u}(t, \mathbf{x}) \cdot v) \mu_{\overline{k} j} }_{\mathcal{S}} \Lambda_{k j}
- \underbrace{ \alpha \sum_{j=1}^{\overline{N}} \int_{\partial T_{k} \backslash \partial \Omega} \varphi_{k i} \mu_{\overline{k} j} }_{\alpha \mathcal{R}_{\mu}} \Lambda_{k j} \\
+ \alpha \underbrace{ \sum_{j=1}^{N} \int_{\partial T_{k} \backslash \partial \Omega} \varphi_{k i} \varphi_{k j} }_{\alpha \mathcal{R}_{\varphi}} C_{k j} \\
+ \underbrace{ \int_{\partial T_{k} \wedge \partial \Omega} \varphi_{k i}(\mathbf{u}(t, \mathbf{x}) \cdot v)\left\{\begin{array}{cc}{\sum_{j=1}^{\overline{N}} \Lambda_{k j} \mu_{\overline{k} j}} & {\text { on } \partial \Omega_{\text { out }}} \\ {c_{\mathrm{D}}(t, \mathbf{x})} & {\text { on } \partial \Omega_{\text { in }}}\end{array}\right\} }_{\mathcal{S}_{out}, \mathcal{F}_{\varphi, in}}
= \underbrace{ \int_{T_{k}} h \varphi_{k i} \mathrm{dx} }_{\mathcal{H}}
\end{array}
\]

关于 \(\lambda_h\) 的控制方程为

\[\underbrace{ \alpha \sum_{j=1}^{\overline{N}} \int_{\partial T_{k} \backslash \partial \Omega} \mu_{\overline{k} j} \mu_{\overline{k} i} }_{\alpha \bar{ \mathcal{M} }_{\mu} } \Lambda_{k j}
- \underbrace{ \alpha \sum_{j=1}^{N} \int_{\partial T_{k} \backslash \partial \Omega} \mu_{\overline{k} i} \varphi_{k j} C_{k j} }_{- \alpha \mathcal{T} } \\
+ \underbrace{ \sum_{j=1}^{\overline{N}} \int_{\partial T_{k} \cap \partial \Omega} \mu_{\overline{k} j} \mu_{k i} }_{\tilde{\mathcal{M}}_{\mu}} \Lambda_{k j}
- \underbrace{ \int_{\partial T_{k} \cap \partial \Omega} \mu_{\overline{k} i}\left\{\begin{array}{cc}{\sum_{j=1}^{N} C_{k j} \varphi_{k j}} & {\text { on } \partial \Omega_{\text { out }}} \\ {c_{D}(t, \mathbf{x})} & {\text { on } \partial \Omega_{\text { in }}}\end{array}\right\} }_{- \mathcal{K}_{\mu, out}, \mathcal{K}_{\mu, in}} =0
\]

将离散方程简写为矩阵形式

\[\mathcal{M}_{\varphi} \partial_{t} \mathbf{C}+
\underbrace{ \left(-\mathcal{G}^{1}-\mathcal{G}^{2}+\alpha \mathcal{R}_{\varphi}\right) }_{\bar{\mathcal{L}}} \mathbf{C}+
\underbrace{ \left(\mathcal{S}+\mathcal{S}_{\mathrm{out}}-\alpha \mathcal{R}_{\mu}\right) }_{\bar{\mathcal{M}}} \mathbf{\Lambda}=
\underbrace{ \mathcal{H}-\mathcal{F}_{\varphi, \text { in }} }_{\mathcal{B}_{\varphi}} \\
\underbrace{ \left(-\alpha \mathcal{T}-\mathcal{K}_{\mu, \text { out }}\right) }_{\mathcal{N}} \mathbf{C} +
\underbrace{ \left(\alpha \bar{\mathcal{M}}_{\mu}+ \tilde{\mathcal{M}}_{\mu}\right) }_{\mathcal{P}} \mathbf{\Lambda}=
\underbrace{ -\mathcal{K}_{\mu, \text { in }} }_{\mathcal{B}_{\mu}}
\]

2.2. 时间离散

在获得关于时间的常微分方程,表达式为

\[\mathcal{M}_{\varphi} \partial_t \mathbf{C} =
\mathcal{B}_{\varphi} - \bar{\mathcal{L}} \mathbf{C} - \bar{\mathcal{M}} \mathbf{\Lambda} =
\mathcal{R}_{RK}(t, \mathbf{C}, \mathbf{\Lambda}) \\
0 = \mathcal{B}_{\mu} - \mathcal{N} \mathbf{C} - \mathcal{P} \mathbf{\Lambda}
\]

采用 DIRK 格式对其进行求解,其每分部表达式为

\[\mathcal{M}_{\varphi} \mathbf{C}^{(i)} = \mathcal{M}_{\varphi} \mathbf{C}^n
+ \Delta t \sum_{j=1}^i \alpha_{ij} \mathcal{R}_{RK} (t^{(j)}, \mathbf{C}^{(j)}, \mathbf{\Lambda}^{(j)}) \\
0 = \mathcal{B}_{\mu}^{(i)} - \mathcal{N} \mathbf{C}^{(i)} - \mathcal{P} \mathbf{\Lambda}^{(i)}
\]

将 \(\mathcal{R}_{RK}\) 表达式代入,并将包含 \(\mathbf{C}^{(i)}\) 和 \(\mathbf{\Lambda}^{(i)}\) 的项移到等号左侧,可得

\[\underbrace{ \left( \mathcal{M}_{\varphi} + \alpha_{ii} \Delta t \bar{\mathcal{L}} \right) }_{\mathcal{L}} \mathbf{C}^{(i)}
+ \underbrace{ \alpha_{ii} \Delta t \bar{\mathcal{M}}^{(i)} }_{\mathcal{M}} \mathbf{\Lambda}^{(i)}
= \underbrace{ \mathcal{M}_{\varphi} \mathbf{C}^n
+ \alpha_{ii} \Delta t \mathcal{B}_{\varphi}^{(i)} +
\Delta t \sum_{j=1}^{i-1} \alpha_{ij} \mathcal{R}_{RK} (t^{(j)}, \mathbf{C}^{(j)}, \mathbf{\Lambda}^{(j)}) }_{\mathcal{Q}} \\
\mathcal{N} \mathbf{C}^{(i)} + \mathcal{P} \mathbf{\Lambda}^{(i)} = \mathcal{B}_{\mu}^{(i)}
\]

\[\mathcal{L} \mathbf{C}^{(i)} + \mathcal{M} \mathbf{\Lambda}^{(i)} = \mathcal{Q} \\
\mathcal{N} \mathbf{C}^{(i)} + \mathcal{P} \mathbf{\Lambda}^{(i)} = \mathcal{B}_{\mu}^{(i)}
\]

为了求解此方程组,将第一个方程中 \(\mathbf{C}^{(i)} = \mathcal{L}^{-1} \left( \mathcal{Q} - \mathcal{M} \mathbf{\Lambda}^{(i)} \right)\) 代入,可得 \(\mathbf{\Lambda}^{(i)}\) 表达式为

\[\left( -\mathcal{N} \mathcal{L}^{-1} \mathcal{M} + \mathcal{P} \right) \mathbf{\Lambda}^{(i)} = \mathcal{B}_{\mu}^{(i)} - \mathcal{N} \mathcal{L}^{-1} \mathcal{Q}
\]

此时,即可获得每步的 \(\mathbf{\Lambda}^{(i)}\) 与 \(\mathbf{C}^{(i)}\) 数值解。


  1. Jaust A, Reuter B, Aizinger V, Schütz J, Knabner P. FESTUNG: A MATLAB / GNU Octave toolbox for the discontinuous Galerkin method. Part III: Hybridized discontinuous Galerkin (HDG) formulation. ArXiv:170904390 [Math] 2017.

FESTUNG — 3. 采用 HDG 方法求解对流问题的更多相关文章

  1. hql语句查询实体类采用list方法的返回结果集

    在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类", ...

  2. C#实现字符串按多个字符采用Split方法分割

    原文:C#实现字符串按多个字符采用Split方法分割 String字符串如何按多个字符采用Split方法进行分割呢?本文提供VS2005和VS2003的实现方法,VS2005可以用下面的方法: str ...

  3. C语言多种方法求解字符串编辑距离问题的代码

    把做工程过程经常用的内容记录起来,如下内容段是关于C语言多种方法求解字符串编辑距离问题的内容. { if(xbeg > xend) { if(ybeg > yend) return 0; ...

  4. 百度「Web 前端研发部」面试过程和常见问题 可能会采用哪些方法来面试 STAR 面试法 喜欢什么样的面试者 喜欢问的问题

    http://segmentfault.com/a/1190000002498800 在他们的github上看到的,收藏一下备用.看完觉得还有很多要努力的地方. FEX 的面试过程 我们一般会有 3 ...

  5. 三种初步简易的方法求解数值问题 of C++

    1. “二分法解方程” 在二分法中,从区间[a,b]开始,用函数值f(a)与f(b)拥有相反的符号.如果f在这个区间连续,则f的图像至少在x=a,x=b之间穿越x轴一次,因此方程f(x)=0在[a,b ...

  6. 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)

    首先需要明确的是,微信的API都是通过https调用实现的,分为post方法调用和get方法调用.不需要上传数据的采用get方法(例如获取AccessToken),而需要向微信服务器提交数据的采用po ...

  7. 使用三种方法求解前N个正整数的排列

    本篇博文给大家介绍前N个正整数的排列求解的三种方式.第一种是暴力求解法:第二种则另外声明了一个长度为N的数组,并且将已经排列过的数字保存其中:第三种方式则采用了另外一种思路,即首先获取N个整数的升序排 ...

  8. Minimum_Window_Substring两种方法求解

    题目描述: Given a string S and a string T, find the minimum window in S which will contain all the chara ...

  9. selenium采用xpath方法识别页面元素

    有些HTML页面中的元素中属性较少,经常有找不到id.class.name等常用属性的时候,这个时候xpath.css就能很好的识别到我们的元素. Firefox和chrome浏览器中均有xpath. ...

随机推荐

  1. 安装pytorch后import torch显示no module named 'torch'

    问题描述:在pycharm终端里通过pip指令安装pytorch,显示成功安装但是python程序和终端都无法使用pytorch,显示no module named 'torch'. 起因:电脑里有多 ...

  2. Sequence Model-week3编程题2-Trigger Word Detection

    1. Trigger Word Detection 我们的触发词将是 "Activate.".每当它听到你说 "Activate.",它就会发出 "c ...

  3. 注解,@Qualifier+@Autowired 和 @Resource

    摘要: 项目中,对于AOP的使用,就是通过用注解来注入的. 更改之前的注解,是使用:@Qualifier+@Autowired   但是,通过这样注解,在项目启动阶段,需要自动扫描的过程是非常缓慢的, ...

  4. [no code][scrum meeting] Beta 4

    例会时间:5月16日11:30,主持者:伦泽标 下次例会时间:5月18日11:30,主持者:叶开辉 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 完成整体框架设计与登录逻辑 与后端对接 ...

  5. OO_JAVA_表达式求导

    OO_JAVA_表达式求导_第一弹 ---------------------------------------------------表达式提取部分 词法分析 ​ 首先,每一个表达式内部都存在不可 ...

  6. Django(71)图片处理器django-imagekit

    介绍 ImageKit是用于处理图像的Django应用程序.如果需要从原图上生成一个长宽为50x50的图像,则需要ImageKit. ImageKit附带了一系列图像处理器,用于调整大小和裁剪等常见任 ...

  7. c++中virtual 虚函数

    转载: https://www.cnblogs.com/weiyouqing/p/7544988.html 在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念. ...

  8. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

  9. 服务集与AP的配合

    一.实验目的 1)掌握添加无线网络配置 2)掌握配置信道和协议使用并配置在一个天线上同时运行两个服务集,即两个无线网络 二.实验仪器设备及软件 仪器设备:一台AC,两台AP,一台AR,一台LSW 软件 ...

  10. Python里字符串Format时的一个易错“点”

    这是一篇很小的笔记,原因是我做学习通的时候见到了这个题: 当时看了一会儿发现没有符合自己想法的答案,然后就脑袋一热选了C,结果当然是错了... 看了一眼这个format的字符串对象,发现有个 {:7. ...