1.所需数据

SWAT模型需要的气象数据有六类:主要包括流域的日降水量、日最高、最低气温、日太阳辐射、日平均风速和日相对湿度。以及天气发生器数据。(加粗为必需数据)

(简介:理想情况下SWAT模型需要至少20年的天气资料,如果缺少必要的资料则可用天气发生器进行补充。在时间尺度上,模型的模拟时间步长可以为年、月、日,天气发生器主要是用于缺失数据的模拟,没有缺失的时候可以直接调用系统默认的)
 

1.1 数据准备

首先按研究区域范围筛选出流域内的站点,按站点整理各气象数据,依次按照各要素整理好文件夹。文件夹整理格式为:

一个气象要素一个文件夹,文件夹内每个站点的数据为一个txt,再加一个索引文件(要放在同一个文件夹下)

每个站点的数据格式整理为1列,第一行是数据的起始日期,索引文件(prefork)整理如图

***一些注意事项:缺失值使用-99替代,然后由天气发生器模拟得到结果;气温数据为两列,最高温一列,最低温一列。

除太阳辐射外的气象数据直接整理完毕即可,太阳辐射没有直接的数据,需要基于日照时数进行计算,参考相关教程(原链接提供的excel表非常清楚,也很简洁明了,可以直接使用),由于数据较多,在R中完成批量处理(代码如下),最终得到对应的太阳辐射数据。利用日照时数计算太阳辐射_根据日照时数计算太阳总辐射_聂小七f的博客-CSDN博客https://blog.csdn.net/qq_35823062/article/details/129026872

```{r Define function}
rm(list = ls())

#首先定义函数,输入值为day, lat和SSD,即可输出SR
Fsr <- function(day, lat, SSD){
  gsc = 118.108
  
  j = 2*pi*(day-1)/365
  j2 = j*2
  j3 = j*3
  e0 = 1.00011+0.034221*cos(j)+0.00128*sin(j)+0.000719*cos(j2)+0.000077*sin(j2)
  
  a1 = 0.399912*cos(j)
  a2 = 0.070257*sin(j)
  a3 = 0.006758*cos(j2)
  a4 = 0.000907*sin(j2)
  a5 = 0.002697*cos(j3)
  a6 = 0.00148*sin(j3)
  
  sita = (180/pi)*(0.006918-a1+a2-a3+a4-a5+a6)
  ws1 = -tan((pi/180)*sita)*tan((pi/180)*lat)
  ws = 180/pi*acos(ws1)
  
  h01 = cos((pi/180)*lat)*cos((pi/180)*sita)*sin((pi/180)*ws)
  h02 = (pi/180)*sin((pi/180)*lat)*sin((pi/180)*sita)*ws
  
  h0 = (1/pi)*gsc*e0*(h01+h02)
  h1 = 0.8*h0
  sl = 2/15*ws
  SR = h1*(0.248+0.752*SSD/sl)
  return(SR)
} 
```

1.2 天气发生器

当所需的六类数据中,有缺失项,或者是某一项中有缺失值时,便需要用到天气发生器,但如果所有数据均无缺失,可以不进行天气发生器的制备,因为不需用到他的模拟。因此两个思路:

(1)对原始数据的一些缺失值进行插值处理,直接输入模型中;

(2)制备天气发生器。需要的数据值包括下表所示,可以通过SWATWeather进行计算,也可以通过自己写代码计算(我觉得),最终需要的数据格式表头参考SWAT2012里的WGEN_user。但需要注意的是,导入软件以及自己计算天气发生器所需参数时,不能包含缺失值,因此缺失值也得先简单处理一下。

天气发生器所需参数
参数含义参数含义
TMPMX

每月平均日最高气温

PR_W1每月湿日之后干日的概率
TMPMN每月平均日最高气温PR_W2每月湿日之后湿日的概率
TMPSTDMX每月日最高气温的方差PCPD每月平均降水天数
TMPSTDMN每月日最低气温的方差RAINHHMX每月最大半小时降水量
PCPMM每月日平均降水量SOLARAV每月日均太阳辐射量
PCPSTD每月日降水量的方差DEWPT每月平均日露点温度
PCPSKW每月日降水量偏斜系数WNDAV每月日平均风速

 **统计的都是每月的多年平均值,所以最终是有14*12列的数据。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