斜率限制器(slope limiter)
你想要一個既「尖銳」(高階,使光滑波不被模糊)又「乾淨」(沒有越過激波的虛假波動)的有限體積格式。單純的高階格式給你尖銳,卻在不連續處附近像被敲的鐘一樣振鈴,製造出不符物理的新極大與極小值——而在流場求解器中,這些越界可能意味著負密度與程式崩潰。斜率限制器就是那個非線性開關:它偵測你何時靠近陡峭鋒面,並在那裡把格式「調降」到安全、不振盪的低階,同時在解光滑之處保留高階。
其機制如下。要超過一階,有限體積格式在每個格內重建一個有斜率的(線性)剖面而非平的,並用相鄰格平均的差作為斜率。但在激波附近那個斜率很大,造成越界與下衝。斜率限制器把左鄰所建議的斜率與右鄰所建議的斜率相比,並縮小(限制)重建的斜率,使重建值絕不超過周圍的格平均。例如經典的 minmod 限制器取兩個單側斜率中量值較小者,並在它們正負號相反時把它整個歸零(變號代表一個極值)。結果是「總變差遞減(TVD)」性質:格式絕不增加解上下起伏的總變差,所以不會出現新的波動。
斜率限制器是現代激波捕捉格式(MUSCL、TVD 及其親族)實務上的核心,也是有限體積程式能跑跨音速流與爆炸而不爆掉的原因。誠實藏在無可避免的妥協裡。限制必然也會在光滑極值處削去重建——一個光滑的峰局部看起來像一個極值,所以限制器把它壓平,恰恰在極大與極小處把精度階數降到一階。不同的限制器(minmod、van Leer、superbee)在擴散與尖銳之間有不同的取捨:minmod 最擴散、最安全,superbee 最尖銳卻可能人為地把光滑剖面變陡。沒有單一最佳的限制器——它是針對手頭問題的調校選擇。
格 i 的 minmod 斜率比較左斜率 (u_i - u_{i-1}) 與右斜率 (u_{i+1} - u_i):若同號,取量值較小者;若異號,取 0。在光滑斜坡附近兩個斜率一致,格式保持二階;在激波處異號檢驗觸發,斜率被歸零,格式在那裡降為安全的一階迎風。
光滑處高階、激波處一階——一個消滅越界的非線性開關。
限制器必然也會削去光滑的極值——一個真正的光滑峰在局部上與極值難以區分,所以精度在極大與極小處降為一階。這是保證不振盪的代價;沒有任何限制器能避免它。