# 河流 CFD：方法、範圍與驗證

本版新增的 CFD 對象是河水。飛機的 Acro 姿態控制仍沿用先前的簡化運動模型，沒有新增 F-22 氣動係數、全機流場或推進器流場模型。

## 實際求解的物理量

在水平 Cartesian 網格上，以 SI 單位求解深度平均 Saint-Venant 方程：

- 質量：∂h/∂t + ∂(hu)/∂x + ∂(hv)/∂z = 0。
- x 動量：∂(hu)/∂t + ∂(hu² + gh²/2)/∂x + ∂(huv)/∂z = −gh ∂b/∂x − 河床摩擦。
- z 動量：∂(hv)/∂t + ∂(huv)/∂x + ∂(hv² + gh²/2)/∂z = −gh ∂b/∂z − 河床摩擦。

h 是水深，b 是河床高程，u/v 是兩個水平方向的深度平均速度。自由水面高程 η = h + b。g = 9.81 m/s²。

## 離散與邊界

- 一階有限體積 Rusanov 通量。
- Audusse 等人的局部靜水重建與左右床坡壓力修正；可保持非平坦河床的靜水平衡。
- 顯式時間積分，dt 由 CFL ≤ 0.40 限制，使用兩個方向的波速和。
- 水深非負檢查、乾濕處理；若發生超過浮點容許值的負水深或非有限值，停止求解並顯示錯誤。
- 半隱式 Manning 河床摩擦，預設 n = 0.028，可調整。預設值為本合成場景的示範參數。
- 上游指定總流量，預設 1100 m³/s，以濕截面分配。下游給定水面高程 0.08 m。橫向網格外緣為反射邊界，河岸由床高及濕乾狀態決定。
- 初始水面為水平，初始速度沿河道切向，依各截面面積給定指定流量；不是已收斂的穩態解。更改上游流量後，擾動需經波動與流動傳播至下游。

## 在 Three.js 中的耦合

96 × 192 網格、4 m 格距，計算範圍為 384 × 768 m。河床與畫面地形使用同一個高度函數。

Float32 資料貼圖每格包含 η、u、v、h。GPU 以計算出的 η 改變水面頂點，以水位梯度改變表面法線，以 u/v 顯示方向箭頭及流速色圖。水深圖及 CSV 也讀取同一份數值場。反射和折射為光學呈現；4 m 以下的細微波紋仍為材質效果。

主求解狀態及水量帳使用 Float64。可用瀏覽器 Worker 在背景計算，並完全內嵌於單一 HTML。若本地檔案的瀏覽器限制 Worker，改用同一求解器在主執行緒運算。介面顯示求解時間、運算耗時與落後量，不以視覺動畫時間冒充已完成的模擬時間。

飛行時採移動計算區：以整數網格位移複製重疊區的守恆量，新區域按初始條件加入。移入、移出及開放邊界的水量分別記帳。這是有限範圍即時計算，不代表整條無限河流已被全域求解。打開「河流 CFD」會固定飛行位置，讓同一段水流持續演化。

「施加水面擾動」加入指定的局部徑向動量，不加入或移除水量。

## 驗證

`validation/cfd-check.cjs` 可在 Node 執行，結果儲存在 `validation/cfd-results.json`：

1. 非平坦河床、包含乾燥高地的靜水保持。
2. 封閉域擾動的水量守恆及非零傳播。
3. 與淺水方程濕床潰壩精確 Riemann 解比較；由 1 m 加密至 0.5 m 的 L1 誤差必須下降。
4. 乾床潰壩的非負水深、有限值及水量守恆。
5. 開放邊界及移動域的水量帳。
6. 均勻流在 Manning 摩擦下減速。

水量平衡誤差衡量離散守恆，不代表水位或流速的整體物理精度。基準通過也不等於實際河流的驗證或工程認證。

## 限制

地形、流量與粗糙度是未經實測校準的合成條件。模型假設垂向壓力近似靜水分布，忽略垂向速度結構，不解析三維湍流、氣泡、破碎浪、表面張力、河床沖刷、飛機尾流或噴流。Rusanov 一階格式具有數值耗散；4 m 網格不能解析小於網格尺度的流動細節。曲面水的反射仍採平面反射近似。

若要做 F-22 全機可壓縮三維 CFD，需另外準備可用於計算的封閉網格、飛行／引擎邊界條件、物理模型與網格收斂驗證，並使用適當計算資源；目前外觀模型和這個 HTML 沒有提供這些結果。

## 方法來源

- Audusse, Bouchut, Bristeau, Klein & Perthame (2004), A Fast and Stable Well-Balanced Scheme with Hydrostatic Reconstruction for Shallow Water Flows. https://doi.org/10.1137/S1064827503431090
- Clawpack Riemann book, The shallow water equations. https://www.clawpack.org/riemann_book/html/Shallow_water.html
- Clawpack, Shallow water Riemann solvers. https://www.clawpack.org/riemann/Shallow_water_Riemann_solvers.html

數值程式為本專案原創實作；上述來源為方程與方法參考，未宣稱與 Clawpack 求解器等同。
