Hermite WENO 单元重构

本文主要介绍采用 Hermite WENO 重构方法作为斜率限制器应用于二维或高维单元中。

1.简介[1]

ENO格式最早由 Harten 等[2]提出,ENO格式避免在高梯度地区进行插值,其重构过程通过多个不同位置模板,并且选取其中最光滑模板上的解进行重构,由此保证在重构过程中具有较高的精度。然而这种方法会导致收敛问题并且在连续区域降低精度,随后Liu等[3]提出了 weighted ENO 格式。WENO 格式采用不同的权重系数组合各个模板,而非只采用一个判断光滑程度的系数。Qiu 和 Shu 首先将 WENO 格式作为一种斜率限制器应用于DG方法中[4],随后他们又根据 Hermite 多项式构造了一系列的 WENO 格式,称为 HWENO 格式并也将其作为限制器应用于 DG 方法中[5] [6]

2.Hermite WENO 重构

一个典型的 WENO 重构过程包括以下步骤:

  1. 确定一系列模板
  2. 重构模板上单元解
  3. 计算每个重构多项式振荡算子
  4. 使用振荡算子计算相应权重
  5. 根据权重系数构造重构多项式

以三角形单元为例,单元e在计算不同模板多项式 \(P_1\) 时需满足下列关系中一种:

  1. 单元e中原始解;
  2. \(\frac{1}{\Omega_e}\int_{\Omega_e} P_1 d\Omega = u_e\), \(\frac{1}{\Omega_j}\int_{\Omega_j} P_1 d\Omega = u_j\), \(\frac{1}{\Omega_k}\int_{\Omega_k} P_1 d\Omega = u_k\),其中 \((j,k) = (a,b; b,c; c,a)\);
  3. \(\frac{1}{\Omega_e}\int_{\Omega_e} P_1 d\Omega = u_e\),\(\frac{1}{\Omega_k}\int_{\Omega_e} \frac{\partial P_1}{\partial x_i} d\Omega = \frac{\partial P_1}{\partial x_i}|_ k\),其中 \((k=a,b,c)\);

根据以上三种条件,便可以构造出7个具有二阶精度的多项式。对应模板分别为

  1. \((e)\),原始解;
  2. \((e,a,b;\, e,b,c;\, e,c,a)\),三个相邻单元均值;
  3. \((e,a;\, e,b;\, e,c)\),单元e均值与相邻单元斜率;

注意,不同模板上的重构多项式需满足在单元内均值与原始结果相同。对于三角形来说,除了原始解之外,计算模板共有6个,而四边形则有8个,在获得各个模板上的多项式后便可采用线性叠加的方法获得重构后的单元解。

为了避免重构解产生振荡,需要为各个模板设置不同权重系数,在 HWENO 格式中模板权重系数与其振荡幅度相关。Friedrich[7] 改进了 Jiang 与 Shu (1996) 提出的振荡算子,其改进的新形式为

\[o_i = \left[ \int_{\Omega_i} h^{-2} \left( \frac{\partial P_i}{\partial x_k} \right)^2 d\Omega \right]^{1/2}
\]

其中 \(h=mes(\Omega_e)\) 为单元尺度大小。使用振荡算子计算每个模板所占权重公式为

\[w_i = \frac{ \left(\epsilon +o_i(P_i) \right)^{-\gamma}}{\sum_{k=1}^m \left(\epsilon +o_k(P_k) \right)^{-\gamma}}
\]

其中 \(\gamma\) 为正值。

考虑到计算效率以及数值精度,以上重构过程应当只应用于数值解中存在间断位置,这就要求 HWENO 重构格式与间断检测器协同使用。


  1. LUO H, BAUM J D, LÖHNER R. A Hermite WENO-based limiter for discontinuous Galerkin method on unstructured grids[J]. Journal of Computational Physics, 2007, 225(1): 686–713.

  2. A. Harden, B. Engquist, S. Osher, S.R. Chakravarthy, Uniformly high-order accurate essential non-oscillatory schemes III, Journal of Computational Physics 71 (1987) 231–303.

  3. X. Liu, S. Osher, T.F. Chen, Weighted essential non-oscillatory schemes, Journal of Computational Physics 115 (1994) 200–212.

  4. J. Qiu, C.W. Shu, Runge–Kutta discontinuous Galerkin method using WENO limiters, SIAM Journal of Scientific Computing 26

    (2005) 907–929.

  5. J. Qiu, C.W. Shu, Hermite WENO schemes and their application as limiters for Runge–Kutta discontinuous Galerkin method: one

    dimensional case, Journal of Computational Physics 193 (2004) 115–135.

  6. J. Qiu, C.W. Shu, Hermite WENO schemes and their application as limiters for Runge–Kutta discontinuous Galerkin method II: two

    dimensional case, Computers & Fluids 34 (2005) 642–663.

  7. O. Friedrich, Weighted essential non-oscillatory schemes for the interpolation of mean values on unstructured grids, Journal of Computational Physics 144 (1998) 194–212.

