SWAT| 水文 | SWAT模型(六):SWAT运行及常见报错解决

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的操作顺序很简单,基本上是从左往右依次点一遍。


目录

1 SWAT工程设置

2 流域划分

2.1 DEM Setup数字高程设置

2.2 Stream Definition河网定义

2.3 Watershed Outlets Selection and Definition流域出口选择和流域划分

2.4 Calculation of Subbasin Parameters子流域参数计算

3 土地利用/土壤/坡度定义

3.1 Land Use Data土地利用数据导入

3.2 Soil Data土壤数据导入

3.3 Slope坡度设置

3.4 Overlay上传定义结果

4 HRU水文响应单元划分

5 气象站数据导入

​5.1 气象数据导入

5.2 天气发生器数据库导入

6 写表

7 运行SWAT模型

8 导出SWAT运行结果

 9 常见报错及解决

9.1 报错error-2147467259或error010429或“不能再读取表了”

9.2 报错error(65)

9.3 报错error severe(64)

9.4 报错error(63)


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。

SWAT模型中气象数据的计算翻译By:94527257 The Program pcpSTAT User’s Manual Stefan Liersch, Berlin, August 12, 2003 stliersch@freenet.de 下载地址:http://www.brc.tamus.edu/swat/pcpSTAT.zip 引言 pcpSTAT.exe 程序用来计算SWAT 模型气象发生器所需要的每日降水数据的统计 参数(userwgn.dbf)。表1 中列出的一些参数能毫不费力地利用MICROSOFT EXCEL 等 工具计算出来,而PR_W1 和 PR_W2 比较难计算。 表 1:SWAT 所用的降水统计参数 PCPMM(mon) = average or mean total monthly precipitation PCPSTD(mon) = standard deviation for daily precipitation in month PCPSKW(mon) = skew coefficient for daily precipitation in month PR_W1(mon) = probability of a wet day following a dry day PR_W2(mon) = probability of a wet day following a wet day PCPD(mon) = average number of days of precipitation in month 输入文件 存储着每日降水数据的输入文件必须是只有一列数字的 ASCII 码文本文件(图1)。 观测期必须是开始于1 月1 日,结束于12 月31 日。换句话说,第一个数据值是1 月1 日的,最后一个是12 月31 日的。虽然对利用的总年数没有限制,但每一次的计算都 必须是基于一整年。 若是有缺失的数据,需要用空值(必须是数字)来填充这些缺失的数据值。程序 会询问这些值,并用整个系列的平均值取代空值。 图1: Example of a Precipitation Input File 翻译By:94527257 创建输入文件 降水数据文件通常是文本文件,一列是日期,一列为降水值。用EXCEL 打开数据 文件,若有必要可以缩减日期,以使其从1 月1 日开始,12 月31 日结束。随后,删除 日期列,只剩降水数据列,并保存为文本文件(filename.txt)。 若是使用其它软件创建输入文件或是之后使用文本编辑器操作文件,确保最后存 在一个空行。若是没有空行或是超过一个空行,程序将会中断并弹出消息“End of file during read”,且将会产生错误的输出数据 运行 pcpSTAT.exe 程序 将程序和输入文件放在同一个目录,双击 pcpSTAT.exe 或是从DOS 窗口中启动程 序(图2)。键入输入、输出文件的名字(包括其扩展名),至于输出文件,可以任意命 名。下一步,需要输入起始年份,用来判断一个年份是否是闰年。只要键入第一年(4 位数字)回车。此后,需要输入无数据值,若降水数据有缺测,需要输入一个并不存 在的数字,例如“999”。 图2: Program pcpSTAT.exe 在计算结束后,输出文件(图3)会自动保存在程序目录中。此外,还会生成2 个文件:totalpcp.sta 和mean_pcp.sta。totalpcp.sta(图4)包含了每年每个月的总降水, mean_pcp.sta 则包含每年每个月的平均每日降水。 翻译By:94527257 图3: Example of an Output File 翻译By:94527257 图4: Example of the File totalpcp.sta
<think>好的,用户遇到了SWAT运行时出现的错误,需要解决方案。首先,我需要根据提供的引用信息来整理可能的解决方法。引用1和2提到了ArcSWAT的各种报错解决方案,尤其是关于边界错误和加载类型库/DLL的问题。引用3虽然主要关于时间序列GDN代码错误,但可能对理解错误处理流程有帮助。 首先,用户的问题比较笼统,我需要先确定常见SWAT运行错误类型。根据引用1,边界错误可能是因为输入数据超出模型允许的范围,比如土地利用类型或土壤类型的代码不正确。这时候需要检查输入数据的有效性。另外,引用2提到在安装SWAT-CUP时出现加载类型库/DLL错误,解决方案包括修复库文件、以管理员身份运行或调整系统区域设置。这些可能也适用于运行时错误。 接下来,我应该分步骤给出解决方案。首先检查输入数据,确保所有参数在合理范围内。然后检查系统环境,比如库文件是否完整,可能需要DirectX修复工具。此外,管理员权限和兼容模式也是常见解决步骤。如果错误信息不明确,建议用户查看日志文件,或者提供更具体的错误内容以便进一步排查。 另外,用户可能没有提供具体的错误信息,所以需要提醒他们如何获取更详细的错误日志,比如在ArcSWAT中查看output窗口或生成的报告文件。同时,引用3中的修改代码示例可能暗示某些错误需要代码层面的调整,但SWAT作为模型工具,可能需要配置文件或输入数据的调整而非直接修改代码。 最后,需要组织回答结构,先列出常见错误类型和解决方案,再分步骤指导用户如何排查,并建议提供具体错误信息以便更精准的帮助。同时要确保符合格式要求,使用正确的LaTeX格式,并生成相关问题。</think>针对SWAT运行时出现的报错问题,以下是分步骤解决方案及常见错误类型分析: ### 一、常见报错类型及解决方案 1. **输入数据越界错误** - 典型表现:`Error: Parameter out of boundary` 或 `土地利用类型代码无效` - 解决方法: - 检查输入文件中的土壤类型代码是否在SWAT预定义范围内(如$1 \leq \text{代码} \leq 10$) - 验证气象数据时间范围是否覆盖模拟期 - 使用ArcSWAT内置的`Check Project`功能进行数据完整性校验[^1] 2. **DLL/类型库加载失败** - 典型表现:`加载类型库/DLL时出错` - 解决方法: ```powershell # 以管理员身份运行CMD执行 regsvr32 "C:\SWAT\swat_ocx.ocx" ``` - 安装Visual C++ Redistributable 2015-2022 - 修改系统区域设置为英语(美国)后重试[^2] 3. **内存分配错误** - 典型表现:`Memory allocation failed for...` - 解决方法: - 将模型模拟期分段运行 - 修改`file.cio`中的`NSAVE`参数值 $$ \text{建议值} = \min(\frac{\text{总模拟天数}}{10}, 365) $$ ### 二、系统级排查流程 1. **运行环境验证** - 检查操作系统兼容性(建议Windows 10 64位) - 确认.NET Framework 4.8和Java 8已安装 2. **权限配置** ```powershell # 设置SWAT安装目录完全控制权限 icacls "C:\SWAT" /grant Users:(OI)(CI)F ``` 3. **日志分析** - 查看`output.rch`和`output.hru`文件首行状态码 - 错误代码对应表: | 代码 | 含义 | 处理建议 | |---|---|----| | 0 | 正常 | - | | 2 | 数据异常 | 检查温度数据范围$[-50,60]^\circ C$ | ### 三、高级调试方法 对于持续出现的`HRU分配失败`错误,可尝试调整阈值: $$ \text{土地利用面积阈值} = \frac{\text{子流域面积}}{1000} $$ 在`.hru`文件中使用条件过滤: ```fortran IF (LULC == "AGRL") THEN AREA = MAX(AREA, threshold) ENDIF ```
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值