用于处理Rhessys模型校准的库和命令行脚本。

rhessyscalibrator的Python项目详细描述


**RhessysCalibrator**{index}

**简介**


RhessysCalibrator是一个用于管理校准会话和运行
Rhessys的系统;校准会话包含一次或多次运行。每次运行代表一组不同且一致的灵敏度参数。
rhessyscalibrator使用数据库(sqlite3格式)跟踪每个
会话并运行。RhessysCalibrator处理每个
运行的启动和管理,并在提交运行作业、开始
运行和完成(无论有无错误)时更新其数据库。RhessysCalibrator支持模型运行的并行执行,使用以下方法:(1)多个进程(即在笔记本电脑或工作站上);(2)运行负载共享工具(LSF)的计算群集;(3)运行PBS/Torque的计算群集;(4)运行slurm的计算群集。

除了创建新的校准会话外,还可以重新启动在完成之前退出的会话。RhessysCalibrator还处理校准后处理(即计算建模与观测水流的Nash-Sutcliffe效率),以及使用广义似然不确定度估计(Glue;Beven&Binley 1992)进行不确定度估计。

<;!--启动DOCTOC生成的目录请在此处保留注释以允许自动更新-->;
<;!--不要编辑此节,而是重新运行doctor以更新-->;
**目录**

-[作者](作者)
-[源代码](源代码)
-[安装说明](安装说明)
-[Rhessys校准背景](Rhessys校准背景)
-[使用说明](使用说明)
-[设置新的校准器项目](设置-新建-校准器-项目)
-[配置校准会话](配置-校准-会话)
-[创建新的校准会话](创建-新建-校准-会话)
-[使用屏幕在计算上运行RhessysCalibrator群集](使用屏幕在计算群集上运行RhessysCalibrator)
-[重新启动失败的模型会话](重新启动失败的模型会话)
-[计算流域级输出的模型适应度统计信息](计算流域级输出的模型适应度统计信息)
-[执行粘合不确定度估计](执行粘合不确定度估计)
-[将行为参数集应用于另一个Rhessys模型](将行为参数集应用于另一个Rhessys模型)
-[可视化行为模型输出](可视化行为模型输出)
-[比较行为模拟](比较行为模拟)
-[使用其他工具可视化行为模型输出](使用其他工具可视化行为模型输出)
-[附录](附录)
-[模型目录结构](模型目录结构)
-[参考文献](参考文献)

<;!--结束dococ生成的目录请在此处保留注释以允许自动更新-->;

作者
--
brian miles-brian椆miles@unc.edu


taehee hwang-taehee@indiana.edu


lawrence e.band-lband@email.unc.edu


有关文档,请访问:https://github.com/selimnairb/rhessyscarlibrator

