SatyrLee
文章80
标签21
分类7

一言

文章归档

SWAT 两个错误及其简易解决方法

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模式运行之后会出现如题所示消息。

推测原因

  1. 存在缺值的情况;
  2. 土壤类型水体(Water Bodies)问题;
  3. 参数问题;
  4. 某一参数过长,超过字符串限制,文本最有可能出现这个问题;
  5. 待记录。

解决办法

  1. 补充值,空值记为0;
  2. 水体根据SWAT模型数据库给出相关参数,尽可能不作修改(默认SWAT2012.mdb/usersoil/201行),在SWAT+中,该类型已经被替换为WETW,并赋予一定参数(不知道是否已经解决);
  3. 层数对应清楚,确定各个参数阈值;
  4. 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来保证三位小数精度。但此方法并未经过验证,容易出现问题。

总结

  1. 在不确定参数及输入是否正确时,采用 Debug 模式运行SWAT模型;
  2. 土壤数据库中水体需要给出参数就离谱,在SWAT+中已经修改为空,好文明;
  3. SWAT就是个Zippo!
  4. Happy Debugging。

本文作者:SatyrLee
本文链接:http://www.naive514.top/posts/e282ab68/
版权声明:本文采用 CC BY-NC-SA 4.0 CN 协议进行许可