利用VIC模型将气象数据日值插为小时值

搭建水文模型,最让人头疼的就是数据不全了,国内能够下载的气象站数据只有温度、相对湿度、风速和降雨,而且还全都是日值。而更为不幸的是,我最近在用的DHSVM模型需要的是小时值,而且还需要短波辐射和长波辐射数据。如何有效利用现有的气象站数据为水文模型做输入就成为我迫切要解决的问题。方法可能有很多,我这里实现了一个解决方案:利用VIC模型来进行插值转换。
题外话:按理说,VIC模型和DHSVM模型与华盛顿大学都渊源很深,可是VIC模型中有相应的插值模块,但是DHSVM中却没有。
VIC的插值算法大体是(可能我的表述不够准确):
(1)首先VIC利用每日平均气温和平均相对湿度估算出每日平均水汽压,在与每日最高温度和最低温度数据以及每日降水数据一起作为输入,使用蒙大拿大学开发的MT-CLIM模型,算出每小时短波辐射 。同时,会算出逐小时云量(后面会用到)
(2)根据上一步算出的每小时短波辐射判断出每日最高温度和最低温度时刻,建立Hermite多项式,保证在最低和最高时刻的一阶导数为0(从而保证了最低温度和最高温度与输入一致),插值得到逐小时的温度。
(3)VIC自身会通过经验公式,利用逐小时的温度和逐日的相对湿度计算逐小时的水汽压,然后利用逐小时的云量、温度和水汽压直接算出逐小时的长波辐射。
以上,是在我详细查看了VIC相关源码的基础上做的一点总结,可能不够准确。
在了解了VIC的工作原理之后,需要做的就是编写相应的接口程序来调用VIC的相应模块生成我们所需要的结果。而且,最好不要修改VIC的源码。所以,我就花了些时间,编写了一个 调用程序(源码贴在后面),没有改动VIC的源文件,只需要将我写的代码文件与VIC的源码文件一起编译即可。
它的使用方法是:
(1)有六个可选项,分别是,”temp”, “prec”, “srad”, “lrad” , “rh”, “wind” ,表示,你希望程序输出温度、降水、短波辐射、长波辐射、相对湿度或者风速。可以多选。如果要计算长波辐射、逐小时温度或者短波辐射,那么需要准备的输入数据是:逐日的降水、相对湿度、最高温度、最低温度和平均温度。如果要计算逐小时的降水,则只需要逐日的降水数据即可。实际上,此程序只会计算短波、长波和温度,其余变量只是简单的平均或填充一天。
(2)此外,用户还需要设置一些必要的参数,程序会在当前目录下寻找一个名为“parameter.txt”的文件,该文件内容如下:

annual_prec    383.96
elevation    4432.4
slope    0
aspect    0
ehoriz    0
whoriz    0
StartYear    2000
StartMonth    1
StartDay    1
latitude    28.58
sw_prec_thresh    0
mtclim_swe_corr     0
have_vp     1
其各项的含义如下,
annual_prec :年平均降水量(mm)
elevation : Site elevation, meters
slope : Site slope, degrees
aspect : Site aspect, degrees (0=N,90=E,180=S,270=W)
ehoriz :Site east horizon, degrees
whoriz :Site west horizon, degrees
StartYear :起始年
StartMonth:起始月
    StartDay:起始日
    latitude :Site latitude, degrees (- for south)
    sw_prec_thresh:Minimum daily precipitation [mm] that can cause “dimming” of incoming shortwave radiation
    mtclim_swe_corr :TRUE = correct MTCLIM’s downward shortwave  radiation estimate in presence of snow
    have_vp :1表示用户提供水汽压数据,0表示使用本程序计算水汽压注意: 通常,slope、aspect、ehoriz以及whoriz这四项是未知的,我查阅了VIC的源码,其在计算时,都是简单地设定为0,如下
1

因此,我在案例中也将这四项全部设为0,至于这四项具体影响有多大。进过简单测试,slope的影响很大,aspect几乎没有影响。slope为0应是假定没有地形影响,以这样的数据再在DHSVM中进行全流域distibute可能会更加合理。

