SWAT 两个错误及其简易解决方法
其一 forrtl:severe (408) : fort : (10) : Subscript #1 of the array SOL_BD has value 7 which is greater than the upperbound of 6
问题描述
模型无法运行,采用debug模式运行之后会出现如题所示消息。
推测原因
- 存在缺值的情况;
- 土壤类型水体(Water Bodies)问题;
- 参数问题;
- 某一参数过长,超过字符串限制,文本最有可能出现这个问题;
- 待记录。
解决办法
- 补充值,空值记为0;
- 水体根据SWAT模型数据库给出相关参数,尽可能不作修改(默认SWAT2012.mdb/usersoil/201行),在SWAT+中,该类型已经被替换为WETW,并赋予一定参数(不知道是否已经解决);
- 层数对应清楚,确定各个参数阈值;
- TEXTURE、MUID、S5ID 等参数可以考虑使用缩写来缩短长度。
其二 forrtl:severe (64): Input conversion error, unit 138, file:(././.hmd.hmd)
问题描述
在运行时在指定年份出现这个问题,debug 错误消息如上。
推测原因
推测原因及解决办法来源(需要代理)。
作者通过观察代码发现SWAT模型扫描输入文件采用定长扫描的方式,在处理NODATA(-0099.000)时候会出现问题,如某行数据 19913110003.000-0099.000-0099.0000000.500:其中可分解为:
值
含义
1991
1991年
311
第311天
0003.000
值1
-0099.000
值2,注意-0099.000为-99,即为缺测值
-0099.000
值3,同上
0000.500
值4
数据拆分表
但是SWAT采用的扫描方式是 f8.3,即8位数字有3位小数。
解决办法
视频中的解决的问题方法是将-0099.000改为-0099.00。但我在此提出的解决方案是改为-099.000来保证三位小数精度。但此方法并未经过验证,容易出现问题。
总结
- 在不确定参数及输入是否正确时,采用 Debug 模式运行SWAT模型;
- 土壤数据库中水体需要给出参数就离谱,在SWAT+中已经修改为空,好文明;
- SWAT就是个Zippo!
- Happy Debugging。