[RhessysWorkflows](https://github.com/selimnairb/RhessysWorkflows)和[EcoHydrolib](https://github.com/selimnairb/EcoHydrolib);可以[在这里](https://github.com/selimnairb/RhessysWorkflows)找到OS X和Linux的详细安装说明。

>;尽管rhessyscalibrator是用python编写的,但它只在os x和linux下进行过测试。

使用说明AB安装RhessysWorkflows和EcoHydrolib后ove,使用pip安装rhessyscarlibrator:

sudo pip安装rhessyscalibrator

>;请注意,在安装rhessyscalibrator及其对计算群集的依赖关系时,
>;您可能首先需要使用*virtualenv*

基本的Rhessys模型校准通常是通过使用蒙特卡罗方法根据流域水平流校准模型的土壤参数来执行的。这些土壤参数和一般校准策略在[此处](https://github.com/rhessys/rhessys/wiki/calibration and running rhessys)中有详细说明。

使用说明RhessysCalibrator将创建空的RhessysCalibrator项目。首先创建一个新目录:


,然后用[正确的子目录结构](模型目录结构):


校准是使用RhessysWorkflows创建的,您可以使用提供的*rw2rc.py*脚本将RhessysWorkflows项目复制到空RhessysCalibrator项目中:

rw2rc.py-p my戋rhessysWorkflows戋project-b my戋u calibration戋project

如果您不是在RhessysWorkflows项目中工作,您需要将必要的模型文件复制到校准目录中的[正确位置](模型目录结构)。


最后,将流域观测到的日径流和降水数据复制到RhessysCaliber项目的*obs*目录中,例如:

cp path/to/my_observated_data my_calibration_project/obs


请注意,observated data的格式必须是csv文件,包括以下列l:


datetime、streamflow_mm、precip_mm
1/1/1991、3.7、0
1/2/1991、3.5、0
1/3/1991、3.51,8.4
1/4/1991,3.32,0.5
1/5/1991,3.21,0



datetime列必须包含mm/dd/yyyy格式的数据。流量和降水数据必须以mm/天为单位;流量必须在名为"streamflow_mm"的列中,降水必须在名为"precip_mm"的列中。确保行尾是unix,而不是windows或mac。

配置校准会话
rhessyscalibrator使用名为*cmd.proto*的文件来控制如何创建校准运行。该文件的典型内容是:

>$rhessys-s t 2003 1 1 1 1 1-ed 2008 10 1 1 1-b-t$tecfile-w$worldfile-r$flowtable-pre$outpu路径-s$s1[0.01,20.0]$s2[1.0,150.0]$s3[0.1,10.0]-sv$sv1[0.01,20.0]$sv2[1.0,150.0]$gw$gw1[0.001,0.001,0.3]$gw2[0.01,20.0.0]$sv1[0.01,20.0]$sv2[1[1.0,150.0.0]$gw1[1/>或老年人RhessysCalibrator的版本(或者如果在创建项目时使用*--noparamranges*选项),则不包括每个参数的范围:
$Rhessys-s t 2003 1 1 1 ed 2008 10 1 1-b-t$Tecfile-w$worldfile-r$flowtable-pre$output路径-s$s1$s2$s3-sv$sv1$sv2-gw$gw1$gw2

>;在创建项目时使用*--allparams*选项,以便在项目的*cmd.proto*


以及设置土壤参数以进行校准。在这种情况下,对于每个模型运行,以下参数将发生变化:土壤排水饱和导水率衰减(用模型术语来说,为s1或m);土壤排水饱和导水率衰减(s2或ksat0);土壤深度(s3);渗透饱和导水率衰减(sv1或m_v);垂直渗透饱和导水率(sv2或ksat0_v);旁路流量m滞留蓄水直接排入山坡地下水(gw1);饱和区流失至山坡地下水(gw2)。


通常,您只需更改开始和结束日期,校准参数包括:以及
将从中对每个参数进行采样的均匀分布的范围;参数范围是通过将所需的闭合间隔(即两个用逗号分隔并用方括号括起来的浮点数)紧跟在参数名称之后来指定的。忽略cmd.proto的所有其他部分(例如$worldfile,$output_path),因为RhessysCalibrator使用这些部分为作为校准会话一部分创建的每个模型运行创建Rhessys命令行。我们建议您还制作一个用于调试模型的test cmd.proto:



例如,编辑cmd.proto.test以仅运行模型一个月:

$rhessys-st 2007 1 1 1-ed 2007 2 1 1 1-B-T$Tecfile-W$worldfile-R$flowtable-pre$output路径$s1[0.01,20.0]$s2[1.0,150.0]$s3[0.1,10.0]-sv$sv1[0.01,20.0]$sv2[1.0,150.0]-gw$gw1[0.001,0.3]$gw2[0.01,0.9]

现在保存cmd.proto的副本,以便在测试模型时不会覆盖它:


在运行调试校准会话之前,将cmd.proto.test复制到cmd.proto:

cp my戋u calibration戋project/cmd.proto

\r/>\r创建新的校准会话
要运行rhessys calibrator,我们使用*rhessys戋u calibrator*命令:

rhessys戋u calibrator.py-b my戋u calibration project-p'my戋rhessys model'-n'调试校准会话,一次迭代'-i 1-j1--并行模式进程

*-b*选项指定要使用的rhessycalibrator项目目录。我们使用*-p*选项描述项目,并为使用*-n*选项的特定校准会话提供注释。由于这是一个测试校准会话,我们指定只希望使用*-i*选项运行一个迭代,并且只希望在给定时间内使用*-j*最多运行一个模型。最后,我们将并行模式设置为*process*,这适合在笔记本电脑或工作站上运行。要在运行lsf的计算群集上运行校准会话,请按如下方式更改命令行:


rhessys_calibrator.py-b my_calibration_project-p'my rhessys model'-n'debug calibration session,一次迭代'-i 1-j1--parallel_mode lsf--mem_limit n-q queue_name

,其中*n*是模型所需的内存量,单位为GB,*queue_name*是此会话的作业应提交到的LSF队列的名称。请注意,队列名称将特定于您的计算集群(请向管理员询问详细信息)。

或在运行pbs/torque的计算集群上运行会话:


rhessys_calibrator.py-b my_calibration_project-p'my rhessys model'-n'调试校准会话,一次迭代'-i 1-j 1--并行模式pbs--mem_limit n--墙时间m

,其中*m*是小时数你估计你的模型需要完成。在pbs下运行时,您还可以选择指定*-q*选项。类似地,要在运行slurm的计算集群上运行会话:


rhessys_calibrator.py-b my_calibration_project-p‘my rhessys model’-n‘调试校准会话,一次迭代’-i 1-j 1——parallel_mode slurm——mem_limit n-q queue_name

*q*是要向其提交作业的slurm分区的名称。在slurm下运行时,您还可以选择指定*--wall_time*选项。

有关这些选项和其他选项的详细信息,请在运行时使用*--help*选项运行*rhessys_calibrator*g,RhessysCalibrator会在屏幕上打印许多丑陋但通常信息量大的消息,告诉您它正在执行的操作。

一旦您使用test*cmd.proto*成功地运行了一次迭代的校准项目,首先将test*cmd.proto*替换为real*cmd.proto*:



,然后可以启动校准会话,如下所示。对于多处理器模式(即在笔记本电脑或工作站计算机上):


,其中*-i*指定此会话应包含500个迭代或模型实现,其中*-j*控制并行运行的最大迭代次数或同时作业(本例中为8个)。多处理器模式下可能同时执行的作业数取决于计算机中的处理器/内核/虚拟内核数,以及Rhessys模型所需的内存量和内存量(这取决于模型域的空间范围和分辨率)。

>;您可以使用计算机的
>;查看模型运行所需的内存量;模型运行时的活动监视工具。

在计算群集上运行时,通常可以并行运行更多的并发作业。例如,在基于lsf的群集上:

rhessys_calibrator.py-b my_calibration_project-p'my rhessys model'-n'debug calibration session,一次迭代'-I 5000-J 1000--并行模式LSF--内存限制n-q队列名称

一次迭代'-I 5000-J 1000--并行模式PBS--内存限制n--墙时间m

n——墙时间m

这里我们告诉rhessyscalibrator在此会话中运行5000个模型迭代,最多同时运行1000个作业。请注意,可能同时执行的作业数将取决于计算群集的大小(例如核心数)以及管理策略。例如,有些系统限制用户一次最多使用几百个计算核心,并可能对所有作业施加聚合内存限制,例如几兆字节(tb)。在尝试使用RhessysCalibrator同时运行多个作业之前,请参阅群集的文档。

我们建议在*屏幕*会话中运行
*Rhessys_Calibrator*。*screen*是一个允许您在终端中运行命令的工具,如果您与compute
集群的连接丢失,该终端将不会退出。假设*screen*安装在集群上(如果没有,请让管理员安装),则在运行任何RhessysCalibrator命令之前,您将启动screen:

screen

这将导致screen启动并运行正常的登录shell,从中可以运行rhessyscaliber命令。要从屏幕会话中分离,请按键盘上的control-a,然后按control-d。若要重新附加到分离的屏幕会话(无论是分离的还是强制断开的),请在运行屏幕时指定-r*选项:


screen-r

\在所有校准运行完成之前,*rhessys_calibrator*会话可能会强制停止(您甚至可能决定自己退出会话)。你可以使用*rhessys_calibrator_restart*命令重新启动这样的会话,对于基于LSF的群集:

rhessys_calibrator_restart.py-b my_calibration_project-s n-i 5000-j 1000-parallel_mode lsf-mem_limit m-q queue_name

或对于基于PBS/转矩的群集:

rhessys_calibrator_restart.py-b my_calibration_project-s n-i 5000-j 1000--parallel_mode pbs--mem_limit m--wall_time w


或对于基于slurm的集群:


rhessys_calibrator_restart.py-b my_calibration_project-s n-i 5000-j 1000--parallel_mode slurm--mem limit m--wall_time w

要重新启动的会话。将打印已完成的运行数、将重新启动的运行数和将启动的新运行数,然后询问是否要继续。

完成)您可以使用*Rhessys_Calibrator_Postprocess*计算模型适应度参数(例如,Nash Sutcliffe效率用于每日流量和每日日志(streamflow)):


Rhessys_Calibrator_Postprocess.py-b My_Calibration_Project-f My_Observed_Data-s 2--EndDate 2007 2 1 1--图8--图6

*-s*选项指定要为其计算适应度参数的校准会话;通常会话是*2*是我们的第一个真实校准会话,因为第一个会话是我们的测试会话。在这里,我们还指定希望计算适应度参数的时间段的结束日期;这是使用*--end date*选项完成的。注意,还可以使用*-p*(也称为*--period*)选项指定用于计算适应度参数的时间聚合。默认值为"daily",但也支持"weekly"和"monthly"。*--figurex*和*--figurey*选项控制输出图的X和Y尺寸(以英寸为单位)。

完成后处理后,将打印以下消息:

fitness results saved to post process session:n

,其中"n"是刚刚为校准会话创建的进程后会话的编号;记住此编号。每个参数的灵敏度将在"dotty plot"图中显示,输出为pdf文件,名为*dotty plots_session_2_postprocess_1_daily.pdf*,存储在校准项目目录中。

每次运行时,打开保存在校准项目中的校准sqlite数据库。我们建议您使用firefox web浏览器中的sqlite管理器插件来执行此操作,尽管您可以使用任何可以读取sqlite版本3数据库的工具。我们项目的校准数据库可以在这里找到:

my_calibration_project/db/calibration.sqlite

>;如果您使用的是最初在RhessysCalibrator 1.0中创建的数据库,则文件名将改为*calibration.db*。

您可以查看校准参数和模型适应度统计信息,确定每个模型运行的模型命令行和输出位置。最重要的表的名称和用途如下:

table存储的数据
--每个会话关联多个运行。
后处理一般后处理信息,每次运行*rhessys_calibrator_post process*或*rhessys_calibrator_behavious*时一个条目。
运行适合度给定模型运行的详细运行适合度信息,多个runfitness条目与每个后处理会话关联。

将模型运行信息导出到适合导入的csv文件数据分析工具,您可以使用*rhessys_calibrator_post process_export*工具:


rhessys_calibrator_postprocess_export.py-b my_calibration_project-s n-f mypreferred_filename.csv

,其中"n"是*rhessys_calibrator_postprocess*输出的进程后会话数*

##执行粘合不确定度估计
一旦从校准会话中获得一套模型实现,RhessysCalibrator还可以使用广义似然不确定度估计方法(Glue;Beven&Binley 1992)促进简单的不确定度分析。

从森林到郊区开发的土地覆盖变化;气候变化情景等)。

以下对Rhessys校准程序的调用将应用前100个模型实现,按NSE日志的降序排序,然后是NSE,从后处理会话2到新的行为RhessysCalibrator项目(确保将calibration.sqlite从校准项目复制到行为项目中)。对于基于lsf的集群:

rhessys_calibrator_behavious.py-b my_behavious_calibration_project-p'针对我的rhessys模型的行为运行'-s 2-c cmd.proto-j 100--并行模式lsf--mem_limit m-q queue_name-f"后处理id=2 order by nse_log desc,NSE DESC LIMIT 100"

或基于PBS/转矩的群集:


Rhessys校准仪行为。py-b My_行为校准仪项目-p‘Rhessys模型的行为运行’-s 2-c cmd.proto-j 100—并行模式PBS—mem_limit m—墙时间w-f"后处理id=2 order bynse_日志描述,nse desc limit 100"

或基于slurm的集群:


注意,为了允许行为模拟的不确定度估计的时间段与校准会话的不确定度估计的时间段不同,我们可以指定要使用的特定的*cmd.proto*,可能与用于校准会话的*cmd.proto*相同,也可能不同。

>;*f*选项可以是任何有效的sqlite"where"子句。

后处理会话2

在下面的可视化部分中记下这些内容,以备将来参考。


您可以使用*rhessys_calibrator_postprocess_behavious*命令来可视化流估计的不确定性:


rhessys_calibrator_postprocess_behavious.py-b my_behavious_calibration_project-s 2-of pdf--figurex 8--figurey 3--superssobs--plotweightedmean

要获得完整的选项列表,请运行:


rhessys_calibrator_postprocess_behavious.py--help

*rhessys_calibrator_postprocess_behavious*将输出:(1)建模观测数;(2)95%不确定度范围内的观测数;(3)平均相对间隔长度(Aril;Jin等人2010);aril表示预测区间的宽度。与较差的模型相比,较好的模型具有较小的aril和在预测区间内观测到的较高流量值。

要比较两组行为运行:

rhessys校准程序后处理程序行为比较py my_behavious_calibration_project_1 my_behavious_calibration_2 3 4-t"模型场景1与场景2-95%不确定度界限"-PDF格式--图8--图3--图加权平均--图例"Scenario 1""Scenario 2"--Behavious_Filter"NSE>;0 Order by NSE_Log Desc,NSE Desc Limit 100"--SupersSobs--color

Beven 2009),带有*--plotweightedmean*选项。注意,*我的行为校准项目1*和*我的行为校准项目2*可能是同一个RhessysCalibrator项目。

*rhessys校准器后处理行为比较*将执行kolmogorov smirnov(k-s)测试,以确定行为运行的加权集合平均流量时间序列是否具有统计显著性。这里是一些输出示例:

```
kolmogorov smirnov统计量的临界值(d懔alpha;alpha=0.0500):0.0712
kolmogorov smirnov统计量(d):0.0205
d>;d懔alpha?假

p值:0.9977
p值<;α?False
``

,这表明两种行为模型情景的加权集合平均流量时间序列之间没有统计上的显著差异。

行为流数据使用其他分析或可视化工具,您可以使用*rhessys_calibrator_postprocess_behavious_time series*命令输出:min、max、median、mean和weighted integrame mean time series:

rhessys_calibrator_postprocess_behavious_timeseries.py-b我的"行为校准"项目-S 3

,其中*-S*或*--Postprocess_session*选项指的是为您的行为运行创建的后处理会话,由*rhessys_calibrator_behavious*

,然后,例如,您可以使用rhessysworkflow的*rhessysplot*命令为两个行为会话制作流散点图:


rhessysplot.py-p scatter-o my_behavior_calibration_project/o b s/my_observated_data-b my_behavior_calibration_project/behavior_ts_session_3_weighted_ensmb_mean.csv我的"行为校准"项目/行为会话"4"加权"ensmb"平均值.csv-c流量-t"加权集合平均每日流量:场景1 v.场景2"-l"流量-场景1(mm/天)""流量-场景2(mm/天)"--supersobs-场景1 v.场景2--图8--图6

请参见:



有关可能选项的完整说明。


结构。这是通过发出--create参数和always required--basedir参数来完成的。这将在$basedir中创建以下目录
结构:

````
db/会话数据库将存储在哪里(通过
rhessyscalibrator)
rhessys/src/您应该将rhessys源代码放在哪里(可选)。
rhessys/bin/放置rhessys二进制文件的位置。(如果存在多个
可执行文件,则无法保证将使用哪个
。)
rhessys/world files/active/您将放置要执行
校准的世界文件的位置。(此目录中的所有worldfiles
都将作为
会话的一部分进行校准)
rhessys/flow/您将在其中放置与
相关联的流表要校准的每个世界文件。流表文件名必须
格式$(worldfile_name)_flow_table.dat如果此目录中有
多个文件,则保证使用的内容)
rhessys/defs/您将在其中放置
worldfiles中引用的默认文件
rhessys/clim/您将放置的位置在
worldfiles
rhessys/output/中引用的气候数据,其中将存储每次运行的输出。每个
运行的输出都将存储在名为
"session\u id$worldfile\u itr"的目录中,其中
$session\u id是与运行关联的会话,
$itr是迭代,$worldfile对应于
$basedir/rhessys/worldfiles/active中列出的一个worldfile来自校准模型的数据运行。
```

分布式模型的未来:模型校正和不确定性预测。水文过程,6(3),第279-298页。


jin,x.,xu,c.-y.,zhang,q.,&singh,v.p.,2010年。用glue和形式贝叶斯方法模拟概念水文模型的参数和建模不确定性。《水文学杂志》,383(3-4),第147-155页。


seibert,j.&beven,k j,2009年。测量无螺旋水池:需要多少流量测量?水文和地球系统科学。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我可以使用SalesforceDX作为现有Eclipse项目的版本控制吗?   java将数据从自定义XML文件移动到ArrayList AndroidStudio   java我在适配器中有一个数量为13的数组如何从数组中获取最大值   java spring工具套件创建runnable jar错误查找配置文件   java如何将其他类的列表项放入数组,然后在textview中设置文本   将客户端代码与Expresso一起使用时出现java错误   java是立即向HTTP响应生成大型CSV报告的好方法吗?   java是查找在最后“x”分钟内修改的文件的最快方法   在实体中填充java空下拉列表   安卓中共享首选项中的java禁用对话框通知   java在通过HttpGet对象检索数据时设置超时值   java Selenium Webdriver脚本无法识别页面加载   java JNA的行为与我的C#对手不同,为什么?   java禁用Spring执行器中特定数据源的HealCheck   java Hibernate条件按最后一个id连接顺序   java Resilience4j异常处理   java如何正确编程?   java如何使我的重置按钮工作   java Struts 2和AWS文件上传