参考MUSCL格式的构造思想,我们给出了一种高阶数值通量的构造方法。将高阶数值通量应用于有限体积(差分)ENO,WENO和DG等格式得到单步高阶Semi-Lagrangian格式。针对一维Euler方程组,本文在特征空间给出了一种新的特征线的处理方案,解决了Semi-Lagrangian方法难以推广到多维的难点。数值实验表明,新格式比原格式误差更小,效率更高,对激波的模拟效果也有较大提升。 Referring to the construction idea of the MUSCL scheme, we present a construction method for high-order numerical fluxes. The higher order numerical flux is applied to the finite volume (dif-ference) ENO, WENO and DG schemes to obtain single step higher order Semi-Lagrangian scheme. For the one-dimensional Euler equations, this paper presents a new feature line processing scheme in the feature space, which solves the difficulty that the Semi-Lagrangian method is difficult to gen-eralize to multidimensional. Numerical experiments show that the new format is smaller than the original format, the efficiency is higher, and the simulation effect on the shock wave is also greatly improved.
温燕静1,杨玉月1*,魏雁霞2
1湘潭大学数学系,湖南 湘潭
2中科软科技股份有限公司,北京
收稿日期:2019年5月9日;录用日期:2019年5月24日;发布日期:2019年5月31日
参考MUSCL格式的构造思想,我们给出了一种高阶数值通量的构造方法。将高阶数值通量应用于有限体积(差分)ENO,WENO和DG等格式得到单步高阶Semi-Lagrangian格式。针对一维Euler方程组,本文在特征空间给出了一种新的特征线的处理方案,解决了Semi-Lagrangian方法难以推广到多维的难点。数值实验表明,新格式比原格式误差更小,效率更高,对激波的模拟效果也有较大提升。
关键词 :MUSCL,Semi-Lagrangian,高阶数值通量,单步高阶Semi-Lagrangian格式,Euler方程组, Sod激波管问题
Copyright © 2019 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
1959年,Godunov首次提出以Riemann问题解为基础来构造网格物理量均值的Godunov格式,它有效地解决了所有内部状态变量的局部黎曼问题 [
1959年,Wiin-Nielsen提出了一种修正轨迹方法 [
然而,对于一维或高维Euler方程组,求解特征线方程仍然是Semi-Lagrangian方法的难点。2011年,Lentine等人基于文 [
本文给出了一种高阶数值通量的构造方法,将其应用于有限体积(差分) ENO,WENO和DG,即相应的Semi-Lagrangian方法。针对于一维Euler方程组,在特征空间上给出了一种新的处理特征线的方法。数值实验表明:高阶数值通量能应用于有限体积(差分) ENO,WENO和DG等格式,针对Euler方程组的特征线处理方法能保持空间离散格式本身的本质无震荡性,能获得更高的分辨率且具备更高的计算效率。
为了推导双曲型方程数值计算格式中的二阶数值通量,我们考察如下方程
u t + f ( u ) x = 0 , ( x , t ) ∈ [ a , b ] × [ 0 , T ] , (1)
u ( x , 0 ) = u 0 ( x ) . (2)
已知 u ( x , t n ) 在第j个单元( I j : = [ x j − 1 / 2 , x j + 1 / 2 ] )端点的单侧极限分别为 u j + 1 / 2 − ( t n ) 和 u j − 1 / 2 + ( t n ) ,容易给出它在 I j 内的插值多项式
p j ( x ) = u ( x , t n ) = u j + 1 / 2 − ( t n ) + u j + 1 / 2 − ( t n ) − u j − 1 / 2 + ( t n ) h j ( x − x j + 1 / 2 ) , (3)
其中 h j = x j + 1 / 2 − x j − 1 / 2 。
过点 ( x j + 1 / 2 , t n + 1 ) 的特征线与直线 t = t n 相交于一点X
d d s X ( x , t ; t + s ) = ∂ ∂ u f ( u ( X ( x , t ; t + s ) , t + s ) ) = h ( X ( x , t ; t + s ) , t + s ) , (4)
其中 X ( x , t ; t ) = x 。利用一阶Runge-Kutta方法,可得
X = x j + 1 / 2 − Δ s h ( X ( x j + 1 / 2 , t n ; t n + s ) , t n + s ) , (5)
将X代入 u ( x , t n ) ,得
u ( X , t n ) = u j + 1 / 2 − ( t n ) + u j + 1 / 2 − ( t n ) − u j − 1 / 2 + ( t n ) h j Δ s h ( X ( x j + 1 / 2 , t n ; t n + s ) , t n + s ) . (6)
其中 u ( X , t n ) 是近似代替 u ( x j + 1 / 2 , t n + 1 ) 。
最后,利用梯形公式可计算出 [ t n , t n + 1 ] 内 x j + 1 / 2 处的二阶数值通量
f ^ j + 1 / 2 = f ( u ( X , t n ) ) + f ( u ( x j + 1 / 2 , t n ) ) 2 . (7)
为了将二阶数值通量应用于DG格式,我们将方程(1)两边同时乘 φ ( x ) ,并在时空单元 Ω j 上求积分,
∬ Ω j ( ∂ t u h + ∂ x f ( u h ) ) φ ( x ) d x d t = 0 , (8)
其中 φ ( x ) 为区间 I j 上的光滑函数。由格林公式,可得
∫ x j − 1 / 2 x j + 1 / 2 ( u h ( x , t n + 1 ) − u h ( x , t n ) ) φ ( x ) d x + ∫ t n t n + 1 f ( u h ( x j + 1 / 2 , t ) ) φ ( x j + 1 / 2 ) d t − ∫ t n t n + 1 f ( u h ( x j − 1 / 2 , t ) ) φ ( x j − 1 / 2 ) d t − ∬ Ω j f ( u h ) ∂ x φ ( x ) d x d t = 0 , (9)
我们再将方程(2)两边同乘 φ ( x ) 并在单元 I j 上积分得
∫ I j u h ( x , 0 ) φ ( x ) d x = ∫ I j u 0 ( x ) φ ( x ) d x . (10)
这样就得到了方程(1-2)的弱形式(9-10)。
参照经典二阶DG格式,取Legendre多项式 P l ( x ) 为局部基函数,并设 u h ( x , t ) = ∑ l = 0 k u j l ( t ) φ l ( x ) ,其中 φ l ( x ) = P l ( ξ ) = P l ( x − x j Δ x / 2 ) 。将方程(9)中的 φ ( x ) 替换成 φ l ( x ) ,则有
当l = 0时,(9)式简写为
u j 0 ( t n + 1 ) = u j 0 ( t n ) − Δ t Δ x ( f ^ j + 1 / 2 − f ^ j − 1 / 2 ) , (11)
当l = 1时,(9)式简写为
u j 1 ( t n + 1 ) = u j 1 ( t n ) − 3 Δ t Δ x ( f ^ j + 1 / 2 + f ^ j − 1 / 2 ) + 3 Δ x ∬ Ω j f ( u h ) ∂ x φ 1 ( x ) d x d t . (12)
将(12)式中的二重积分项简记为K,利用如下梯形公式计算
K = Δ t Δ x ( ∫ I j f ( u h ( x , t n + 1 ) ) d x + ∫ I j f ( u h ( x , t n ) ) d x ) , (13)
其中 ∫ I j f ( u h ( x , t n ) ) d x 继续利用梯形公式(或其他积分公式), u h ( x , t n + 1 ) 由方程(7,11)得到的单元均值 u j 0 ( t n + 1 ) 来近似代替,得
K = Δ t [ f ( u j 0 ( t n + 1 ) ) + 1 2 ( f ( u h ( x j + 1 / 2 , t n ) ) + f ( u h ( x j − 1 / 2 , t n ) ) ) ] . (14)
再利用上一节所介绍的二阶数值通量的推导方法,可求解(12)式中的 f ^ j + 1 / 2 这样,我们得到相应的单步二阶DG格式(10)~(12)。
一维Euler方程组可以表示为
u t + [ F ( u ) ] x = 0 , (15)
u = ( ρ , ρ u , ρ E ) T , F ( u ) = ( ρ u , ρ u 2 + p , ( ρ E + p ) u ) T
其中压力 p = ( γ − 1 ) ( ρ E + 1 2 ρ u 2 ) ,比热比 γ = 1.4 。Jacobian矩阵 A = ∂ F ( u ) ∂ u → ,A的特征值为
λ 1 = u − c , λ 2 = u , λ 3 = u + c ,
方程组(15)化成特征空间形式
u t + ( R Λ R − 1 u ) x = 0 ,
其中R为右特征矩阵, R − 1 为左特征矩阵, Λ = d i a g ( u − c , u , u + c ) 。
已知 u ( x , t n ) 在第j个单元( I j = [ x j − 1 / 2 , x j + 1 / 2 ] )端点的单侧极限分别为 u j + 1 / 2 − ( t n ) 和 u j − 1 / 2 + ( t n ) 可以给出它在 I j 内的插值多项式
p j ( x , t n ) = u ( x , t n ) = u j + 1 / 2 − ( t n ) + u j + 1 / 2 − ( t n ) − u j − 1 / 2 + ( t n ) h j ( x − x j + 1 / 2 ) ,
特征线方程 d X d t = − λ 与直线 t n 相交,有
d d s X k ( x , t ; t + s ) = − λ k ( X k ( x , t ; t + s ) , t + s ) , k = 1 , 2 , 3 (16)
利用二阶Runge-Kutta法求解常微分方程(16),再将 X k 代入 u ( x , t n ) 得到 u k ( X k , t n ) 。令
W k ( X k , t n ) = R − 1 u k ( X k , t n ) = ( W k 1 , W k 2 , W k 3 ) T ,则 W ( x j + 1 / 2 , t n + 1 ) = ( W 11 , W 22 , W 33 ) T 。
最后,利用梯形公式可计算出 [ t n , t n + 1 ] 内 x j + 1 / 2 处的二阶数值通量
F ^ j + 1 / 2 = F ( u ( x j + 1 / 2 , t n ) ) + F ( u ( x j + 1 / 2 , t n + 1 ) ) 2 = R Λ ( W ( x j + 1 / 2 , t n ) + W ( x j + 1 / 2 , t n + 1 ) ) 2 . (17)
求解方程(1)的守恒型有限体积(差分)格式通常可以写成
u j n + 1 = u j n − Δ t Δ x ( f ^ j + 1 / 2 − f ^ j − 1 / 2 ) , (18)
我们将由公式(7)或(17))计算所得的通量替代(18)式中的 f ^ ,这样就得到单步二阶格式.
算例1:一维Burger方程
考虑方程(1-2),其中 f ( u ) = u 2 / 2 , ( x , t ) ∈ [ 0 , 2 π ] × [ 0 , 2 ] , u 0 ( x ) = sin x + 0.5 ,采用周期边界条件。为了考
FV-ENO2-HNF ‖ u h − u ‖ l 1 | FV-ENO2 ‖ u h − u ‖ l 1 | |||||||
---|---|---|---|---|---|---|---|---|
N | 误差 | 阶数 | CPU(ms) | 误差比 | 误差 | 阶数 | CPU(ms) | 误差比 |
100 | 6.33e-004 | — | 0.00e+000 | 1.00 | 1.14e-003 | — | 0.00e+000 | 1.80 |
200 | 1.65e-004 | 1.93 | 1.00e+000 | 1.00 | 3.20e-004 | 1.84 | 1.00e+000 | 1.94 |
400 | 4.34e-005 | 1.93 | 4.00e+000 | 1.00 | 8.66e-005 | 1.89 | 7.00e+000 | 1.99 |
FD-ENO2-HNF ‖ u h − u ‖ l 1 | FD-ENO2 ‖ u h − u ‖ l 1 | |||||||
100 | 5.04e-004 | — | 0.00e+000 | 1.00 | 1.04e-003 | — | 0.00e+000 | 2.06 |
200 | 1.33e-004 | 1.92 | 1.00e+000 | 1.00 | 2.87e-004 | 1.87 | 3.00e+000 | 2.15 |
400 | 3.50e-005 | 1.93 | 5.00e+000 | 1.00 | 7.71e-005 | 1.90 | 1.10e+001 | 2.20 |
DG2-HNF ‖ u h − u ‖ l 1 | RKDG2 ‖ u h − u ‖ l 1 | |||||||
100 | 1.59e-004 | — | 1.00e+000 | 1.00 | 6.14e-004 | — | 4.00e+000 | 3.86 |
200 | 4.01e-005 | 1.99 | 2.00e+000 | 1.00 | 1.47e-004 | 2.06 | 1.90e+001 | 3.66 |
400 | 1.02e-005 | 1.98 | 9.00e+000 | 1.00 | 3.37e-005 | 2.09 | 7.30e+001 | 3.30 |
表1. 单步二阶ENO,DG格式与原格式在t = 0.5时刻的数值误差表
FV-WENO3-HNF l 1 | FV-WENO3 l 1 | FD-WENO3-HNF l 1 | FD-WENO3 l 1 | |||||
---|---|---|---|---|---|---|---|---|
N | 误差 | 阶数 | 误差 | 阶数 | 误差 | 阶数 | 误差 | 阶数 |
100 | 5.54e-004 | — | 9.06e-004 | - | 4.58e-004 | — | 8.70e-004 | - |
200 | 1.42e-004 | 1.96 | 2.11e-004 | 2.09 | 1.22e-004 | 1.91 | 2.06e-004 | 2.07 |
400 | 3.63e-005 | 1.97 | 3.49e-005 | 2.59 | 3.16e-005 | 1.94 | 3.61e-005 | 2.51 |
800 | 9.04e-006 | 2.01 | 3.28e-006 | 3.41 | 7.87e-006 | 2.01 | 3.62e-006 | 3.32 |
表2. t = 0.5时三阶WENO格式的误差表
察格式的截断误差阶,我们给出 t = 0.5 (尚未产生间断)的误差表,见表1~表2。其中后缀“HNF”表示使用公式(7)的单步二阶格式,另一个表示使用相应的二阶SSP Runge-Kutta时间离散格式。
由表1~表2可以看出:1) 本文给出的二阶数值通量能应用于ENO,WENO和DG等格式,得到相应的单步二阶格式。2) 单步二阶格式的计算误差比相应原格式更小(三阶WENO格式当网格充分细密时出现超收敛,误差更小)。3) 单步二阶格式所耗CPU时间更少,当N = 6400时,FV-ENO2-HNF格式比原格式节约了48%,FD-ENO2-HNF格式比原格式节约了56%,DG2-HNF格式比原格式节省了88%。
图1. t = 1.5真解与数值解的局部对比
当t = 1.5时,该问题已产生激波,见图1。由图可知:单步二阶格式在处理激波间断时具有更高的分辨率,模拟效果更好。
算例2:Sod激波管问题
考虑方程(15),其中 x ∈ [ 0 , 1 ] 。采用紧支边界,初始条件:t=0时刻,
( ρ , u , p ) = { ( 1 , 0 , 1 ) , x ≤ 0.5 ( 0.125 , 0 , 0.1 ) , x > 0.5
真解N=1600,数值解N=100时,使用二阶数值通量单步ENO格式与标准二阶FD-ENO2格式的对比(见图2~图3)。
图2. t = 0.15时真解与数值解的整体对比
由图2~图3可以看出:使用二阶数值通量的单步格式比原格式具有更高的分辨率。当N = 1000时,
图3. t = 0.15时真解与数值解的局部对比
FD-ENO2-HNF格式所消耗的CPU时间为282毫秒(ms),标准FD-ENO2格式所消耗的CPU时间为400毫秒(ms),FD-ENO-HNF格式比标准FD-ENO2格式节约了29.5%左右。
本文以二阶数值通量为例,给出了一种高阶数值通量的构造方法,能应用于有限体积(差分) ENO,WENO和DG格式得到单步高阶Semi-Lagrangian格式。格式天然具备守恒性、紧致性、并行性,且并行效率比时间离散应用SSP Runge-Kutta方法的相应格式更高。本文还给出了一种在特征空间处理特征线的方法,能应用于Euler方程组,比原格式具备更好的模拟效果和更高的效率。同时,这种方法能利用交替方向法推广到多维问题,并无需推导其Riemann不变量,也为Semi-Lagrangian方法在多维Euler方程组中的研究与应用提供了一种有效的途径。
温燕静,杨玉月,魏雁霞. 一种高阶数值通量的探讨An Approach of High Order Numerical Flux[J]. 应用数学进展, 2019, 08(05): 990-997. https://doi.org/10.12677/AAM.2019.85113