利用EFAST方法分析DHSVM参数的敏感性

1 篇文章 0 订阅


参数敏感性分析是数值模型应用中常用的方法,通过敏感性分析,可以区分哪些参数对模拟结果的影响更大,从而更好的进行参数率定,加深对模型应用的认识。本文以DHSVM样例数据为基础,介绍如何利用EFAST敏感性分析方法,对DHSVM中4个土壤参数进行敏感性分析。

一、所需资料

1.DHSVM模型及数据:来自DHSVM模型官网 https://www.pnnl.gov/projects/distributed-hydrology-soil-vegetation-model
2.EFAST方法matlab代码:可能来自网络资源 https://www.codedown123.com/64477.html,忘记从哪里获取得了,感谢贡献者,本文另附一份修改后的以供使用。
3.连接EFAST与DHSVM模型的C语言代码:本文提供下载。

参考文献:(希望大家多多引用 ^ . ^)
Zhao Y, Nan Z*, Yu W, Zhang L. Calibrating a hydrological model by stratifying frozen ground types and seasons in a cold alpine basin. Water. 2019, 11(5): 985. DOI:10.3390/w11050985.
赵奕,南卓铜*,李祥飞,徐毅,张凌. 分布式水文模型DHSVM在西北高寒山区流域的适用性研究. 冰川冻土. 2019, 41(1): 147-157.

资源附件:
https://download.csdn.net/download/qq_21957901/21110845?spm=1001.2014.3001.5501

二、操作步骤

流程图

1.导入matlab文件

将matlab文件中的efast_DHSVM.m、Parameter_settings_EFAST.m、parameterdist.m、SETFREQ.m这四个文件用Matlab打开。
导入matlab文件

2.设置参数取值范围和必要变量

在efast_DHSVM.m中输入相关的参数个数,搜索曲线采样数等信息。注意k是参加敏感性分析的参数数量+1个虚拟参数,在本案例仅选取4个土壤参数。
采样信息
在Parameter_settings_EFAST.m中输入参数的最大最小值,调整相应变量,本案例选取横向导水率LC、田间持水量FC、递减系数ED泡压BP这4个参数,另有一个虚拟参数dummy
参数范围

3.生成随机参数组

运行代码,在生成的变量中找到X,X为生成的随机参数组,如果待测参数有4个,每组采样65次,则一共有5组(包含一个虚拟参数),每组有65条记录。在这里插入图片描述
将X中的每一组的参数组分别保存为parameter.txt,放入工作文件夹parax中(x为对应的组号),具体样式请查看附件。(注意,将无关信息去除)
参数组
工作文件夹

4.修改DHSVM参数配置文件

本样例通过识别并替换配置文件中的标识符,将随机参数组填入DHSVM配置文件中。打开模型参数配置文件INPUT.Mercer.3.1.2_Bin,将待测参数的值模型输出路径替换为唯一标识符,请务必注意保证唯一标识符不会与配置文件中的其他字符重复,将修改后的配置文件放入每个paraX文件夹。
参数值替换为唯一标识符
模型输出路径

5.修改efast_dhsvm工程

打开efast_dhsvm工程中的源代码,设置相应的变量。

//此分组数量和每组个数根据eFAST算法要求分类,可自行修改合适的分组
#define G 5 //参数总数量(包括一个虚拟参数,所以数量会比实际参数多1)		!!需自行修改!!
#define N 65 //每个参数的采样个数,一般默认为65,需跟matlab中一致			!!需自行修改!!
#define PN 4 //待测参数个数												!!需自行修改!!

第93行(附近)设置唯一标识符,唯一标识符的顺序要跟parameter.txt文件中每行参数的顺序一致,保存路径标识符放在最后。

int j,k;
char paraname[PN+1][50] = {"L123C","F123C","E123D","B123P","D123RI"};//识别符 最后一个是模型输出路径  !!需自行修改,且与参数采样文件中每行的参数对应
char paradata[PN+1][10];

第176行(附近)设置调用 DHSVM.exe 运行模型,将字符串改为自己的DHSVM执行程序,本文以 DHSVM3.1.2.exe 为例。修改完成后生成执行程序。

//运行模型
sprintf(do_DHSVM, "DHSVM3.1.2.exe SET-%d", j);//.exe执行程序名!!需自行修改!!
system(do_DHSVM);

6.进行自动计算

将生成的efast_dhsvm.exe、和DHSVM运行程序DHSVM3.1.2.exe,修改后的参数配置文件INPUT.Mercer.3.1.2_Bin以及每组对应的参数文件parameter.txt放入对应工作文件夹parax。同时注意驱动DHSVM模型的数据文件的位置,本案例所用的驱动数据在input、met、modelstate文件夹中。
运算
运行efast_dhsvm.exe,对每个参数集合生成相应的参数配置文件SET-x,运行DHSVM模型,并将结果保存至对应的输出文件夹x

若提示模型输入数据无法打开,请仔细检查报错信息,在原参数文档INPUT.Mercer.3.1.2_Bin中修改输入数据路径为本机对应路径。所有DHSVM所需的输入数据在模型样例数据中的input、met和modelstate文件夹

7.提取日均径流量

打开c语言工程read_results,修改相关设置(已标注),生成read_results.exe,将其放入文件夹parax中,读取每个参数组的模拟结果中的Streamflow.Only文件,提取日平均径流量,保存为results.txt文档。如果要峰值流量等的其他数据,请自行提取。
results

将每组计算出的results.txt按照顺序合并成一个文件total_results.txt。包含 参数个数*每个参数采样个数 行数据,具体参考本文附件。
totalresults

8.统计参数敏感性

将matlab文件Sensitivity.m导入matlab,调整相应设置,修改路径载入total_results.txt进行计算,得到的变量中,SiSti是每个参数的一阶敏感性和全局敏感性。
sensitivity设置
一阶敏感性
在这里插入图片描述
可以看到前三个参数横向导水率LC、田间持水量FC、递减系数ED具有较高的敏感性,而泡压BP基本对结果没有任何影响。虚拟参数反映的是参数之间的相互关系,在这里似乎并不高,具体解析可以参考EFAST方法的说明。


总结

EFAST方法是比较常用的分析模型参数敏感性的方法,不仅能反映单个参数变化下的一阶敏感性,也能反映多个参数狐仙关联下的全局敏感性。本文提供了一种将EFAST方法应用到DHSVM模型中的方法,虽然文中只选取了4个土壤参数,但对模型其他参数也可以用同样的方法分析敏感性,也为EFAST方法应用到其他模型提供一个思路。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值