参数敏感性分析是数值模型应用中常用的方法,通过敏感性分析,可以区分哪些参数对模拟结果的影响更大,从而更好的进行参数率定,加深对模型应用的认识。本文以DHSVM样例数据为基础,介绍如何利用EFAST敏感性分析方法,对DHSVM中4个土壤参数进行敏感性分析。
本文同步发表在CSDN:https://blog.csdn.net/qq_21957901/article/details/119615658?spm=1001.2014.3001.5502
一、所需资料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打开。
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工程中的源代码,设置相应的变量。
第93行(附近)设置唯一标识符,唯一标识符的顺序要跟parameter.txt文件中每行参数的顺序一致,保存路径标识符放在最后。
第176行(附近)设置调用 DHSVM.exe 运行模型,将字符串改为自己的DHSVM执行程序,本文以 DHSVM3.1.2.exe 为例。修改完成后生成执行程序。
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.txt按照顺序合并成一个文件total_results.txt。包含 参数个数*每个参数采样个数 行数据,具体参考本文附件。
8.统计参数敏感性将matlab文件Sensitivity.m 导入matlab,调整相应设置,修改路径载入total_results.txt 进行计算,得到的变量中,Si 和Sti 是每个参数的一阶敏感性和全局敏感性。 可以看到前三个参数横向导水率LC、田间持水量FC、递减系数ED 具有较高的敏感性,而泡压BP 基本对结果没有任何影响。虚拟参数反映的是参数之间的相互关系,在这里似乎并不高,具体解析可以参考EFAST方法的说明。
总结EFAST方法是比较常用的分析模型参数敏感性的方法,不仅能反映单个参数变化下的一阶敏感性,也能反映多个参数狐仙关联下的全局敏感性。本文提供了一种将EFAST方法应用到DHSVM模型中的方法,虽然文中只选取了4个土壤参数,但对模型其他参数也可以用同样的方法分析敏感性,也为EFAST方法应用到其他模型提供一个思路。
转载本文请联系原作者获取授权,同时请注明本文来自赵奕科学网博客。 链接地址: https://blog.sciencenet.cn/blog-3452201-1300176.html
上一篇:
DHSVM初始状态数据制作 下一篇:
水热耦合模型SHAW驱动数据说明和运行方法