目录
- SWAT-CUP安装出错,提示加载类型库/DLL时出错
- SUFI2_goal_fn.exe找不到SUFI2.OUT\beh_**
- SUFI2_95ppu_beh.exe Cannot open input file /SUFI2.OUT/no_beh_sims.txt
- ArcSWAT运行报错array SOL_BD has value of 7 which is greater than the upper bound of 6
- ArcSWAT在HRU Definition报错Error 457
- ArcSWAT运行时报错forrtl: severe (64): input conversion error
- ArcSWAT运行时报错forrtl:error(72):floating overflow
- ArcSWAT TxtInout中pcp1.pcp、Tmp1.Tmp中的气象站数量和fork中气象站数量不一致
- SWATCUP回代SWAT时报错CTL_E_PATHNOTFOUND
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表
解决办法
说明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,缺测数据表示为:
- pcp1.pcp -------> -99.0
- tmp1.tmp -------> -99.0
- slr.slr -------> -099.000
- wnd.wnd -------> -099.000
- 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"。