VIC水文模型入门攻略(中)VIC的数据和输入文件准备_vic global parameter file-程序员宅基地

技术标签: 数据  水文模型  

更正:上篇末尾关于运行汇流程序的部分,在“STEHE.stnloc”文件中需要修改的部分应改为NONE而非none。希望没有太多人因此造成困扰…


VIC的输入文件都有啥

其实VIC及其汇流程序真正的交互方式都是通过读入文件完成的。它们都要求有一个文件存储各种设定参数,包括运行的日期时间、运行模式以及所需的各种数据文件的位置。
上一篇中启动VIC的命令./vicNl -g /home/.../global_param.STEHE 实际上就是将VIC的全局参数文件的路径传递给VIC,然后VIC读入这些全局参数并执行。
VIC所需的必备输入文件有:

  • 全局参数文件 也就是stehekin示例中的 global_param.STEHE

  • 土壤参数文件 最核心的参数文件,保存每个网格的一些基本参数和各种土壤参数,包括网格编号,经纬坐标等,具体参考示例中的soil_param.STEHE。VIC就是从这里获得最基本的地理信息的。

  • 植被参数文件 存储每个网格的土地覆盖情况,示例如veg_param.STEHE

  • 植被库文件 存储每种土地覆盖类型的一些参数,比如LAI,结构阻抗,零平面位移等。示例中为veglib.LDAS拿不到相关数据的情况下可以直接拿这个文件用。(难道就是从LDAS那里拿的?)

  • 气象驱动数据文件 即meteorological forcing files(许多资料翻译作气象强迫、气象迫使,读之蛋疼,故我中二翻译为此)。存储每个网格的历时气象数据,一个网格一个文件,格式为forcing_纬度_经度
    与上边全是文本文件形式的文件不同,这个可以为文本文件和二进制文件两种不同的类型。

其他一些可选的数据输入文件有高程带文件雪线文件湖泊/湿地文件以及一些基本数据的时间序列文件等。具体看官网相关内容


VIC的数据准备

要生成以上相应的文件,你需要先弄到以下的数据:

  • 研究区域内的多个气象站的观测数据。
    包括每个气象站的坐标以及各自的历时观测数据,精确到每日,至少包含降雨量日平均气温或者日最高/最低气温以及风速。通常这些数据记录都不是完全的,有的数据项因为各种原因会在某些日子缺数据,甚至干脆却掉某个连续时间段的记录。于是就有必要用上数据处理工具。

  • 率定用的数据。
    一些已经实际测得的VIC可输出的数据,比如某地的土壤含水量数据或者流域出口的流量数据。

  • 研究区域的地理信息数据。
    首先研究区域范围的经纬度坐标表示以及DEM数据是必须的,最好还要有流域边界的shape文件,并且这些数据都能在某平台中打开和处理,比如ArcGIS。若实在没有流域边界的图形可以干脆直接开辟一块矩形区域来研究或者用高精度DEM提取盆域好了。
    DEM可以用SRTM计划的,对于VIC的尺度90m的分辨率应该够用了。链接在这里
    有必要提醒下,VIC和汇流程序要求的坐标都是经纬度坐标,位置、网格尺寸什么的都要用经纬度表示和计算,因此在ArcGIS里面处理数据的时候数据框得设置为地理坐标系而非投影坐标系,获得的地理数据也要进行相应变换。

  • 土壤数据。
    来源有很多,若手头没有的话可以使用HWSD,1km分辨率的土壤类型数据库,有全球和全国两个范围,可以从IIASA网站或者寒区旱区国家中心网站下载,CSDN站内也有资源。
    不过直接从其得到的资料只有土壤类型的分类,砾、砂和粘粒的比例和一些理化性质等,所以还需要通过土壤转换函数换算为VIC需要的水力参数。若手头没有资源可以参照SPAW这个软件压缩包(本站也有资源)内附带的那篇论文里边给出的公式,或者在已发的VIC相关论文里找(记得有些论文带了土壤类型对应水力参数表)

  • 土地覆盖数据(植被数据)。
    手头没数据可以用马里兰大学发布的全球1km分辨率土壤覆盖类型分布图,这是链接。点里边的Product Search -> AVHRR, Global Land Cover Product便是。

  • 各种土地覆盖类型的参数数据。也就是各种土地覆盖类型的一些动力学参数以及不同月份LAI之类。其实这个通常不用特意准备,可以直接使用stehekin这个示例自带的植被库文件veglib.LDAS,其包含了常绿针叶林、常绿阔叶林等11种土地覆盖类型参数,并且与马里兰大学的土壤覆盖分布图的类型对应。
    (马里兰的覆盖分类一共有14种,其多出来的三种分别是水面、裸地和建筑用地,裸地在VIC中没有覆盖的地方默认为裸地,而建筑用地则比例太少可以忽略)

