二维线性传输方程满足两个守恒律的数值格式
The Numerical Scheme Satisfying Two Conservation Laws for Two Dimensional Linear Advection Equations
DOI: 10.12677/PM.2021.116113, PDF, HTML, XML, 下载: 332  浏览: 446 
作者: 唐静文, 崔艳芬:上海大学理学院,上海
关键词: 守恒律保结构超收敛分裂算子法Conservation Laws Structure Preservation Super-Convergence Splitting Operator Method
摘要: 在本文中,我们针对二维线性传输方程设计了满足两个守恒律的数值格式。该格式不仅能保持数值解守恒,同时能保持数值能量守恒。通过数值算例验证格式的有效性,数值结果表明该格式在远离极值点的区域内具有误差相互抵消的超收敛性质,并且能够很好的保持解的结构。
Abstract: In this paper, we develop an improved numerical scheme satisfying two conservation laws for two-dimensional linear advection equations, which satisfying both the numerical solution and numerical energy conservative. The numerical results show that the scheme has the super-con- vergence property away from the extreme points, and can keep the structure of the solution well.
文章引用:唐静文, 崔艳芬. 二维线性传输方程满足两个守恒律的数值格式[J]. 理论数学, 2021, 11(6): 990-997. https://doi.org/10.12677/PM.2021.116113

1. 引言

本文对二维线性传输方程设计能够满足数值解和数值能量同时守恒的数值格式,这种满足多个守恒律的格式与传统的守恒型格式不同,在格式中不仅计算数值解,而且要计算数值能量,并且在格式中有多个数值实体参与格式的计算。

文献 [1] 中对线性传输方程设计了满足两个守恒律的数值格式;文献 [2] [3] 中对KdV方程设计了满足两个守恒律的数值格式;文献 [4] 中针对一维守恒型方程组设计了熵耗散格式;文献 [5] 中对一维线性传输方程设计了满足两个守恒律的数值格式,并将此思想推广到了二维的情况;文献 [6] 中设计了线性传输方程满足三个守恒律的数值格式,数值实验结果表明这类满足多个守恒律的数值格式比传统的格式有更高的精度且长时间的数值模拟效果非常好。

本文将这种满足多个守恒律的思想应用到二维线性传输方程,与文献 [5] 不同的是,本文设计的格式,采用分裂算子法,将二维线性传输方程写成了两个一维方程,对其分别设计了满足两个守恒律的数值格式,在格式中数值解和数值能量都能守恒,并且数值能量不是被动的守恒律,而是作为一个数值实体参与了格式的计算。数值结果表明该格式具有误差互相抵消的超收敛性质,并且在长时间的数值模拟中能很好的保持解的结构。

本文的结构安排如下,第一节是引言;第二节是格式的具体描述;第三节是格式的可行性分析,第四节给出了数值算例,验证了算法的有效性;第五节是结论。

2. 格式的描述

我们考虑二维线性传输方程:

u t + u x + u y = 0 (2.1)

它的解满足以下形式的守恒律:

U ( u ) t + U ( u ) x + U ( u ) y = 0 (2.2)

在本文中取 U ( u ) = u 2 ,我们称之为能量。

在数值格式中,我们采用正规网格,令 x i = i h 1 t n = n τ x i ± 1 2 = ( i ± 1 2 ) h 1 y j = j h 2 y j ± 1 2 = ( j ± 1 2 ) h 2 。其中 h 1 h 2 分别为X轴方向和Y轴方向上的空间步长, τ 是时间步长, λ 1 = τ h 1 λ 2 = τ h 2 分别为X轴方向和Y轴方向上的网格步长比。

方程(2.1)的精确解为 u ( x , y , t ) ,方程(2.2)的精确解为 U ( x , y , t ) = u 2 ( x , y , t ) ,在数值格式中我们不仅

计算了数值解,还计算了数值能量。在网格 ( x i 1 2 , x i + 1 2 ) × ( y j 1 2 , y j + 1 2 ) 上, t n 时刻的数值解记为 u i , j n ,数值

