【SWAT】ArcSWAT各种报错及解决方案汇总(随缘更新)

本文汇总了ArcSWAT安装及运行过程中遇到的各种错误,包括加载类型库/DLL错误、SUFI2运行错误、SOL_BD越界错误、HRU Definition报错457等,并提供了详细的解决方案,如更换版本、检查输入文件格式、调整参数范围等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SWAT-CUP安装出错,提示加载类型库/DLL时出错

说明

我在win11上安装SWAT-CUP 2017版时,提示加载类型库/DLL时出错,采用DirectX Repair修复库文件后,并未得到解决。记录一下解决方案。
在这里插入图片描述

方案一

拷贝其他电脑成功安装CUP目录

方案二

解压安装包,找到CUP可执行文件所在文件夹
在这里插入图片描述

方案三

安装SWAT-CUP 2019,按照前处理、运行模型、后处理的顺序,在CUP目录依次执行SUFI2_Pre.bat、SUFI2_run.bat、SUFI2_Post.bat

方案四

安装SWAT-CUP 2019,购买许可
在这里插入图片描述

SUFI2_goal_fn.exe找不到SUFI2.OUT\beh_**

在这里插入图片描述
在这里插入图片描述
根据官方文档,SWATCUP目标函数计算时候,主要输入输出文件有
在这里插入图片描述
其中

  • Echo\echo_goal_fn.txt ==>> 目标函数计算的日志
  • SUFI2.OUT\goal.txt ==>> 目标函数计算结果
  • SUFI2.OUT\best_sim.txt ==>> 最优目标函数对应的模拟结果
  • SUFI2.OUT\best_par.txt ==>> 最优目标函数对应的最优参数
  • SUFI2.OUT\beh_ pars.txt ==>> 可行参数集
  • SUFI2.OUT\no_beh_sims.txt ==>> 可行的模拟次数
  • SUFI2.OUT\best_sim_nr.txt ==>> 最优目标函数对应的模拟序号

因此可能的原因有:
1、SWAT.exe版本不一致,可以直接将arcswat目录下的swat.exe替换到swatcup目录下。
2、输入文件格式有问题,由于此步已经到了post,所以调试的时候,可以每次只选择post执行
在这里插入图片描述

  • 具体需要调试的是observed.txt等目标函数计算的输入文件
  • 首先得确保基本格式的正确
    在这里插入图片描述
  • 其次可以调整可行方案的最小目标函数阈值(min value of objective function threshold for the behavioral solutions),通常NS较小的时候,不存在可行方案会报找不到的错误

SUFI2_95ppu_beh.exe Cannot open input file /SUFI2.OUT/no_beh_sims.txt

在这里插入图片描述
计算步骤到了最后一步,说明前面的计算都顺利,不存在格式问题。只是因为NS小于可行方案的最小目标函数阈值,不存在可行方案。
在这里插入图片描述

ArcSWAT运行报错array SOL_BD has value of 7 which is greater than the upper bound of 6

报错原因

土壤数据库user_soil存在问题

原因1,土壤深度设置有误

详细参考:https://blog.csdn.net/Chris_Ning/article/details/98242315
在这里插入图片描述

原因2,参数的范围越界

user_soil中参数范围说明,详见solrng表
solrng

解决办法

说明1

经反复测试,user_soil中的参数,NLAYER的值须为大于0的整数,SOL_ZMX>=SOL_Z1>0,而其他参数设置为0均不会报错。

说明2

对于11927水体WR对应的参数,博主参数设置直接采用default中的WATER,如有其他思路请留言指教
在这里插入图片描述

ArcSWAT在HRU Definition报错Error 457

说明

ArcSWAT在HRU Definition时,如果设置不当会出现457错误,457错误是VB (Visual Basic) 中的常见错误,表示“此键已经与集合中的一个元素关联”。这个错误通常在使用Dictionary对象时出现,当你尝试将一个新的键值对添加到已经存在的键中时,就会出现这个错误。

错误原因

当手动双击添加土壤/土地利用类型,定义为相同类型的土壤/土地利用,重分类后不会自动合并,存在相同的类型名,此时会报错。
在这里插入图片描述

An error has occured in the application. Record the call stack sequenceand the description of the error.
Error Call Stack Sequence
cmdOK LUSoilsfunctions.vb Line:475
Error Number
457
Description
此键已与此集合的某个元素关联。

