SatyrLee
文章80
标签21
分类7

一言

文章归档

SWAT 调参方法思路整理【2】

SWAT 调参方法思路整理【2】

封面图ID

书接,在简单讨论过调参方式和调参需要注意的事项后,接下来我们进行分析SWAT输入输出文件和编程思路。

SWAT输入输出

SWAT输入输出有全套的文档,在这里,仅选出对此次调参具有意义的部分进行讨论。由于本人专业受限,不讨论水质模拟部分,如有兴趣请留言或私信邮箱。

输入

SWAT需要使用file.cio进行控制,它也是SWAT模型访问的第一个文件,其中存储着与模拟步长,气象文件入口,气象参数,流域文件入口等信息。实际上来说,通过修改这些文件,即可实现对模型参数的修改,进而改变模拟结果。

个人理解SWAT关于流域文件为三层,第一层为流域级别文件,包括basin.bsn(流域文件),basin.wwq(水质文件)等;第二层为子流域级别文件,包括xxxxx0000.rte(河道文件), xxxxx0000.pnd(池塘及湿地文件), xxxxx0000.sub(子流域文件),xxxxx0000.swq(河道水质文件), xxxxx0000.wgn(天气发生器文件), xxxxx0000.wus(用水文件);第三层文件为HRU级别文件,xxxxxyyyy.mgt(管理文件),xxxxxyyyy.gw(地下水文件),xxxxxyyyy.hru(HRU输入文件),xxxxxyyyy.sdr(河渠文件),xxxxxyyyy.sol(土壤文件),xxxxxyyyy.sep(化粪池文件),xxxxxyyyy.chm(土壤化学文件)。

通过这些文件我们可以观察到,SWAT模型在不同尺度上有不同的参数,部分参数是HRU级别分布的,其他的是子流域级别,也有全流域级别的参数。因此,SWAT实际上是半分布式水文模型,当敏感性高的参数在各个HRU,子流域级别文件内均为同一值,则该模型在实际意义上已经退化为集总式水文模型。而将大尺度的参数下放至更小尺度,则需要改变SWAT源代码以符合具体要求。

输出

SWAT在执行计算后,会输出若干结果文件,根据SWAT模型文档,包括input.std(简要输入参数汇总),fin.fin(模拟状态文件),output.rch(河道输出文件),output.hru(HRU输出文件),output.sub(子流域输出文件),output.std(输出结果简要汇总),output.sed(河道泥沙输出),output.rsv(水库输出等)。

输出文件中,由于项目要求,仅需要考虑fin.fin(确定模拟是否成功)和output.rch(河段出入口流量)即可进行确定观测点流量。

编程思路

整体实现思路为通过指定配置文件Parameters.txt进行确定模型结构,所需调整参数,范围,所在文件和调整方法,批量模拟后提取模拟结果进行计算,求得可决系数和纳什效率系数,最终输出成一个csv表格便于分析。

程序主体采用面向对象思路,将单个抽样参数模拟视为一个对象。使用样本和Parameters.txt作为传入参数进行初始化,内构了修改参数,执行模型,提取结果,和实测对比计算可决系数和纳什效率系数等方法,并采用一个函数进行封装。

主体程序上,在扫描完Parameters.txt后,调用pyDOE2软件包进行拉丁超立方采样,通过对矩阵进行操作后导入进程池进行批量模拟,最后将全部结果输出为results.csv。

Parameters.txt 详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
===PARAMETERS FILE HEADER=== # 文件头
--RATIO OF SAMPLE AGAINST PARAMETERS-- # 样本与HRU数量之比,定义样本数量
1
--BSN-- # 子流域数量
27
--HRU LIST-- # 每个子流域的HRU数量,用空格分开
4 2 4 2 4 3 2 3 3 4 2 3 4 3 2 5 4 4 2 4 4 4 3 2 3 3 3
--RCH-- # 10 20 # 待用,不做使用

--CALIBRATE STRUCTURE WITH ORDER-- # 调参顺序,顺序排列,可分为多行,但必须覆盖全部子流域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
--ACTIVE CALIBRATION ORDER-- # 使用第几行调参顺序进行调参
1
--BSN PARAMETERS-- # 流域级别文件 格式:参数扩展名参数下限参数上限调参方式(r,v)
SMTMPbsn-2020v
--SUB PARAMETERS-- # 子流域级别文件 格式:参数扩展名参数下限参数上限调参方式(r,v)调节尺度(s,g)
ALPHA_BNKrte01vs
CH_K2rte5130vs
--HRU PARAMETERS-- # HRU级别文件 格式:参数扩展名参数下限参数上限调参方式(r,v)调节尺度(h,s,g)
CN2mgt-0.20.2rs
GW_DELAYgw30450vs
ALPHA_BFgw01vh
ESCOhru01vh
--SOIL PARAMETERS-- # 土壤参数文件 格式:参数扩展名参数下限参数上限调参方式(r,v)
Ksat. (est.)sol-0.80.8r
--SOIL CSV FILE-- # 土壤列表文件 位置在根目录
soil.csv
--WARMUP MONTH-- # 预热期,忽略结果输出长度,与SWAT模型给定预热期不同
0
--OBSERVED FILE-- # 观测文件 格式:序号文件名
12011-2015.txt
--SIMULATION DATA TO EXTRACT WITH ID-- # 提取RCH ID 格式:1RCHID
1RCH4
  1. 由于代码能力有限,因此只能同时调一条调参顺序;
  2. 土壤和实测数据有单独的格式;
  3. 土壤参数需要参考SWAT文档来调整字段名;
  4. 目前只能提取RCH的值,如有需要则会进一步跟进更新。

土壤列表格式

1
2
3
Soil Name
Haplic Luvisols1
Haplic Luvisols2

实测数据格式

1
2
3
4
1 114
2 514
3 1919
4 810

总结

  1. 本文概括了SWAT的输入输出,为接下来编程和parameters.txt进行铺垫
  2. 简介编程过程,力求在人话级别内将思路概括
  3. 介绍parameters.txt的格式和注意事项

看到这里如果只是想使用这个臭狗软件的,下一章就没有必要看了。下一章高能预警:不会代码的看不懂,会代码的血压拉满。

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