接着再来简要说说如何用ArcGIS对研究区域进行相应的网格划分。
(以下以ArcGIS10为示例,就当作你会操作ArcGIS)首先打开ArcMap,加入流域边界图形文件,打开数据框属性将坐标系设置为地理坐标系(比如1980西安坐标系),坐标表示为十进制度。流域边界也要用数据管理工具里的投影投影到相应坐标系。
比如这个

接下来如果你刚用的是dem的话就可以设定经纬度范围之后重采样到你需要的网格大小。图形文件的话,为了确保之后生成的网格能尽量覆盖流域边界,使用制图工具里的掩膜工具里的要素轮廓线掩膜将边界图形扩大一点,边距通常为需生成的网格边长的0.3~0.5倍,得到一个新的稍微变胖了的图形要素。
这里写图片描述

接下来就可以使用转换工具里的转为栅格里的面转栅格将变胖的要素类转为你所需尺寸的尽可能覆盖流域边界网格。这样获得的DEM或者流向什么的都可以捕捉这个栅格进行处理了。
这里写图片描述

接着再用转换工具里的栅格转点将栅格转换成一个网格一个点的点要素,这样栅格信息的属性表就得到了。
打开点要素的属性表,添加记录坐标的两个字段“long”和“la”(其实叫什么随便了),右键点字段名选计算几何,分别得到点的在相应坐标系下的x和y坐标(单位十进制度)。
这里写图片描述

这样就可以获得一个属性表,包含网格的编号和其中点的经纬坐标。接下来就可以将其导出成数据库或者文本文件以便用R或者matlab什么的处理了。
这里写图片描述


各种输入文件的准备

关于全局参数文件(global parameter file)

全局参数文件可以直接copy示例stehekin的或者拿源码压缩包里带的samples改成自己需要的直接用。(当然文件名和文件路径就别照搬上边的XXX.STEHE了,那个STEHE指的就是stehekin项目,完全可以自己安排一个简洁清晰高效的文件名和组织形式…)