在这里插入图片描述

解决办法

避免重分类后出现相同的类型名

1、手动点击时,不要使用相同土地利用/土壤名

在这里插入图片描述

2、使用LookUp Table,可以根据索引自动合并相同名称类型

土地利用

"VALUE","Landuse"
20,FRST
30,PAST
40,PAST
50,PAST
60,WATR
80,URHD
90,URHD

土壤

VALUE,NAME
11627,Acf
11783,Acf
11927,WR

ArcSWAT运行时报错forrtl: severe (64): input conversion error

在这里插入图片描述

ArcSWAT运行时报错forrtl:error(72):floating overflow

在这里插入图片描述

原因

上述两个报错都可能是越界问题,输入文件中的变量值超出数据库变量的值域范围,特别的对于气象数据fork,缺测数据表示为:

  1. pcp1.pcp -------> -99.0
  2. tmp1.tmp -------> -99.0
  3. slr.slr -------> -099.000
  4. wnd.wnd -------> -099.000
  5. hmd.hmd -------> -099.000

debug

建议检查当前textinout中报错文件,比如本次报错文件为tmp1.tmp,
在这里插入图片描述
检查后发现,温度为-100.明显异常,修改温度的fork文件,重新加载,运行成功!
在这里插入图片描述

ArcSWAT TxtInout中pcp1.pcp、Tmp1.Tmp中的气象站数量和fork中气象站数量不一致

说明

SWAT采用泰森多边形计算流域面降雨,可根据降雨站点及流域边界分析确定SWAT模型所选择的具体站点。可以发现所选择的站点并非全部站点,而是流域内部站点及部分流域外站点。

其他说明

观察file.cio中的Climate可以发现NRTOT、NRGFIL控制着降雨站点的数量,这些参数都是自动生成的

Climate:
               0    | IGEN : Random number seed cycle code
               1    | PCPSIM : precipitation simulation code: 1=measured, 2=simulated
               0    | IDT : Rainfall data time step
               0    | IDIST : rainfall distribution code: 0 skewed, 1 exponential
           1.300    | REXP : Exponent for IDIST=1
               1    | NRGAGE: number of pcp files used in simulation
               4    | NRTOT: number of precip gage records used in simulation
               4    | NRGFIL: number of gage records in each pcp file
               1    | TMPSIM: temperature simulation code: 1=measured, 2=simulated
               1    | NTGAGE: number of tmp files used in simulation
               4    | NTTOT: number of temp gage records used in simulation
               4    | NTGFIL: number of gage records in each tmp file
               2    | SLRSIM : Solar radiation simulation Code: 1=measured, 2=simulated
               0    | NSTOT: number of solar radiation records in slr file
               2    | RHSIM : relative humidity simulation code: 1=measured, 2=simulated
               0    | NHTOT: number of relative humidity records in hmd file
               2    | WINDSIM : Windspeed simulation code: 1=measured, 2=simulated
               0    | NWTOT: number of wind speed records in wnd file
               0    | FCSTYR: beginning year of forecast period
               0    | FCSTDAY: beginning julian date of forecast period
               0    | FCSTCYCLES: number of time to simulate forecast period

根据SWAT输入输出手册:
NRTOT:为模拟中用到的降雨台站文件(.pep)的个数。至多可用18个文件。如果使用实测降水数据,为必选项;
NTTOT:模拟中用到的降雨台站记录的总数。如果每个.pep文件只包括一条降雨台站记录,则NRTOT=NRGAGE;否则NRTOT>NRGAGE。一次模拟至多可用5400条降雨台站记录。如果使用实测降水数据,为必选项。
NRGFIL:各.pcp文件中降雨台站记录的数量,一个.pep文件中至多有300条降雨台站记录。如果使用实测降水数据,为必选项。
温度数据类似。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

SWATCUP回代SWAT时报错CTL_E_PATHNOTFOUND

在这里插入图片描述

点击Copy to Default时,SWAT会先删除Default中的TxtInOut,然后将指定Scenario中的TxtInOut复制到Default,因此需要确保默认Scenario中的TxtInOut目录,否则会报错"CTL_E_PATHNOTFOUND"。

<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 ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KmBase

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值