VIC水文模型入门攻略(下) 汇流和其他相关

汇流程序的数据准备

前面说过VIC作为分布式水文模型,其功能只有计算产流量而无法给出汇流量,于是要进行汇流操作得用Dag Lohmann研发的一个汇流模型程序进行,其名为Routing,编程语言为Fortran,使用单位线进行坡面汇流以及线性圣维南方程进行河网汇流,输入数据为VIC的输出文件,流域的水系流向信息,以及你想得到模拟的径流量数据的若干个流量站或者流域出口的位置,输出为逐日和逐月的此站点模拟的径流量数据。

汇流程序运行的原理

汇流程序用法跟VIC一样,也是需要准备一些文本文件格式的数据文件和一个输入参数文件来记录这些数据文件的位置和一些参数,然后也是先make编译,然后输入./rout后面带上输入参数文件的路径来运行。具体必须的输入文件有:

  • 输入参数文件。相当于VIC的全局参数文件。
  • 流向文件。这是一个栅格文件,也是最核心最重要的文件,记录流域内每个网格所流向的下一个网格。其实不单单是流向,汇流程序需要的流域的网格大小、经纬坐标、流域形状等信息都是从这儿获得的。
  • 站点文件。记录流量站的名称和位置。
  • 坡面汇流单位线文件。这个可以直接拿示例stehekin的来用。

然后这些是可选文件:

  • 流速文件。也是栅格文件。不过流速之类的参数都不好弄到,所以可以只用一个单一值代替。这个值和下面的水力扩散值以及坡面汇流单位线是可以率定的。不过根据官网文档关于率定的部分所说,对于大尺度、逐月的汇流计算,由于要求精度较低一般不需要率定,根据前人的研究此时可以采用一个单一值1.50
  • 水力扩散文件。同上,可用单一值800
  • Xmask文件。栅格文件。其实不太清楚为啥叫这个名字,官网文档的一行小字解释这其实就是流程数据,记录的是每个网格中心到其流向的下一个网格中心的距离,对精度要求不高设定为一个单一值也可以。我将其解释为流程文件。
  • fraction文件。记录的是每个网格实际产流量的比例,详细解释看下文。我将其解释为产流比例文件。
  • 站点单位线文件。后缀名.uh_s,一个站点一个,记录的是流域内每个网格对流域出口也就是站点位置的单位线。刚开始用汇流程序的时候不需要这个文件,因为汇流程序可以生成,详见下文。

程序运行的流程是这样的:

  1. 汇流程序首先会读入输入数据文件获取各项参数(废话);
  2. 然后读入各种栅格文件的数据和坡面汇流单位线数据;
  3. 然后打开站点文件,读入第一个站点的信息,比如站点名、位置;
  4. 根据流向文件的数据找出最终会流入这个站点的所有网格(即站点控制的流域内的所有网格)并记录到列表;
  5. 如果该站点信息的站点单位线文件路径不为“NONE”则到第6步,否则到第7步;
  6. 根据此路径读取站点单位线数据,然后到第8步;
  7. 利用流向、流速、水力扩散和流程数据和坡面汇流单位线数据使用Dag Lohmann的方程计算出站点单位线数据,并保存到文件以供下次直接使用
  8. 从第4步得出的网格列表打开第一个网格对应的VIC输出文件,读入产流数据;
  9. 根据产流比例数据和站点单位线数据计算出此站点对流域出口的径流量并加到站点的总径流量上;
  10. 如果还有没计算完的网格则回到第8步拿下一个网格继续;
  11. 输出该站点的径流量序列(包括逐日和逐月的径流量(立方英尺每秒)和径流深(mm)表示的数据);
  12. 如果站点文件还有下一个站点则读入下一个站点的信息然后回到第4步;
  13. 收工。

说白了就是假设每个网格的产流对流域出口径流的贡献互相独立,先是生成一套网格产流对出口径流的单位线,然后拿这套单位线和网格产流量做汇流计算,而且这两个步骤是可以分开的。

关于输入参数文件

