3 SWAT模型测试
3.1 介绍
由于长江流域面积巨大,土壤类型众多,测试、修改的成本太高,所以我们选择一个较小的区域进行试验。
试验区域为河西走廊的石羊河流域,我们选择了一个30km×20km的小区域,该区域包含了石羊河支流大西河的出口,作为水系划分的出口(http://slt.gansu.gov.cn/syhglj/)。
3.2 流域水系划分
操作详情见https://www.bilibili.com/video/BV1H7411n7Vs
打开Arcmap,新建SWAT工程,进入Automatic Watershed Delineation界面,导入BJ54空间坐标系的DEM,子流域面积阈值选择2E-7Ha,自动填洼后生成河道。确定出口后生成了10个子流域,将显示为红色框的Basin要素导出为shp文件。
3.3 土壤数据库建立
操作详情见https://www.bilibili.com/video/BV1H7411n7Vs
打开Arcmap,进入3.2新建的SWAT工程,利用3.2导出的shp文件裁剪HWSD,提取出流域内的土壤分布类型,经统计共6种。
打开SWAT工程数据库,SWAT2012.mdb,将6种土壤依次录入,为方便查询,土壤名称直接用土壤ID表示,例如上图左栏中的11291、11352等。注意,11387只有一层。记录完毕,保存。
3.4 land use文件
我们选择GLASS_GLC数据库,由清华大学土地覆盖监测网站提供(http://data.ess.tsinghua.edu.cn/),全球范围的土地利用情况如下所示:
注意:
这时我们需要把语言换成英语,否则后续载入landuse栅格文件时会报错(http://muchong.com/html/201406/7534220.html),更换语言方法参考(https://jingyan.baidu.com/article/ab0b5630b670dbc15afa7d02.html)。
利用3.2导出的shp文件裁剪GLASS_GLC,获取研究区域内的土地利用信息,只有一种,数值为90,查阅分类表后确定该区域的土地利用类型为荒地:
GLASS_GLC数据库包含分类文件labelInstruction.docx,内容为:
Label | |
0 | No data |
10 | Cropland 农田,耕地 |
20 | Forest 森林 |
30 | Grassland 草原 |
40 | Shrubland 灌木 |
70 | Tundra 冻土带 |
90 | Barren land 荒地 |
100 | Snow/ice 雪/冰 |
3.5 HRU分析
打开SWAT工程,HRU Analysis - Land Use/Soils/Slope Definition
3.5.1 Land Use Data控件
在Land Use Grid下导入已经定义投影的landuse数据,Choose Grid Field选择VALUE,点击OK,下方会出现对应表格。
双击LandUseSwat空格,可以手动选择土地类型,选择crop,选择BARR,点击Reclassify。
3.5.2 Soil Data控件
同样的,依次填入,点击Reclassify:
3.5.3 Slope控件
选择坡度,为了方便我们直接选择Single Slope,也就是不用分层,点击Reclassify:
3.5.4 重载
以上三步完成后,勾选下方两个选项框,点击Overlay按钮,进行叠加,将土地利用、土壤类型、坡度等水文特性叠加到每个HRU上,然后SWAT才能基于HRU进行产流、入渗、水质监测的计算工作。
点击确定,大功告成!
3.5.5 筛选
点击HRU Analysis - HRU Definition,进入筛选设置。SWAT为了简化计算,提供了筛选功能,我们可以设置阈值,将小于该阈值的水文特性类型删除,这里我们选择10%,点击Create HRU。
3.6 气象数据库
打开Write Input Tables - Weather Stations,选择气象数据库。这里有很多备用选项,可以导入其他数据库,也可以自己输入。我们选择CFSR_World(https://www.bilibili.com/video/BV1H7411n7Vs下提供了链接),需要将下载到的CFSR_World.mdb手动复制到项目下的SWAT2012.mdb数据库中,如下图所示:
点击Weather Generator Data按钮,在下拉框选择WGEN_CFSR_World(如果不进行上一步复制操作,这里将不显示WGEN_CFSR_World),点击OK,等待约1分钟完成,点击“确定”,然后点击Cancel退出。
3.7 生成输入参数表格
打开Write Input Tables - Write SWAT Input Tables,弹出清单表格, 点击Select ALL,点击Create Tables。
等待约1分钟完成,点击“确定”,然后点击Cancel退出。
3.7 运行SWAT
做完上述工作,我们已经完成了SWAT运行的全部准备工作,打开SWAT Simulation - Run SWAT,进入最后的时间跨度和分辨率、SWAT编译器等设置(我偷偷换了个PC,嘿嘿):
选择时间跨度2000/1/1 - 2015/12/31,时间分辨率1个月,点击Setup SWAT Run,完成预备工作,点击Run SWAT,开始计算。
但是出现了这一幕:
问题描述:Fortran编译过程出错,读数据时读到文件末尾。我们打开出现问题的文件000120004.sol,发现它竟然是空的,而000120001.sol - 000120003.sol都没有问题。
查阅SWAT使用手册(https://wenku.baidu.com/view/5f1d74eb0975f46527d3e195.html),.sol文件是土壤输入文件,可能是soil部分出了问题。参考(https://blog.csdn.net/Chris_Ning/article/details/98242315?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159841213819724839203572%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159841213819724839203572&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-1-98242315.pc_ecpm_v3_pc_rank_v3&utm_term=SWAT%E8%BF%90%E8%A1%8C%E5%A4%B1%E8%B4%A5&spm=1018.2118.3001.4187),检查土壤数据库usersoil,果然发现第四行的11387号土壤的描述有误,本来只有1层,但第二层却有了相关记录,且与第一行的11291号土壤一致,可能是导入时出现错误。将第二层数据全部改为0,保存。
再次测试,还是出现同样的问题:
考虑是否是参数范围的问题,对照SWAT2012.mdb的solrng.dbf数据库(如下图所示),对数据库进行检查:
检查完毕,并没有问题。
看一下.sol文件的命名规律,根据各个.sol文件的内容,我们推测:前5位000xx为subbasin编号,后四位00xx为每个subbasin中的HRU编号,这样一来就是第12个子流域的第4个HRU出现问题,没有写入土壤信息。
打开Edit SWAT Input - Subbasins Data,选中11561号土壤,点击OK
出现如下界面,证明该土壤类型已被正确导入:
返回文件夹,打开000120004.sol,发现已经写入文本了:
重新测试,刚才的问题解决了,但是又出现了新问题(我人傻了):
只能从配置文件入手了。打开file.cio文件(位于工程目录/Scenarios/Default/TxtInOut/下),发现降雨和温度数据均为空,说明WGEN_CFSR_World数据库在该区域没有站点,导致计算失败。
此时我们需要手动添加该区域的气象数据。打开下载到的中国地面气候资料日值数据集V3.0(原地址http://data.cma.cn/data/cdcdetail/dataCode/SURF_CLI_CHN_MUL_DAY_V3.0.html,但是下载很不方便,好在本站有资源,可以花C币下载之,时间跨度2010-2019年),查看站点分布,利用matlab inpolygon函数,发现共有3个站点位于石羊河流域,但是方块里(红色区域)一个都没有:
有种前功尽弃的绝望感。。。
本次测试到此为止,虽然没有成功,但熟悉了SWAT的流程,掌握了许多实用的ArcGIS技巧,比如关于数据库的建立、坐标系统的转化、异常事件查询与解决等,都为下一次的成功积累经验。
让我们期待SWAT模型学习(四)吧!