Tips:
本期向大家分享SWAT模型的运行步骤,最后附上几个常见的报错解决思路。
前面5期内容的结果需要在本期进行应用,我们先来归纳一下前5期的结果都有什么:
1 DEM数据和掩膜数据
2 土地利用栅格数据、土地利用索引表
3 土壤栅格数据、土壤索引表、自制土壤数据库usersoil
4 站点文件txt、站点气象数据文件txt
5 自制天气发生器数据库WGEN_user
6 一个存放土壤数据库usersoil和天气发生器数据库WGEN_user的SWAT2012.mdb
由于SWAT模型在运行的时候必须保证语言是英文,所以我们需要把结果重新命名为英文,存放在一个全是英文的路径。
我选择将所有结果存放在D盘,在D盘根目录新建一个swatdata文件夹,在该文件夹中新建5个文件夹:DEM、MASK、landuse、soil、weather,将SWAT2012.mdb与5个子文件夹中并列放置。
DEM:存放DEM栅格数据
MASK:存放掩膜栅格数据
landuse:存放土地利用栅格数据和土地利用索引表txt
soil:存放土壤栅格数据和土壤索引表txt
weather:存放5项气象数据对应的站点文件和站点气象数据文件
一切准备就绪,下面开始运行SWAT模型。
在电脑任务栏点击“开始Win”,找到“ArcGIS Administrator”打开。
选择“高级”——“English”——“保存”。
重新启动ArcGIS,右键工具栏空白处,勾选ArcSWAT,成功将ArcSWAT工具条调出
ArcSWAT的操作顺序很简单,基本上是从左往右依次点一遍。
目录
2.3 Watershed Outlets Selection and Definition流域出口选择和流域划分
2.4 Calculation of Subbasin Parameters子流域参数计算
9.1 报错error-2147467259或error010429或“不能再读取表了”
1 SWAT工程设置
新建一个SWAT工程,选择工程存放的文件夹。
把自动生成的默认参数库替换为swatdata文件夹中的参数库SWAT2012.mdb。
2 流域划分
2.1 DEM Setup数字高程设置
①加载swatdata文件夹中的DEM栅格数据,点击文件夹图标从磁盘打开Disk。
②点击DEM投影设置,将投影的高程Z值单位改为meter米。
③勾选Mask选项,加载swatdata文件夹中的MASK掩膜数据,点击文件夹图标从磁盘打开Disk。
Mask图层作用:掩膜数据的作用在于能够在局部提取研究区流域范围。
④Burn in选项可以视情况选择是否勾选,我的操作里没有用这个,如果DEM数据分辨率很低,那么就推荐加载burn in图层,burn in图层是河道的水系矢量文件,可以在网上找,也可以自制。
Burn in图层作用:能够突出河道与河道外的高程差,使得后续河道提取更加精确。
2.2 Stream Definition河网定义
①计算流向和流量
这一步操作电脑运行的时间比较长,需要耐心等待
运行结束后会在下方Area中显示一个数值,这个值指的是汇流栅格数,汇流栅格数越多,就说明形成子流域所需要的汇流栅格越多,形成子流域的门槛越高,后续生成的子流域越少。
②生成河网和子流域出口
③Outlet and Inlet Definition流域出口和入口定义
这一步一般默认勾选Subbasin outlet子流域出口。对于其他3个选项,在特殊情况下才会使用,我们进行简要介绍:
(1)Inlet of draining watershed是指子流域入口,勾选之后在下方Edit manually中选择ADD,添加子流域入口,在图层上添加入口点之后,该子流域入口点上游的区域将被剔除,不再属于研究区。
(2)Point source input是指点源数据输入,在特定情况下可能会用到该功能,比如考虑水库调蓄调度、附近化工厂点源污染。
(3)Add point source是在不确定流域是否有水库、化工厂等点源数据输入的情况下,对每个子流域都添加点,方便后续能确定流域具体情况的时候补上,这样不用重新建模。
由于我的研究区将下游某一水库作为流域出口,所以我用Subbasin outlet来添加点,在下方Edit manually中选择ADD,添加流域出口点。
2.3 Watershed Outlets Selection and Definition流域出口选择和流域划分
①总流域出口断面选择
仍然选择刚刚添加的点,添加它就是为了这一步能框选该点作为整个流域的出口点。
②划分子流域
2.4 Calculation of Subbasin Parameters子流域参数计算
该功能区可以添加水库reservoir,但是如果在1.2.2 Stream Definition河网定义功能区没有添加点源数据输入点的话,就无法添加水库。
3 土地利用/土壤/坡度定义
3.1 Land Use Data土地利用数据导入
①加载swatdata文件夹中的landuse栅格数据,点击文件夹图标从磁盘打开Disk,下拉字段选择VALUE。
②点击LookUp Table,选择User Table,打开swatdata文件夹中的landuse索引表。
③点击Reclassify,执行重分类。
3.2 Soil Data土壤数据导入
①加载swatdata文件夹中的soil栅格数据,点击文件夹图标从磁盘打开Disk,下拉字段选择VALUE。
②土壤数据库选择UserSoil,点击LookUp Table,打开swatdata文件夹中的soil索引表。
③点击Reclassify,执行重分类。
3.3 Slope坡度设置
坡度的设置视具体情况而定,可以选择单一坡度也可以选择多坡度。我的案例是勾选MultipleSlope多坡度,设置坡度等级为3,将流域分为3个级别的坡度,设置2个阈值分别是20和60,所以第一级坡度0~20,第二级坡度20~60,第三季坡度60~99。最后Reclassify重分类。
3.4 Overlay上传定义结果
在完成土地利用、土壤、坡度的设置之后,点击Overlay上传结果。
4 HRU水文响应单元划分
依次自上而下将参与HRU划分的阈值设置为3%,其他的勾选项都按默认的来,然后创建HRU。下面我们解释一下3%的含义:
首先要提一下,HRU的划分就是通过土地利用、土壤、坡度3者的组合作为依据进行划分的。
(1)某土地利用类型如果在某子流域所占比例小于3%,该子流域划分HRU的时候不考虑该土地利用类型;
(2)某土壤类型如果在某土地利用类型所占比例小于3%,该土地利用类型覆盖区域划分HRU的时候不考虑该土壤类型;
(3)某坡度等级如果在某土壤类型所占比例小于3%,该土壤类型覆盖区域划分HRU的时候不考虑该坡度等级。
5 气象站数据导入
5.1 气象数据导入
共有5项气象数据,导入的步骤都一样,这里用降水数据来举例。
选择Rain gages表示导入实测降水数据,Simulation表示所有的降水数据都用天气发生器模拟,不要选Simulation。加载swatdata文件夹中的precipitation降水站点文件,点击文件夹图标,将降水站点文件导入,注意是站点文件!!不是降水数据文件。其他4项气象数据(相对湿度、太阳辐射、风速、气温)的导入和上述步骤相同。
5.2 天气发生器数据库导入
选择WGEN_user,这个就是SWAT2012.mdb中的WGEN_user表,我们在本期内容第一步就已经把默认的SWAT2012.mdb换成了我们自制的swatdata文件夹中的参数库SWAT2012.mdb,所以读取的这个WGEN_user表就是我们自制的,这里说明一下方便理解。
6 写表
点击“Select All” ,勾选所有表,然后“Create Tables”创建表。
7 运行SWAT模型
①预热器NYSKIP选择1年。SWAT运行版本可以选择32位也可以选择64位,但是一定要选择debug版本,不要选择release,因为有时在运行过程中会有报错警告,但是release会把某些警告略过,不显示出来,导致输出的结果有问题,但是却不知道问题出在哪里。设置运行SWAT的参数Setup SWAT Run,然后运行SWAT,Run SWAT。
②运行成功!
8 导出SWAT运行结果
①一般选择导出3个表,主河道结果(output.rch)、子流域结果(output.sub)、水文响应单元HRU结果 (output.hru),然后导出至数据库,这个数据库在哪里能找到,我下面会解释。对于是否保存SWAT的模拟结果,这要结合每个人的需求了。在这里可能会有疑问,为什么上面已经把结果导出了,下面还会出现一个保存选项?这是因为,上面导出的结果会在SWAT下一次运行的时候被新的结果覆盖掉,而下面的保存选项能将SWAT的结果存放在另一个文件夹,SWAT在下一次运行的时候不会将其覆盖掉。无论是导出还是保存,两者的数据内容是一致的。
②导出的结果以及保存的结果可以在工程文件夹下找到,两者的数据内容是一致的。
导出结果:Atest01\Scenarios\Default\TablesOut\SWATOutput.mdb
保存结果:Atest01\Scenarios\Atest01result\TablesOut\SWATOutput.mdb
9 常见报错及解决
9.1 报错error-2147467259或error010429或“不能再读取表了”
报错:
在计算流向和流量时,报错error-2147467259或error010429或“不能再读取表了”。
解决:
方案一:取消并行计算,在并行计算栏输入0,按回车。
方案二:如果取消并行计算后还是报错,点击Continue也无效,那么删除该工程,重做。
9.2 报错error(65)
报错:
在运行SWAT时报错forrt1:error(65): floating invalid
解决:
方案一:将自制的usersoil和WGEN_user中的数据最多保留两位小数,然后重新写表(将5和6重新操作)。
方案二:如果方案一行不通,就检查usersoil土壤数据库,尤其留意单层的土壤,单层土壤深300mm,它的第二层对应的总深度按理还是填300,因为是总深度嘛,但是实际需要填0,因为第二层土壤实际上是不存在的。
9.3 报错error severe(64)
报错:
在运行SWAT时疯狂弹出报错error severe(64)
解决:
将报错提示的文件进行修改,比如我的报错是提示太阳辐射slr文件有问题,那么在TxtInOut文件夹中找到该文件,用电脑自带的Notepads打开该文件,发现有几行数据没有对齐,用查找替换功能Ctrl+H,把这些行中-0099前面去掉一个0,替换为-099。
9.4 报错error(63)
报错:
在运行SWAT时疯狂弹出报错error(63)
解决:
注意!这次就不是将报错提示的文件进行修改,而是要修改降水文件pcp1,在TxtInOut文件夹中找到该文件,用电脑自带的Notepads打开该文件,发现有几行数据没有对齐,用查找替换功能Ctrl+H,把这些行中-099前面去掉一个,替换为-99,修改后的对齐效果见最后一张图。
注意和报错64是不一样的!64是把-0099改为-099。