能量记为 U i , j n ,它们分别为精确解和精确能量的网格平均的近似:

u i j n 1 h 1 h 2 y j 1 2 y j + 1 2 x i 1 2 x i + 1 2 u ( x , y , t n ) d x d y (2.3)

U i j n 1 h 1 h 2 y j 1 2 y j + 1 2 x i 1 2 x i + 1 2 U ( u ( x , y , t n ) ) d x d y (2.4)

对于二维方程(2.1)和(2.2),我们采用Godunov型分裂算子法 [7] [8],将其写成两部分A和B,

A: { u t + u x = 0 ; U t + U x = 0 ; u ( x , y , 0 ) = u 0 ( x , y ) . (2.5)

B: { u t + u y = 0 ; U t + U y = 0 ; u ( x , y , 0 ) = u ( x , y , t ) . (2.6)

其中 U = u 2

下面,我们将讨论如何根据 t n 层上的数值解 u i , j n 和数值能量 U i , j n 来计算 t n + 1 层上的数值解 u i , j n + 1 和数值能量 U i , j n + 1

2.1. 守恒方程A的数值格式

对于守恒方程A,其数值格式为Godunov型,我们按照重构、发展、网格平均三步设计格式,但是与传统Godunov型格式不同的是,我们的格式不仅计算了数值解,还计算了数值能量。

第一步(重构):在 t n 层上,对数值解 u i , j n 和数值能量 U i , j n 进行重构:

R ( x , t ; u i , j n , U i , j n ) = u i , j n + s i , j n ( x x i ) , x ( x i 1 2 , x i + 1 2 ) (2.7)

显然, R ( x , t ; u i , j n , U i , j n ) 满足:

1 h 1 x i 1 2 x i + 1 2 R ( x , t ; u i , j n , U i , j n ) d x = u i , j n (2.8)

为了保持两个守恒律同时成立,我们还要求重构函数 R ( x , t ; u i , j n , U i , j n ) 满足:

1 h 1 x i 1 2 x i + 1 2 ( R ( x , t ; u i , j n , U i , j n ) ) 2 d x = U i , j n (2.9)

即重构函数数值能量的网格平均和数值能量相等。根据(2.9)式,我们可以算出重构函数的斜率 s i , j n

s i , j n = sgn ( u i + 1 , j n u i 1 , j n ) 12 ( U i , j n ( u i , j n ) 2 ) ( h 1 ) 2 (2.10)

从这里可以看出,与传统差分格式不同的是,斜率 s i , j n 作为一个自由度,是通过数值能量的守恒得到的。

第二步(发展):以 R ( x , t ; u i , j n , U i , j n ) t n 层上的初值,求解初值问题:

{ v t + v x = 0 ; v ( x , y j ; t n ) = R ( x , t ; u i , j n , U i , j n ) . < x < , t n < t < t n + 1 (2.11)

其精确解为: v ( x , y j ; t n ) = R ( x ( t t n ) , u i , j n , U i , j n )

第三步(网格平均):在 t n + 1 层上,A部分的数值解 u i , j A , n + 1 和数值能量 U i , j A , n + 1 分别为:

u i , j A , n + 1 = 1 h 1 x i 1 2 x i + 1 2 v ( x , y j ; t n + 1 ) d x (2.12)

U i , j A , n + 1 = 1 h 1 x i 1 2 x i + 1 2 ( v ( x , y j ; t n + 1 ) ) 2 (2.13)

在实际的计算中,我们采用积分形式来计算数值解 u i , j A , n + 1 和数值能量 U i , j A , n + 1 (见文献 [3] )。

因此数值解 u i , j A , n + 1 的数值格式为:

u i , j A , n + 1 = u i , j n λ 1 ( f ^ i + 1 2 , j n f ^ i 1 2 , j n ) (2.14)

其中,数值流函数为:

f ^ i + 1 2 , j n = 1 τ t n t n + 1 v ( x i + 1 2 , y j , t ) d t = u i , j n + s i , j n 2 ( h 1 τ ) (2.15)

上式中的数值流函数是精确求解。如果方程是非线性传输方程,数值流函数也可以采用数值解法精确求出。

数值能量 U i , j A , n + 1 的数值格式为:

U i , j A , n + 1 = U i , j n λ 1 ( F ^ i + 1 2 , j n F ^ i 1 2 , j n ) (2.16)

其中,数值能量流函数为:

F ^ i + 1 2 , j n = 1 τ t n t n + 1 ( v ( x i + 1 2 , y j , t ) ) 2 d t = ( u i , j n ) 2 + u i , j n s i , j n ( h 1 τ ) + ( s i , j n ) 2 ( h 1 ) 2 4 λ 1 2 6 λ 1 + 3 12 (2.17)

2.2. 守恒方程B的数值格式

对于守恒方程B部分的数值格式,由分裂算子法可知,以守恒方程 A 得到的数值解 u i , j A , n + 1 和数值能量 U i , j A , n + 1 为初值,按照重构、发展、网格平均三步进行设计格式。在这里我们同样不仅计算数值解,也要计算数值能量。

第一步(重构):对守恒方程A得到的数值解 u i , j A , n + 1 和数值能量 u i , j A , n + 1 进行重构。

R ( y ; u i , j A , n + 1 , U i , j A , n + 1 ) = u i , j A , n + 1 + σ i , j n + 1 ( y y j ) , y ( y j 1 2 , y j + 1 2 ) (2.18)

同样地在我们设计的数值格式中,要求重构函数 R ( y ; u i , j A , n + 1 , U i , j A , n + 1 ) 满足:

{ 1 h 2 y j 1 2 y j + 1 2 R ( y ; u i , j A , n + 1 , U i , j A , n + 1 ) d y = u i , j A , n + 1 , 1 h 2 y j 1 2 y j + 1 2 ( R ( y ; u i , j A , n + 1 , U i , j A , n + 1 ) ) 2 d y = U i , j A , n + 1 , (2.19)

其中,(2.19)式的第一个式子保持了重构函数数值解的守恒,第二个式子保持了重构函数数值能量的守恒。

根据(2.19)式的第二个式子,我们可以解出斜率 σ i , j n + 1

σ i , j n + 1 = sgn ( u i , j + 1 A , n + 1 u i , j 1 A , n + 1 ) 12 ( U i , j A , n + 1 ( u i , j A , n + 1 ) 2 ) ( h 2 ) 2 (2.20)

上式表明,斜率 σ i , j n + 1 不仅与数值解和数值能量有关,而且数值解和数值能量之间是一种非线性关系。

第二步(发展):以 R ( y ; u i , j A , n + 1 , U i , j A , n + 1 ) 为初值,求解初值问题:

{ v t + v y = 0 ; v ( x i , y ; t n ) = R ( y , t ; u i , j A , n + 1 , U i , j A , n + 1 ) . < y < , t n < t < t n + 1 (2.21)

其精确解为: v ( x i , y ; t n ) = R ( y ( t t n ) , u i , j A , n + 1 , U i , j A , n + 1 )

第三步(网格平均):在 t n + 1 层上,我们采用积分形式计算数值解 u i , j n + 1 和数值能量 U i , j n + 1 。因此,数值解 u i , j n + 1 和数值能量 U i , j n + 1 的数值格式分别为:

{ u i , j n + 1 = u i , j A , n + 1 λ 2 ( g ^ i , j + 1 2 n g ^ i , j 1 2 n ) , U i , j n + 1 = U i , j A , n + 1 λ 2 ( G ^ i , j + 1 2 n G ^ i , j 1 2 n ) , (2.22)

其中,数值流函数和数值能量流函数分别为:

g ^ i , j + 1 2 n + 1 = 1 τ t n t n + 1 v ( x i , y j + 1 2 , t ) d t = u i , j A , n + 1 + σ i , j n + 1 2 ( h 2 τ ) , (2.23)

G ^ i , j + 1 2 n + 1 = 1 τ t n t n + 1 ( v ( x i , y j + 1 2 , t ) ) 2 d t = ( u i , j A , n + 1 ) 2 + u i , j A , n + 1 σ i , j n + 1 ( h 2 τ ) + ( σ i , j n + 1 ) 2 ( h 2 ) 2 4 λ 2 2 6 λ 2 + 3 12 (2.24)

综上所述,对于方程(2.1)和(2.2),由A部分的数值格式(2.14)、(2.16)和B部分的数值格式(2.22)可知,数值解和数值能量的格式可以写成如下形式:

u i , j n + 1 = u i , j n λ 1 ( f ^ i + 1 2 , j n f ^ i 1 2 , j n ) λ 2 ( g ^ i , j + 1 2 n g ^ i , j 1 2 n ) , (2.25)

U i , j n + 1 = U i , j n λ 1 ( F ^ i + 1 2 , j n F ^ i 1 2 , j n ) λ 2 ( G ^ i , j + 1 2 n G ^ i , j 1 2 n ) . (2.26)

3. 格式的可行性

在数值格式中,重构函数的斜率 s i , j n σ i , j n 是通过计算(2.10)式和(2.20)式得到的,从中我们可以看到计算过程中涉及到开根号运算,定理3.1保证了开根号运算的可行性。

定理 3.1:如果 U i , j 0 ( u i , j 0 ) 2 U i , j A , 0 ( u i , j A , 0 ) 2 ,那么通过格式(2.25)和(2.26)式计算所得的数值解和数值

能量满足关系: U i , j n ( u i , j n ) 2 , U i , j A , n ( u i , j A , n ) 2

证明:我们采用数学归纳法来证明 U i , j A , n ( u i , j A , n ) 2

当n = 0时,根据已知条件有:

U i , j 0 ( u i , j 0 ) 2 (3.1)

当n > 0时,假设tn层上满足关系 U i , j A , n ( u i , j A , n ) 2 ,下面证明 t n + 1 层上满足关系 U i , j A , n + 1 ( u i , j A , n + 1 ) 2

根据上述假设,可知(2.10)式具有实根,因此重构函数 R ( x , t ; u i , j n , U i , j n ) 是存在的,根据(2.14)到(2.17) 式可以计算出 u i , j A , n + 1 U i , j A , n + 1 ,即:

{ u i , j A , n + 1 = 1 h 1 x i 1 2 x i + 1 2 v ( x , y j ; t n + 1 ) d x , U i , j A , n + 1 = 1 h 1 x i 1 2 x i + 1 2 ( v ( x , y j ; t n + 1 ) ) 2 d x , (3.2)

根据Jessen不等式可得:

1 h 1 x i 1 2 x i + 1 2 U ( v ( x , y j , t n + 1 ) ) d x U ( 1 h 1 x i 1 2 x i + 1 2 v ( x , y j , t n + 1 ) ) d x , (3.3)

因此,

U i , j A , n + 1 ( u i , j A , n + 1 ) 2 (3.4)

同理,可以得到:

U i , j n + 1 ( u i , j n + 1 ) 2 (3.5)

证毕。

4. 数值算例

在这一部分,我们将通过数值算例来观察格式的精度和数值模拟效果。

算例 4.1: 对于二维线性传输方程 u t + u x + u y = 0 ,令初值为:

u ( x , y , 0 ) = sin ( 2 π ( x + y ) ) , 0 x 1 (4.1)

周期边界条件。该方程的精确解为 u ( x , y , t ) = sin ( 2 π ( x + y 2 t ) ) 。令网格步长比为 λ 1 = λ 2 = 0.2 ,分别用40,80,160,320,640,1280个网格计算到t = 1时刻的数值解,并对数值结果做 L 1 误差和 L 误差及收敛阶的分析。

通过表1可以看出, L 1 误差是二阶的,而 L 误差是介于一阶和二阶之间的,这是因为在极值点附近,为了保持解的稳定性,精度会降低一阶。

为了研究在远离极值点的区域内数值误差的精度,我们考虑远离极值点的集合 Ω = [ 0 , 1 / 6 ] [ 1 / 3 , 2 / 3 ] [ 5 / 6 , 1 ] ,同样对数值结果做 L 1 误差和 L 误差及收敛阶的分析。

通过表2可以看出,在远离极值点的区域内,格式可以达到三阶精度。这是因为在计算过程中,虽然采用线性重构,但是由于本文设计的格式同时计算了数值能量,因此数值解的误差不是简单的累加,误差在每一步的计算中会相互抵消。因此在远离极值点的区域内格式的精度能达到三阶,表现出超收敛性质。

Table 1. The error and convergence order of interval [0, 1] ×[0, 1]

表1. [0, 1] ×[0, 1]区间的误差和收敛阶

Table 2. The error and convergence order of interval Ω

表2. Ω区间的误差和收敛阶

算例4.2:对于方程(2.1)式,取初值为:

{ u ( x , y , 0 ) = exp ( 1 1 16 ( x 1 2 ) 2 ) × exp ( 1 1 16 ( y 1 2 ) 2 ) ( x , y ) ( 1 4 , 3 4 ) × ( 1 4 , 3 4 ) u ( x , y , 0 ) = 0 , ( x , y ) ( 1 4 , 3 4 ) × ( 1 4 , 3 4 ) (4.2)

无穷边界,网格步长为1/80,网格步长比为0.1。图1中的(a)图为初始时刻的解,(b)图为计算了t = 0.2 时刻的数值解。从图1(b)可以看出,我们设计的格式能很好的保持数值解的结构。

5. 结论

本文采用分裂算子法对二维线性传输方程设计了满足两个守恒律的数值格式,与传统的Godunov型格式不同的是,我们的格式不仅能够保持数值解守恒,而且能够保持数值能量守恒。在这里,数值解不是被动的守恒,而是作为一个数值实体参与了格式的计算。

(a) t = 0时刻的解 (b) t = 0.2时刻的数值解

Figure 1. Results of example 4.2 at different time

图1. 格式计算算例4.2在不同时刻的结果

通过数值算例表明在远离极值点处,我们的格式具有误差相互抵消的超收敛性质,在数值模拟中能够很好的保持解的结构。

参考文献

[1] Cui, Y. and Mao, D. (2012) Error Self-Canceling of a Difference Scheme Maintaining Two Conservation Laws for Linear Advection Equation. Mathematics of Computation, 81, 715-741.
https://doi.org/10.1090/S0025-5718-2011-02523-8
[2] Cui, Y. and Mao, D. (2007) Numerical Method Satisfying the First Two Conservation Laws for the Korteweg-De Vries Equation. Journal of Computational Physics, 227, 376-399.
https://doi.org/10.1016/j.jcp.2007.07.031
[3] 崔艳芬. 线性传输方程和KdV方程的满足两个守恒律的差分格式[D]: [博士学位论文]. 上海: 上海大学, 2008.
[4] 李红霞. 一维守恒型方程(组)的熵耗散格式[D]: [博士学位论文]. 上海: 上海大学, 2005.
[5] 王志刚. 线性传输方程满足多个守恒律的差分格式[D]: [硕士学位论文]. 上海: 上海大学, 2005.
[6] 王志刚, 茅德康. 线性传输方程满足三个守恒律的差分格式[J]. 上海大学学报(自然科学版), 2006(6): 588-592.
[7] Le Veque, R.J. (2002) Finite Volume Methods for Hyperbolic Problems. Syndicate of the University of Cambridge Press, Cambridge.
https://doi.org/10.1017/CBO9780511791253
[8] 李立康, 於崇华, 朱政华. 微分方程数值解法[M]. 上海: 复旦大学出版社, 1999.