# 洪水怎样漫过街道？

在二维网格上，追踪水面差驱动的水量交换。

专题：河流水动力。教学合成算例，待独立专业审稿。

## 从一条线，展开成一张面

当水离开河槽，沿街道和空地分流，只看纵向的一条线就不够了。把地面划成网格，每格记录地面高程和水深，让水在相邻格子之间交换，就能开始描述平面上的路径。

12×10个正方形格子，每格10m×10m，域长120m宽100m。采用二维扩散波的显式教学近似，只保留水面坡降与摩阻平衡，不求解完整含惯性的二维浅水动量方程。

## 水深不同，不一定有流动

判断水往哪里走，要看水面高程，而不只是水深。低洼处可以水深很大，但与旁边水面一样高，这时并不需要横向流动。把地面高程加上水深，才能比较两格的水面。

η=z+h。地面沿x方向以0.005坡度下降，中央4列×4行可抬高0—2m。最左侧2列、中央4行初始水深1.2m，其他格干燥；总初始水量960m³。四周封闭，无雨、无入渗、无外部进出水。

## 每一条格边，都是一笔交换

相邻两格水面有差，就估计一条跨边界的流量。上游格减去的水，必须原封不动地加到下游格。二维意味着每格要同时与多个方向交换，不能在一个方向上把水用完后，另一个方向还继续扣。

每单位宽度通量q=sign(Δη)hf^(5/3)√(|Δη|/Δx)/n，n=0.05；hf=max[0,max(ηL,ηR)−max(zL,zR)]。乘边长10m得到m³/s。四邻接、同步更新，并按供水格总流出量统一缩放，保证不抽成负水深。

## 一格变湿，并不是跳过一道门槛

干格需要从邻格收到水才会变湿。地形高坎会阻挡水路，水面够高以后才可能越过。我们用浅色显示很薄的水层，再用阈值统计湿润面积，但这个显示阈值不参与删除水量。

固定内部步长0.1秒。显示湿润面积以h>0.001m统计；小于此值的水仍保留在计算账本。网格地图为合成地形，不代表城市实测图；色标固定0—1.2m，便于跨时刻比较。

## 抬高中央地形，再看路径

保持初始水量不变，把中央高地抬高，观察水如何绕行，哪些地方更晚变湿。也要盯住总水量：路径可以变化，封闭域内的水量不能因为换一张地图就悄悄减少。

参数变化后从同一初始水体重新计算，不继承上次实验状态。记录总水量误差和最小水深。供水限制保证正性和守恒，但并不自动保证时空精度；配套测试用减半步长检查差异。

## 这是近似，要知道它省略了什么

这个实验很适合看水面、地形和干湿边界，却省略了惯性。快速溃坝、水跃或强烈转弯可能需要完整浅水方程。网格画得漂亮，不等于预测已经可信；真实应用还需要地形、建筑表达、边界和验证。

本程序不是HEC-RAS求解器，也不是完整城市洪涝模型；省略管网、降雨、湍流、惯性和建筑细节。粗网格及显式限流会带来数值扩散，结果仅供教学。

## 练习与解释

1. 格间流动应比较什么？

答案：水面高程z+h。床面起伏需要计入水面。

2. 湿润显示阈值以下的水如何处理？

答案：保留水量，仅改变显示统计。显示阈值不应破坏水量账本。

3. 本页采用什么模型？

答案：省略惯性的二维扩散波教学近似。不能用于快速溃坝的定量预测。

## 算例与依据

下载页面上的完整Python算例包，解压后运行 reproduce.py，无需第三方库。模型源为 hydraulics_models.py，输出 reference.csv。

[参考资料](https://www.hec.usace.army.mil/confluence/rasdocs/ras1dtechref/6.0/theoretical-basis-for-one-dimensional-and-two-dimensional-hydrodynamic-calculations/2d-unsteady-flow-hydrodynamics/numerical-methods/diffusion-wave-equation-solver)，查阅日期2026-09-15。公式、参数和实现简化见正文；来源用于机理核对，不代表本算例经过来源机构认可。
