# 河水会堵车吗？

水量控制水面，动量解释水为什么加速。

专题：河流水动力。教学合成算例，待独立专业审稿。

## 一段水多了，水面就抬高

取出河道中的一小段。如果流进来的水多于流出去的水，储水增加，水面就会上升。这和最初学过的水量守恒相同，只是现在我们要让很多小河段同时交换水。

采用水平、无摩阻、等宽河道的一维浅水方程，忽略侧向流入；h是水深，u是断面平均速度。完整河道圣维南方程还会包括底坡、摩阻、断面变化及边界条件。

## 只算水量，解释不了加速

水量方程告诉我们水面怎样变，却不能独自确定两端流量。还需要解释水为什么加速。水面高低带来的压力差和运动水体携带的动量，共同决定下一步的运动。

单位宽度动量为hu；动量通量hu²+gh²/2包含平流动量和静水压力项。这里列出非线性守恒式，网页动画使用其小扰动线性化解析解，避免把动画误认为完整求解器。

## 给平静水面一个小起伏

我们从一条平静的水面开始，放入一个很小的余弦起伏。起初流速为零，但压力差已经存在。随后水开始移动，水面的起伏和速度场相互转化。

周期域长L=200m，宽B=10m，背景水深H=1—5m，扰动振幅a=0.05m，g=9.81m/s²。最大a/H为0.05，属于小扰动演示；不是非线性洪峰、激波或干湿边界。

## 两条方程，形成一组波

把方程在线性小扰动条件下展开，水深扰动与速度就像一对互相驱动的变量。水面不是独自移动的线条，下面始终对应着速度变化。用时间滑块观察它们之间的相位差。

η=h−H；η_t+H u_x=0，u_t+gη_x=0。取k=2π/L，c=√(gH)，η=a cos(kx)cos(kct)，u=(ac/H)sin(kx)sin(kct)。这是周期域线性化方程的精确解。

## 水面起伏，整体水量不变

有些地方抬高，有些地方降低，但完整周期域里的总水量保持不变。没有水从封闭的周期账本里丢失。图中的水面变化被单独放大展示，不能把绘图高度当成真实河床尺度。

总水量B∫h dx=BHL，因为完整周期的余弦积分为零。用周期梯形积分复核。箭头表示速度方向，水面图绘制η（m），而非绝对水深；初始参考起伏同时保留。

## 回到真实河流，要补上什么

真正的河流有摩阻、有弯道、有上下游控制，也可能出现水跃和漫滩。守恒方程仍然是起点，但需要合适的几何、源项、边界和数值方法。交通拥堵只是帮助理解积累的比喻，不能替代水动力学。

本期展示解析线性波，没有通过离散迭代求解完整圣维南方程。若涉及大扰动、洪水陡波或闸门启闭，需非线性求解和相应验证；下一期先辨认流速与传播速度。

## 练习与解释

1. 仅水量守恒能唯一决定速度演化吗？

答案：不能，还需动量关系。压力与惯性决定运动变化。

2. 网页动画直接求解完整非线性圣维南方程吗？

答案：否，采用线性化解析解。公式原型与实际教学实现已分别标注。

3. 周期域总水量为何不变？

答案：没有净边界通量且扰动积分为零。局部升降由内部交换形成。

## 算例与依据

下载页面上的完整Python算例包，解压后运行 reproduce.py，无需第三方库。模型源为 hydraulics_models.py，输出 reference.csv。

[参考资料](https://faculty.washington.edu/rjl/riemann_book/Shallow_water.html)，查阅日期2026-09-15。公式、参数和实现简化见正文；来源用于机理核对，不代表本算例经过来源机构认可。