我编写的源码如下:
注意:一个可行的编译运行方法是,下载VIC源码,并解压,将下面的代码复制到名为“vic_invoke.c”的文本文件中,并移动到解压后的目录。Linux下,输入命令:gcc vic_invoke.c Svp.c mtclim_wrapper.c mtclim_vic.c Vicerror.c Close_files.c Nrerror.c Compress_files.c Calc_air_temperature.c Calc_longwave.c -o vic_invoke -Wall -g -I . -lm即可顺利编译,然后./vic_invoke [option]运行。
如果要在windows下运行该程序,可下载安装MinGW,然后将下面源码中的LINUX宏设置为0,然后切换目录到VIC文件夹下,输入同样的编译命令即可生成win32可执行程序。
windows下直接运行,会弹出如下界面
2
Continue Reading →

An IDL program for computing the threshold of SOG and EOG

这是一个用于计算生长季始期和生长季末期的IDL程序,根据的算法是《近10 年青藏高原高寒草地物候时空变化特征分析》,需要指出的是,这里没有对NDVI数据进行滤波处理。

; Author: zhb
; E-mail: zhanghongbo@itpcas.ac.cn
; Description: compute the threshold of SOG and EOG.
; Date: 2013.10.10

PRO Compute_SOG
; 填写输入参数
; FileName 是原始文件,即包含有所有年份NDVI数据的文件,波段数应是23的倍数
FileName = ‘H:\yu for test data\SGVO_SGcalibrate_snow_namco_423.tif’ ; 完整的路径名
WorkDir = ‘H:\yu for test data\’ ; 工作目录/输出目录,别忘了路径的最后要有一个斜杠
ComputeMean = 1 ; 0 表示不需要计算均值, 1 表示相反
Continue Reading →

谁动了青藏所的服务器

常年混论坛的经验告诉我们:标题要醒目

我们所有台服务器,可能所里有些同学都不知道这台服务器的存在。我一直很好奇,究竟谁在用这台服务器,所以,我每次登陆都会下意识的输入”who”,来瞅一眼,呵呵。但是不断输入who,实在是强迫症的表现,早就想写这样一个东西来达到实时监测的效果。趁着这几天没事儿,就写了个简单的脚本。

首先说下原理: Continue Reading →

A VBA script for estimating snow threshold temperature

‘Author: zhb
‘Email: zhanghongbo@itpcas.ac.cn
‘提取固态降水到新增的三列
Sub DividePrec()
Dim OriPrec As Range
Dim OutPrec01 As Range
Dim OutPrec02 As Range
Dim OutPrec03 As Range
Dim Irow As Integer
Dim vall As Integer
Dim vals As String
Set OriPrec = Range(“H3:H20548″)
Set OutPrec01 = Range(“I3:I20548″)
Set OutPrec02 = Range(“J3:J20548″)
Set OutPrec03 = Range(“K3:K20548″)
For Irow = 1 To OriPrec.Rows.Count

Continue Reading →

那些年我修改过的手机游戏

标题很2,不过实话说,我大学里所谓青春的唯一记忆可能就是这些手机游戏了,这几天突然想整理一下这些东西了,毕竟都是亲手修改的,还是很有感情的,我尽量以时间为顺序来引出一些印象深刻的游戏。
PS:介绍下背景知识,08-10年间,手机游戏基本上是被java游戏所占领,那个时候破解成风,我最早投身此道也是觉得破解很有意思,后来就越做越深,不可自拔了,课都没上过几节,整天泡在手机游戏论坛里。我老人家也自恋一下,我觉得,在当时的手游修改领域,我的作品应属上乘的,而且游戏内置修改器也可能只有我在做,我的大多数BT修改作品,尤其是修改器在当时应该是处于领先的。嘿嘿,YY无罪。

