仅用一种格式计算效率通常不如同时用几种格式,在计算的时候把各个格式的“好”的地方挑出来,“坏”的地方舍弃,从而实现计算效率的提升。
参考书:
(1) J.W. Thomas - Numerical Partial Differential Equations_ Finite Difference Methods (1995, Springer)
(2) 张强《偏微分方程的有限差分方法》科学出版社,2019年1月版。
(3) K. W. Morton, D. F. Mayers - Numerical solution of partial differential equations (2005, Cambridge University Press)
今天的内容包括:
![34ab5330f87262d0ca9494ef691e96d2.png](https://i-blog.csdnimg.cn/blog_migrate/5c1fd7d35b6196e062ec000fcefc93a3.jpeg)
1 时间步长的轮替策略
等距网格通常不是数值计算的最佳选择, 如果能够依据真解的局部光滑程度, 疏密相间设置时空网格点, 则利用同一类型格式达到用户精度要求的整体计算量会显著减少, 相应CPU时间会得到大幅度的降低. 下面设空间网格是等距的.
例 在保证全显格式模稳定的前提下, 若采用等距时间网格, 则可用的最大时间步长是
![]()
若循环交替使用两个时间步长和
则可用的平均时间步长
可以达到
![]()
证明:用Fourier方法的基本原理, 经过
格式是
取Chebyshev最佳逼近多项式, 即
可以满足上式, 两个网比满足
2 交替使用不同格式
进行数值计算时可以交替使用两种格式,实现效率提升.
(1)按空间标号分组. 把空间指标是奇数(偶数)的点叫做奇数点(偶数点), 奇数点采用全显格式, 偶数点采用全隐格式, 则有
计算的时候, 先显式计算所有奇数点值, 再求余下的偶数点值, 这样求解过程可以显式完成. 这个格式叫半隐格式. 这个格式的局部截断误差阶是(2,1).
分析
让
与全显格式相比, 这个交替格式有宽松的
(2)按时空指标之和分组. 若时空指标之和是奇数(偶数), 则把它叫做奇数点(偶数点), 让奇数点采用全显格式, 偶数点采用全隐格式, 可得到跳点格式
它无条件具有
当
消去二阶中心差商项可得
再消去奇数点值
这就是DF格式. 即偶数点集构成了DF格式. 当网比固定时, 跳点格式有二阶相容性.
(3)按时间标号分组. 如果时间指标是奇数(偶数), 则称之为奇数点(偶数点), 在时间推进过程中交替使用全显和全隐格式, 即可得到显隐交替格式. 当然, 显隐交替格式比全隐格式的计算效率更高. 由于执行次序不同, 可以先显再隐:
也可以先隐再显:
容易验证这两个格式都是无条件
先显再隐格式的偶数点对应Crank-Nicolson格式, 奇数点对应Richardson格式, 因此任意网格点都有(2,2)阶局部截断误差.
3 Saul'ev格式
Saul'ev格式是非对称格式, 采取左低右高或左高右低的方式, 不再左右对称.
偏右版本(左低右高):
偏左版本(左高右低):
![v2-6a24b0aba5b42cf8f1ea747a5186df91_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=b220b04b-4035-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-6a24b0aba5b42cf8f1ea747a5186df91_b.jpg)
偏右版本的离散过程如下: 设
再用一阶空间导数的半步中心差商, 并上下迁移时间的离散位置, 得到
继续用中心差商离散一阶空间导数, 有
这里的三阶导数可以迁移到离散焦点:
略去无穷小量, 用数值解代替真解即可得到差分方程.
根据构造过程, Saul'ev格式的局部截断误差是
这是有条件相容的! 容易验证, Saul'ev格式无条件有
一般不单独使用Saul'ev格式, 而是综合运用两个版本. 4种策略如下:
(1) 循环扫描策略: 连续两次的时间推进过程中, 交替使用Saul'ev格式的两个版本.
消去中间时间层网格函数
局部截断误差是
![1f25e18bf41090522b52368d2b0093e7.png](https://i-blog.csdnimg.cn/blog_migrate/5ef7141f429215aa976687f2b120c022.png)
(2) 平均策略. 用Saul'ev格式的两个版本给出后续时刻的两种网格函数
消去辅助的
局部截断误差是
这两种策略都具有整体二阶的局部截断误差, 比单独用Saul'ev好.
注:计算局部截断误差需要消去辅助的网格函数(回顾局部截断误差的定义). 但是分析稳定性不需要消去辅助网格函数.
(3) 显式分组格式. 如下图, 搭建Saul'ev格式的两个版本: (
![09aeb517097f53523ebbf0a73ccf4b13.png](https://i-blog.csdnimg.cn/blog_migrate/fd107d84ddd3fe908378c48af9d5b46a.png)
把上面看作
把空间网格点按奇数点与偶数点分成两组, 各组的推进可以并行计算, 分配给不同的CPU来执行, 计算效率提高.
显式分组格式与Saul'ev格式有相同的相容阶, 且显式分组格式
(4)隐式分组格式: 相当于把显式分组格式的思想作推广. 把空间网格点分割成若干个小规模的网格点组. (下图中,
![1387bf6f647d9b8e4c92218550ecbd87.png](https://i-blog.csdnimg.cn/blog_migrate/c319c233a6d7890ff8d1bf1617518d57.png)
在网格点组的内部用全隐格式, 而在网格点组的边界位置用Saul'ev格式(偏左或偏右). 这样, 全隐格式的耦合规模下降, 且各组变成线性方程组以后可以同步求解(并行计算), 每个网格点组只需要相邻点组提供两个公共数据即可, 并行效率很高. 此外, 隐式分组格式可以用更大的时间步长.
![835d88b1361748971bf663ddc8dea125.png](https://i-blog.csdnimg.cn/blog_migrate/aea8451dca549a2adbd61b807f225c0f.png)
今天内容貌似比上次要少一点,但实际上我省略了很多重复性的计算工作(但也有必要训练),读者需要自行补充。