數值通量(numerical flux)
在有限體積法中,兩個相鄰的格各自儲存一個平均值,而它們對兩格之間那個面上的值通常「各執一詞」——界面上有一個跳變。但要更新兩個格,你需要一個單一、雙方同意的「穿過該面的流」。數值通量就是把兩個衝突的格值拿來、產生一個一致通量供兩側共用的配方。它是整個方法中最關鍵的單一選擇。
形式上,格 i 與 i+1 之間面上的數值通量是左態 u_L = u_i 與右態 u_R = u_{i+1} 的一個函數 F_hat(u_L, u_R)。兩個要求讓它合理。「相容性」:當兩個態一致時,F_hat(u, u) 必須等於真實的物理通量 f(u)。「守恆性」:兩個相鄰格使用「同一個」F_hat(以相反正負號),所以界面上不會憑空生出東西。在這些規則內有極大的自由。「中心式」通量平均兩側,F_hat = (f(u_L) + f(u_R))/2——對光滑解精確,但對對流不穩定,會產生振盪。「迎風式」通量則取流「來」的那一側的值(若風從左吹向右,用 u_L),尊重資訊傳播的方向,穩定但添加數值擴散。對非線性守恆律(氣體動力學),正確的選擇是黎曼求解器——精確或近似(Roe、HLL、Lax-Friedrichs)——它在界面上解出波的結構。
數值通量正是物理、精度與穩定性一次全被決定之處,而其誠實是一個真實的取捨,沒有免費的午餐。中心式通量二階精確卻在激波附近振盪(對對流還可能爆掉);一階迎風通量極為穩定且能捕捉激波,卻以過度的數值擴散把尖銳鋒面抹糊。你無法用一個固定的線性格式在不連續處附近「同時」擁有無限精度「和」保證不振盪——Godunov 定理如是說。現代的解法是高解析度格式,它在光滑區域結合高階通量、在激波附近結合低階迎風通量,由斜率限制器切換。
對速度 a > 0 的對流,格 i 右面上的迎風通量就是 F = a * u_i(取迎風側、即左格的值),而不穩定的中心式通量會是 F = a * (u_i + u_{i+1})/2。迎風選擇壓制振盪卻把移動的階梯抹糊;中心式選擇在光滑資料上保持尖銳,卻在跳變附近振鈴。
中心式 = 精確但振盪;迎風 = 穩定但擴散。通量的選擇「就是」方法本身。
根據 Godunov 定理,沒有任何高於一階的固定「線性」格式能在不連續處附近避免振盪。高精度與不振盪只能由透過斜率限制器切換階數的非線性高解析度格式來調和——沒有免費的午餐。