内容比较简单,不过需要注意的是汇流程序的健壮性实在不咋地,最好是复制示例的输入参数文件rout_input.STEHE对原文进行修改,信息的顺序也不要改,甚至注释也不要增删。因为我看到源码就是简单粗暴的跳过一行读取一行来读取信息的…
内容自翻如下:

# 这行不要删。   
# 流向文件的路径。   
/mnt/aww/ohio/route/rout_data/oh.flow   
# 流速文件。如果有就改为.true.然后下一行改为文件路径,没有就如下设定一个单一值。
.false.   
1.5   
# 水力扩散文件,同上。   
.false.   
800   
# 流程文件Xmask file,同上。 
.true.   
/mnt/aww/ohio/route/gen_mask/kanawha.xmask
# 产流比例文件fraction file,同上。   
.true.   
/mnt/aww/ohio/route/rout_data/oh.fract
# 站点文件。   
/mnt/aww/ohio/route/run/oh.stnloc.kanaw
# VIC输出文件的路径和格式,以及文件名坐标保留的小数位数。这个应跟VIC的设定对应。   
/mnt/aww/ohio/vic_ohio/results/fluxes_   
4   
# 输出文件的路径。
/mnt/aww/ohio/route/rout_out/kanaw/
# 第一行是进行汇流计算的时间段,第二行是实际输出到文件里的数据的时间段。
1990 1 1996 12
1990 1 1996 12
# 坡面汇流单位线文件。可以用stehekin提供的。
/mnt/aww/ohio/route/rout_data/oh.uh_all   

关于流向文件

把官网的样例搬过来:

ncols           22
nrows           20
xllcorner       -97.000
yllcorner       38.000
cellsize        0.50
NODATA_value    0
0 0 0 5 5 5 6 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 4 0 4 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 5 3 5 5 6 7 5 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 5 4 0 5 5 5 5 6 7 5 5 5 7 5 0 0 0 0 0 0
0 0 5 4 0 5 4 5 5 7 7 5 6 7 5 6 0 0 0 0 0 0
4 0 5 7 4 0 3 5 5 7 5 5 7 4 5 6 0 0 0 0 0 0
4 0 3 4 0 4 0 4 3 5 6 7 7 4 5 6 0 0 0 0 0 0
0 4 0 4 0 3 1 2 4 0 4 5 7 5 5 0 0 0 0 0 0 0
0 0 3 4 3 1 8 4 5 4 0 5 5 3 5 6 5 0 0 0 
### 基于DEM的坡面汇流计算 在地理信息系统(GIS)中,利用数字高程模型(Digital Elevation Model, DEM)进行坡面汇流(slope runoff)分析是一项重要工作。该过程通常涉及几个关键步骤。 #### 数据准备 为了执行此类操作,首先需要获取高质量的DEM数据文件。这些文件应具有足够的空间分辨率来捕捉地形特征,并且无显著噪声或异常值[^1]。 #### 流向确定 通过处理DEM可以得到每个像元水流方向的信息。ArcGIS等软件提供了多种算法用于定义流向,其中最常用的是D8方法,在这种方法下每一个网格单元都有唯一的一个下游邻近单元作为其排水路径的方向[^2]。 ```python import arcpy from arcpy.sa import * arcpy.CheckOutExtension("Spatial") outFlowDirection = FlowDirection(inRaster) outFlowDirection.save("flow_direction.tif") ``` #### 流累积量计算 一旦知道了各个位置上的水是如何流动之后,则可以通过累加所有可能贡献给某一点水量的方式来估算潜在的地表径流量——即所谓的“流累积量”。这一步骤对于识别流域边界以及预测洪水风险至关重要[^3]。 ```python inFlowDirectionRaster = Raster("flow_direction.tif") outFlowAccumulation = FlowAccumulation(inFlowDirectionRaster) outFlowAccumulation.save("flow_accumulation.tif") ``` #### 结果解释与应用 最终获得的结果可用于进一步的空间分析任务,比如绘制河流网络图、划分子流域或是评估不同区域内的侵蚀潜力等等。值得注意的是,实际应用场景往往还需要考虑土壤特性、植被覆盖等因素的影响[^4]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值