Chapter 3 设计结构
3.1 AutoSHUD关键参数
AutoSHUD 建模前,需要把用户给定的流域边界、建模年份和少量建模参数转换为一组模型配置参数。对一般用户来说,可以把这个过程理解为:先计算流域的空间尺度,再根据空间尺度确定网格、河网和边界简化参数,最后根据模拟年份确定时间长度。
下面用几个基础量描述这些计算:
| 符号 | 含义 | 单位 |
|---|---|---|
| \(A\) | 流域边界面积,系统会在等面积投影下计算 | m² |
| \(N_{\mathrm{cell}}\) | 用户设置的最小单元数 | 个 |
| \(a_{\mathrm{max}}\) | 用户设置的最大单元面积 | m² |
| \(D_{\mathrm{aquifer}}\) | 用户设置的含水层厚度 | m |
| \(Y_{\mathrm{start}}, Y_{\mathrm{end}}\) | 模拟开始年份和结束年份 | 年 |
3.1.1 空间尺度参数
流域边界上传后,系统首先计算流域面积 \(A\)。如果用户没有指定最大单元面积 \(a_{\mathrm{max}}\),系统会用流域面积和目标单元数自动估算:
\[ a_{\mathrm{max}} = \frac{A}{N_{\mathrm{cell}}} \times 10^{-6} \]
其中 \(A/N_{\mathrm{cell}}\) 的单位是 m²,乘以 \(10^{-6}\) 后转换为 km²。这个值表示“如果把流域大致划分为 \(N_{\mathrm{cell}}\) 个单元,每个单元的平均面积是多少”。
为了进一步确定边界和河网的几何简化尺度,系统把最大单元面积\(a_{\mathrm{max}}\)换算成一个等效圆半径\(r\):
\[ r = \sqrt{\frac{a_{\mathrm{max}} \times 10^6}{\pi}} \]
这里 \(r\) 的单位是 m。可以直观理解为:面积为 \(a_{\mathrm{max}}\) km² 的模型单元,如果近似看成圆形,它的半径大约是多少。
基于上述基础量,关键空间参数的计算如下:
| 参数 | 计算逻辑 | 含义 |
|---|---|---|
NumCells |
\(\min(N_{\mathrm{cell}}, 100000)\) | 模型网格目标单元数,上限为 100000,避免生成过大的模型。 |
MaxArea |
\(a_{\mathrm{max}}\),保留 4 位小数 | 单个模型单元允许的最大面积,单位 km²。 |
AqDepth |
\(D_{\mathrm{aquifer}}\),保留 3 位小数;若小于 1 m,则按 1 m 处理 | 含水层厚度。 |
tol.wb |
\(\max(\mathrm{round}(r/3), 30)\) | 流域边界简化容差,单位 m;流域尺度越大,边界简化尺度通常越大。 |
tol.rivlen |
\(\max(\mathrm{round}(r), 15)\) | 河道线段简化或最短河段控制尺度,单位 m。 |
DistBuffer |
\(\min(4000, \max(10, \mathrm{round}(\sqrt{A}/20)))\) | 流域外扩缓冲距离,单位 m;用于保证边界附近数据裁剪有足够覆盖范围。 |
RivWidth |
默认 5 | 河道宽度参数,单位 m。 |
RivDepth |
默认 4 | 河道深度参数,单位 m。 |
MinAngle |
固定为 30 | 网格生成时的最小角度控制参数。 |
这些参数之间有一个重要关系:NumCells 越大,或 MaxArea 越小,模型单元通常越细;相应地,边界和河网的几何控制尺度也会变小,模型会更精细,但计算量会增加。
3.1.2 河网提取尺度
河网提取也会使用流域面积、目标单元数和最大单元面积。系统先计算一个理想控制面积:
\[ A_i = \min\left(\frac{A}{N}, a_{\mathrm{max}} \times 10^6\right) \]
其中 \(A_i\) 的单位是 m²。它表示河网提取时采用的面积尺度,既不能大于“流域面积 / 目标单元数”,也不能大于用户设置的最大单元面积。随后根据 DEM 栅格单元面积 \(A_{dem}\) 估算河网提取阈值:
\[ F = \max\left(\mathrm{round}\left(\frac{A_i}{A_{dem}}\right) \times 8, 10\right) \]
其中 \(F\) 是流量累积栅格数阈值。阈值越小,提取出的河网越密;阈值越大,河网越概化。
3.1.3 时间参数
时间长度由模拟开始年份 \(Y_{\mathrm{start}}\) 和结束年份 \(Y_{\mathrm{end}}\) 决定。系统从 \(Y_{\mathrm{start}}\)-01-01 开始,到 \(Y_{\mathrm{end}}\)-12-31 结束,计算完整天数:
\[ \mathrm{ENDDAY} = \mathrm{days}(Y_{\mathrm{start}}\text{-}01\text{-}01, Y_{\mathrm{end}}\text{-}12\text{-}31) + 1 \]
因此,如果时间范围中包含闰年,ENDDAY 会自动包含闰年多出的日期。
| 参数 | 计算逻辑 | 含义 |
|---|---|---|
STARTDAY |
固定为 0 | 模拟从第 0 天开始。 |
ENDDAY |
起止年份之间的完整天数 | 模拟结束日序号。 |