FESTUNG — 3. 采用 HDG 方法求解对流问题
FESTUNG - 3. 采用 HDG 方法求解对流问题[1]
1. 控制方程
线性对流问题控制方程为
\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 公式导出面积分项,可得
\quad \forall \varphi_{h} \in V_{h}
\]
其中面积分中引入近似通量项 \(\hat{\mathbf{f}}\left(\lambda_{h}, c_{h}^{-}\right)\) 表达式为
\]
\(\lambda_h\) 为计算边界上引入对应的未知解。为了对 \(\lambda_h\) 进行求解,需要引入附加的边界积分方程
\quad
\forall \mu_{h} \in M_{h}.
\]
将计算域划分为 \(K\) 个互不重叠的三角形单元,在单元和边界上分别定义多项式空间
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\) 分别用单元和边界上多项式进行近似
\]
将上述近似公式代入积分方程中,可得
\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}^{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
\]
将离散方程简写为矩阵形式
\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{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 格式对其进行求解,其每分部表达式为
+ \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{ \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{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)}\) 表达式为
\]
此时,即可获得每步的 \(\mathbf{\Lambda}^{(i)}\) 与 \(\mathbf{C}^{(i)}\) 数值解。
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 方法求解对流问题的更多相关文章
- hql语句查询实体类采用list方法的返回结果集
在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类", ...
- C#实现字符串按多个字符采用Split方法分割
原文:C#实现字符串按多个字符采用Split方法分割 String字符串如何按多个字符采用Split方法进行分割呢?本文提供VS2005和VS2003的实现方法,VS2005可以用下面的方法: str ...
- C语言多种方法求解字符串编辑距离问题的代码
把做工程过程经常用的内容记录起来,如下内容段是关于C语言多种方法求解字符串编辑距离问题的内容. { if(xbeg > xend) { if(ybeg > yend) return 0; ...
- 百度「Web 前端研发部」面试过程和常见问题 可能会采用哪些方法来面试 STAR 面试法 喜欢什么样的面试者 喜欢问的问题
http://segmentfault.com/a/1190000002498800 在他们的github上看到的,收藏一下备用.看完觉得还有很多要努力的地方. FEX 的面试过程 我们一般会有 3 ...
- 三种初步简易的方法求解数值问题 of C++
1. “二分法解方程” 在二分法中,从区间[a,b]开始,用函数值f(a)与f(b)拥有相反的符号.如果f在这个区间连续,则f的图像至少在x=a,x=b之间穿越x轴一次,因此方程f(x)=0在[a,b ...
- 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)
首先需要明确的是,微信的API都是通过https调用实现的,分为post方法调用和get方法调用.不需要上传数据的采用get方法(例如获取AccessToken),而需要向微信服务器提交数据的采用po ...
- 使用三种方法求解前N个正整数的排列
本篇博文给大家介绍前N个正整数的排列求解的三种方式.第一种是暴力求解法:第二种则另外声明了一个长度为N的数组,并且将已经排列过的数字保存其中:第三种方式则采用了另外一种思路,即首先获取N个整数的升序排 ...
- Minimum_Window_Substring两种方法求解
题目描述: Given a string S and a string T, find the minimum window in S which will contain all the chara ...
- selenium采用xpath方法识别页面元素
有些HTML页面中的元素中属性较少,经常有找不到id.class.name等常用属性的时候,这个时候xpath.css就能很好的识别到我们的元素. Firefox和chrome浏览器中均有xpath. ...
随机推荐
- 跟着老猫一起来学GO,环境搭建
老猫的GO学习系列博客已经正式发车了,相信大家以前学习一门编程语言的时候也有经验,咱们一般都是从环境开始,在此呢,大家也跟着老猫从最开始的搭建环境开始. GO语言的安装 首先呢,我们开始需要下载GO语 ...
- Sequence Model-week1编程题2-Character level language model【RNN生成恐龙名 LSTM生成莎士比亚风格文字】
Character level language model - Dinosaurus land 为了构建字符级语言模型来生成新的名称,你的模型将学习不同的名字,并随机生成新的名字. 任务清单: 如何 ...
- 异常大讨论-抛出异常还是返回false
iteye精华帖之异常大讨论 原帖链接http://www.iteye.com/topic/2038 Robbin的观点 观点1:Exception实际上代表了一个UseCase中的异常流的处理. 绝 ...
- 灵光一闪!帮你使用Vue,搞定无法解决的“动态挂载”
在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载. 今天我们将带大家从实际项目出发, ...
- Noip模拟40 2021.8.15
T1 送花 按照题解意思说是扫描线题,但我觉得像一个线段树优化$dp$ 主要思想一样,就是暴力枚举右端点,同时维护左端点的最值, 考虑两种情况, 如果左端点在$r$扫到的数$i$上一次出现的位置之前, ...
- Shell脚本学习笔记之(自动填充函数模板)
其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...
- 洛谷 P5785 [SDOI2012] 任务安排
链接: P5785 弱化版:P2365 题意: 有 \(n\) 个任务待完成,每个任务有一个完成时间 \(t_i\) 和费用系数 \(f_i\),相邻的任务可以被分成一批.从零时刻开始这些任务会被机器 ...
- cm3 逆向分析
目录 cm3 逆向分析 前言 逆向分析 cm3 逆向分析 前言 这道题没加壳,也没加密算法,主要看代码逻辑. 逆向分析 代码很短,一共这么几句. 看提示知道只让我们输入w.s.a.d这几个字符,并且用 ...
- Linux 文本三剑客之 grep
Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...
- PTA 树的同构 (25分)
PTA 树的同构 (25分) 输入格式: 输入给出2棵二叉树树的信息.对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号):随后N行,第i行对应编号第 ...