本文译自作者的韩语原文。 阅读原文(한국어)
Numerical Dungeon: 用游戏学数值方法
线性且单调的高阶被 Godunov 挡住,答错三次 HP 归零,这一关就关掉。
Numerical Dungeon#
只在书上过一遍,CFL 越过 1 的那一下手里没有感觉。五个关卡用错答扣 HP,要分清的是依赖域、限制器、Riemann 问题,还有 Abgrall 条件各自在哪里岔开。
切换关卡编号,测验所问的格式会跟着变,答错一次就扣掉 1 格 HP。
HP 归零,这一局就结束。越往后的关卡,答对给的 XP 越大,所以前几关剩下的 HP 就是 Boss 战的余量。
规则
- HP 3 格 - 答错扣 1 HP。HP 归零即游戏结束!
- XP - 每次答对获得 XP。越往后奖励越大。
- 难度 - 第 1
2 关基础,34 关核心理论,第 5 关终极 Boss。
每关先阅读概念讲解,然后回答测验题。 答错也会附上解析。那段解析就是下一局的提示。
各关真正在问的事
第 1 关: CFL 条件#
CFL 条件与 domain of dependence(依赖域)概念直接相关。 数值信息的传播速度必须快于物理信息的传播速度。 隐式(implicit)格式没有 CFL 限制,但需要付出求解非线性系统的代价。
CFL 一旦大于 1,一个网格里的数值依赖域就比物理依赖域窄。这一格的更新在索要根本到不了的信息,空出来的部分由外推填上。外推会以振荡的形式回来。HP 只有 3 格,就是这种失误只准犯三次。隐式格式把模板扩成全域,时间步限制随之解开。空出来的位置上,坐着的是每一步的迭代成本。
第 2 关: 数值扩散#
减少数值扩散需要高阶格式,但 根据 Godunov 定理需要非线性限制器。 常用限制器: minmod, van Leer, superbee, MC limiter。
一阶迎风如何把这份扩散扛下来,FTCS 与迎风的 CFL 交换里已经有数字。先看抹平和振荡怎样在同一份 CFL 预算里对调,再去碰高阶,第 2 关的错答会少一些。
第 3 关: Godunov 定理#
该定理推动了 TVD(Total Variation Diminishing)、ENO、WENO 等 现代数值方法的发展。 Godunov 挡住的组合,是又线性、又单调、又高阶。非线性一拿掉,稳定性和精度就不会一起走。
TVD、ENO、WENO 用非线性绕开这条禁令。minmod、van Leer、superbee、MC 都是看着相邻斜率,逐个单元重新选斜率。没有一个把线性系数钉死。钉死了,第 3 关的答案就反了。
第 4 关: Riemann 问题#
Sod、Lax、Shu-Osher 等标准测试问题可以验证 Riemann solver。 一道间断里,激波、接触和膨胀要一起拆开。这三个在一个单元里对不齐,压力振荡会以下一关同样的症状回来。
第 5 关: 多相流压力振荡#
Abgrall 条件是多相流数值方法的起点。 体积分数可以动,压力却该保持均匀。这一对被拆开时,晃的只有压力。那和密度误差不是同一种症状。
关掉限制器,Boss战会先把HP耗尽#
把高阶格式的线性系数钉死,就回到 Godunov 已经拦住的那种组合。线性又单调的格式到不了二阶。关掉限制器,第 3 关会先错,3 格 HP 在几次振荡里耗尽。前几关在 CFL 上省下的 HP,得留到这里。
第 5 关的压力振荡,出现在体积分数和压力各走各的时候。Abgrall 条件就是要求这一对还对齐。在一个单元里解激波,和Godunov 激波管是同一笔计算。那一格的波分解错了,压力振荡在地城外面也会以同样的形状回来。
相关文章
如果对您有帮助,请分享。