写这篇文章,一方面是对我的学习过程做个总结,另一方面是想帮助后来的同学快速入门。我将从初学者的视角分享WENO-JS格式,力求详细、易懂,把各种背景知识介绍清楚。各位大佬珠玉在前,学生只是拾人牙慧,水平有限,还请各位不吝赐教。
Euler方程的通量表达式
WENO格式的作用是对N-S方程中的对流项做离散化。为了便于研究,我们去掉N-S方程中的粘性项和源项,保留瞬态项和对流项。这样N-S方程就退化为Euler方程了:
守恒量
,
包含质量密度、动量密度和能量密度。流通矢量
,
,
,
包含质量、动量和能量的通量。有兴趣可以验证一下。接下来我将以有限差分法为例进行说明。
假如我们将计算区域划分成很多个小的正方体单元,单元中心点的守恒量 已知,而单元边界的信息未知(有限差分法的性质)。将单元
视作一个控制体,如图1所示。
图1
将Euler方程写成半离散的形式:
可以看出守恒量 的更新完全依赖于单元边界的数值通量。WENO格式就是一种构造数值通量的方法。
注释:1.式(1.2)采用了守恒格式,将流通矢量的导数表达为 ,其中
是单元边界处的数值通量,上标"^"表示估计值。
2.为什么是数值通量而不是流通矢量
?因为单元边界处的流通矢量
是未知的,我们得采用各种各样的数值格式构造出数值通量
,WENO格式便是其中一种。
3.这个流通矢量的导数表达式是准确的,没有误差的。证明方法:以有限差分法为例,引入重构函数P(y)。重构函数的定义为:(1)重构函数在单元内的积分平均等于流通矢量在单元中心点的值,
。
(2)重构函数在单元边界的值等于数值通量
。
利用这两个定义可证。
4.为什么要写成守恒格式?
,
等式右边对所有网格点求和
可以看到计算域内部的误差互相抵消了。从整个计算域来看,质量动量能量的流入流出取决于计算域边界处的数值通量。这种方法非常适合模拟包含激波的流场。