admin管理员组

文章数量:1638823

一.配置VIC模型前的心理准备

        首先在进行这可怕的一切前,你需要有足够的心理准备来应对配置VIC模型时的种种困难。有很多同学来咨询我时一般都会以为自己准备好了VIC模型的“所有原始数据”或者一上来就是要“代做整个VIC模型”(甚至包括我初期也是一样的)这些都无可厚非,因为你们(包括我)都还没有意识到VIC模型的复杂程度到底有多高,进而会被“代做VIC模型”的报价吓到不能自己。这是很正常的,想当初我找的代做说代做VIC要8000,当时我都被吓昏厥了(昏睡红茶,什)。总而言之,对于我而言,每周大概需要花费5H~20H左右,持续一个多学期才完全配置完(别问我为什么不是全天连轴转,本人才本科也有学业的好叭)。不排除有些人是大神或者你们课题组内有成熟的模型配置经验。但是大多数人应该都是这个时间成本。因此在想要配置VIC模型前,你需要准确的意识到你花费的时间是否是值得的,而不是头脑一热觉得这玩意很帅就去想要尝试它。具体而言,在你配置VIC模型时,需要秉持:报错是常有的,重要的是如何解决它,如何及时的发现你错在哪里是很重要的。其次,要有耐心,这玩意并非一日之功。久久为之方可成功,一个萝卜一个坑。

二.配置VIC模型前的研究方向准备

0.前言

        在配置VIC模型前不要想着后面可以改研究数据,研究年份一类的,达咩达咩得死哟!VIC模型的参数制作过程是很抽象且漫长的,一旦你确定了你的研究年限,流域,模型精度这些,就尽量不要改。准确的来讲,你需要在配置模型前就想好这些,而不是跟我一样成为马后炮()同时,你需要注意的是,在VIC模型汇流的时候,你在面对率定时需要考虑你模型的预热期,率定期,验证期。这也是一开始就要考虑好的

1.预热期

那什么是率定的预热期呢,首先请看一下下面这份数据:

这是VIC汇流模型最后输出的长江中位于大通站的月径流量。各位有没有发现在头几行数据存在那么一捏捏小异常?

对头,你会发现在VIC数据的前1~4行存在肉眼可见的数据过大的情况,对比同期月净流量数据不难看出这份数据的极大值集中在6~9月左右,但是在第一年的1~4月却异常的大。这并不是你的模型出错了,而是VIC模型正在平衡它是水热循环巴拉巴拉的。具体来讲,你会在VIC产流模型的输出参数中看到这些玩意儿:

在9行有个土壤含水量的玩意,在初始状态中,这个玩意可能被输出的过大或者过小,导致在每个单元格计算汇流时,需要考虑水从(初始阶段)土壤中流出/流入的情况,而在后面,随着模型的平衡和稳定,土壤水的净流入或流出为0,就不存在这一点了。因此,在前一阶段,模型为了保持其水分的平衡,与土壤,植被扒拉扒拉的存在复杂的水分交换,导致径流值的相对不稳定,而在后期,一切处于平衡后土壤啥的这些玩意净流出流入为0或者稳定在某个值,这个径流值就正常了。

因此,在模型的前面一个时期,虽然你提供了参数,但是结果是不能被纳入考虑的。比如你提供了模型2007~2025年的参数,模型给你输出了2007~2025年的径流,但是基于上述原因,你不能将至少是2007年的前四个月分纳入考量的。而这四个月就是模型的预热期。你需要考虑一段预热期作为输入参数考量但是不作为任何的研究结论数据的来源出现。

那什么是率定期呢?模型的编译又改如何准备和运行呢?VIC模型的编译到底是在干什么呢?

且听下回分解咯~

关注咸鱼“面筋最好吃啦”,谢谢喵~

*****************************************************2024.9.28********************************************

好的今天来第二更

2.率定期与验证期

        正如我上一章(VIC水文模型简介)中对于率定所说的一样,率定的本质是调控一些参数来使模型更加吻合实际的输入输出径流,因此我们的逻辑应该是不停的输入参数->观测误差->调整输入参数->继续观察误差,那么在这个过程中为了确保我们的模型没有出现“过拟合”等情况,我们需要将进行验证的时期划分为率定期和验证期,率定期则指的是使用模型的径流与实际的径流计算出的误差来调整VIC模型参数的时期,这个时期的误差不作为衡量模型好坏的标准,仅仅是作为你调整参数设置的一个反馈函数。而率定期过了之后就会有验证期,这个验证期是用于单纯的衡量VIC模型好坏的时期,使用验证期计算的误差不能用于调整VIC模型的参数,单纯用于表示VIC模型运行效果的好坏。

        一般而言,验证期与率定期这两个时期对应的计算年限应该分开,比如你整个研究年限是1980-2025,将1990-2005作为整个率定的大时期,然后将1990,1991作为预热期,1992~2000作为率定期,2000~2005作为验证期这样的,然后后续的2005~2025可能就是你的可以用于研究的时期了。预热期,率定期,验证期没有绝对的划分标准,一般预热期比较少,率定比验证从8:2到五五开的都有。