再PS:Java手机游戏的破解和BT修改不是一个难度量级,破解相对简单,尤其是后期,大概2010年左右,自动破解软件横行网络,基本上短信收费游戏全部沦陷,联网验证收费的稍难一些,BT修改的难易则依修改者的野心和游戏自身的复杂性而定。
1、时间:2008.11.15
地点:步步高手机官方论坛游戏资源区
作品:轩辕剑第二章完美修改版
记忆:第一款拿的出手的BT作品,之前都是以破解为主(我从2008年初开始担任游戏资源区的版主),记得这款当时改出来还是很受欢迎的,因为破解了拉阔的存档继承机制,我修改后的版本无需从服务器继承存档就可以拥有所有“神器”。此外还附加了经验翻倍、技能效果加强之类的修改,当时的主流是越BT越好,-_-!
链接:http://bbs.vivo.com.cn/forum.php?mod=viewthread&tid=9879 (由于论坛期间换过一次版本,帖子内容已经损坏)

1 Continue Reading →

艾诺迪亚传奇4 BT修改版

首先,发布一则小消息:我于6月初在步步高手机官方论坛辞去了担任了近4年的手机游戏区版主职务,辞职快有一个月了吧,总的来说我还是很感激步步高论坛的管理员和各位版主对我长久以来的照顾和包容,在步步高论坛辞职对我来说算是对java游戏的彻底告别吧,近期会抽空放出我以前所做的所有java游戏外挂/BT修改版(大概有40款),但是我对安卓游戏的兴趣只能算是刚刚开始,有很多未知的东西等待我去摸索。
另外,对于一些网友的修改请求,我只能表示歉意,我实在是没有额外的时间和精力去做,修改游戏是我的乐趣,成为负担就不是我的本意了,希望得到谅解。。。
下面进入正题:
艾诺迪亚传奇4 BT修改版
游戏介绍: 风靡全球的Com2uS经典RPG大作艾诺迪亚系列第4部作品——《艾诺迪亚4:贝勒塞刺杀者》汹涌来袭!新的史诗级冒险之旅即将开始!游戏以艾诺迪亚大陆为背景,讲述了黑暗教团的刺杀者凯恩与光之圣女尤希娅之间的故事。一个代表黑暗,一个代表光明,他们能否冲出世俗,突破各自的信仰,走到一起呢?什么才是真正的结局?……比前作更加震撼的画面效果与超清晰的画质、史上最大的游戏规模、充满紧迫感的战斗系统!让你体验最极致的游戏快感!在《艾诺迪亚4》中,主角卢森(被许多粉丝爱称为Loser)(PS:其实是第三部中的凯恩。那个白发人)也已经成长为一位翩翩青年。同时游戏的画质比起以前也有很大提高,十足是一款值得期待的RPG大作。游戏已完美破解,道具收费,游戏自带简体中文到设置里可以切换

Continue Reading →

魔剑镇魂曲专用修改器

从周四晚上开始(我一般只在晚上写),周六半夜完工,可能真的是老了,以前在大学的时候,连着几天写都不觉得累,现在感觉累的就剩半条命了,呵呵,不过最后的效果我还是比较满意的,在保证功能完备的同时修改器目前已经能够比较稳定的在游戏中运行(经过了大量优化修改),这个内置修改器毫无疑问是安卓平台上的第一次实现,安卓的好处就是现在做点东西就可能是第一次的(^_^)

简单介绍下这个游戏,“魔剑镇魂曲-英雄之泪”,战棋类游戏,火焰纹章风格,所以游戏受众有限(毕竟比较费脑子),但是,这类游戏的可玩性还是很高的。此游戏风评还不错,百度上有专门贴吧,玩家数量尚可,毕竟比不了艾诺迪亚传奇。
修改器主界面:
1

Continue Reading →

考博英语分析(纯属娱乐)

没想到中科院博士英语的词汇量这么大,根据绿皮的《中科院硕士博士英语词汇速记》显示,大纲内共有8000个单词,这不是一两个星期能背完的,所以为了能更高效地“背单词”,我针对2008年3月份的博士英语考试真题做了如下分析:
经过我的统计,真题中共有149个生词,其中有20个是大纲以外的单词(竟然有这么多),由于我提前背过大纲中a部分和b部分的单词,所以以这两个字母打头的生词没有加入统计。
首先统计了各头字母出现的几率:

Continue Reading →