用文本编辑器(对于一些还在用UE甚至记事本的水文水利的同学我推荐下sublime text 3这个更轻更高效的文本编辑器)打开示例的全局参数文件之后可能刚开始会被大量的内容搞晕,但是其实大部分都是#号开头的注释,内容为一些说明文字以及一些可选的参数设置。
可以通过设置代码高亮(比如Perl、R等用#注释的语言)使之看起来清晰。
比如这样

官网对各种参数的解释戳这。下面是一些下垫面相关基本参数的自翻:

  • 基本参数部分
NLAYER      3   # 土壤层数,决定土壤参数文件中许多参数要弄几份
NODES       10  # 土壤热结点个数 
TIME_STEP   24  # 每个时间步的长度,单位小时。如果设为24那就是逐日。
SNOW_STEP   1   # 雪模型的时间步长度。如果上一项小于24就要等于上一项。
STARTYEAR   1949    # 模型运行的开始年份
STARTMONTH  01  # 模型计算时段的开始月份
STARTDAY    01  # 开始日期
STARTHOUR   00  # 从几点钟开始...
ENDYEAR     1951    # 结束年份
ENDMONTH    12  # 结束月份
ENDDAY      31  # 结束日期

FULL_ENERGY     FALSE   # 是否开启能量平衡模式,如果为FALSE就只开启水量平衡模式。
FROZEN_SOIL FALSE   # 是否开启冻土计算模式。

SOIL           /home/heheda/xriver/soil.duang   # 土壤参数的路径(这路径是我瞎编的)
ARC_SOIL        FALSE   # 土壤数据是不是ArcGIS的相关格式。通常用文本文件所以是FALSE。
BASEFLOW    ARNO    # ARNO表示土壤参数文件中第5到8列为VIC标准基流参数,为 NIJSSEN2001表示此处为Nijssen的基流参数(一般默认)
JULY_TAVG_SUPPLIED  FALSE   # 是否有在土壤参数最后添加一列六月份平均气温。如果没有程序就自己计算。
ORGANIC_FRACT   FALSE   # 是否进行土壤有机质相关的计算。如果为TRUE那么土壤参数就得额外再加三种参数:每层土壤里边有机质占总的比例,每层土壤的有机质的容积密度以及土粒密度。
VEGLIB          /home/heheda/xriver/veglib.LDAS # 植被类型库文件路径
VEGPARAM        /home/heheda/xriver/veg.duang   # 土地覆盖(也就是植被覆盖)文件路径(也是我瞎编的)
ROOT_ZONES      3   # 植被的根区数目(这个决定植被覆盖文件里边需要设定的相应参数的个数)
VEGPARAM_LAI    TRUE    # 植被覆盖文件是否自带LAI信息
LAI_SRC     LAI_FROM_VEGLIB    # 参数为LAI_FROM_VEGPARAM表示从植被参数文件里边读取LAI,参数为LAI_FROM_VEGLIB则表示从植被库文件里读取LAI。
SNOW_BAND   1   # snow bands(雪线?)的个数。求大牛解释其意思...我只知道如果大于1就要准备相应的文件了。

对于气象驱动文件输入设定和数据输出部分详见下面相关内容。

关于气象驱动文件(Meteorological Forcing FIle)

气象驱动文件的数据类别比较自由,可以在VIC提供的一个列表里选取可以提供的数据类别。
写此文时此链接markdown表格格式挂了故帖上一些过来:

气象
数据类别 是啥 描述
AIR_TEMP 平均气温 C (ALMA单位: K)
CATM 二氧化碳浓度 ppm
PREC 降水量(包括降雨、降雪) mm (ALMA单位: mm/s)
DENSITY 空气密度 kg/m3
LONGWAVE 入射长波辐射量 W/m2
PREC 总降水量(包括降雨和降雪) mm (ALMA单位: mm/s)
QAIR 比湿度 kg/kg
REL_HUMID 相对湿度 分数
SHORTWAVE 入射短波辐射量 W/m2
SNOWF 降雪量 mm (ALMA单位: mm/s)
TMAX 时段内最高气温 C (ALMA单位: K)
TMIN 时段内最低气温 C (ALMA单位: K)
TSKC 云量 分数
VP 水汽压 kPa (ALMA单位: Pa)
WIND 风速 m/s
WIND_E 风速在正东方向的分量 m/s
WIND_N 风速在正北方向的分量 m/s
植被
ALBEDO 地面反照率 分数
LAI_IN 叶面积指数 分数
VEGCOVER 植被覆盖率 分数
其他
SKIP 留出位置待将来放其他数据

其中降雨量PREC平均气温AIR_TEMP或者日最高、最低气温TMAX和TMIN以及风速WIND三样为必选项。具体选啥还主要看手头上的气象数据有啥及其质量如何。

气象驱动数据输入文件形式为一个网格一个文件,全部放在同一个目录下,文件名格式示例data_12.3456_123.4560,前缀data_可以更改,但是经纬度后缀格式应按照示例,先纬度后经度,小数点后保留某位小数。
气象驱动数据的输入文件支持两种格式,文本文件(ASCII)格式和二进制文件(binary)格式,提供后者是为了优化数据的读取性能。

文本文件格式的气象驱动数据

如果研究规模比较小,对性能没有太大纠结的时候通常用比较方便的文本文件格式。其在全局参数文件中相应位置设置如下:

FORCING1    /home/hehehe/yriver/data_   # 气象驱动数据的路径格式。
N_TYPES     4   # 包含的气象数据类别数。
FORCE_TYPE  PREC    # 气象数据类别:降水量
FORCE_TYPE  TMAX    # 气象数据类别:最高气温
FORCE_TYPE  TMIN    # 气象数据类别:最低气温
FORCE_TYPE  WIND    # 气象数据类别:风速
FORCE_FORMAT    ASCII   # 输入文件格式:文本文件
FORCE_DT    24  # 数据时间步长度
FORCEYEAR   1950    # 数据记录的开始年份
FORCEMONTH  1   # 数据记录的开始月份
FORCEDAY    1   # 数据记录的开始日期
FORCEHOUR   0   # 数据记录的开始时间
GRID_DECIMAL    4   # 输入文件的经纬度小数点后保留几位小数。
WIND_H          10.0    # 测得风速的高度(m)。
MEASURE_H       2.0     # 测得湿度的高度(m)。
ALMA_INPUT  FALSE   # 数据是否使用ALMA单位制。

输入文件的格式也很简单,每一列是一种数据类别,从左到右按全局参数文件里设定的顺序;每一行则是逐时间步的数据,形式如:

0.000 -10.00 -2.00 2.00
0.000 -8.50 -1.10 2.00
5.000 -7.90 0.10 2.00
10.000 -8.20 -3.10 2.00
...
二进制格式的气象驱动数据

从某种意义上讲,二进制文件不同于文本文件有逐行之分,而是连续的一串0和1组成的数据流(其实文本文件也是一串连续的数据流,只不过其中有换行符将其分割而已),解析方式要靠相关程序。因此二进制格式的输入文件有相应规定:每个数据统一转换成短整形补码(长度两个字节)的形式,按顺序存放逐日的每日内的各种数据类别数据,读入时再除以相应倍数。全局参数文件设定如下:

FORCING1    /home/hehehe/yriver/data_   # 同上是气象驱动数据的路径格式
N_TYPES     4   # 数据类别种数
FORCE_TYPE  PREC    UNSIGNED    40  # 依次为数据类别,有符号还是无符号短整形,要除以的倍数。
FORCE_TYPE  TMAX    SIGNED      100
FORCE_TYPE  TMIN    SIGNED      100
FORCE_TYPE  WIND    SIGNED      100
FORCE_FORMAT    BINARY  # 数据格式为二进制。
FORCE_ENDIAN    LITTLE  # 字节存放方式为小端法。
FORCE_DT    24  # 从这往下同文本文件格式设置。
FORCEYEAR   1950
FORCEMONTH  1
FORCEDAY    1
FORCEHOUR   0

具体解释如下:
首先取stehekin的某个气象驱动文件,用高级点的编辑器打开后是这样子的

a200 6dfe fbfa c101 0000 1cfe 4bf7 0a01
0000 f6f9 72f7 4000 0000 e1f9 8ef8 c900
1200 5dfb 2ef9 bc00 ca00 0300 06fb 3501
...

这是用16进制形式表现出来的的二进制文件,一个字节由两位16进制数表示,因此以上每4位数即为一个短整形的数据。
按照全局参数设定,第一个数据类别降雨量为无符号整形,其余三个为有符号整形,第一行第一个数字a200为小端法存储的无符号短整形补码表示的整数162,除以降雨量设定的倍数40即为40.5,这便是此网格第一天的降水量数据。同理接下来的三个数字6dfefbfac101则是分别用小端法有符号短整形补码表示的整数-403、-1285以及449,除以相应倍数100即为第一天的日最高气温-4.03,日最低气温-12.85以及风速4.49。接下来的数据即先后为第二天的降水、气温和风速数据,解析同上。

由于文本文件中的数据并不是计算机中真正的数字,而是一串字符序列。相比起直接按计算机存储数字的方式直接读入数据,读入文本数据要经过一系列较为复杂的扫描和转化过程,当数据量大的时候会牺牲掉相当的一部分性能。设置二进制文件格式的意义即在于此。
关于二进制补码表示数字和大端、小端法相关内容可查阅《深入理解计算机系统》中2.2节。

至于如何将离散的气象站点的数据转换成一个网格一套的连续数据当然就是用插值了。
鉴于克里格插值实在复杂难以应对长时间序列的数据,用的最多的还是简单粗暴的IDW法。
如果你使用R的话可以用地统计相关的sp包gstat包,带有克里格法和IDW法函数,输入文件的生成可借此通过编写输入站点坐标和气象参数序列以及网格点坐标列表的R程序实现。IDW法由于原理简单也完全可以写个C程序来完成(如果嫌R慢的话)。

关于土壤参数文件(soil parameter file)

土壤参数文件之所以是VIC最核心的输入文件是因为其还记录了网格设定的情况,VIC是先从其取得网格编号和坐标再以此为依据读取其他数据的。
形式为一个标准的二维关系表,每一列是一种参数,每一行是一个网格的参数,可以带用#号注释的表头。非常适合用R里的数据框计算。
具体样子如下:

#RUN    GRID    LAT LNG INFILT  Ds  Ds_MAX  Ws  C   EXPT_1  EXPT_2  EXPT_3  Ksat_1  Ksat_2  Ksat_3  PHI_1   PHI_2   PHI_3   MOIST_1 MOIST_2 MOIST_3 ELEV    DEPTH_1 DEPTH_2 DEPTH_3 AVG_T   DP  BUBLE1  BUBLE2  BUBLE3  QUARZ1  QUARZ2  QUARZ3  BULKDN1 BULKDN2 BULKDN3 PARTDN1 PARTDN2 PARTDN3 OFF_GMT WcrFT1  WcrFT2  WcrFT3  WpFT1   WpFT2   WpFT3   Z0_SOIL Z0_SNOW PRCP    RESM1   RESM2   RESM3   FS_ACTV JULY_TAVG
1 86340 48.3125 -120.5625 0.3000 0.1000 10.0000 0.7000 2 12.6760 12.6760 12.6760 1257.0959 1257.0959 1257.0959 -99 -99 -99 15.4420 46.3270 154.4250 1668.1500 0.1000 0.3000 1.5000 0.3025 4.0000 14.6600 14.6600 14.6600 0.6930 0.6930 0.6930 1569.1000 1569.1000 1569.1000 2619.1001 2619.1001 2619.1001 -8 0.3120 0.3120 0.3120 0.1840 0.1840 0.1840 0.0100 0.0300 1318.5100 0 0 0 0 11.8519
1 86804 48.4375 -120.5625 0.3000 0.1000 10.0000 0.7000 2 12.6760 12.6760 12.6760 1257.0959 1257.0959 1257.0959 -99 -99 -99 15.4420 46.3270 154.4250 1698.7900 0.1000 0.3000 1.5000 -0.0207 4.0000 14.6600 14.6600 14.6600 0.6930 0.6930 0.6930 1569.1000 1569.1000 1569.1000 2619.1001 2619.1001 2619.1001 -8 0.3120 0.3120 0.3120 0.1840 0.1840 0.1840 0.0100 0.0300 1470.3500 0 0 0 0 11.7472
...

其所需及可选参数看这里。参数列摆放位置应按照其规定顺序。注意许多参数是每层土壤各一个的。其中红色字体的参数项标示开启能量平衡模式才会使用,紫色字体表示开启冻土模式才会使用,但是开不开也要占个位…

这些参数大体上可以分为这么几类:

  1. 可以直接获得的。

    • run_cell 是否运行这个网格,为1则运行0则不运行。
    • gridcel 网格编号。
    • lat 网格中点的纬度。
    • elev 网格高程,单位m。可以拿DEM重采样。
    • bulk_density 土壤容积密度。通常HWSD或者其他土壤数据都会带这个。
    • off_gmt 离格林威治时区的时区数。也就是经度乘以24除以360。
    • annual_prec 多年平均降雨量。可以直接拿气象数据计算再插值。
    • fs_active 是否对这个网格开启冻土模式。如果全局参数文件没开则这列酱油。
    • July_Tavg 六月份平均气温。如果你在全局参数文件里相应位置有设置就要加上这一列了。
  2. 要经过转换的。主要是土壤水力参数,这里列举了可以将HWSD记录的土壤数据用SPAW的公式计算出来的。

    • expt 某个水力系数,用于Campbell方程,值为 3+2λ 并应不小于3。具体查看SPAW中附带的论文。
    • Ksat 饱和导水率,单位mm/day。
    • bubble 貌似是土壤吸气压力。冻土模式需要。
    • Wcr_FRACT 田间持水量,约等于饱和含水量的七成。
    • Wpwp_FRACT 凋萎含水率。
      以上参数是每层土壤都要一份。
  3. 一般不好弄到但是有得参考的。

    • c 基流曲线方程的指数,通常设为2。
    • phi_s 土壤水扩散系数。可设为缺省值-99。
    • init_moist 土壤初始含水量。通常都只会随便设置成一个不大的值,并设置个一两年作为启动期,让头两年汛期的大雨让土壤水饱和掉,往后的时间才拿来率定、使用。
    • avg_T 土壤平均气温。热量平衡模式需要。有需要但弄不到的话拿官网全球数据集里的来插值凑合吧…
    • dp 土壤热阻尼深度,大概为4m。热量平衡模式需要。
    • quartz 土壤石英含量。热量平衡模式需要。搞法同avg_T。
    • soil_density 土粒密度,也就是土粒比重乘水的密度,单位kg/m³。官方推荐2685kg/m³。
    • rough 裸地的地面粗糙度。可以参考stehekin取值。
    • snow_rough 雪地的地面粗糙度。同上。
    • resi_moist 土壤经过排水蒸发后的剩余含水量。同上。
    • depth 每层土壤厚度,单位m,其中第一层土壤厚度通常为0.1m。
      以上除了 avg_T、dp、rough、和snow_routh,其他都是每层土壤都要一份。
  4. 需要率定的参数。一开始没有完全准确的值,需要在一个范围内率定直到得到最优值。

    • infilt 可变下渗曲线方程的幂,通常为0.2~0.6。
    • Ds 非线性基流发生时流速占基流最大流速Dsmax的比例。
    • Dsmax 基流最大流速,单位mm/day。
    • Ws 非线性基流发生时土壤含水率占饱和含水率的比例。
    • depth 除第一层以外的其他层土壤厚度,单位m。

关于植被参数文件(vegetation parameter file)

植被参数文件的格式比较纠结,长这个样子:

86804 5
    1 0.648889 0.10 0.05 1.00 0.45 5.00 0.50 
      4.895 4.895 4.895 4.895 4.895 4.895 4.895 4.895 4.895 4.895 4.895 4.895 
    5 0.071111 0.10 0.05 1.00 0.45 5.00 0.50 
      0.138 0.150 0.162 0.338 1.487 4.425 5.625 5.850 4.588 1.662 0.288 0.225 
    6 0.124444 0.10 0.10 1.00 0.65 1.00 0.25 
      0.125 0.138 0.200 0.562 1.688 3.550 4.188 3.825 3.012 1.975 0.562 0.213 
    7 0.102222 0.10 0.10 1.00 0.65 1.00 0.25 
      0.225 0.287 0.275 0.275 0.675 2.537 3.463 3.212 1.350 0.337 0.250 0.237 
    8 0.017778 0.10 0.10 1.00 0.65 0.50 0.25 
      0.363 0.462 0.600 0.600 0.600 0.600 1.125 1.075 0.638 0.363 0.363 0.363 
85875 4
    1 0.674107 0.10 0.05 1.00 0.45 5.00 0.50 
      4.911 4.911 4.911 4.911 4.911 4.911 4.911 4.911 4.911 4.911 4.911 4.911 
    5 0.111607 0.10 0.05 1.00 0.45 5.00 0.50 
      0.200 0.213 0.250 0.587 1.850 4.575 5.513 5.787 4.600 1.725 0.400 0.312 
    6 0.178571 0.10 0.10 1.00 0.65 1.00 0.25 
      0.188 0.238 0.438 0.812 1.675 3.288 3.963 3.825 3.112 2.037 0.650 0.425 
    7 0.035714 0.10 0.10 1.00 0.65 1.00 0.25 
      0.225 0.287 0.275 0.275 0.675 2.537 3.463 3.212 1.350 0.337 0.250 0.237 
...

以上每一段记录一个网格的植被覆盖信息,然后每一段内的情况为:
第一行分别是网格编号和该网格内有多少种植被;
往下则是记录这么多种植被覆盖各自的信息,依次分别是登记在植被库文件中的植被类型编号,这种植被覆盖面积占网格总面积的比例,以及N层根区各自的深度和N层根区中各层根占根区的比例(这个N在全局参数文件中相应位置定义)。
如果全局参数文件中VEGPARAM_LAI设置为TRUE那么也要如上每种植被覆盖类型再加一行一年12个月的LAI值。
具体信息看官网相应页面

关于植被库文件

由于植被库文件通常可直接拿stehekin的veglib.LDAS用,所以这里只是简单解释下此文件的架构。
文件原文:

#Class  OvrStry Rarc    Rmin    JAN-LAI FEB-LAI MAR-LAI APR-LAI MAY-LAI JUN-LAI JUL-LAI AUG-LAI SEP-LAI OCT-LAI NOV-LAI DEC-LAI JAN-ALB FEB_ALB MAR-ALB APR-ALB MAY-ALB JUN-ALB JUL-ALB AUG-ALB SEP-ALB OCT-ALB NOV-ALB DEC-ALB JAN-ROU FEB-ROU MAR-ROU APR-ROU MAY-ROU JUN-ROU JUL-ROU AUG-ROU SEP-ROU OCT-ROU NOV-ROU DEC-ROU JAN-DIS FEB-DIS MAR-DIS APR-DIS MAY-DIS JUN-DIS JUL-DIS AUG-DIS SEP-DIS OCT-DIS NOV-DIS DEC-DIS WIND_H  RGL SolAtn  WndAtn  Trunk   COMMENT
1   1   60.0    150.    3.400   3.400   3.500   3.700   4.000   4.400   4.400   4.300   4.200   3.700   3.500   3.400   0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    50.0    30  0.5 0.5 0.2 Evergreen Needleleaf
2   1   60.0    150.    3.400   3.400   3.500   3.700   4.000   4.400   4.400   4.300   4.200   3.700   3.500   3.400   0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    0.12    1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   1.476   8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    8.04    50.0    30  0.5 0.5 0.2 Evergreen Broadleaf
3   1   60.0    150.    1.680   1.520   1.680   2.900   4.900   5.000   5.000   4.600   3.440   3.040   2.160   2.000   0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    50.0    30  0.5 0.5 0.2 Deciduous Needleleaf
4   1   60.0    150.    1.680   1.520   1.680   2.900   4.900   5.000   5.000   4.600   3.440   3.040   2.160   2.000   0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    50.0    30  0.5 0.5 0.2 Deciduous Broadleaf
5   1   60.0    140.    1.680   1.520   1.680   2.900   4.900   5.000   5.000   4.600   3.440   3.040   2.160   2.000   0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    50.0    50  0.5 0.5 0.2 Mixed Cover
6   1   60.0    125.    1.680   1.520   1.680   2.900   4.900   5.000   5.000   4.600   3.440   3.040   2.160   2.000   0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    0.18    1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   1.230   6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    6.70    50.0    50  0.5 0.5 0.2 Woodland
7   0   40.0    125.    2.000   2.250   2.950   3.850   3.750   3.500   3.550   3.200   3.300   2.850   2.600   2.200   0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    5   75. 0.5 0.5 0.2 Wooded Grasslands
8   0   50.0    135.    2.000   2.250   2.950   3.850   3.750   3.500   3.550   3.200   3.300   2.850   2.600   2.200   0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    5   75. 0.5 0.5 0.2 Closed Shrublands
9   0   50.0    135.    2.000   2.250   2.950   3.850   3.750   3.500   3.550   3.200   3.300   2.850   2.600   2.200   0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.19    0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   0.495   1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    1.00    5   75. 0.5 0.5 0.2 Open Shrublands
10  0   25.0    50. 2.000   2.250   2.950   3.850   3.750   3.500   3.550   3.200   3.300   2.850   2.600   2.200   0.20    0.20    0.20    0.20    0.20    0.20    0.20    0.20    0.20    0.20    0.20    0.20    0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.0738  0.402   0.402   0.402   0.402   0.402   0.402   0.402   0.402   0.402   0.402   0.402   0.402   3   100 0.5 0.5 0.2 Grasslands
11  0   25.0    60. 0.500   0.500   0.500   0.500   1.500   3.0000  4.500   5.0000  2.5000  0.500   0.500   0.500   0.10    0.10    0.10    0.10    0.20    0.20    0.20    0.20    0.20    0.10    0.10    0.10    0.006   0.006   0.006   0.006   0.012   0.062   0.123   0.185   0.215   0.215   0.006   0.006   0.034   0.034   0.034   0.034   0.067   0.335   0.670   1.005   1.173   1.173   0.034   0.034   2   100 0.5 0.5 0.2 Crop land (corn)

也是个标准的二维关系表形式,第一列为植被覆盖类型的注册编号,第二列为是否有树冠,然后往后的都是参数…最后一列是注释,告诉你这到底是啥植被类型。
相应参数解释移步这里

关于输出文件的格式

全局参数文件中的相关设定如下:

#######################################################################
# Output Files and Parameters
#######################################################################
RESULT_DIR      /home/hehehe/yriver/output # 输出文件路径
OUT_STEP        0       # 输出数据的时间步(小时),为0则使用默认时间步长度。
SKIPYEAR    0   # 输出时开头跳过多少年。
COMPRESS    FALSE   # 是否压缩输出文件。
ALMA_OUTPUT FALSE   # 是否以ALMA单位制输出文件。
BINARY_OUTPUT   FALSE   # 是否输出二进制文件。
MOISTFRACT  FALSE   # 输出的土壤含水量是否使用体积比例,为否则使用VIC标准。
PRT_HEADER  FALSE   # 是否加上#号注释的元信息和表头。
PRT_SNOW_BAND   FALSE   # 是否输出snow band的输出文件...

以上设定按照VIC默认情况进行输出:输出fluxes和snow两类文件,如果开启了冻土模式则输出fdepth文件,具体看这里。形式同气象驱动文件,也是一个网格一个文件,文件名包含网格经纬坐标,文件内容每列为数据类别,逐行为历时数据。

这是VIC支持的输出数据类别列表

VIC支持自定义输出的数据类型和方式。想自定义输出就要在全局参数文件里再加上设定内容,以下是示例。

N_OUTFILES  2   # 输出多少种输出文件

OUTFILE douniwan    2   # 依次是输出文件的前缀,文件使用的数据类别数。
OUTVAR  OUT_RUNOFF  # 输出数据类别定义1
OUTVAR  OUT_BASEFLOW # 输出数据类别定义2

OUTFILE hehehe  3   # 第二个种文件的定义
OUTVAR  OUT_EVAP    # 输出数据类别定义1
OUTVAR  OUT_EVAP_BARE # 输出数据类别定义2
OUTVAR  OUT_EVAP_CANOP  %.4f    # 输出数据类别定义3。后面那个是输出文本文件的可选参数,为输出数据的格式,形式与C语言printf函数用的一样。示例中为保留4位小数的浮点型格式,又如%.7e则是保留7位有效数字的科学计数法格式。

如果输出的是二进制文件,则输出数据类别定义后面的可选参数有数据类型和乘上后再输出的倍率两者,形式和二进制的气象驱动数据输入文件一致。
数据类型有如下:

OUT_TYPE_DOUBLE # 双精度浮点型
OUT_TYPE_FLOAT  # 单精度浮点型
OUT_TYPE_INT    # 整型
OUT_TYPE_USINT  # 无符号整型
OUT_TYPE_SINT   # 短整型
OUT_TYPE_CHAR   # 单字节字符型
*               # 使用默认类型
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32611933/article/details/50685003

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签