三.编译工作

1.前言

        VIC模型的本体程序是储存在github中的,具体网址如下:GitHub - UW-Hydro/VIC: The Variable Infiltration Capacity (VIC) Macroscale Hydrologic Model

需要注意的是github在墙内加载速度非常慢,有条件的同学使用科学上网查看模型。其次你进去官网之后请不要下载master版本,会在编译的时候报错!会在编译的时候报错!

正确的版本号如下

你在github页面中需要点击这个master然后看下拉框,请不要选择master版本,如果没有明确的版本要求你就下4.2d就行。

那么我们现在打开下载好的压缩包,让我们认识一下VIC模型的本体是什么样子的。

在文件打开解压后可以看到有很多杂七杂八的东西,这里面其他的东西你都不要管,你只需要关注两个东西,第一个是samples文件夹,这个文件夹是用来存储实例数据的,在后续的参数配置的时候会频繁使用到,另外一个就是src,这个就是我们需要执行编译的文件夹,点击进入。

这个时候你就可以看到很多以.c文件结尾的文件。这里简单介绍一下VIC模型编译的原理。

首先VIC模型的产流模型使用C语言写的,如果有过C语言编写的小伙伴一般都会知道,我们在编写C语言的时候基本上都会用到一个玩意叫编译器,包括不管你用的是dev,还是宇宙第一编译器visual studio或者是其他的平台编译器,它们做的一个很重要的事情就是将你写的C语言源代码编译成可执行程序。因为C或者C++这类语言都是高级语言,你的系统本身是读不懂的,这个时候你需要使用编译器将这些高级语言转化成更加底层的语言,转化成你的系统可以读懂并且执行的过程,这个过程就是编译。

(随便打开一个举个例子,真是远远又古古的编写方式啊,要我来写我肯定用QT/C++直接生成全平台通用的可执行的应用程序了(感叹))

那么虽然我们有很多同学肯定手上都会有很多纷繁复杂的编译器和C语言编译平台,但是参考其他教程,你手里面的其他编译平台是无法将这个文件夹中的C语言之间转化成可执行文件的。那么我们应该如何将这份转化为可以执行的程序呢?

2.编译平台的选择

        一般来讲你的选择有两种,一种是安装Linux系统,典型的就是乌班图系统,你安别的Linux应该也可以,反正我没试过()。这一种方式需要你先配置好VMware虚拟机,大概长这个样子。

第二种是下一个这玩意:

打开后跟power shell差不多

那为什么要选择他们两个呢,具体来讲,不管是虚拟机还是这个C什么的,它们本质都是基于Cmake,这个玩意对你的文件进行编译的。那么接下来我分别介绍他们的优缺点:

1:如果你使用虚拟机+乌班图系统,那么你将获得一个相对简单的编译环境,因为Linux是内置编译程序的,你只需要打开终端敲个make就可以编译了。但是乌班图系统的安装比较复杂,并且会占用大量内存,更重要的是,这个虚拟机的配置肯定是没有主系统好的,因此你在Linux里面执行程序的速度是要低于使用Cygwin的,(本人已经帮你们测试过了,Linux满配大概相当于使用Cygwin的1/2到1/3速度,因为你除了跑程序还有一部分算力需要支撑Linux系统本身的运行)

2:Cygwin,使用Cygwin的话你需要仔细挑选Cygwin的安装包,你要清楚自己下什么包可以让它跑起来,并且还需要配置系统环境变量,记住,虽然VIC的产流是C写的,你下个gcc make啥的就可以了,但是这个玩意的汇流程序是用更古老的fortran写的,这就意味着你还需要下fortran make之类的。这个东西的好处就是可以跑的很快,跑这个的时候如果你在产流模型中觉得时间过长,我这里有个小tips:把电源的模式调成最佳性能。

因为据说Windows在最新的最佳性能模式中会直接让cpu长时间超频工作()(这也是为什么最新几代的因特尔CPU会产生缩肛现象,评价是厂商不懂的超频玩的()),这样可以让你的程序运行的速度提高很多(自己开任务管理器看就知道了),但是缺点是不要长期开着,原因我也说了,CPU会缩肛()。

这个安装的具体过程出于篇幅问题我就不细说了,你们要是搜索的话请搜索“如何下载Cygwin”“如何使用Cygwin编译C语言”“Cygwin编译fortran语言应该安装什么包”“如何安装vmware和乌班图系统”。然后提醒一下,虚拟机那个地方建议加装vmware tool,方便后续使用。有什么不懂的也可以直接在咸鱼搜索“面筋最好吃啦”,V我20,我来助你!

(本人兼运营的咸鱼账号)

那么如何使用这两个平台对src中的文件进行编译呢,且听下回分解!

哇卡卡卡卡卡卡(美丽的精神状态)

本文标签: 模型水文准备工作VIC