1. 引言
Burgers方程是流体力学中一个非常重要和基本的非线性偏微分方程,广泛的应用于空气、动力学、湍流、热传导、交通流、半导体迷你以及地下水污染等领域;同时Burgers方程可以作为流体动力学中Navier-Stokes方程的简化模型方程,又可以作为浅水波等问题的数学模型。因此讨论这类方程的数值解法,具有重要的理论和现实意义。
求解Burgers方程的数值方法主要有有限差分法、有限体积法、有限元法 [1] [2] [3] [4] [5] 。其中,有限元法由于适合处理复杂几何形状和边界条件而成为计算力学中的优选方法,目前已经发展了多种有限元数值计算方法。标准的Galerkin有限元法实质上采用的是中心差分格式,随着对流项越来越强,呈现强的非线性特性,从而引起数值解的振荡失真。Petrov-Galerkin法(P-G法) [6] 通过将权函数取为基函数的某种修正形式使计算格式具有人工耗散能力,提高了解的精度,随后发展了多种迎风方法,如流线迎风Petrov-Galerkin法等。上述各方法都包含一个对原Galerkin法的耗散修正项,产生了一个包括二阶空间导数的附加项。Taylor-Galerkin [7] 有限元法(T-G法)时间方向上的Taylor展开先于空间上的Galerkin离散,相比P-G法不需要使用特殊的权函数,也无需确定人工耗散自由参数来达到高精度。基于特征线的分裂算法(CBS法) [8] 是结合分裂算法与特征线Galerkin法的一种比较新的算法,在流体和固体动力学问题中得到了广泛的研究。
算子分裂法 [9] [10] [11] 是Yanenko在1971年提出的经典分裂法,该算法具有格式灵活、稳定性好等特点。曹志先 [12] 等用算子分裂法求解了Burgers方程,用显式差分格式处理扩散算子,用特征线法处理纯对流算子,并分析了该算法的稳定性条件,还对一、二维Burgers方程进行数值解,所得结果与分析解或已有数值解吻合。
本文在文献 [13] 的基础上,采用基于算子分裂的有限元方法求解二维非定常粘性的Burgers方程,在每个时间层上应用算子分裂技术将Burgers方程分裂成纯对流子方程和扩散子方程,这样可以避免两种不同性质的物理过程在一起求解时计算的困难。对流方程时间离散采取中心差分格式,空间的离散采用标准的Galerkin有限元法,将其结果作为求解扩散子方程的初始值。扩散子方程的时间离散采取向后差分格式,空间的离散仍采用标准的Galerkin有限元法。该方法的另一个创新之处在于对流部分特殊的显式处理,使得在一个步长的扩散修正过程中,对流部分以局部较小的时间步长执行有限次数,这样可以从根本上提高计算格式的稳定性。数值模拟验证了该算法单步和多步格式的稳定性和收敛性。
2. 计算方法
本文主要涉及的是二维粘性Burgers方程:
in
具有的边界条件和初始条件分别为:, in,
这里的表示粘性系数。
在这部分我们将推导出一种新的分裂法求解二维粘性的Burgers方程。首先介绍一些符号:剖分时间区间:,其中,;和分别代表近似解在和处的值,但是当给定时,和将表示精确解在和处的值;类似于。
2.1. 单步格式
首先采用标准算子分裂技术将对流扩散方程分裂成一个纯对流子方程和一个扩散子方程,在时间推进方面分别用中心差分格式和向后的欧拉格式近似这两个方程,得到:
, (1)
,其中,; (2)
我们使用有限元方法分别求解方程(1)(2)的和,因此需要两个方程的变分形式。直接可以得到方程(2)的变分形式即:找到使得在边界有,并且求解
(3)
方程(1)的求解比较复杂,因为该格式是隐式还涉及了一个线性化对流方程的解的问题。求解的主要思想还是找到一个显式的格式去计算这个线性化的对流方程。在此我们应用泰勒展开式去计算即:
再使用对流子方程:
,
可以得到:
利用上述的关系式,方程(1)可以改写为:
(4)
注意到方程(1)是一个纯对流方程,仅需要设置来流方向的边界条件。
给方程(4)两边乘以一个测试函数,并且在上积分,使用分部积分可以得到:
现在我们利用一些有限元方法转向空间的离散。假设是近似Sobolev空间有限元空间,是到的算子插值。基于变分形式(3) (5),下面提出求解二维粘性Burgers方程的单步算法。
单步算法:
1) 计算初始值,对于
2) 找到使得在满足,并且求解
3) 找到使得在满足,并且求解
2.2. 多步算法
由于单步格式显示的求解二维粘性Burgers方程的单步算法,其稳定性不够好,为了提高算法的稳定性,我们可以采用在每一步对扩散方程的修正过程中,多次的执行对流步,以至于在对流部分可以使用更小的时间步长。为此我们将步骤2的结果写成如下的形式:
(6)
为了得到,多步格式以较小的时间步长运行对流步次,即我们要计算:
(7)
我们分别称和为局部时间步长和全局时间步长。利用多步迭代(7)代替步骤2,可以得到下面的多步格式。
多步算法:
2) 设,并计算,其中,使得在边界有,对所有的求解下面的方程:
3. 数值算例
例1 方程系数和区域如下所示:,,,边界条件,精确解为:
.
现在我们应用上述的算法求解算例1,确定其在时间和空间方面的收敛精度。空间步长为的均匀网格,表1显示了在时间方面的收敛精度。表2给出了在固定的时间步长,单步算法在空间方面的收敛精度。从表中我们可以清晰的看到单步算法在时间方面是一阶收敛精度,而在空间有二阶的收敛精度。在此说明,本节所示的所有误差是L2范数在终端时刻的误差,除非另有说明。
从表1中可以看到,当取时,这对保持包含在对流步的显示时间推进的稳定性是很大的时间步长,但只运用单步算法我们就得到收敛的计算结果,其结果如图1所示。同理,在表2中确定了该算例在空间方面的收敛精度,在取时网格的剖分是很粗的,但是运用上述的单步算法计算结果是收敛的,如图2所示。上述表中的计算的收敛结果说明了单步算法的可行性和实用性。
例2 方程参数如下所示:,,,,边界条件,精确解有如下的形式:
为了确定在空间方面单步格式的实际收敛阶,我们选择了很小的时间步长,观察当空间步长减半的情况下误差的变化。表3显示了当时间步长固定,数值算例在不同网格大小的L2的误差,可以清楚的看到单步格式在空间是二阶收敛精度。
现在我们取的均匀网格,在如下的时间步长序列运行单步格式,寻找数值格式的稳定区域。数值结果如表4所示,可以观察到时单步算法是不收敛的,而且虽然时算法收敛,但计算结果有很大的振荡。因此要得到满意的计算结果,必须采用合适的较小的时间步长。限制这样时间步长是自然的,因为这是我们使用的显示时间推进的稳定性条件所要求的。在下面的部分,可以看到多步格式可以从根本上提高稳定性条件。
从上面可以看到,单步格式可以得到期望的收敛性,而且当它收敛时可以保持精确的收敛精度。然
Table 1. Error estimation and convergence order of single method with
表1. 取,单步法计算的误差估计及其收敛阶
Table 2. Error estimation and convergence order of single method with
表2. 取,单步法计算的误差估计及其收敛阶
Table 3. Error estimation and convergence order of single method with
表3. 取,单步法计算的误差估计及其收敛阶
Table 4. Error estimation and convergence order of single method with
表4. 取,单步法计算的误差估计及其收敛阶
Figure 1.,
图1.,
Figure 2.,
图2.,
而,这个格式要求合适的较小的时间步长,限制了其在实际应用。多步格式的提出是为了提高单步格式的稳定性,下面是多步格式提高算法稳定性的测试。
在下面的数值实验中,对确定的,取为多步数,运行多步格式直到观察算法收敛并记录相关的多步数。表5显示了计算的数值结果,从表中可以看到,当我们取时,这对保持对流步的显示时间推进的稳定性是很大的时间步长,但是在我们仍然得到多步格式的计算结果是收敛的。计算结果已表明对于给定的单步格式可能不收敛,但当取多步数合适的大,多步格式计算的结果总是收敛的。因此我们可以总结到,如果给定一个合适的大的,多步格式可以被认为是无条件稳定的格式。
我们也计算了在固定的步数和空间步长下,多步格式的收敛精度,计算结果如表6所示。将表6结果与利用单步格式计算的表4对比,可以清晰的观察到数值算例收敛的时间序列,多步法的计算结果明显优于单步格式的结果,图3所示了取,的条件下,单步和多步算法数值结果的比较。
Table 5. Numerical results of multistep method with
表5. 取,多步法的计算的数值结果
Table 6. Numerical results of multistep method with and
表6. 取,,多步法的计算结果
Figure 3. The left, the right with fixed and
图3. 取,,左边右边
4. 结论
本文探讨了一种新的算子分裂算法求解二维粘性Burgers方程。在每一步迭代过程中,先后求解一个纯对流和一个纯扩散的问题。提出了对流问题时间推进的显示格式,但时间推进的显示化可能会引起对时间步长严格的限制,因此提出了在较小的时间步长下显示的多步格式以至于这个方法的结果表现的像无条件稳定的方法。扩散问题在每一步迭代过程中总是自伴的和强制的,以便使用许多存在的最优预条件的迭代求解器可以有效的解决它。通过数值算例呈现了新格式单步和多步方法求解的稳定性、收敛性,以及已经验证了其最优的收敛阶。
参考文献