简介这份资源是SWMM雨水管理模型汉化版SWMMH的官方参考手册第I卷——水文学部分面向城市雨水管理、环境工程与城市规划领域的工程师、研究人员及高校师生用于理解并掌握SWMMH的水文模拟原理。手册由Lewis Rossman与Wayne C. Huber编写同济大学李树平教授翻译系统描述了SWMMH的对象模型、过程模型及模拟流程涵盖气象学、子汇水面积径流与污染物负荷演算等核心内容。资源包为1个PDF文件大小约2.93MB便于下载后随时查阅。目前已有298人学习浏览说明其在专业圈内具有一定认可度。读者可借助该手册深入理解SWMMH如何跟踪模拟时段内各子汇水面积的径流水量与水质、各管渠的流量与水深为城市降雨事件的水量水质预测与管理提供理论支撑适合需要系统学习SWMM水文模块的中高级用户。1. 从一份手册说起SWMMH 水文卷到底能帮你算什么做城市排水或海绵城市项目的人迟早会碰到一个绕不开的名字——SWMM。它是一套动态降雨-径流模拟模型专门用来算城市区域在单场暴雨或连续多年里的水量与水质变化。而 SWMMH 是它的汉化版本配套的参考手册分三卷第 I 卷讲的就是水文学部分降水怎么变成径流、下渗怎么扣损、地下水怎么交换、积雪怎么融化。很多人拿到模型第一反应是找教程点按钮结果参数一填就报错或者结果明显不合理。问题往往不在软件操作而在没搞懂手册里那些控制方程和参数估计的逻辑。这份手册的价值就在这——它把每个水文过程的数学表达、数值解法和参数取值范围都摊开讲清楚了。适合谁做排水管网设计、LID 设施评估、内涝风险分析的工程师以及需要写论文做城市水文模拟的研究生。如果你只想要一个“点几下出图”的工具它可能会让你失望但如果你想弄明白模型为什么这么算、参数该怎么定这份手册是绕不过去的底稿。2. 降水与蒸发气象数据怎么喂给 SWMMH 才不报错2.1 降雨数据的三种来源与格式要求SWMMH 的降水输入不是随便丢一个 Excel 就能跑的。手册第 2 章把降雨数据来源分成三类用户自己提供、来自政府机构、以及降雨接口文件。用户提供的数据通常是一串“时间-雨量”对常见做法是整理成文本文件每行一个时间戳和对应雨量时间步长可以是分钟级或小时级。政府机构的数据往往有固定格式比如某些气象站导出的 CSV需要先做列提取和单位换算。降雨接口文件则是 SWMMH 专门定义的一种格式用来把外部降雨记录直接映射到模型里。这里最容易翻车的是时间格式。SWMMH 对日期时间的解析比较严格常见做法是统一用“年/月/日 时:分”的格式并且确保起始时间与模拟开始时间对齐。如果时间戳有重叠或跳跃模型不会报错但结果会悄悄偏移。我一般会先用脚本把降雨序列按分钟补齐缺失值填零再导入。# 将原始降雨CSV整理成SWMMH可读的文本格式 import pandas as pd # 读取原始数据假设两列datetime 和 rainfall_mm df pd.read_csv(raw_rainfall.csv, parse_dates[datetime]) df df.sort_values(datetime).set_index(datetime) # 按分钟重采样缺失值填0 df df.resample(1min).sum().fillna(0) # 输出为SWMMH降雨接口文件常用格式日期 时间 雨量 with open(rainfall_swmm.txt, w) as f: for ts, row in df.iterrows(): f.write(f{ts.strftime(%Y/%m/%d)} {ts.strftime(%H:%M)} {row[rainfall_mm]:.2f}\n)这段代码的逻辑是先把原始数据按时间排序并设为索引然后用resample(1min)强制对齐到分钟级sum()处理同一分钟多条记录的情况fillna(0)把没有记录的分钟补成零雨量。最后输出的格式是 SWMMH 降雨接口文件常见的“日期 时间 雨量”三列。参数上1min可以改成5min或15min取决于你的数据精度和模拟步长雨量单位要确认是毫米还是英寸手册里默认是毫米。2.2 蒸发与温度数据的连续模拟处理连续模拟时蒸发和温度不是可选项。手册第 2 章把温度数据、连续温度记录、蒸发数据、风速数据分开讲是因为它们在连续模拟中各自驱动不同的水文过程。蒸发直接扣减子汇水面积里的洼地蓄水和土壤含水量温度则影响融雪和长期下渗恢复。常见做法是如果做长期连续模拟至少要有日最高最低气温和日蒸发量如果只做单场暴雨蒸发可以设为零或按月平均值给一个常数。蒸发数据的输入方式有两种直接给蒸发序列或者让模型根据温度用 Hargreaves 公式算。后者需要日最高温、日最低温和站点纬度。我一般会优先用实测蒸发皿数据因为公式法在湿润地区偏差不小。温度数据则要注意单位SWMMH 默认摄氏度如果原始数据是华氏度得先转换。风速数据主要用于融雪计算不做融雪可以忽略。提示连续模拟前先检查降雨、温度、蒸发三条序列的时间范围是否一致。只要有一条序列的起始时间晚于模拟开始时间模型就会用默认值填充结果可能完全失真。3. 地表径流与下渗子汇水面积参数怎么定才不“玄学”3.1 子汇水面积划分与宽度、坡度、曼宁 n 的取值手册第 3 章是整卷的核心之一。它先给出地表径流的控制方程组然后讲子汇水面积划分、计算方法、时间步长考虑最后落到参数估计。子汇水面积是 SWMMH 里最小的水文响应单元划分方式直接决定结果。常见做法是按排水管网节点和地形分水线划每个子汇水面积对应一个排出口。但手册特别提醒子汇水面积不是越小越好太小会导致计算量暴涨太大则失去空间差异。参数估计部分手册给了子汇水面积概化、不渗透性、宽度、坡度、曼宁粗糙系数 n、洼地蓄水等具体方法。其中“宽度”是最容易被拍脑袋定的参数。手册的定义是子汇水面积的地表漫流特征宽度通常用面积除以平均漫流长度来估。如果实在没有地形数据常见做法是用面积除以一个经验长度比如城市地块取 50 到 100 米。曼宁 n 对不渗透表面一般取 0.011 到 0.015渗透表面取 0.15 到 0.40具体看植被和粗糙度。洼地蓄水不渗透面通常 1.5 到 2.5 毫米渗透面 5 到 10 毫米。# 示例用面积和漫流长度估算子汇水面积宽度 # 假设子汇水面积 2.5 公顷平均漫流长度 80 米 面积25000 # 平方米 漫流长度80 # 米 宽度$(echo scale2; $面积 / $漫流长度 | bc) echo 子汇水面积宽度约为 ${宽度} 米这段脚本演示的是宽度估算的算术逻辑面积除以漫流长度。参数上面积单位要统一成平方米漫流长度根据实际地形或经验取值。如果子汇水面积形状不规则可以把它离散成几个规则子区域分别算宽度手册第 3.7 节专门讲了子汇水面积离散化。3.2 下渗四方法Horton、修正 Horton、Green-Ampt、曲线数手册第 4 章把下渗方法拆成四种Horton、Horton 修正、Green-Ampt、曲线数。每种方法都有控制方程组、下渗能力恢复、计算方法和参数估计。选哪种方法取决于你有多少土壤数据。Horton 方法参数少只需要最大下渗率、最小下渗率和衰减常数适合数据稀缺的城市区域。Green-Ampt 方法物理意义更明确需要土壤 suction head、水力传导度和湿度亏缺适合有土壤调查数据的项目。曲线数方法直接借用 SCS 曲线数适合流域尺度快速评估。参数估计部分手册给了每个方法的具体取值范围和敏感性说明。Horton 的最大下渗率在压实黏土区可以低到 10 毫米/小时在砂质土区可以高到 100 毫米/小时以上。衰减常数通常取 2 到 7 每小时。Green-Ampt 的 suction head 在 50 到 300 毫米之间水力传导度从黏土的 0.1 毫米/小时到砂土的 100 毫米/小时不等。这些值不是拍脑袋来的手册第 4.2.4 到 4.5.4 节都有表格和讨论。# 用Green-Ampt方法估算下渗能力简化示例 # 参数 suction_head(mm), conductivity(mm/h), moisture_deficit suction_head 100.0 conductivity 5.0 moisture_deficit 0.25 # 累积下渗量 Fmm假设当前 F20mm F 20.0 # 下渗能力 f K * (1 suction_head * moisture_deficit / F) f conductivity * (1 suction_head * moisture_deficit / F) print(f当前下渗能力约为 {f:.2f} mm/h)这段代码演示的是 Green-Ampt 下渗能力公式的简化计算。参数含义suction_head是湿润锋处的土壤吸力conductivity是饱和水力传导度moisture_deficit是土壤湿度亏缺。F是累积下渗量随着降雨进行而增大下渗能力会逐渐衰减到接近饱和传导度。实际模型中这些参数会随时间步长迭代更新这里只是展示单步逻辑。注意下渗方法一旦选定不要中途混用。我见过有人在同一个项目里对部分子汇水面积用 Horton、部分用 Green-Ampt结果水量平衡对不上。手册虽然允许不同子汇水面积用不同方法但调试阶段最好统一。4. 地下水与融雪连续模拟里最容易忽略的两个模块4.1 地下水通量项与土壤湿度限值手册第 5 章讲地下水控制方程组把地下水系统分成上层和下层通量项包括地表下渗、上层蒸发蒸腾、下层蒸发蒸腾、穿透、深度穿透、地下水排放量还允许用户自定义通量公式。参数估计部分给了土壤湿度限值、穿透参数、ET 参数、地下水排放常数。这些参数在连续模拟里非常关键因为地下水是连接降雨和基流的中间环节。土壤湿度限值分田间持水量、凋萎点、饱和含水量。常见做法是田间持水量取 0.2 到 0.4凋萎点取 0.05 到 0.15饱和含水量取 0.3 到 0.5具体看土壤质地。穿透参数控制上层到下层的水量交换地下水排放常数控制地下水出流到管渠的速率。如果这些参数设得不对基流过程线会要么太平要么太尖。手册第 5.6 节给了一个数值示例可以照着复现一遍看看参数变化对结果的影响。4.2 融雪方程与面积亏损手册第 6 章讲融雪包括雪深、气象输入、子汇水面积划分、重新分配和除雪、对下渗的影响然后给出控制方程组、融化方程、积雪热交换、面积亏损、净径流、计算方法和参数估计。融雪模块在北方城市或高海拔项目里必须开否则冬季连续模拟的径流会严重偏低。融化方程的核心是能量平衡净辐射、感热、潜热、地热、降雨带来的热量。面积亏损指的是积雪覆盖面积随融化而减小不是整个子汇水面积同时融完。手册第 6.4 节专门讲面积亏损的计算方法。参数估计部分融雪因子、基础温度、积雪密度、热交换系数都需要根据当地气候调整。常见做法是先用默认值跑一遍然后拿实测流量过程线做对比逐步调融雪因子。# 简化的度日法融雪计算 # 参数 melt_factor(mm/°C/day), base_temp(°C), air_temp(°C) melt_factor 3.0 base_temp 0.0 air_temp 5.0 if air_temp base_temp: melt melt_factor * (air_temp - base_temp) else: melt 0.0 print(f日融雪量约为 {melt:.2f} mm)这段代码演示的是度日法融雪公式。melt_factor是融雪因子温带地区常见 2 到 5 毫米每摄氏度每天base_temp是融雪基础温度通常取 0 摄氏度air_temp是日平均气温。当气温低于基础温度时融雪为零。实际 SWMMH 里融雪计算更复杂会考虑辐射和积雪面积亏损但度日法可以作为快速估算和参数初筛。提示融雪模块打开后温度数据的时间步长必须与降雨一致。如果温度是日值而降雨是分钟值模型会做插值但插值方式可能不符合你的预期。我一般会把温度也处理成小时值再导入。5. 避坑与排查SWMMH 水文模拟里最常见的五个翻车点5.1 现象模拟结果径流总量远大于降雨总量原因子汇水面积的不渗透性设成了 100%但洼地蓄水设为零导致所有降雨瞬间变成径流。或者下渗方法选了 Horton 但最大下渗率设得极低土壤完全不吸水。解决检查每个子汇水面积的不渗透性和洼地蓄水参数。不渗透面也要给 1.5 到 2.5 毫米的洼地蓄水。下渗参数对照手册第 4 章的范围重新标定。5.2 现象连续模拟跑完后基流几乎为零原因地下水模块没开或者开了但土壤湿度限值和穿透参数设得不合理上层土壤一直处于凋萎点以下没有水穿透到下层。解决确认地下水模块已启用检查田间持水量和饱和含水量是否大于凋萎点。穿透参数不要设得太大否则上层水直接穿透到下层基流过程线会变得很尖。5.3 现象降雨接口文件导入后模型报“时间序列错误”原因降雨文件的时间格式与 SWMMH 期望的不一致或者时间戳有重复、跳跃、乱序。解决用第 2 章给的脚本重新整理降雨序列确保时间戳严格递增、无重复、无缺失。文件编码用 UTF-8 无 BOM换行符用 LF。5.4 现象融雪模拟的冬季径流明显偏低原因融雪因子设得太小或者基础温度设得过高导致气温高于基础温度时才融雪而实际冬季气温长期在零度附近。解决把基础温度调到 0 摄氏度或略低融雪因子根据当地实测数据反推。手册第 6.7 节的参数估计方法可以照着做一遍。5.5 现象子汇水面积宽度设成面积除以周长结果洪峰严重偏低原因宽度不是几何宽度而是地表漫流特征宽度。用面积除以周长会得到很小的值导致漫流路径过长洪峰被严重坦化。解决按手册第 3.8.4 节的方法用面积除以平均漫流长度。没有地形数据时城市地块取 50 到 100 米作为漫流长度经验值。6. 把手册用成工具书我的参数标定与验证习惯手册第 3 章到第 6 章都给了数值示例这些示例不是摆设。我一般会先把每个示例照着复现一遍确认自己理解的控制方程和参数含义与手册一致然后再套到实际项目上。具体做法是新建一个空白项目只放一个子汇水面积按示例给的面积、坡度、曼宁 n、下渗参数填进去跑单场降雨把结果与手册示例的输出对比。如果对不上说明某个参数理解错了回头翻对应章节。参数标定阶段我会把参数分成三类一类是物理意义明确、可以直接测量的比如面积、坡度、不渗透性一类是有经验范围的比如曼宁 n、洼地蓄水、下渗参数一类是必须反推的比如宽度、融雪因子、地下水排放常数。第一类直接填第二类按手册范围取初值第三类用实测流量过程线做手动调参。手动调参不是瞎试每次只动一个参数观察洪峰和峰现时间的变化方向记录在表格里。参数初值来源调整方向对洪峰影响对峰现时间影响子汇水面积宽度面积/漫流长度增大洪峰升高提前曼宁 n不渗透手册 0.011-0.015增大洪峰降低延后洼地蓄水手册 1.5-2.5 mm增大洪峰降低延后最大下渗率手册范围增大洪峰降低延后融雪因子手册 2-5 mm/°C/d增大融雪期洪峰升高提前验证阶段我会拿至少两场独立降雨做校验一场用于标定一场用于验证。如果验证场的模拟流量与实测流量的纳什效率系数低于 0.5就回到参数表重新检查。手册里没有直接讲纳什效率系数但这是水文模拟的通用做法。从那以后我每次拿到新的降雨数据都强制先跑一遍手册里的数值示例确认模型设置没跑偏再开始正式项目。希望帮到你。本文还有配套的精品资源点击获取