Hermite WENO 重构格式的更多相关文章

  1. paper 41:正交变换

    正交变换是保持图形形状和大小不变的几何变换,包含旋转,轴对称及上述变换的复合. 几何意义 正交变换是保持图形形状和大小不变的几何变换,包含旋转,轴对称及上述变换的复合. 代数定义 欧几里得空间V的线性 ...

  2. matlab 小波变换

    MATLAB小波变换指令及其功能介绍 1 一维小波变换的 Matlab 实现 (1) dwt函数 功能:一维离散小波变换 格式:[cA,cD]=dwt(X,'wname') [cA,cD]=dwt(X ...

  3. matlab中图像处理常见用法

    一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:/w01.tif') 注:计算机E盘上要有w01相应的.tif文件. 2. imwrite i ...

  4. javascript基础笔记学习

    /** * Created by Administrator on 2016/12/26. */ /* var box; alert( typeof box); box是Undefined类型,值是u ...

  5. matlab 对图像操作的函数概览

    转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...

  6. PHP(Zend Studio)入门视频

    视频地址: http://www.ev-get.com/article/2014/5/9/20962.html (去掉地址中的减号-:可以看视频) Zend Studio教学视频之Zend Studi ...

  7. 记一次.NET代码重构

    好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使劲赶的时候,神马设计都是浮云 ...

  8. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  9. 《HTML重构》读书笔记&思维导图

    最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...

随机推荐

  1. [no code] Scrum Meeting 博客目录

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 Scrum Meeting博客目录 我们在这个课程的目标是 远程协同工作,采用最新技术 ...

  2. VS2019、Qt5.12及QGis3.16开发常见问题汇总

    在C++.Qt软件开发过程中,常常遇到一些编译错误或警告:本文将VS2019.Qt5.12.10和QGis3.16.10的二次开发过程常见的问题做了整理,供大家参考,也便于日后查阅.该内容分为四部分: ...

  3. PCB电路板元器件布局的一般原则*(转)

    PCB电路板元器件布局的一般原则: 设计人员在PCB电路板布局过程中需要遵循的一般原则如下. (1)元器件最好单面放置.如果需要双面放置元器件,在底层(Bottom Layer)放置插针式元器件, ) ...

  4. Spring中自定义Schema扩展机制

    一.前言 Spring 为基于 XML 构建的应用提供了一种扩展机制,用于定义和配置 Bean. 它允许使用者编写自定义的 XML bean 解析器,并将解析器本身以及最终定义的 Bean 集成到 S ...

  5. C++实现红黑树

    红黑树的应用: 利用key_value对,快速查找,O(logn) socket与客户端id之间,形成映射关系(socket, id) 内存分配管理 一整块内存,不断分配小块 每分配一次,就加入到红黑 ...

  6. 阿里P7面试官:请你简单说一下类加载机制的实现原理?

    面试题:类加载机制的原理 面试官考察点 考察目标: 了解面试者对JVM的理解,属于面试八股文系列. 考察范围: 工作3年以上. 技术背景知识 在回答这个问题之前,我们需要先了解一下什么是类加载机制? ...

  7. 查看VCS版本的指令

    以本人电脑的安装目录为例:在任意path下打开terminal执行命令行/usr/local/vcs2018/bin/vlogan -ID -full64 /usr/local/vcs2018为VCS ...

  8. 双栈排序 牛客网 程序员面试金典 C++ Python

    双栈排序 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中. ...

  9. 剖析虚幻渲染体系(12)- 移动端专题Part 1(UE移动端渲染分析)

    目录 12.1 本篇概述 12.1.1 移动设备的特点 12.2 UE移动端渲染特性 12.2.1 Feature Level 12.2.2 Deferred Shading 12.2.3 Groun ...

  10. istio基础详解

    1.Istio介绍? 官方文档:https://istio.io/docs/concepts/what-is-istio/ 中文官方文档:https://istio.io/zh/docs/concep ...