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列的数据。