第72章 模型的尸骨(2/2)
江临感觉这片马赛克在嘲笑他。
於是关掉可视化窗口,一头扎进几万行的c++代码里。
开始排查
第一天,他怀疑是数值黏性不够,压不住高频振盪,於是引入了人工耗散项。
结果振盪没了,但重联速率被人工耗散接管,变成了假数据。
第二天,他怀疑是网格尺度太大,局部做了amr。
结果交界面上出现了虚假的反射波。
第三天,他怀疑是边界反射,把流出边界改成了完全匹配层。
第四天到第二十天……
他像个在黑暗中乱撞的困兽,在这三件事之间反覆来回。
每修掉一个问题,另一个更诡异的数值偽影就跳出来。
有时候是质量不守恆了,有时候是磁场的散度不再为零,导致產生了单极磁荷。
第二十一天的凌晨,江临满眼血丝地看著满屏幕被注释掉的测试代码,突然感到一阵无力。
打开工作日誌,敲下了几行字。
【biskamp的图不是错的。】
【但它不能脱离那组参数、边界和数值实现,被当作无条件成立的图像。它是在那特定的参数,特定的网格解析度,特定的边界条件和特定的隱式数值耗散共同妥协下,勉强维持出来的一个结果。】
【论文里展示的,是被提纯后打扮得漂漂亮亮的图像。】
【而我现在踩到的,才是这张图像诞生前,那片充满未显式选择、数值妥协和实现细节的泥地。】
写完这一段,江临扫了一眼显示器下方,三年前写下的一张便签。
【数值图像绝对不是物理证据,它只是一台没有感情的机器,负责把你脑子里那些愚蠢的假设画出来而已。】
这张便签歷经三年的风尘,已经泛黄,胶条的边缘打著卷。
江临伸出手指,用力把它压牢。
然后在它的正下方,又贴了一张崭新的便签。
【replicate_biskamp_1986:暂缓。】
【原因:不是因为biskamp的论文错了,而是因为我还没有足够的能力,去审讯这类复杂的数值结果。】
【下一步:全面补习高阶数值偏微分方程。】
回头看著那长达二十天的排查记录,江临终於意识到了一个更深的问题。
他这二十天失败的,不是排查本身。
而是他根本不知道自己应该排查什么。
他的每一次修改,都是凭直觉和经验去盲猜的。
数值黏性不够?
他凭感觉知道。
网格不够密?
他凭以前犯过的错知道。
边界反射?
他凭听说过的案例知道。
但这些,只是他听说过的最浅薄的几种陷阱。
mhd方程组是一个高度非线性的强耦合系统。
他根本不知道在这庞大的参数空间里,还有多少种他连名字都没听说过的陷阱,正安安静静地潜伏在他的代码里,偽造著看似合理的物理现象。
以前学过的《数值分析》,他自学泰勒展开推导差分格式,计算截断误差,用冯·诺依曼方法分析一下线性方程的稳定性。
那个版本的知识,只能停留在【知道哪些格式能跑通】的幼儿园阶段。
要真正写出一篇站得住脚的数值模擬论文,或者去甄別別人的模擬是不是垃圾,需要的是【知道每一种格式,在什么样的非线性参数下,会以什么样的方式对你撒谎】的能力。
这一层硬核能力,他没有。
一念及此,他果断关掉所有关於磁重联的论文窗口,新建了一个文件夹。
【numerical_pde_advanced(高阶数值偏微分方程)】
从硬碟调出几本“砖头”。
leveque的《finite volume methods for hyperbolic problems》。
trefethen的《spectral methods in matlab》。
hairer和wanner的《solving ordinary differential equations ii》。
strikwerda的《finite difference schemes and partial differential equations》。
四本神作。
加起来一千八百多页的致密数学。
江临把【replicate_biskamp_1986】整个文件夹打了一个压缩包,贴上一个红色的標籤。
【pending: 等我把这堆数学啃完再回来收拾你。】
然后,他点开了leveque的第一页。
第十四年的整个秋天和冬天,江临完全沉浸在这四本书里。
每天平均学习六到八小时,有时候只能推进十页。
第一遍,拿著草稿纸,把书上的每一个推导亲自推一遍。
第二遍,把书上介绍的每一个数值格式,无论是godunov方法、roe格式还是高阶weno格式,全部自己写一段一维的c++代码,跑出对比图。
第三遍,也是最痛苦的一遍。
构造反例。
他故意设置极端的初始条件,比如强激波或接触间断,去把这些看似完美的格式搞崩,然后分析它们是怎么崩溃的。
简直就像是一个拆弹专家,在学习各种炸弹的起爆原理。
在这期间,他终於明白自己以前对稳定性这个词的理解有多么肤浅。
以前学的冯·诺依曼稳定性分析,只能告诉你一个线性方程在无限大均匀网格下的表现。
但现实世界里的mhd是非线性的。
他学会了用频谱分析去看待误差,明白了什么是色散关係误差,明白了什么是群速度误差,明白了保结构算法为什么比单纯的精度更重要。
每一种数学工具,都是一台照妖镜。
每一种都能识別出他之前在泥地里瞎撞时完全忽略的失败模式。
第十五年的春天,废土的冰雪开始消融,风力发电机的效率达到了峰值。
江临终於合上了最后一本书。
他没有像个毛头小子一样立刻去解冻biskamp的復现项目。
而是打开终端,在工作站里郑重其事地写下一份文档。
【数值健康检查清单v1】
这是他用一年半的时间,用一千八百页的数学底蕴,熬出来的一份审讯大纲。
一共十二项必查项。
他在开头写道。
【对於任何数值模擬结果,以下十二项未经自证,结果一律不予採信,视为偽造物理。】
第一项:线性稳定性与 cfl 余量。
第二项:守恆量检查:质量、动量、能量。
第三项:??b=0约束误差。
第四项:网格解析度与扩散区厚度比例。
第五项:时间步长收敛测试。
第六项:边界反射测试。
第七项:初始扰动频谱检查。
第八项:人工黏性/数值耗散敏感性。
第九项:网格加密收敛。
第十项:改变lundquist数后的拓扑稳健性。
第十一项:与解析標度律的量级比对。
第十二项:可视化结果不得单独作为证据。
这份清单后来被他抄写出来,贴在工作站显示器旁边的石子墙上。
每次跑任何新的模擬之前,他必须像飞行员起飞前一样,逐项打勾。
在跑biskamp復现崩溃之前,他从来不知道世界上还需要这样一份清单。
以为只要把公式敲进电脑,电脑就会给他真理。
现在他知道了。
墙上这份薄薄的清单,比那张被顶级期刊发表的,漂漂亮亮的biskamp电流片图,更接近真实的物理法则。
第十五年的夏天,江临的目光转向了磁重联领域在二十一世纪初最大的突破。
plasmoid instability(等离子体团/磁岛不稳定性)。
他调出了两篇里程碑式的文献: loureiro,n.f.,schekochihin,a.a.,& cowley,s.c.(2007).instability of current sheets and formation of plasmoid chains.
bhattacharjee,a.,huang,y.m., yang,h.,& rogers,b.(2009). fast reconnection in high-lundquist-number plasmas due to the plasmoid instability.
这两篇论文给出了一条逃离sweet-parker慢结构的重要路线。
它们的核心结论暴烈得就像是一条泛滥的大河。
当一条sweet-parker电流片被拉得足够长、长宽比突破某一个临界值时,它就不再是那条安静死板的麵条了。
它会自己失稳。
从內部断裂,碎成一串像珍珠项炼一样的磁岛。
而每个大磁岛之间,会形成新的更短的微型电流片。
这些微型电流片如果还足够长,会继续碎裂出更小的磁岛。
这是一种分形几何般的联级断裂。
因为每个微型电流片都很短,所以物质排出极快,整体的重联速率直接跳出了慢速深渊,变成了一个与lundquist数几乎无关的快重联。
在相应二维电阻mhd参数区间內,整体重联率开始呈现弱依赖甚至近似无关的趋势。
极其优美。
江临满怀期待地开始读loureiro2007年的原稿。
前十六页,物理图像清晰,推导动机明確。
但当他翻到第十七页,看到作者用来证明不稳定性增长率的数学推导时,江临的手再次停住了。
论文动用了一个极其硬核的解析数学工具。
渐近匹配展开。
作者把整个系统强行切成了两半。
內层:电流片中心的极薄区域,这里耗散项主导,採用奇异摄动展开,方程保留了高阶导数。
外层:电流片外部的宏观区域,这里理想mhd主导,採用正则展开。
然后,最恐怖的一步来了。
要求內层解的外部极限,必须严丝合缝地等於外层解的內部极限。
两层之间通过一套极其复杂的匹配条件衔接,最终解出本徵值。
江临的眉头拧成了一个疙瘩。
他以前学的《数学物理方法》当然讲过奇异摄动和渐近匹配。
但他清楚地记得,那是宝宝巴士版本。
视频里的教授在黑板上画一个含有极小参数?的常微分方程,解一个最规则的边界层问题。
但loureiro用的这套版本,简直是重武器级別的。
內层是一个非线性的mhd偏微分方程组的线性化扰动方程,外层是一个已经被驱动的动態电流片几何背景,两层之间的边界根本不是固定的,而是隨著物理参数动態耦合的。
那个匹配条件本身,就需要证明在这个渐近极限下是良態的。
江临从第十七页开始,读得越来越慢。
读到第二十页的时候,他颓然地放下了笔。
他读不懂。
这不是指他看不懂某个具体的代数变形。
如果只看纸面,论文里的每一行偏导数展开,每一项係数合併,他都能验算得一字不差。
但他没办法判断那一整套浩大的渐近匹配框架,在物理上到底为什么成立。
他无法一眼看透为什么外层磁场的泰勒展开只取到一阶,而內层的速度场却必须保留二阶项?
为什么在匹配区,某个特定的流函数分量一定会衰减?
他没有【看穿】这个工具的上帝视角。
他只有【机械验算】的奴隶本能。
机械验算,只能保证他这道算术题没算错。
无法保证他真正理解了这个工具的灵魂。
如果稍微改变一下物理背景,换一个方程,他绝不可能自己独立建立起这样一套匹配框架。
江临没有强迫自己继续往下读。
假装看懂是对自己最大的背叛。
他默默地关掉loureiro的论文pdf。
在工作站里,新建文件夹。
【渐近方法深潜】
然后在硬碟里点开了一部史诗级砖头书。
bender,c.m., & orszag,s.a.(1978). advanced mathematical methods for scientists and engineers.
一共七百九十三页。
江临打开第一章,从最简单的wkb近似开始,重新走了一遍他以前自以为学过的所有內容。
很快,他出了一身冷汗。
因为他发现自己当年真的只是记住了考点,並没有真正理解。
比如wkb近似。
当年他只会套公式求相函数。
现在,跟著bender和orszag的魔鬼推导,他才真正看懂wkb为什么在转折点附近会失效甚至发散。
原来是因为在那里,波的局部波长趋於无限大,渐近假设崩溃。
所以才必须引入airy函数,在转折点附近建立一个过渡层,把两边的wkb解缝合起来。
比如多尺度展开,为什么不能简单地把快慢尺度叠加?
是因为非线性项会產生长期项,导致级数在长时间后爆炸。
必须通过引入慢时间变量来主动消除长期项,这其实是一种高明的物理隔离。
最让他震撼的,是渐近级数与普通收敛级数的根本区別。
收敛级数是项数越多,误差越小,但前几项可能离真值很远。
而渐近级数却是,虽然项数趋於无穷时它会发散到无穷大,但在保留前两三项时,它却能给出极其精確的局部近似。
渐近方法,根本不是追求严密数学收敛的乖宝宝,而是在悬崖边缘跳舞,用野蛮但精准的直觉去逼近真理的刺客工具。
这些东西,他都学过。
但学过和理解,中间隔著十万八千里。
第十五年的整个秋天和冬天,江临像个被困在迷宫里的老鼠,日夜啃噬著这块名叫bender&orszag的砖头。
读了和mhd强相关的核心章节,奇异摄动,边界层理论,匹配渐近展开。
然后他发现地基不稳,又回过头去死磕主导平衡分析,渐近级数敛散性。
甚至为了理解奇点附近的奇异性,他去研究了斯托克斯现象。
最后,顺手把应用部分也刷了。
延迟微分方程,积分方程的laplace方法,非线性振盪的lindstedt-poincaré摄动。
七百九十三页的厚度,几乎每一页平均有一到两个极其烧脑的课后习题。
江临不敢放过任何一个。
第十六年的春天,当废土的第一场春雨敲打玻璃时,江临关掉了这本书。
走到墙边,拿起笔,写下一行他用半条命换来的认知。
渐近匹配展开绝不是单纯的代数数学技巧,它是物理直觉的严格数学化翻译。
如果你的物理直觉错了,怎么匹配都是一团乱麻。
如果你的直觉对了,匹配过程只是把你的直觉翻译成一种可被同行验证的形式语言。
写完这三句话,他感觉眼眶微微发热。
立即回到桌前,重新双击点开了loureiro 2007年的论文pdf。
再次从第十七页开始读。
这一次,他不再是那个在数字里打转的验算工,感觉完全变了。
当他看到loureiro构建內外层匹配边界时,他会在脑海中先停下来,问自己。
如果我是作者,在这里,內层的某一个物理量,在外层应该按什么规律衰减?
是代数衰减还是指数衰减?”
他先用物理直觉给出答案,然后再去看loureiro的方程。
完全吻合。
他发现,loureiro的每一步看似复杂的代数匹配背后,都对应著一个精准的物理直觉。
因为直觉对了,所以內层展开的高阶项能和外层的极限完美咬合。
因为咬合对了,所以最后解出来的特徵值方程,给出了正確的plasmoid不稳定性增长率閾值。
江临一口气读完了整篇论文。
通体舒泰,像是在三伏天喝了一桶冰水。
紧接著,他趁热打铁,又去读了bhattacharjee 2009的非线性演化论文。
这一次,他毫无阻碍。
虽然bhattacharjee用的非线性渐近分析更加繁杂,但核心的直觉和工具与loureiro是一脉相承的。
他的视线在公式间游刃有余地穿梭,甚至能看出作者在某一步做截断时的巧妙考量。
当翻到论文最后一页的结论时,一个念头,像一颗种子一样,在他脑海深处破土而出。
他模糊地感觉到自己已经掌握了这套名叫渐近匹配的重武器。
也许,未来有一天,他可以用这套同样的工具,去推导一个和当前文献稍微不一样的物理问题。
比如,加入某种特定的废土环境背景场?
这种创造的衝动,是他这十几年钻在故纸堆里前所未有的。
不过江临並没有急於求成,立即去尝试。
他打开手边的笔记本,郑重地记下一行字。
【plasmoid类磁岛衍生问题,渐近工具已彻底具备。暂不发散,作为核心弹药,储备待用。】